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

osg*_*sgx 5 networking ethernet

可以使用非常大的框架和一些以太网卡.一个案例是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
Run Code Online (Sandbox Code Playgroud)

在一种情况下,ethertype用于长度,第二种用于数据包类型.如果此字段为<0x0600(十进制1536字节),则为长度; if> = 0x0600 - 它是一种类型.

因此,看起来不可能在此字段中存储9000作为长度.如何存储巨型和超级巨型帧的长度?

mpo*_*llo 5

用于jumbos的格式是相同的.尽管有此描述,但Ethertype字段通常不用于存储长度.通常在Ethertype字段中,您将看不到长度; 你会看到一种类型.IANA在此处指定类型:

http://www.iana.org/assignments/ethernet-numbers

通常,您会在表格中看到以下类型之一:

Ethertype         Exp. Ethernet   Description           References
----------------  --------------  --------------------  ----------
  2054   0806        -      -     ARP                       [IANA]
  2048   0800        513   1001   Internet IP (IPv4)        [IANA]
         86DD                     IPv6                      [IANA]
Run Code Online (Sandbox Code Playgroud)

这有两个原因:

  • 发送数据包的硬件不依赖于第2层长度字段来了解第1层长度.
  • 诸如ARP之类的一些第3层分组具有已知大小(至少,对于已知的硬件/协议地址长度的组合,例如通常使用的以太网/ IP).IPv4/IPv6数据包在其自己的标头中有一个长度字段.

  • @osgx,没有什么能阻止你在L1上创建一个大于Ethertype/length字段中指定的以太网帧.但是网络堆栈不一定会将其解释为大型数据包.基本上,是的,您需要使用支持大数据包的L3协议,例如IPv4/IPv6.(ARP会很小.)一种简单的方法,假设您正确设置接口MTU(并且您的网络驱动程序配置为大型帧)将使用`packet`和`packetsize`参数. (2认同)