巨型以太网帧和超级巨型帧的标题头

5

有些以太网卡可以使用非常大的帧。一个例子是9k的巨型帧,另一个例子是超级巨型帧(据我所知,最高可达64k)。

对于这样巨大的数据包,使用哪种帧格式呢?

据我所知,普通帧通常有两种格式:

Preamble    Start_byte  dest_mac    src_mac     Ethertype/length    Payload     CRC     Interframe gap
10101010x7  10101011    6 bytes     6 bytes     2 bytes         46–1500 bytes   4 bytes 12 bytes

在一个情况下,以太类型用于表示数据包的长度,在另一个情况下则表示数据包的类型。如果这个字段的值小于0x0600(十进制1536字节),那么它表示数据包的长度;如果大于等于0x0600,则表示数据包的类型。
因此,在这个字段中存储9000作为长度是不可能的。那么如何存储巨型和超级巨型帧的长度呢?
1个回答

6
巨型帧使用的格式相同。尽管如此,以太类型字段通常不用于存储长度。在以太类型字段中,通常不会看到长度,而是会看到类型。类型由IANA在此处指定:

https://www.iana.org/assignments/ieee-802-numbers

通常你会从表格中看到以下类型之一:
Ethertype         Exp. Ethernet   Description           References
----------------  --------------  --------------------  ----------
  2054   0806        -      -     ARP                       [IANA]
  2048   0800        513   1001   Internet IP (IPv4)        [IANA]
         86DD                     IPv6                      [IANA]

这种方法有效的原因有两个:

  • 发送数据包的硬件不依赖于第二层长度字段来确定第一层的长度。
  • 一些第三层的数据包,例如ARP,有一个已知的大小(至少对于已知的硬件/协议地址长度组合,如通常使用的以太网/IP)。IPv4/IPv6数据包在其自身头部中有一个长度字段。

那么,只有当L3协议具有长度字段或固定大小时才能使用巨型帧? - osgx
2
@osgx,没有什么阻止你在L1创建一个比以太类型/长度字段中规定的更大的以太网帧。但是网络堆栈不一定将其解释为大型数据包。因此,基本上,您需要使用支持大型数据包的L3协议,例如IPv4 / IPv6。(ARP将很小。)做到这一点的一种简单方法(假设您正确设置了接口MTU(最大传输单元),并且您的网络驱动程序已配置为大型帧)是使用pingpacketsize参数。 - mpontillo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接