Skip to content
Wireshark Wiki 中文翻译整理专题首页原始页面

Ethernet

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 协议页与 CaptureSetup/Ethernet 的区别

页面关注点典型问题
Ethernet帧格式、字段含义、Wireshark 过滤器eth.dst 是什么?0x0800 表示什么?为什么看不到 FCS?
CaptureSetup/Ethernet抓包位置、网卡模式、交换网络中如何采集流量怎样在交换机环境抓到别的主机流量?需要端口镜像吗?

数据包格式

物理 Ethernet 数据包结构如下:

字段长度(字节)说明
Preamble8物理层同步信息,通常不会交给 Wireshark
Destination MAC address6目的 MAC 地址
Source MAC address6源 MAC 地址
Type/Length2EtherType 或 payload 长度
User Data46-1500上层协议数据;不足最小长度时会 padding
Frame Check Sequence (FCS)4CRC 校验字段,很多接口不会提供给 Wireshark

Wireshark 通常只能看到从目的 MAC 到用户数据的部分;preamble 会被硬件过滤,FCS 也常被网卡或驱动丢弃。因此“实际线上帧长度”和“Wireshark 中显示的长度”可能不同。

允许的数据包长度

Ethernet 帧最小长度通常说成 64 字节,这个长度包括 FCS。如果上层数据不足 46 字节,会追加 padding 到最小长度。

情况影响
Wireshark 未显示 FCS你看到的最小帧长度可能比 64 字节少 4 字节
上层 payload 很短Ethernet 层可能出现 padding
VLAN tagVLAN tag 增加 4 字节,但带 VLAN 的 Ethernet frame 仍有最小长度要求
Jumbo frame可能超过标准 1500 字节 payload,具体取决于设备和配置

对协议开发者来说,不要把 Ethernet 帧中的 padding 当成上层协议真实数据。对系统开发者来说,发送未初始化的 padding data 可能造成信息泄露风险。

MAC 地址字段

Ethernet MAC 地址是 6 字节地址,常见显示形式如下:

text
08:00:08:15:ca:fe
08-00-08-15-ca-fe

关键点:

  • 前三个字节通常对应组织唯一标识符(OUI)。
  • ff:ff:ff:ff:ff:ff 是广播地址。
  • 目的 MAC 第一个字节的最低有效位为 1 时,表示组播地址;广播地址也满足这个条件。
  • 第一个字节的次低有效位是 locally administered 位,用于标识本地管理地址,而非厂商出厂分配地址。

Type / Length 字段

源 MAC 后的 16 位字段有两种解释:

字段值解释后续内容
01500Length后续通常是 802.2 LLC header,长度值不包括 padding
大于 1500EtherType后续是对应上层协议数据

常见 EtherType:

协议
0x0800IPv4
0x0806ARP
0x8137IPX
0x86ddIPv6

FCS 字段

Ethernet 使用 CRC 检测传输错误,FCS 由发送主机填充。如果接收端检测到 CRC 错误,会丢弃该帧。很多平台不会把 FCS 交给 Wireshark,所以看不到 FCS 不一定表示没有 FCS,而是抓包路径没有提供它。

示例流量

在 Web 浏览器访问 wireshark.org 时,Wireshark 包列表可能显示 TCP、HTTP 等上层协议;但每个包底层仍由 Ethernet 帧承载。分析二层问题时,应展开 Ethernet 层查看源/目的 MAC 和 Type/Length。

Wireshark 支持

Ethernet dissector 功能完整。原页面提到 packet-eth.c 中注册过以下 dissector:

  • eth_withoutfcs
  • eth_withfcs
  • eth_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 流量:

text
ether host 08:00:08:15:ca:fe

只抓取 Ethernet 组播流量:

text
ether multicast

只抓取 Ethernet 广播流量:

text
ether broadcast

抓取某个地址范围的 Ethernet 流量:

text
(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

相关 Wireshark Wiki 页面

网络分析技术档案