以太网实现

本文探讨了以太网帧的结构,详细说明了14字节的头部组成,包括6字节的源地址、6字节的目的地址以及2字节的类型域。内容引用了Linux内核中的相关代码,展示了在`net/ethernet/eth.c`中创建以太网头部的抽象结构。
摘要由CSDN通过智能技术生成

以太网的头部为14字节,6字节源地址,6字节目的地址,2字节类型域。它的定义如下:

[ include/uapi/linux/if_ether.h ]

/*
 *	This is an Ethernet frame header.
 *	ETH_ALEN = 6
 */

struct ethhdr {
	unsigned char	h_dest[ETH_ALEN];	/* destination eth addr	*/
	unsigned char	h_source[ETH_ALEN];	/* source ether addr	*/
	__be16		h_proto;		/* packet type ID field	*/
} __attribute__((packed));
其中h_proto为此frame是什么类型,如对于IP协议,类型为

[ include/uapi/linux/if_ether.h ]

#define ETH_P_IP	0x0800		/* Internet Protocol packet	*/
还有一个特殊的类型:

[ include/uapi/linux/if_ether.h ]

#define ETH_P_ALL	0x0003		/* Every packet (be careful!!!) */
如果通过RAW socket获取所有的包,可以用此类型,如:socket( PF_PACKET, SOCK_RAW, htons( ETH_P_ALL) );

内核对于创建每层的协议头,提供了一个抽象结构,其中创建以太网头部的结构如

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值