以太网框架的“线内”大小是多少?1518还是1542?


22

根据此处的表,它表示MTU = 1500字节,有效负载部分为1500-42字节或1458字节(<-这实际上是错误的!)。现在最重要的是,您必须添加IPv4和UDP标头,它们是28个字节(20 IP + 8 UDP)。这使我最大可能的应用程序消息为1430字节!但是通过在Internet上查找此数字,我看到的是1472。我在这里计算错误吗?

我要查找的是我可以通过网络发送的最大应用程序消息,而不会出现碎片的风险。绝对不是1500,因为它包括帧头。有人可以帮忙吗?


令人困惑的是,PAYLOAD实际上可能高达1500个字节,这就是MTU。那么,现在有效负载为1500的线径是多少?从该表中,它可以最大为1542字节。

因此,我可以发送的最大应用消息是1472(1500-20(ip)-8(udp)),最大电线尺寸为1542。这让我感到惊讶的是,当事情实际上很简单时,事情会变得如此复杂。而且我不知道如果桌子上写着1542,有人会怎么想出数字1518。


真正的问题是,“导线尺寸”是什么意思,您将如何处理这些信息?您是否正在尝试计算每秒数据包?
Mike Pennington

@MikePennington尝试确定线内运输时间。使用数据包大小和以太网速度(10吉比特),您可以计算出该值。
chrisapotek 2012年

Answers:


26

维基百科上的图太可怕了。希望我要写的更加清晰。


802.3以太网中的最大有效负载为1500字节。
这是您尝试通过电线发送的数据(以及MTU指的是什么)。
[payload]<-1500字节

有效负载封装在以太网帧中以太网帧中添加了源/目标MAC,VLAN标签,长度和CRC校验和。这是总共22个字节的附加“内容”,
[SRC+DST+VLAN+LENGTH+[payload]+CRC]<-1522字节)

帧通过电线传输-在您的以太网卡做完之前,它基本上已经站起来并且大声喊叫以确保没有其他人正在使用电线(CSMA / CD)-这是Preamble帧开始定界符(SFD)-额外的8个字节,所以现在我们有:
[Preamble+SFD+[Ethernet Frame]]<-1530字节

最终,当以太网收发器完成发送帧时,802.3要求它在允许发送下一帧之前先发送12个字节的静默(“帧间间隙”)。
[Preamble+SFD+[Ethernet Frame]+Silence]<-1542字节通过网络传输。


前同步码,SFD和帧间间隙不算作帧的一部分。它们是以太网协议本身的支持结构。

MTU适用于有效负载-它是您可以塞入数据包的最大数据单位。因此,一个MTU为1500字节的以太网数据包实际上将是1522字节的帧,并在线路上是1542字节(假设有一个vLAN标签)。

因此,您的问题的答案- 我可以通过802.3以太网发送而不会产生碎片的最大数据包是什么?-是1500字节的有效载荷数据

但是,以太网层可能不是您的限制因素。若要发现是否有某种方式限制MTU小于有效负载数据的1500字节,请使用以下任一方法:

  • Windows :(ping hostname -f -l sizeofdata提到技术John K)
  • BSD: ping -D -s sizeofdata hostname
  • Linux: ping -M do -s sizeofdata hostname

最大的价值sizeofdata就是MTU(在数据采用的特定路径上)。


但是我确实必须从此1500中排除IP和UDP标头,对吗?因此,对于UDP,我的最大应用程序消息长度为1472。
chrisapotek 2012年

@chrisapotek正确-IP和UDP(或TCP,GRE等)标头是放入以太网帧的有效负载的一部分
voretaq7

2
Linux上的traceroute --mtu {target}也将显示最大mtu
Rqomey

我们应该多一点“身体上的”吗?en.wikipedia.org/wiki/8b/10b_encoding
SaveTheRbtz

@SaveTheRbtz哦,请不要-进入二进制表示形式足以伤害我的头了:-)
voretaq7 2012年

2

这取决于您放入框架中的数据量。如果将1500字节的数据放入一帧中,则总帧大小将为1518字节。拥有1472个字节的数据,最终的总帧大小为1500。

