数据链路层,以太帧主要有3种格式:

  1. Ethernet II以太帧
  • Ethernet II帧,也称为Ethernet v2帧,是如今局域网里最常见的以太帧,是以太网事实标准。如今大多数的TCP/IP应用(如HTTP、FTP、SMTP、POP3等)都是采用Ethernet II帧承载。
  1. IEEE 802.3 LLC以太帧
  • IEEE 802.3 LLC以太帧,也称为IEEE 802.3 SAP以太帧,是IEEE 正式的802.3标准,它由Ethernet II发展而来。
  1. IEEE 802.3 SNAP以太帧
  • IEEE 802.3 SNAP以太帧,是IEEE为保证在802.3 LLC上支持更多的上层协议同时更好的支持IP协议而发布的标准。

[^Tips]: 平时接触最多的就是Ethernet II,所以此篇主要说一下Ethernet v2。

Ethernet II帧格式
	    +-----------+-----------+-------------+--------------------+----------+
            |   DMAC    |   SMAC    |     Type    |          Data      |   FCS    |
            |  6 Bytes  |  6 Bytes  |   2 Bytes   |  Variable length   | 4 Bytes  |
            +-----------+-----------+-------------+--------------------+----------+
            |                                                                     |
                     |                                                          |
                               |                                             |
                                        |                                  |
                                                |                         |
                                                       |                 |
            +-------------+-----------+----------------+-----------------+
            |   帧间隙     |前同步码   |  帧开始定界符    |  Ethernet Frame |
            |至少12Bytes  | 7 Bytes   |  1 Byte        | Variable length |
            +-------------+-----------+----------------+-----------------+
ipv4:
Ethernet II, Src: MaipuCom_1f:8d:21 (cc:d8:1f:1f:8d:21), Dst: WistronI_cd:e0:52 (98:ee:cb:cd:e0:52)
    Destination: WistronI_cd:e0:52 (98:ee:cb:cd:e0:52)
    Source: MaipuCom_1f:8d:21 (cc:d8:1f:1f:8d:21)
    Type: IPv4 (0x0800)
    
lldp:
Ethernet II, Src: HuaweiTe_9a:e3:41 (c4:e2:87:9a:e3:41), Dst: LLDP_Multicast (01:80:c2:00:00:0e)
    Destination: LLDP_Multicast (01:80:c2:00:00:0e)
    Source: HuaweiTe_9a:e3:41 (c4:e2:87:9a:e3:41)
    Type: 802.1 Link Layer Discovery Protocol (LLDP) (0x88cc)
    Trailer: 000000
Link Layer Discovery Protocol

字段

长度

说明

DMAC

6 Byte

目的mac地址,以16进制表示,交换机根据此字段进行查mac地址表转发数据帧。arp请求、免费arp、arp probe数据包该字段都设为广播地址,ff-ff-ff-ff-ff-ff。

SMAC

6 Byte

源mac地址,以16进制表示。

Type

2 Byte

类型字段 常见的0x0800表示上层是IPv4协议,0x0806表示上层是ARP协议(2.5层),0x8100表示上层是virtual LAN(vlan)协议(2.5层),0x08CC表示上层是lldp协议(2.5层)。

Data

46 ~ 1500Byte

因为以太网数据帧标准要求是[64 ~ 1518B],所以-18就是该字段的范围长度[46 ~ 1500B](以太网MTU最大为1500)

FCS

4 Byte

Frame check seq(帧校验序列),接收者根据此字段判断收到的数据帧是否存在错误,如存在错误,丢弃此帧,通常使用crc(循环冗余校验)。

Ethernet II共18个字节(DMAC(6B)+SMAC(6B)+Type(2B)+FCS(4B)),例外:lldp协议又加了一个Trailer字段(3B)。

帧间隙

12 Byte

/

前同步码

7 Byte

以太网标准中规定前导码为10101010 10101010 10101010 10101010 10101010 10101010 10101010(二进制),共7字节。

帧开始定界符

2 Byte

以太网标准中规定帧开始定界符为10101011(二进制),共1字节。

问题:

  1. 为什么前同步码、帧开始定界符、FCS字段在抓到的数据包中看不到?
  • 终端网卡收到数据包后首先将前导同步码和帧开始定界符去掉,进行FCS校验,FCS校验一般由网卡硬件完成,发送的数据包因为在被网卡硬件处理之前就被wireshark抓到了,收到的数据包因为经网卡硬件校验后该字段就被剥离,所以在数据包中看不到前同步码、帧开始定界符、FCS字段
  1. 以太网数据帧最低要求64字节(其实是网卡内部程序设置最小接收64B数据帧),但是抓到的arp请求及回复数据包(42B),为什么?

ethernet帧的发送过程模拟java ethernet 2帧_Ethernet

Packet3:
Ethernet II, Src: HonHaiPr_34:8d:4c (0c:84:dc:34:8d:4c), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
    Destination: Broadcast (ff:ff:ff:ff:ff:ff)
    Source: HonHaiPr_34:8d:4c (0c:84:dc:34:8d:4c)
    Type: ARP (0x0806)
    Padding: 000000000000000000000000000000000000
Address Resolution Protocol (request)

我的PC IP地址:192.168.3.74,另外一台测试PC IP地址:192.168.3.94,华为无线路由器的IP地址:192.168.3.1。

  • 一方面wireshark抓到的包是网卡对数据包padding前的数据包。
  • 另一方面我猜测自己电脑的网卡内部程序设置的最小接收是42B+4B=46B,原因如下,包1是华为无线路由器发出的arp请求包,大小为46B,我电脑可以正常收到,当然有可能wireshark或网卡对padding数据做了剥离处理,但是通过包3会发现,wireshark或网卡并没有对padding数据做处理(Padding: 000……),所以我猜测的结论有可能成立。
  • 包1-包2我猜测是华为无线路由器网卡不会对小数据包padding data。
  • 包3测试PC 网卡对arp做 padding data(+4B的FCS字段=64B),包4我的PC抓到的数据包是网卡padding之前的数据包,故为42B。
  • 包5是我的PC 请求测试PC的arp,如果我的网卡对arp padding data,包6测试机回复的数据包不是应该携带padding data吗?为什么还是只有42B呢?我又在测试PC上抓包,最后我猜测可能是这样:包5 42B为我的PC padding data之前抓到的数据包,我在测试PC上抓到的arp请求包为60B,测试PC返回42B的reply包,经测试PC网卡padding data后,以60B大小的包发给我的PC,我的PC网卡最后发现是reply给我的数据包,就把padding data给剥离了(我猜测网卡剥离padding的条件:1.目的地址是我自己 2.数据包为reply包),所以wireshark抓包看到的是42B。

华为IP 报文格式大全-https://support.huawei.com/hedex/hdx.do?docid=EDOC1000105967&id=ZH-CN_CONCEPT_0254009100