以太网如何知道一帧有多长?


17

查看Wikipedia 上的以太网条目,我不知道它指示了以太网帧有多长时间。EtherType / Length标头字段显然可以指示帧类型或显式长度,而且我猜想在帧类型的情况下,它必须执行其他一些逻辑才能确定数据包的长度。例如,如果EtherType字段为0x0800,则表示IPv4有效负载,因此接收NIC将必须检查有效负载的前32位以找到IP数据包的长度,从而找出IP包的总长度。以太网帧,并知道何时查找帧结束校验和和帧间间隙。

这听起来正确吗?我还查看了以太网的IEEE 802.3规范(无论如何,第1部分),这似乎可以证实这一点,但是它很不透明。


Answers:


21

物理编码子层负责对帧进行定界,并将其发送到MAC层。

例如,在千兆以太网中,8B / 10B编码方案使用10位代码组编码8位字节。额外的两位告诉一个字节是控制信息还是数据。控制信息可以是Configuration,Start_of_packet,End_of_packet,IDLE,Carrier_extend,Error_propagation。

NIC就是这样知道帧在哪里开始和结束的。这也意味着帧的长度在完全解码之前是未知的,类似于C中以NULL终止的字符串。


1
这在IEEE Std 802.3-2015(第3节),36.2.4.2和36.2.4.15中进行了规定(在此不可读的事物中,其他地方称为标准;)。
stefanct

1

您真正想回答您问题的文章是http://en.wikipedia.org/wiki/Ethernet_II_framing;其中说:

随着该行业开发的标准通过正式的IEEE标准化过程,在新的802.3标准中,EtherType字段已更改为(数据)长度字段。(原始以太网数据包使用围绕它的帧来定义其长度,而不是使用明确的长度计数。)由于数据包接收者仍然需要知道如何解释数据包,因此该标准要求IEEE 802.2标头遵循该长度并指定数据包类型。


我想我不清楚“原始以太网数据包通过其周围的帧来定义其长度”是什么意思。前同步码/开始帧位非常清楚,但是客户端如何知道已经到达帧的末尾?如何区分CRC和帧间间隙?IFG随机电噪声是否容易与真实信号区分开?
2009年

“经典以太网”中的帧结束通过非法编码来发出信号。
Vatine

@womble,您链接的文章很好,但是引用的内容在上下文中极具误导性。今天,以太网上的大多数帧都不使用显式长度字段。
彼得·格林

-3

从逻辑上讲,只有三个选项:

  1. 使用像中的静态框架大小。
  2. 在标头或其他地方指定帧大小,甚至用一些标志将其限制。
  3. 完全不发送帧

其中之一适用于以太网,因为当前没有其他选项可用于现代网络;)第1和第3对于以太网来说是错误的,所以您是对的!


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.