3.1 引言


我们知道TCP/IP 协议族中设计链路层的目的是为IP模块发送和接受IP数据报,它可用于携带一些支持IP的辅助性协议。TCP/IP支持多种不同的链路层,它依赖于使用的网络硬件设备:如有限局域网(如以太网);城域网(MAN);有线语音网络;无线网络等。 大多数链路层技术都有一个相关协议,描述由网络硬件传输的相应PDU格式。在描述链路层传输的PDU时,我们通常使用术语—帧。帧格式通常支持可变帧长度,范围从几字节到几千字节,这个范围上限我们称为 最大传输单元(MTU)。  

3.2 以太网和 IEEE 802 局域网 / 城域网 标准


以太网:这个术语通常指一套标准,由DEC、Intel公司和Xerox 公司在1980年首次发布,并在1982年加以修订。(第一个常见格式的以太网,目前被称为”10M/S 以太网”或者”共享以太网”)。 共享以太网(10M/S 以太网):基本的共享以太网包含一个或多个工作站,他们都被连接在一个共享的电缆上。当介质(电缆)被确定为空闲状态时,链路层的PDU 可以从一个站发送至一个或多个站。如果多个工作站同时发送数据,可能因型号传播延迟而发送碰撞。碰撞可以被检测到,检测的方法称为 带冲突检测的载波侦听多录访问(CSMA/CD | 在每个以太网接口实现一种分布式算法从而控制一个站发送自己的数据)  

带冲突检测的载波侦听多录访问



CSMA/CD :一个站首先检测目前以太网上正在发送的信号,并在网络空闲时发送自己的帧(载播侦听)。如果发送与其他站碰巧碰撞(电信号重叠),每个站等待一个随机时间,然后再次尝试发送。这个时间的选择依据一个统一的分布规律,随后每个碰撞被检测到的时间长度加倍,最终每个站都会有机会发送,或者尝试一定次数后超时(传统以太网16次)。然而采用 CSMA/CD 在任何给定时间内,网络中只能有一个帧传输。 类似CSMA/CD 这样的访问方式被正式更名为 介质访问控制(MAX)协议。 这里要注意的是,MAX 协议有很多类型,有些基于每个站尝试独立使用网络(CSMA/CD),也有些基于预计安排的协调。 随着时间的推移(速度越来越快),基于竞争类型的MAC协议已经变得不流行。相反,局域网中的每个站之间的线路变得不共享,而是提供了一种专用的星形的拓扑结构(支持全双工通信),通过 以太网交换机 来实现。 目前,交换机为以太网中的每一个站提供同时接受和接收数据的功能(即:全双工以太网) 当前连接Internet 的最流行的技术之一是无线网络,常见的无限局域网(WLAN)IEEE 标准称为 无线保真 或者Wi-Fi,有时也称为”无限以太网”或者802.11 。  

3.2.1 IEEE 802局域网 / 城域网标准


原始的以太网帧格式和工作格式由前面提到的行业协议所描述,被称为 DIX 格式 或者 Ethernet II 格式。 对这种类型的以太网稍加修改后 有IEEE 标准化成为一种CSMA/CD 网络,称为802.3 。在IEEE 标准中 带802前缀的标准定义了局域网和城域网的工作过程,(当前最流行的的 802标准包括 802.3 [以太网] 和 802.11 [WLAN/Wi-Fi])。 IEEE 802 标准: 有关 TCP/IP协议的局域网和城域网 IEEE 802标准 当然,除了802.3 、802.11 标准定义的特定类型局域网之外,还有一些相关标准适用于所有的IEEE标准局域网技术(eg:逻辑链路控制 [802.2—LLC] )。  

3.2.1 以太网帧格式


所有的以太网帧都基于一个共同的格式,在原有的基础上,帧的格式以及被改进支持额外的功能,上图显示了当前以太网帧格式。 以太网帧的开始 是一个前导字段(也就是图中的前导码),接收器电路用它确定一个帧到达的时间,并确保编码位之间的时间量。由于以太网是一个异步的局域网(每个以太网接口卡中不保持精确的时间同步),从一个接口道另一个接口的编码为之间可能不同。前导是一种公认的模式(典型:0xAA),在发现 帧起始分割符(SFD [固定值位0xAB])时,用它恢复时钟。  



