我的问题与DIX(以太网II)和以太网有关:链路层差异是什么?我没有在标准列表中看到链接层,但是在执行时,例如,pcap捕获我看到wireshark将以不同方式构建它们(我不打算发布pcap,但我确定标准已发布)。 来源:http://www.tcpdump.org/linktypes.html
答案 0 :(得分:3)
以太网标头按顺序:
在原始的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的帧。 Hex FF不是有效的SSAP,因为它具有"组地址"比特集,因此没有802.2("以太网802.3"帧)的Novell帧和具有802.2报头的802.3帧("以太网802.2和#34;帧)可以彼此区分。
DSAP和SSAP字段不足以处理所有协议类型,因此设计了Subnetwork Access Protocol(SNAP)。如果802.2报头中的DSAP和SSAP都是十六进制AA,则802.2报头后跟一个SNAP报头,该报头具有3个八位字节Organizationally Unique Identifier(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的802.2报头都是AA,以及OUI为0的SNAP报头和以太网类型的十六进制0800(IPv4)或十六进制86dd(IPv6)。通过以太网,它们在类型/长度字段中具有0800或86dd,并且没有802.2标头。
有关更多信息以及有关所有这些帧类型存在的历史记录,请参阅Don Provan的Ethernet Frame Types: Provan's Definitive Answer。
pcap和pcapng文件中的链接层标头类型(如tcpdump.org link-layer header types page中所列)对应于出现在数据包数据开头的八位字节的格式。 LINKTYPE_ETHERNET / DLT_EN10MB,如该页所述,对应于" IEEE 802.3以太网",具有6个八位字节的目标地址,6个八位字节的源地址和2个字节的类型/长度字段,按顺序,因此,具有类型字段的数据包和具有长度字段的数据包都由LINKTYPE_ETHERNET覆盖。它们不受链路层头类型值的区分;它们通过出现类型/长度字段值的范围(有效长度字段,有效类型字段,无效字段)进行区分。
(并且,是的,也许Wireshark不应该在具有类型字段的以太网帧和具有长度字段的以太网帧之间做出很大的区分;它应该将它们都显示为以太网帧,并显示2- octet字段作为类型字段,如果它是一个类型,长度字段,如果它是一个长度,并且如果它是无效的上述&#34;字段,如果它是无效的。)< / p>