Ethernet II
数据链路层,以太帧主要有3种格式:
- Ethernet II以太帧
- Ethernet II帧,也称为Ethernet v2帧,是如今局域网里最常见的以太帧,是以太网事实标准。如今大多数的TCP/IP应用(如HTTP、FTP、SMTP、POP3等)都是采用Ethernet II帧承载。
- IEEE 802.3 LLC以太帧
- IEEE 802.3 LLC以太帧,也称为IEEE 802.3 SAP以太帧,是IEEE 正式的802.3标准,它由Ethernet II发展而来。
- 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字节。 |
问题:
- 为什么前同步码、帧开始定界符、FCS字段在抓到的数据包中看不到?
- 终端网卡收到数据包后首先将前导同步码和帧开始定界符去掉,进行FCS校验,FCS校验一般由网卡硬件完成,发送的数据包因为在被网卡硬件处理之前就被wireshark抓到了,收到的数据包因为经网卡硬件校验后该字段就被剥离,所以在数据包中看不到前同步码、帧开始定界符、FCS字段。
- 以太网数据帧最低要求64字节(其实是网卡内部程序设置最小接收64B数据帧),但是抓到的arp请求及回复数据包(42B),为什么?

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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】