2

我的问题与 DIX(以太网 II)和以太网有关:链路层有什么区别,如果有的话?我在标准列表中看不到链接层,但是在执行例如 pcap 捕获时,我看到wireshark 会以不同的方式构建它们(我不打算发布 pcap,但我确信标准已经发布)。来源:http ://www.tcpdump.org/linktypes.html

4

1 回答 1

8

以太网标头按顺序具有:

  • 一个 6 字节的目的地址;
  • 一个 6 字节的源地址;
  • 一个 2 字节的字段。

在最初的 DEC/Intel/Xerox(“DIX”)以太网规范中,2 字节字段被指定为类型字段,给出以太网类型值,指定在以太网上运行的协议;例如,十六进制值 0800 用于 IPv4。

然而,在最初的 IEEE 802.3 规范中,它被指定为一个长度字段,给出了以太网报头之后的有效载荷的长度。(小于 64 字节的以太网帧,包括 FCS,被填充到 64 字节;长度字段允许忽略填充。某些协议,例如 IPv4 和 IPv6,包含自己的长度字段,因此即使填充也可以忽略没有以太网长度字段。)

如果 2 字节字段不是类型字段,则没有任何机制可以指示以太网上运行的协议。IEEE 指定了IEEE 802.2报头,它遵循 IEEE 802.x LANS( 802.11、802.5令牌环、802.3以太网等)中的链路层报头,以及 FDDI;它包括 1 个八位字节的目标服务访问点 (DSAP) 和源服务访问点 (SSAP) 字段,可用于指定在以太网上运行的协议。

因此,“DIX”以太网和“IEEE 802.3”以太网之间的区别最初在于,在 DIX 以太网中,2 个八位字节字段是一个类型字段,并且在以太网标头之后没有 IEEE 802.2 标头,而在 IEEE 802.3 以太网中,2个八位字节字段是一个长度字段,并且在以太网标头之后有一个IEEE 802.2标头。

一个以太网帧的最大长度为 1518 个八位字节,包括 14 个八位字节的以太网报头和 4 个八位字节的 FCS,因此以太网有效负载的最大长度为 1518-(14+4) = 1500 个八位字节。这意味着以太网长度字段的最大值为 1500。

以太网类型的最小值是十六进制 0600 或 1536。如果 2 字节字段的值介于 0 和 1500 之间,则该字段为长度字段,如果大于 1536,则为类型字段。(如果它在 1501 和 1535 之间,则它是无效的以太网帧。)这允许在同一以太网段上使用 DIX 和 IEEE 802.3 帧。

IEEE Std 802.3x-1997 更改了 IEEE 802.3,以便它指定 2 字节字段可以是类型字段或长度字段,并且 IEEE 802.3 的所有后续版本都包含了这一点,因此,从 1997 年的某个时间点开始, DIX 帧也是有效的 IEEE 802.3 帧。

Novell 还直接在 IEEE 802.3 上运行他们的协议,没有 802.2 标头;它们的帧以两个十六进制 FF 八位字节开头,这意味着它们看起来就像 DSAP 和 SSAP 值都设置为十六进制 FF 的帧。十六进制 FF 不是有效的 SSAP,因为它设置了“组地址”位,因此可以将没有 802.2 的 Novell 帧(“以太网 802.3”帧)和带有 802.2 标头的 802.3 帧(“以太网 802.2”帧)与其他。

DSAP 和 SSAP 字段不足以处理所有协议类型,因此设计了子网访问协议(SNAP)。如果 802.2 报头中的 DSAP 和 SSAP 都是十六进制 AA,则 802.2 报头后面是一个 SNAP 报头,它有一个 3 字节的组织唯一标识符(OUI) 后跟一个 2 字节的协议 ID (PID)。OUI 是 IEEE 分配给组织的编号;它用作分配给该组织的 MAC(以太网、802.11、令牌环、FDDI)地址的前 3 个八位字节(一个组织可以有多个 OUI,因此如果它们用完一个 OUI 范围内的 MAC 地址,他们可以分配更多) . PID 的解释取决于 OUI 值。OUI 为 0 表示 PID 是以太网类型值;其他 OUI 表示它是该 OUI 所属组织分配的值。

IPv4 和 IPv6 数据包通过以太网以外的 802.x 网络和 FDDI 发送,具有链路层报头、DSAP 和 SSAP 均为 AA 的 802.2 报头以及 OUI 为 0 和以太网类型的 SNAP 报头十六进制 0800 (IPv4) 或十六进制 86dd (IPv6)。通过以太网,它们在类型/长度字段中将具有 0800 或 86dd,并且没有 802.2 标头。

有关更多信息以及有关所有这些帧类型存在的原因的一些历史,请参阅 Don Provan 的以太网帧类型:Provan 的权威答案(存档于Wayback Machine)。

pcap 和 pcapng 文件中的链路层头类型,如tcpdump.org 链路层头类型页面中所列,对应于出现在数据包数据开头的八位位组的格式。如该页所述,LINKTYPE_ETHERNET/DLT_EN10MB 对应于“IEEE 802.3 以太网”,依次具有 6 字节的目标地址、6 字节的源地址和 2 字节的类型/长度字段,因此具有类型的数据包字段和具有长度字段的数据包被 LINKTYPE_ETHERNET 覆盖。它们不通过链路层头类型值来区分;它们通过类型/长度字段值出现的范围来区分(有效长度字段、有效类型字段、无效字段)。

(而且,是的,也许 Wireshark 不应该在具有类型字段的以太网帧和具有长度字段的以太网帧之间做出如此大的区别;它也许应该将它们都显示为以太网帧,并将 2 字节字段显示为类型如果是类型,则为字段,如果是长度,则为长度字段,如果无效,则为“以上都不是”字段。)

于 2015-09-28T19:08:28.600 回答