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

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

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

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

答案1

物理编码子层负责划分帧,并将其发送到MAC层。

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

这就是 NIC 知道帧从哪里开始和结束的方式。这也意味着在完全解码之前无法知道帧的长度,类似于 C 语言中以 NULL 结尾的字符串。

答案2

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

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

答案3

从逻辑上讲,只有三种选择:

  1. 使用类似 的静态帧大小。
  2. 在其标题或其他地方指定帧大小,甚至用一些标志来限制它。
  3. 根本不发送帧

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

答案4

之前花了一段时间才解决这个问题,现在又花了一段时间。关于这个问题的信息不多,这很令人惊讶,因为这是一个非常明显的问题。我最终决定使用数据包头中的长度字段。请参阅以下链接

http://www3.rad.com/networks/infrastructure/lans/etherform.htm#_ieee

相关内容