Appearance
Appearance
Ethernet(IEEE 802.3)是最常见的局域网链路层技术之一。这个页面讲的是 Wireshark 如何理解和过滤 Ethernet 帧本身:MAC 地址、Type/Length 字段、FCS、广播/组播以及抓包/显示过滤器。
什么时候用:当你在包列表里看到 Ethernet II、需要判断源/目的 MAC、区分广播和组播、确认 EtherType、分析 VLAN 前后的二层帧结构时,看这个页面。
不要混淆:本页是 Ethernet 协议页;[CaptureSetup/Ethernet](/wiki/wireshark/archive/capture-setup-ethernet) 是“怎么在 Ethernet 网络上抓包”的操作页面;网卡、交换机、线缆等硬件信息属于 Ethernet hardware 主题。
| 页面 | 关注点 | 典型问题 |
|---|---|---|
| Ethernet | 帧格式、字段含义、Wireshark 过滤器 | eth.dst 是什么?0x0800 表示什么?为什么看不到 FCS? |
| CaptureSetup/Ethernet | 抓包位置、网卡模式、交换网络中如何采集流量 | 怎样在交换机环境抓到别的主机流量?需要端口镜像吗? |
物理 Ethernet 数据包结构如下:
| 字段 | 长度(字节) | 说明 |
|---|---|---|
| Preamble | 8 | 物理层同步信息,通常不会交给 Wireshark |
| Destination MAC address | 6 | 目的 MAC 地址 |
| Source MAC address | 6 | 源 MAC 地址 |
| Type/Length | 2 | EtherType 或 payload 长度 |
| User Data | 46-1500 | 上层协议数据;不足最小长度时会 padding |
| Frame Check Sequence (FCS) | 4 | CRC 校验字段,很多接口不会提供给 Wireshark |
Wireshark 通常只能看到从目的 MAC 到用户数据的部分;preamble 会被硬件过滤,FCS 也常被网卡或驱动丢弃。因此“实际线上帧长度”和“Wireshark 中显示的长度”可能不同。
Ethernet 帧最小长度通常说成 64 字节,这个长度包括 FCS。如果上层数据不足 46 字节,会追加 padding 到最小长度。
| 情况 | 影响 |
|---|---|
| Wireshark 未显示 FCS | 你看到的最小帧长度可能比 64 字节少 4 字节 |
| 上层 payload 很短 | Ethernet 层可能出现 padding |
| VLAN tag | VLAN tag 增加 4 字节,但带 VLAN 的 Ethernet frame 仍有最小长度要求 |
| Jumbo frame | 可能超过标准 1500 字节 payload,具体取决于设备和配置 |
对协议开发者来说,不要把 Ethernet 帧中的 padding 当成上层协议真实数据。对系统开发者来说,发送未初始化的 padding data 可能造成信息泄露风险。
Ethernet MAC 地址是 6 字节地址,常见显示形式如下:
08:00:08:15:ca:fe
08-00-08-15-ca-fe关键点:
ff:ff:ff:ff:ff:ff 是广播地址。源 MAC 后的 16 位字段有两种解释:
| 字段值 | 解释 | 后续内容 |
|---|---|---|
0 到 1500 | Length | 后续通常是 802.2 LLC header,长度值不包括 padding |
大于 1500 | EtherType | 后续是对应上层协议数据 |
常见 EtherType:
| 值 | 协议 |
|---|---|
0x0800 | IPv4 |
0x0806 | ARP |
0x8137 | IPX |
0x86dd | IPv6 |
Ethernet 使用 CRC 检测传输错误,FCS 由发送主机填充。如果接收端检测到 CRC 错误,会丢弃该帧。很多平台不会把 FCS 交给 Wireshark,所以看不到 FCS 不一定表示没有 FCS,而是抓包路径没有提供它。
在 Web 浏览器访问 wireshark.org 时,Wireshark 包列表可能显示 TCP、HTTP 等上层协议;但每个包底层仍由 Ethernet 帧承载。分析二层问题时,应展开 Ethernet 层查看源/目的 MAC 和 Type/Length。
Ethernet dissector 功能完整。原页面提到 packet-eth.c 中注册过以下 dissector:
eth_withoutfcseth_withfcseth_maybefcs完整字段列表应以 Wireshark display filter reference 为准。常用过滤器如下:
| 任务 | 显示过滤器 |
|---|---|
| 显示所有 Ethernet 流量 | eth |
| 查看某个 MAC 的收发流量 | eth.addr == 08:00:08:15:ca:fe |
| 排除某个 MAC 的收发流量 | !(eth.addr == 08:00:08:15:ca:fe) |
| 只看广播 | eth.dst == ff:ff:ff:ff:ff:ff |
| 排除广播 | eth.dst != ff:ff:ff:ff:ff:ff |
| 只看目的地址为组播/广播的帧 | eth.dst[0] & 1 |
| 只看组播但排除广播 | (eth.dst[0] & 1) && eth.dst != ff:ff:ff:ff:ff:ff |
注意:Ethernet 广播地址按位规则也属于组播范围。因此只想看非广播组播时,需要显式排除 ff:ff:ff:ff:ff:ff。
只抓取某个 MAC 的 Ethernet 流量:
ether host 08:00:08:15:ca:fe只抓取 Ethernet 组播流量:
ether multicast只抓取 Ethernet 广播流量:
ether broadcast抓取某个地址范围的 Ethernet 流量:
(ether[0:4]>=0x00804400 and ether[0:4]<=0x008044ff) or (ether[6:4]>=0x00804400 and ether[6:4]<=0x008044ff)Imported from https://wiki.wireshark.org/Ethernet on 2020-08-11 23:13:51 UTC