目录、参考文献
所有的以太网(802.3)帧都基于一种通用的格式
自最初的规范以来,帧格式已经演变为可以支持附加的功能
图 3-3 展示了以太网帧的布局以及它与 IEEE 引入的一个相对较新的术语 IEEE 数据包(packet)的关系
以太网帧的开头是一个前导码(Preamble)区域
接收信号的接口所在的电路会用它来确定帧是何时到达的
并且用它来确定在两个编码比特序列(IEEE 数据包)之间间隔了多长时间(这个过程被称为时钟恢复(clock recovery))
因为以太网是一种异步局域网(LAN)(即:在各个以太网网卡之间没有维护一个精确的同步时钟,各个网卡各自用自己独立的时钟计时)
所以对于不同的网卡,直接测得的两个编码比特序列之间的时间间隔可能会有一些不同
而前导码(Preamble)提供了一种可识别的模式(通常为 0xAA
(二进制表示:10101010
))
接收者在发现帧首定界符(start frame delimiter (SFD))时,可以通过前导码(Preamble)来 “ 恢复时钟 ”
SFD 有固定的值 0xAB
理解
恢复时钟的概念要结合物理层来理解
平时没通信时,网络电路是没有电压的(0 V)
开始通信后,电路会有高低电压,接收方需要在正确的时间点进行采样,才能获取到正确的比特值
为了保证正确性,首先要保证采样的起始位置正确,然后要保证采样频率正确,即多长时间间隔采一次样
这两点都可以通过前导码来修正
采样频率与两件事相关:
- 网速,即本次通信每秒传输多少比特
- 编码方式,即电压波形与比特值的映射关系,如下边这些映射方式:
2.1. 电平绝对值表示比特值
2.2. 电平变换方向表示比特值
2.3. 将多个电压值映射为不同的多位二进制序列
注意
最初的以太网编码比特序列使用曼彻斯特相位编码(Manchester Phase Encoding (MPE))
这种编码方式会使用两种电压电平(voltage level)
MPE 用电压变换来编码一个比特位,而不是用某个绝对值
例如,0 被编码为从-0.85V
到+0.85V
的电压变换,1 被编码为从+0.85V
到-0.85V
的电压变换
而 0V 则用来表示共享电路处于空闲状态
10Mb/s
的以太网规范需要用到那些使用20MHz
振荡器的网络硬件,因为 MPE 每比特需要两个时钟周期
以太网前导码(Preamble)字节0xAA
(二进制:10101010
)将是频率为10MHz
的-0.85V
到+0.85V
间的方波
因为 0、1 相间的排列刚好让波形变成了波长翻倍的方波,所以频率减半
为了改进效率,其它的以太网标准会使用不同的编码来取代曼彻斯特编码
理解
简单认为电子在铜线中的传播速度恒定,约为 0.77c(c 表示光速)
电流的大小(单位时间经过单位横截面积的电荷量)不是受电子传输速度影响的
而是受单位截面积中的电子数量影响的
因此,在电阻不变的情况下,电压变化造成的电流变化仍然需要以 0.77c 的速度从发送者处传播到接收者那里
即,比特序列需要以 0.77c 的速度从发送者处传播到接收者那里
基本的帧格式包含 48 比特(6 字节)的目的地(Destination (DST))与源(Source (SRC))地址(Address)字段
这些地址有时被称为 “ MAC 地址 ”、“ 链路层地址 ”、“ 802 地址 ”、“ 硬件地址 ”、“ 物理地址 ”
以太网帧中的目的地地址也允许指向多个节点(“ 广播 ” 或 “ 组播 ”,见第 9 章)
ARP 协议(见第 4 章)使用了广播的能力
ICMPv6 协议(见第 8 章)使用组播的能力在网络层与链路层地址之间进行转换
源地址字段后边的是类型(Type)或长度(Length)字段
这个字段通常会用来定义头部后边的数据的类型
TCP/IP 网络常用的值包括:IPv4 (0x0800)、IPv6 (0x86DD)、ARP (0x0806)
值 0x8100
表示 Q 标签帧(Q-tagged frame)(即:可根据 802.1Q
标准携带 “ 虚拟 LAN ” 或 VLAN ID 的帧)
标准以太网帧的大小为 1518 字节,但新的标准将其扩展到了 2000 字节
图 3-3
以太网(IEEE 802.3)帧格式包含:源地址、目的地地址、一个长度/类型(Length/Type)字段、
一个供数据使用的字段、一个帧检测序列(frame check sequence)(CRC32)
在基础的帧格式上还可以增加额外字段来提供一个包含 VLAN ID 和优先级信息(802.1p/q)的标签,最近还能支持扩展更多的标签
前导码与 SFD 用来使接收者同步
当以太网以 100Mb/s 或更高的速度使用半双工工作时
可能会在较短的帧后边增加额外的比特作为载波扩展(carrier extension)以确保冲突检测电路正常运行
注意
最初的 IEEE(802.3)规范将长度/类型(Length/Type)字段视为长度(Length)字段而不是类型(Type)字段
因此这个字段同时具有两个不同的目的
可以通过这个字段的值来判读其功能,如果它的值大于等于 1536 则一定包含一个类型值,标准规定,该类型值为超过 1536 的值
如果这个字段的值小于等于 1500 则表示长度
[ETHERTYPES] 列出了所有的类型
在目的地(Destination)和源(Source)地址字段之后,[802.3-2008] 提供了可变数量的标签(tag)
这些标签包含了由其它 IEEE 标准定义的协议字段
其中最常见的是 802.1p 和 802.1q 使用的标签,它们提供虚拟局域网(VLAN)和一些服务质量(quality-of-service (QoS))指标
这些将在 3.2.3 节中讨论
注意
[802.3-2008] 标准合并了 802.3 的帧格式修改,它提供了最多 482 个字节用于保存以太网帧携带的 “ 标签 ”
这些较大的帧被称为包络帧(envelope frame),长度可高达 2000 字节
包含 802.1p/q 标签的帧被称为 Q 标记帧(Q-tagged frame),属于包络帧
但是,并非所有包络帧都必须是 Q 标记帧
之后是帧的数据区域或有效载荷(payload)部分
这是放置更高层 PDU(如:IP 数据报)的区域
传统上,以太网的有效载荷区域是 1500 字节,代表以太网的 MTU
当今大多数的系统都使用 MTU 大小为 1500 字节的以太网,但通常可以根据需求配置一个较小的值
有时会用 0 来填充有效载荷的长度,以确保整个帧满足 3.2.2.2 节中讨论的最小长度要求
以太网帧格式的最后一个字段位于有效载荷区域的后面,用于提供帧的完整性检查
末尾的循环冗余校验(Cyclic Redundancy Check (CRC))字段长 32 比特,有时被称为 IEEE/ANSI 标准 CRC32 [802.3-2008]
要使用 n 比特的 CRC 来校验数据传输错误,首先要将待校验的消息增加 n 个 0,形成扩展消息
然后,扩展后的消息被一个 n + 1 比特的值(称为生成多项式(generator polynomial))除(使用模 2 除法)
消息的 CRC 字段中的值是该除法余数的补码(商被丢弃)
生成多项式(generator polynomial)针对于不同的 n 值进行了标准化
对于以太网来说,n = 32,CRC32 生成多项式(generator polynomial)是一个 33 比特的二进制数 100000100110000010001110110110111
为了了解如何使用长(mod-2)二进制除法计算余数,可以用 CRC4 来检查一个比较简单的情况
ITU 在 G.704 [G704] 标准中将 CRC4 的生成多项式标准化为 10011
要发送一条 16 比特的消息 1001111000101111
,首先从图 3-4 所示的长(mod-2)二进制除法开始
图 3-4
CRC4 长(mod-2)二进制除法 的计算过程
如图所示,除法的余数为 4 比特值:1111
通常,该值的反码 0000
会被放在帧中的 CRC 或帧校验序列(Frame Check Sequence (FCS))字段中
接收方收到消息之后会执行相同的除法,然后检查 FCS 字段中的值是否与计算的余数相同
如果不同,则该帧很可能在传输过程中受到了损坏,通常会被丢弃
CRC 系列函数可为消息损坏提供可靠的证据,因为位模式的任何变化都极有可能导致余数的变化
以太网帧的大小既有下限也有上限
下限为 64 字节,其中,数据区域(有效载荷)至少 48 字节(不包含标签)
当有效载荷小于 48 字节时会在末尾用 0 进行填充
注意
对于使用 CSMA/CD 的最初的 10Mb/s 以太网来说,帧的最小字节数限制很重要
为了让发送者知道自己发送的哪个帧遇到了冲突
以太网网络的长度被限制为 2500 米(5 个 500 米的电缆段和 4 个中继器)
电子在铜线中的传播速度约为 0.77c(c 表示光速)即 231M m/s
因此一秒钟电子会在铜线中走过 231M 米
因为网速为 10Mb/s,因此一秒钟铜线中任一点会经过 10M 个比特
所以每比特长 231M / 10M = 23.1 米
最小尺寸的帧为 64 字节,即 64 * 8 比特,因此最小尺寸的帧长 64 * 8 * 23.1 = 11827.2 米
使用最长的 2500 米电缆,从一个站点到另一个站点的最大往返距离为 5000 米
以太网的设计者在确定最小帧大小时包含了 2 倍的过度设计
因此在所有正常情况下(以及许多非正常情况下),发送出去的帧的最后一位在其信号到达最远的接收者并返回时仍处于发送过程中
当检测到冲突时,发送者能够确定冲突的帧就是当前正在传输的帧
在这种情况下,发送者会发送一个干扰信号(jamming signal)(高压)来警告其它站点
然后这些站点会启动一个随机二进制指数退避程序
传统以太网的最大帧大小为 1518 字节(包括一个 4 字节的 CRC 和一个 14 字节的报头),这个值是经过权衡得到的结果
如果一个帧包含错误(在接收时通过错误的 CRC 被检测到),则只需重新传输 1.5KB 即可修复问题
但另一方面,该最大值使得 MTU 不能超过 1500 字节,这导致为了发送一条更长的消息需要用到多个帧
例如长 64KB 的消息在 TCP/IP 网络中是很常见的,其至少需要 44 个帧
用多个以太网帧来携带上层的大 PDU 的一个缺点是,每个帧都会产生固定的开销(14 字节报头,4 字节 CRC)
更糟糕的是,以太网的帧和帧之间还必须留有一定的空间
这样以太网硬件接收器电路才能正确地从网络中恢复数据,并且可以让其它站点的流量与已存在的以太网流量交错起来从而复用信道
以太网 II 的规范,除了指定了以太网帧前的 7 字节前导码和 1 字节 SFD 外,还指定了 12 字节时间的包间间隙(inter-packet gap (IPG))
这个间隙在 10Mb/s 时为 9.6µs,100Mb 时为 960ns /s,1000Mb/s 时为 96ns,10,000Mb/s 时为 9.6ns
因此,以太网 II 的每帧利用率(每帧有效载荷长度占整个帧长度的比例)最多为 1500/(12 + 8 + 14 + 1500 + 4) = 0.975293,或约 98%
在以太网中传输大量数据时,提高效率的一个方法是增大帧的大小
可以使用以太网巨型帧(jumbo frames [JF])
它是以太网的非标准扩展(主要用在 1000Mb/s 以太网交换机中),帧大小通常可高达 9000 字节
一些环境使用所谓的超巨型帧(super jumbo frames),通常被理解为超过 9000 字节的帧
使用巨型帧时要小心,因为这些较大的帧不能与大多数传统以太网设备使用的较小的 1518 字节的帧进行互操作
目录、参考文献