基本的帧的格式包括96位(12字节)的 目的地址 (DST) 和 源地址 (SRC),有时也采用 “MAC地址”、”链路层地址”、”802地址”、”物理地址”。以太网帧 的目的地址也允许寻址到多个站点(广播 或 组播),广播使用 ARP 协议 ,组播使用ICMPv6,以实现网络层地址和链路层地址的转换。 在 源地址 之后紧跟着一个类型字段(长度字段也行 2字节)。通常用来确定后面的数据类型。比如 TCP/IP 网络使用的 IPv4(0x0800)、IPv6(0x86DD)和 ARP(0x806)。 有时,在 源地址 和 类型字段 之间 有一个 Q标签帧(0x8100 ),可携带一个‘虚拟 局域网’ 或者 802.1q标准的VLAN ID。 在上述字段后,[802.3 – 2008]提供了多种标签包含由其他 IEEE 标准定义的其他标签(最常见的802.1p和802.1q 使用的标签,它提供虚拟局域网和一些 服务质量[QoS]指示符) 讨论完这些字段以后,是帧的 数据区有效载荷区 。这里是放高层 PDU 的地方 。传统上,以太网的有效载荷一直是 1500 字节,它代表以太网的MTU。有效载荷有事被0填充,以确保满足最小长度。 一个以太网帧的基本大小是1518字节(不包括Q标签帧),但最近将该标准扩大到了2000字节。后面会有相关章节详细说明,这里不过多赘述。  

3.2.2.1 帧校验序列/循环冗余校验


在有效载荷区之后的最后字段提供了对帧的完整性检查。循环冗余校验(CRC)字段位于尾部,有32位。 要使用一个 n 位的 CRC 检测数据传输错误,被检查的消息首先要追加 n 位0 形成一个扩展消息。然后扩展消息实行一个模2除法(除以一个 n + 1 位的值),这个值称为 生成多项式 。放置在消息的 CRC 字段中的值,是这次除法计算中的余数二进制反码(商被丢弃).  

3.2.2.2 帧的大小


以太网帧有最小和最大尺寸。最小是64字节,要求 有效载荷区 的长度最小为48字节。当有效载荷较小时,字节填充值为0,以确保达到最小长度。 传统以太网的最大帧长度是 1518字节(包括4字节的 CRC 和 14字节的 头部 不包括 Q标签帧),选择这个值是因为一个帧中包括错误(接收不到正确的CRC校验),只需重发1.5KB以修复问题,另一方面,MTU 的最大限制为 1500字节。为了发送更大的消息,则需要更多的帧。 由多个以太网帧构成一个更大的上传PDU 的结果是,每个以太网帧都贡献了一个固定的开销(14字节的头部 以及CRC)。而且,为了允许以太网设备接收电力路正确恢复来自网络的数据,并为其他站提供将自己的流量与已有流量区分开的机会,以太网帧不能无缝的压缩在一起。 Ethernet II 规范除了在帧的开始定义了 7字节 的 前导 和 1字节 的SFD 之外,还指定了12字节的包间距(IPG)。因此,Ethernet II 的每帧效率最多为 1500 / (12 + 8 + 14 + 1500 + 4) = 0.975 293 ,约98%。一中提高效率的方法是,在传输过程中使用尺寸更大的帧 **巨型帧**(通常允许尺寸高达9000字节),有些环境也是用 超级巨型帧 (通常超过9000字节)。要注意的是 他们并不能与 传统帧 并用,因为大部分传统设备无法处理。  

3.2.3 802.1p/q:虚拟局域网和QoS标签


随着交换式以太网使用越来越多,位于同一以太网中的每台主机互连已经成为可能。广播和组播流量被分发到所有希望接收的主机,而不必建立特殊的组播路由协议。虽然这是很多主机位于同一以太网的优势,但在很多主机使用广播时,广播到每台主机将带来大量网络流量,并出于某些安全因素可能要静止任意站之间的通信。 为了解决大型多用途交换网络运行中的问题,IEEE 采用了一中称为 虚拟局域网(VLAN)的功能扩展 802LAN 标准 (兼容的以太网交换机将主机之间的流量分隔为常见的VLAN)。注意 ,由于这种分隔,连接在同一交换机但不在同一VLAN的两台主机,它们之间的流量需要一台路由器来传递。 工作站到 VLAN 的映射有几种方法。通过端口分配VLAN 是一种简单常见的方法。交换机端口所连接的站被分配在一个特定的VLAN 中,这样其他任意连接的站就能成为VLAN中的一员。当然还有基于MAC地址分配的VLAN,以太网交换机使用表将一个站的MAC地址映射到一个VLAN。 当多个VLAN 跨越多个交换机(中继)时,在以太网帧发送到另一台交换机之前,需要使用VLAN来标记该帧的归属地(使用一个称为 VLAN标签或头部 的标记)。在很多情况下,管理员必须配置交换机端口,以便发送 802.1p/q 帧时能中继到合适的端口。 802.1p 规定了在帧中表示 QoS标识符的机制。802.1p 头部包括一个 3位 优先级 字段,它用于表明一个QoS级别。这标准是802.q VLAN 标准的扩展,两个标准可以同时作用,并在同一头部共享某些位。它用三个有效位定义了8个服务级别。这个标准规定了优先级如何被编码在分组中,但没指定如何控制哪些分组采用那个级别,以及实现优先级服务的底层机制,这些可具体由实现着来定义。 相关操作(P61)  

