为什么前导不被视为以太网报头的一部分?

网络工程 以太网 层2 第一层
2021-07-17 23:44:57
  1. 如果我搜索以太网帧中数据从哪里开始,我会得到一个常见的答案,即 TCP 标头(20 字节)+ IP 标头(20 字节)+ 以太网标头(SA + DA + 类型),即 14 字节。所以,简而言之,这个问题的答案是 52-54 字节,数据从以太网帧开始,但我们不应该在其中添加 8 字节的前导码吗?

  2. 此外,我搜索了以太网帧大小,即以太网帧的 1514。为什么我们在这里忽略 Preamble 和 CRC?

4个回答

添加乔纳森乔的回答:

以太网在第 1 层(因为它可以在不同介质上运行)和第 2 层(因为不同介质上的帧相同)都有组件。

Preamble、SoF Delimiter 和 Inter-packet Gap 实际上在第 1 层(唤醒接收器等),而帧(包括标头、有效载荷和 FCS)在第 2 层。

以太网帧中的数据是以太网帧的有效载荷。您的问题 1 假设每个第 3 层协议都是 IPv4,每个第 4 层协议都是 TCP,这是错误的假设。以太网不知道也不关心它携带的第 3 层协议(IPv4、IPX、IPv6、AppleTalk 等),因此帧的数据就是有效载荷。例如,IPv4 包头是 20 到 60 个八位字节,而 IPv6 包头总是 40 个八位字节。以太网不知道这一点,它只知道它有一个有效载荷字段,而不知道该字段中有什么。

以太网帧头通常是 14 个八位字节,除非您有一个标记帧,否则它是 18 个八位字节。MTU 是最大有效载荷大小。以太网还具有 64 个八位字节的最小帧大小,包括 FCS,因此有效载荷的范围可以从 42(带标签)或 46(不带标签)八位字节到最大有效载荷大小 1500 个八位字节。这意味着以太网帧(标头和有效载荷)从 60 个八位字节到 1514 个(不带标签)或 1518 个(带标签)八位字节。

如果数据从哪里开始,您指的是应用程序数据,那实际上将取决于所有协议。UDP 报头只有 8 个八位字节,UDP 有效载荷可能是应用程序数据,也可能是应用层协议的数据报,它有自己的报头,可能不计为应用程序数据。在您的 TCP 示例中,您可能正在将 Web 浏览器运行到 Web 服务器。您将 HTTP(应用层协议)还是 HTML 视为数据(HTML 是 HTTP 的数据)?当您引用数据时,它与您所引用的协议有关。

前导实际上是 7 个八位字节,后面是一个成帧八位字节,即起始帧定界符 (SFD)。它们只是标记帧即将到来并用于同步目的,它们不是帧的一部分。就像帧间间隙一样,不算作帧的一部分。前导码和 SFD 永远不会进入内存,因此永远不会有任何包含 8 的内存偏移量。

以太网帧有时被描述为 1514 个八位字节,因为硬件通常会计算/检查 FCS,而 CPU 永远不会看到它或将它放入内存:只有 src、dest、类型、有效载荷。但是,根据标准,该框架明确定义为包括 FCS。基本帧被定义为具有至少1500个字节,其加14个加4 FCS = 1520的最大客户端数据的字段长度。

附注。不要忘记可选的 802.1q 标签,另外 4 个八位字节用于中继上的数据包;还有一些其他特殊类型。

编辑该标准主要涉及frame,其定义为包括 FCS (感谢 Richard 的评论)。它还谈到 从前导码的开头到扩展位的结尾数据包(有时在 FCS 之后需要这些数据包,以确保良好的冲突检测。)该数据包是硬件在线路上传输的所有位。(“数据包”的这种用法可能会令人困惑,正如我们通常所说的以太网帧内的 IP数据包。)

归根结底,这只是定义的问题,值得庆幸的是,我们可以查找它们。如果您不知道,该标准是免费提供的。核心有 4,000 页长(!),但是定义之类的大部分内容都非常易于阅读,而且绝对不含糊。强烈建议至少查看第 3.1.1 节数据包格式。http://www.ieee802.org/3/

除了已经存在的,好的答案:

前导码是物理层的基本功能。请注意,当您将数据序列化为单个位或符号流时,您需要提供某种形式的同步——首先是位/符号,然后是字。

前导码在线路上生成的符号模式(实际上只有 01010... 带有 10BASE-x 曼彻斯特代码)允许接收器将其符号时钟调整到发送器的准确速度。即使线路没有变化,它也会知道它刚刚收到了多少个符号。(所有物理层也提供了中间同步的方法,所以它是一个连续的过程。)

前导码后面的 SOF 模式标志着第一个(或八位字节/字节)的开始。接收器激活它的缓冲器并将解码的位计时到其中,对来自解码器的位进行反序列化并将其逐字传输到缓冲器。一次是一个字节还是一个 32 位字并不重要,但重要的是字节边界是正确的。

因此,前导码和SOF必然是物理传输机制的一部分,因此属于物理层。从第 2 层的角度来看,帧不需要开始标记——它只是从第一个八位字节开始。

除了其他人关于分层的出色回答之外,一些协议正好位于 L2 以太网帧的顶部,其中最著名的是 ARP、RARP、CDP 等,它们与链接直接相关(另外,正如我所提醒的那样) Zac,其他协议,例如 LLDP 和 STP 的 BPDU。)

这是非常罕见的,但有时您会发现应用程序在以太网帧中发送数据,尽管我看到的唯一原因是 a) 专有协议设计为晦涩难懂或像许可证管理一样纯粹本地化,b ) 实验,尤其是实时传输或协议栈 timimg 的评估。这的优缺点超出了这个答案的范围!

这是一个计时测试包的输出,“数据”从 0x0e 开始。

14:54:29.698140 34:02:86:9f:f2:fc > 00:04:75:c8:28:e5, 802.3, length 64: length 50
    0x0000:  0004 75c8 28e5 3402 869f f2fc 0000 4041  ..u.(.4.......@A
    0x0010:  4243 4445 4647 4849 4a4b 4c4d 4e4f 5051  BCDEFGHIJKLMNOPQ
    0x0020:  5253 5455 5657 5859 5a5b 5c5d 5e5f 6061  RSTUVWXYZ[\]^_`a
    0x0030:  6263 6465 6667 6869 6a6b 6c6d 6e6f 7071  bcdefghijklmnopq