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

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

根据这里的表格,它表示 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 这个数字的。

答案1

维基百科上的图表太糟糕了。希望我接下来要写的内容更清楚一些。


最大值有效载荷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(通过数据所采用的特定路径)。

答案2

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

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

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

ping 主机名 -f -l 数据大小

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

答案3

对于基本的 Ethernet_II 帧,帧大小为 1518 字节(无论在线还是离线)。它由 6 个字节组成,每个字节表示目标地址和源地址,2 个字节表示类型字段,46 到 1500 字节之间的有效负载(在您的情况下是整个 IP 数据包及其 IP 报头和 UDP 报头),4 个字节表示 FCS。除此之外,帧的大小也有限制(64 字节)。这就是为什么范围是从 46 字节开始(将其添加到两个地址和类型以及 FCS,您将得到 64 个字节 - 46+6+6+2+4=64)。

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

因此,当范围写为 1500-42 时,并不意味着 1500 减去 42,而是意味着 1500 到 42 字节之间的任何内容都是有效的。在线路上,这个标记帧可能大到 1522 字节(如果只使用一个标记,或者如果使用两个标记,则为 1526)。这些都无法解释 1542 这个数字。

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

发送完一帧后,线路上会强制保持静默,这称为帧间间隙。这相当于传输了 12 个字节。这也不会被计算或捕获,但如果被计算或捕获,则将得到 1538 个字节。现在从 1538 到 1542 的唯一方法是说该帧已加标签(即它确实包含 4 字节计划标签)。呼,终于到了 1542。

一切都在术语中。标准帧在线路上为 1518 字节(就任何捕获设备而言)。标记帧(单个标记)在线路上为 1522 字节。它们占用线路上 1538 字节或 1542 字节的传输空间。

希望有助于澄清。

答案4

不,你希望发生碎片化,这就是为什么你得到的数据包需要碎片化,但是 df 设置了这样一种情况,一条双向高速公路上有很多半挂车,而同一条高速公路上有很多小型智能汽车,它们都去往同一个目的地,半挂车运载更多的有效载荷,但速度较慢,更容易拥堵,小型车运载较少,但行驶速度更快 MSS 与 MTU 也不相同

相关内容