以太网包头介绍(转载)规格严格

以太网包头介绍(转载)规格严格,第1张

以太网MAC帧有两种标准,一种是IEEE的802.3标准,另外一种是以太网V2标准(注:来自《计算机网络》)。后者用得比较多。

不过,国外的书中找不到MAC帧这种说法,只说“以太网封装格式”。下面这张图片就是从《TCP/IP详解》中截图出来的。图片中的数字表示字节。一个IP数据包范围是46字节~1500字节,这是有根据的。

可以看到,IP包与ARP包是独立的,或者说它们下面的就是以太帧了。传输层(或以上)的各种数据包(报文)就是填充到上面那个图中的第2个框图的“IP数据报”的。

在Linux中,以太网帧头部的结构体如下:

/* 10Mb/s ethernet header */
struct ether_header
{
  u_int8_t  ether_dhost[ETH_ALEN]; /* destination eth addr */
  u_int8_t  ether_shost[ETH_ALEN]; /* source ether addr */
  u_int16_t ether_type;          /* packet type ID field */
} __attribute__ ((__packed__));

其中的ETH_ALEN为6,因为地址为6个字节,共48位——这个地址就是常说的物理地址,或MAC地址。它的第3个成员ether_type是以太帧类型,有如下这些:

/* Ethernet protocol ID's */
#define ETHERTYPE_PUP  0x0200          /* Xerox PUP */
#define ETHERTYPE_SPRITE 0x0500  /* Sprite */
#define ETHERTYPE_IP  0x0800  /* IP */
#define ETHERTYPE_ARP  0x0806  /* Address resolution */
#define ETHERTYPE_REVARP 0x8035  /* Reverse ARP */
#define ETHERTYPE_AT  0x809B  /* AppleTalk protocol */
#define ETHERTYPE_AARP  0x80F3  /* AppleTalk ARP */
#define ETHERTYPE_VLAN  0x8100  /* IEEE 802.1Q VLAN tagging */
#define ETHERTYPE_IPX  0x8137  /* IPX */
#define ETHERTYPE_IPV6  0x86dd  /* IP protocol version 6 */
#define ETHERTYPE_LOOPBACK 0x9000  /* used to test interfaces */

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/2091929.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-07-22
下一篇 2022-07-22

发表评论

登录后才能评论

评论列表(0条)

保存