3.2.4 802.1AX:链路聚合


有些系统配备多个网络接口,具有 绑定 或 链路聚合 能力,通过链路聚合,可以将两个或更多的接口视为一个,能够提高性能并获得更好的可靠性。802.1AX[802.1AX-2008] 定义了最常用的聚合链路方法,以及管理这些聚合链路的 链路聚合控制协议(LACP) 。同时LACP使用一种特定格式的 IEEE 802帧(称为LACPDU)。 以太网交换机支持的链路聚合是一个替代方案,它比支持更高速的网络接口的 性价比更高(如果多个端口聚合能提供足够的宽带,则可能并不需要高速接口)。链路聚合不仅可以被网络交换机支持,而且可在一台主机上跨越多个 网络接口卡(NIC)。通常情况下,聚合的端口必须是同一类型而且工作在同一模式(半双工或者全双工)。 详细的例子见书 P63 LACP 协议旨在通过避免收工配置,以简化链路聚合的建立工作。  

3.3 全双工、省电、自动协商和802.1X 流量控制


众所周知,以太网被开发出来时仅在半双工模式下工作,并使用一条共享的电缆。随着发展,以太网修改为全双工操作,这样可以有效禁用冲突检测电路。 例子书 P64 自动协商:这是一种来源于802.3u 的机制,是接口能交换信息和功能。自动协商信息在物理层通过信号交换,它可在不发送或接收数据时发送。 Port:物理端口类型 PHYAD:地址 Transceiver:物理层电路在NIC内部还是外部  

3.3.1 双工不匹配


自动协商曾有一些互操作性问题,特别是一台计算机及其相关的交换机端口使用不同的双工匹配时,或者当自动协商只在链路一段被禁用时。这些情况下可能会发生 双工不匹配。但是,发生这种情况时,连接不会完全失败,但可能带来显著的性能下降。当网络中出现中等程度的双向流量繁忙时,一个半双工接口会将输入的流量监测为冲突,从而触发以太网MAC的 CSMA/CD 的指数退避功能。从而导致这个冲突的数据被丢弃,可能需要更高层的协议来重传(eg:TCP);因此性能下降可能只发生在半双工接口发送数据,同时又有大量流量需要接收时才明显。  

3.3.2 局域网唤醒(WoL)、省电和魔术分组


Windows唤醒功 能 和Linux唤醒 选项于使用网络接口 或主机脱离低功耗(睡眠)状态。 在Linux 中用于唤醒的值可能是零,或者是多个用于低功耗状态唤醒的位,他们可以被一下几种帧所触发:任何物理层(PHY)活动(p)、发往站的单播帧(u)、组播帧(m)、广播帧(b)、ARP帧(a)、魔术分组帧(g),以及包括密码的魔术分组帧。 当任何收到u、m、g或b类型的帧时,这个命令将eth0设备配置发送一个唤醒信号。windows也有类似的功能,但标准接口只支持魔术分组帧,以及一个预定的u、m、b和a类型帧的子集。魔术分组包含在一个字节值0xFF特定重复模式。 它以一个 6 字节的 0xFF 开始,其余部分包含重复16次的目的 MAC 地址。该数据的有效载荷模式定义了 魔术分组。  

3.3.3 链路层流量控制


以全双工模式下运行扩展你的以太网和跨越不同速率的网段时,可能需要由交换机将帧缓存一段时间。如果一个站聚合的流量速率超过该站的链路速率,那么帧就开始储存在中间交换机中。如果这种情况持续一段时间,那么这个帧就可能被丢弃。 缓解这种情况的一种方法是采取 流量控制。一些以太网交换机通过在交换机和网卡之间发送特殊的信号帧来控制流量。(以太网使用 PAUSE 消息 也称为 PAUSE 帧 实现流量控制) PAUSE 消息包含在MAC 控制帧中,通过将以太网 长度/类型 字段设置为 0x8808 ,以及使用 MAC控制操作码 0x0001 来标识。PAUSE 帧总是被发送到 MAC 地址 01:80:C2:00:00:01,并且只能在全双工链路上使用。 MAC帧采用 之前所示的帧的常规封装的帧格式,但紧跟在 长度/类型 字段后的是一个两字节的操作码。(同时PAUSE 也是唯一一种使用MAC控制帧的帧类型)