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

chr*_*tek 22 networking ethernet tcp udp mtu

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

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


令人困惑的是 PAYLOAD 实际上可以大到 1500 字节,这就是 MTU。那么现在有效载荷为 1500 的线内尺寸是多少?从该表中,它可以大到 1542 字节。

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

vor*_*aq7 27

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


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

有效载荷封装在以太网帧中(添加源/目标 MAC、VLAN 标记、长度和 CRC 校验和。这是总共 22 字节的额外“东西”
[SRC+DST+VLAN+LENGTH+[payload]+CRC]<- 1522 字节

帧通过电线传输——在您的以太网卡这样做之前,它基本上站起来并大声喊叫,以确保没有其他人在使用电线(CSMA/CD)——这是前导码帧起始定界符(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(通过您的数据所采用的特定路径)。

  • traceroute --mtu {target} 在 linux 上也会显示最大 mtu (2认同)