DIX 与 802.3 链路层解释

Nat*_*nts 2 pcap rfc1122

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

小智 8

以太网报头按顺序具有:

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

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

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

如果 2-octet 字段不是类型字段,则不会留下任何机制来指示以太网上正在运行什么协议。在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-octet 字段是一个长度字段,并且在以太网报头后面有一个 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 所属的组织分配的值。

通过除以太网以外的 802.x 网络和 FDDI 发送的 IPv4 和 IPv6 数据包具有链路层标头、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 个八位字节字段显示为类型如果是类型,则为长度字段,如果是长度则为长度字段,如果无效则为“以上都不是”字段。)