http://en.wikipedia.org/wiki/Ethernet_frame

话虽如此,如果您真的对测试碎片感兴趣,那么一个很好的测试方法是使用带有几个标志的旧ping:

ping主机名-f -l sizeofdata

如果数据包被分段,-f标志将导致ping失败。此处要理解的关键是“ sizeofdata”是可以不分片地放入消息中的数据量-因此,如果发送1500的有效负载,则超过1500字节时将开始分片。但是,将其降低到1472(1500-18字节的开销),您将看到ping操作通过。


抱歉,1542字节超出了IEEE 802.3定义的标准以太网帧。未标记的1500字节的以太网有效负载为1518字节(不包括SFD /可预见信息)。带有802.1q标签的帧为1522字节(相同的警告)
Mike Pennington 2012年

真是令人困惑。MTU = 1500,但帧大小为1542 ??? 因此,MTU只是有效负载,换句话说,它是1542的帧大小减去42个额外的内容。那是对的吗?
chrisapotek 2012年

抱歉,我打错了-我刚刚更新了答案,但是如果我还是错,请让我知道-这是我记得的数学:S
Univ426

抱歉,我一定错了-我以为我理解了,但我显然
打败了

困惑的不是您,而是所有人。所以我的问题还在继续。MTU和以太网帧大小之间有什么区别?有效载荷等于或小于1500吗?
chrisapotek 2012年

0

对于基本的Ethernet_II帧,帧大小为1518字节(联机或脱机)。它由每个目的地址和源地址的6个字节,用于有效载荷的46到1500字节之间的类型字段的2个字节(在您的情况下,包括其IP标头和UDP标头的整个IP数据包)和4个字节组成。 FCS。除此之外,还限制了帧的大小(64字节)。这就是范围从46个字节开始的原因(将其添加到两个地址以及类型和FCS,您将获得64个字节-46 + 6 + 6 + 2 + 4 = 64)。

如果框架位于支持多个VLAN的网络上,并且您需要使用VLAN标签标记框架,则在type字段之前添加一个额外的字段。这是4个字节。现在,这意味着有效负载的大小范围可以在最底端减少4个字节,并且仍至少保留64个字节。因此是42。(因此,vlan标签的42 + 6 + 6 + 2 + 4 + 4 = 64)

因此,将范围写为1500-42并不意味着1500减42,这意味着1500到42字节之间的任何值都是有效的。一根电线,这个标记帧可能大到1522字节(如果仅使用一个标签,或者如果使用两个标签,则为1526字节)。这些都不能解释数字1542。

要获得此数字,您需要考虑如何在以太网上发送帧。以太网LAN上没有时钟,因此帧的发送器发送一系列1和0来设置时钟。这就是所谓的序言。并非每个听众都会“听到”所有的序言,但大多数人应该听到其中的一部分。为了用信号表示前同步码的末尾,将发送的最后8位中的一位翻转为10101011,而不是10101010。此字节称为帧开始定界符(SDF)。从技术上讲,这对于捕获线路没有用,因此通常不计入前导码的7个字节和1个字节的SDF,但是如果它们是我们原来的1518,现在将为1526。仍然不是1542。

发送帧后,电线上会强制执行静音,这称为帧间间隙。这相当于传输12个字节。这也不算或捕获,但是如果是,它将使我们达到1538字节。现在从1538到1542的唯一方法是说帧已被标记(即它确实包含4字节的计划标记)。ew,最后1542年。

全部都是术语。一个标准帧是1518字节,在线上(就任何捕获设备而言)。带标签的帧(单个标签)在网络上为1522字节。这些占用线上的1538字节或1542字节的传输空间。

希望有助于澄清。


-1

不,您不希望发生碎片,这就是为什么您需要对数据包进行碎片整理,但df set将其像这样的2条高速公路和一堆高速公路的原因相同的目的地半途载重量更多,但速度较慢,拥堵更容易,较小的车辆载运较少,但行驶速度更快,MSS与MTU也不相同


1
这个答案几乎但不是完全与这个问题无关。
kasperd
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.