DIX 与 802.3 Link 层说明
DIX vs 802.3 Link Layer explanation
我的问题与 DIX(以太网 II)和以太网有关:link 层差异是什么(如果有)?我没有在标准列表中看到 link 层,但是在进行 pcap 捕获时,我看到 wireshark 将以不同的方式构建它们(我不打算 post pcap,但是我确定标准是 posted)。
来源:http://www.tcpdump.org/linktypes.html
以太网 header 按顺序有:
- 一个 6 字节的目标地址;
- 一个 6 字节的源地址;
- 一个 2 字节的字段。
在最初的 DEC/Intel/Xerox ("DIX") 以太网规范中,2 字节字段被指定为类型字段,给出一个以太网类型值,指定协议是 运行ning在以太网之上;例如,十六进制值 0800 用于 IPv4。
然而,在最初的 IEEE 802.3 规范中,它被指定为一个长度字段,给出以太网 header 之后的有效载荷的长度。 (小于 64 个八位位组的以太网帧,包括 FCS,被填充到 64 个八位位组;长度字段允许忽略填充。一些协议,如 IPv4 和 IPv6,包括它们自己的长度字段,所以填充甚至可以被忽略没有以太网长度字段。)
如果 2 个八位字节字段不是类型字段,则没有任何机制可以指示 运行 在以太网上使用的是什么协议。 IEEE指定了IEEE 802.2 header, which follows the link-layer header in IEEE 802.x LANS (802.11, 802.5 Token Ring, 802.3以太网等),还有FDDI;它包括 1 个八位字节的目标服务访问点 (DSAP) 和源服务访问点 (SSAP) 字段,可用于指定以太网上的协议运行。
所以 "DIX" 以太网和 "IEEE 802.3" 以太网之间的区别最初是,在 DIX 以太网中,2 个八位字节字段是一个类型字段,没有 IEEE 802.2 header 在以太网 header 之后,而在 IEEE 802.3 以太网中,2 字节字段是一个长度字段,在以太网 header.[=14= 之后有一个 IEEE 802.2 header ]
以太网帧的最大长度为1518个八位字节,包括14个八位字节的以太网header和4个八位字节的FCS,因此以太网的最大长度payload 是 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 header;它们的帧以两个十六进制 FF 八位字节开始,这意味着它们看起来像是 DSAP 和 SSAP 值都设置为十六进制 FF 的帧。十六进制 FF 不是有效的 SSAP,因为它设置了 "group address" 位,因此没有 802.2 的 Novell 帧("Ethernet 802.3" 帧)和带有 802.2 header("Ethernet 802.2" 的 802.3 帧帧)可以彼此区分。
DSAP 和 SSAP 字段不足以处理所有协议类型,因此 Subnetwork Access Protocol (SNAP) was devised. If the DSAP and SSAP in the 802.2 header are both hex AA, then the 802.2 header is followed by a SNAP header, which has a 3-octet Organizationally Unique Identifier (OUI) 后跟 2 个八位字节协议 ID (PID)。 OUI 是 IEEE 给组织的一个编号;它用作分配给该组织的 MAC(以太网、802.11、令牌环、FDDI)地址的前 3 个八位字节(一个组织可以有多个 OUI,因此如果它们 运行 来自 MAC 地址在一个 OUI 的 运行ge 中,他们可以分配更多)。 PID 的解释取决于 OUI 值。 OUI 为 0 表示 PID 为以太网类型值;其他 OUI 表示它是由 OUI 所属的组织分配的值。
通过以太网以外的 802.x 网络和 FDDI 发送的 IPv4 和 IPv6 数据包具有 link-layer header、具有 DSAP 和 SSAP 的 802.2 header两者都是 AA,以及 OUI 为 0 且以太网类型为十六进制 0800 (IPv4) 或十六进制 86dd (IPv6) 的 SNAP header。通过以太网,他们将在 type/length 字段中包含 0800 或 86dd,而没有 802.2 header.
有关详细信息以及所有这些帧类型为何存在的一些历史,请参阅 Don Provan 的 Ethernet Frame Types: Provan's Definitive Answer (archived at Wayback Machine)。
pcap 和 pcapng 文件中的 link-layer header 类型,如 tcpdump.org link-layer header types page 中所列,对应于出现在数据包数据开头的八位字节的格式。 LINKTYPE_ETHERNET/DLT_EN10MB,如该页所述,对应于 "IEEE 802.3 Ethernet",具有 6 个八位字节的目标地址、一个 6 个八位字节的源地址和一个 2 字节的 type/length 字段,按顺序排列,所以具有类型字段的数据包和具有长度字段的数据包都被LINKTYPE_ETHERNET覆盖。它们不以 link-layer header 类型值区分;它们由 运行ge 区分,其中出现 type/length 字段值(有效长度字段、有效类型字段、无效字段)。
(而且,是的,也许 Wireshark 不应该在带有类型字段的以太网帧和带有长度字段的以太网帧之间做出如此大的区分;它应该将它们都显示为以太网帧,并显示 2-如果它是类型,则八位字节字段作为类型字段,如果它是长度,如果无效则作为 "none of the above" 字段。)
我的问题与 DIX(以太网 II)和以太网有关:link 层差异是什么(如果有)?我没有在标准列表中看到 link 层,但是在进行 pcap 捕获时,我看到 wireshark 将以不同的方式构建它们(我不打算 post pcap,但是我确定标准是 posted)。 来源:http://www.tcpdump.org/linktypes.html
以太网 header 按顺序有:
- 一个 6 字节的目标地址;
- 一个 6 字节的源地址;
- 一个 2 字节的字段。
在最初的 DEC/Intel/Xerox ("DIX") 以太网规范中,2 字节字段被指定为类型字段,给出一个以太网类型值,指定协议是 运行ning在以太网之上;例如,十六进制值 0800 用于 IPv4。
然而,在最初的 IEEE 802.3 规范中,它被指定为一个长度字段,给出以太网 header 之后的有效载荷的长度。 (小于 64 个八位位组的以太网帧,包括 FCS,被填充到 64 个八位位组;长度字段允许忽略填充。一些协议,如 IPv4 和 IPv6,包括它们自己的长度字段,所以填充甚至可以被忽略没有以太网长度字段。)
如果 2 个八位字节字段不是类型字段,则没有任何机制可以指示 运行 在以太网上使用的是什么协议。 IEEE指定了IEEE 802.2 header, which follows the link-layer header in IEEE 802.x LANS (802.11, 802.5 Token Ring, 802.3以太网等),还有FDDI;它包括 1 个八位字节的目标服务访问点 (DSAP) 和源服务访问点 (SSAP) 字段,可用于指定以太网上的协议运行。
所以 "DIX" 以太网和 "IEEE 802.3" 以太网之间的区别最初是,在 DIX 以太网中,2 个八位字节字段是一个类型字段,没有 IEEE 802.2 header 在以太网 header 之后,而在 IEEE 802.3 以太网中,2 字节字段是一个长度字段,在以太网 header.[=14= 之后有一个 IEEE 802.2 header ]
以太网帧的最大长度为1518个八位字节,包括14个八位字节的以太网header和4个八位字节的FCS,因此以太网的最大长度payload 是 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 header;它们的帧以两个十六进制 FF 八位字节开始,这意味着它们看起来像是 DSAP 和 SSAP 值都设置为十六进制 FF 的帧。十六进制 FF 不是有效的 SSAP,因为它设置了 "group address" 位,因此没有 802.2 的 Novell 帧("Ethernet 802.3" 帧)和带有 802.2 header("Ethernet 802.2" 的 802.3 帧帧)可以彼此区分。
DSAP 和 SSAP 字段不足以处理所有协议类型,因此 Subnetwork Access Protocol (SNAP) was devised. If the DSAP and SSAP in the 802.2 header are both hex AA, then the 802.2 header is followed by a SNAP header, which has a 3-octet Organizationally Unique Identifier (OUI) 后跟 2 个八位字节协议 ID (PID)。 OUI 是 IEEE 给组织的一个编号;它用作分配给该组织的 MAC(以太网、802.11、令牌环、FDDI)地址的前 3 个八位字节(一个组织可以有多个 OUI,因此如果它们 运行 来自 MAC 地址在一个 OUI 的 运行ge 中,他们可以分配更多)。 PID 的解释取决于 OUI 值。 OUI 为 0 表示 PID 为以太网类型值;其他 OUI 表示它是由 OUI 所属的组织分配的值。
通过以太网以外的 802.x 网络和 FDDI 发送的 IPv4 和 IPv6 数据包具有 link-layer header、具有 DSAP 和 SSAP 的 802.2 header两者都是 AA,以及 OUI 为 0 且以太网类型为十六进制 0800 (IPv4) 或十六进制 86dd (IPv6) 的 SNAP header。通过以太网,他们将在 type/length 字段中包含 0800 或 86dd,而没有 802.2 header.
有关详细信息以及所有这些帧类型为何存在的一些历史,请参阅 Don Provan 的 Ethernet Frame Types: Provan's Definitive Answer (archived at Wayback Machine)。
pcap 和 pcapng 文件中的 link-layer header 类型,如 tcpdump.org link-layer header types page 中所列,对应于出现在数据包数据开头的八位字节的格式。 LINKTYPE_ETHERNET/DLT_EN10MB,如该页所述,对应于 "IEEE 802.3 Ethernet",具有 6 个八位字节的目标地址、一个 6 个八位字节的源地址和一个 2 字节的 type/length 字段,按顺序排列,所以具有类型字段的数据包和具有长度字段的数据包都被LINKTYPE_ETHERNET覆盖。它们不以 link-layer header 类型值区分;它们由 运行ge 区分,其中出现 type/length 字段值(有效长度字段、有效类型字段、无效字段)。
(而且,是的,也许 Wireshark 不应该在带有类型字段的以太网帧和带有长度字段的以太网帧之间做出如此大的区分;它应该将它们都显示为以太网帧,并显示 2-如果它是类型,则八位字节字段作为类型字段,如果它是长度,如果无效则作为 "none of the above" 字段。)