《TCP/IP 详解 卷1:协议》第3章:链路层
以太网和IEEE802局域网/城域网标准
IEEE802局域网/城域网标准
IEEE 802 是一组由 IEEE(电气与电子工程师协会)定义的局域网和城域网通信标准系列,涵盖了从物理层到链路层的多个网络技术。其中:
- IEEE 802.3 定义的是传统的以太网标准;
- IEEE 802.11 是无线局域网(WLAN)的标准,即 Wi-Fi;
- IEEE 802.1 系列包括网络管理、桥接、VLAN 和链路聚合等技术;
- IEEE 802.2 是逻辑链路控制(LLC)子层的标准,虽然现代以太网大多不再显式使用 LLC;
- IEEE 802.16 定义的是 WiMAX(宽带无线接入)标准。
这些标准共同构成了链路层的通信基础,确保不同设备厂商生产的网络设备可以互操作。
以太网帧格式
以太网帧是在链路层传输数据的基本单元。标准的以太网帧结构如下:
- 目的地址:目标设备的 MAC 地址;
- 源地址:发送方的 MAC 地址;
- 类型字段:指明上层协议,例如 0x0800 表示 IPv4,0x86DD 表示 IPv6;
- 数据:有效载荷,最小46字节,最大1500字节;
- CRC:循环冗余校验,用于检测帧传输中的错误。
如果有效载荷不足 46 字节,需要进行填充以满足最小帧长要求(64 字节总长)。以太网帧通过物理层在网络链路上传输,不同介质(如双绞线、光纤)会影响帧的电气/光信号表现,但帧格式保持一致。
虚拟局域网和QoS标签
虚拟局域网(VLAN) 是通过逻辑划分网络的一种机制,使一个物理局域网可以被划分成多个相互隔离的逻辑网络。VLAN 的主要优势包括广播域隔离、安全性提升和简化网络管理。
在以太网中,VLAN 使用 IEEE 802.1Q 标准实现,通过在原始以太网帧中插入一个 4 字节的 VLAN 标签字段:
- 12 位 VLAN ID(VID):支持多达 4096 个 VLAN;
- 3 位优先级代码点(PCP):用于服务质量(QoS)调度;
- 1 位 CFI/DEI:指示是否有丢弃优先级。
QoS 标签(PCP) 可实现不同服务流的优先级调度,常用于音视频流、语音或延迟敏感数据的网络传输中。
802.1Q 框架使得交换机能够根据 VLAN 标签对帧进行分类、转发和过滤,从而支持跨多个交换机的 VLAN 构建。
802.1AX:链路聚合
链路聚合(Link Aggregation) 是一种将多个物理链路捆绑成一个逻辑链路的方法,提供更高的吞吐量和冗余容错能力。
IEEE 802.1AX 标准(前称 802.3ad)定义了链路聚合控制协议(LACP),允许两个设备协商并自动聚合多个物理端口。聚合链路在逻辑上表现为单一的接口,但物理上可由两个、四个、甚至更多的以太网端口组成。
全双工、省电、自动协商和802.1X流量控制
双工不匹配
以太网链路可工作在半双工或全双工模式:
- 半双工:数据在任一时刻只能单向传输,通常依赖冲突检测(CSMA/CD)。
- 全双工:允许双向同时传输,无需冲突检测机制。
双工不匹配问题发生在一端配置为全双工,而另一端为半双工时,会引发通信性能问题:
- 全双工端不会感知冲突;
- 半双工端在接收数据时无法发送,因此会频繁检测到冲突;
- 结果是吞吐量显著下降,表现为掉包、连接中断等异常。
现代设备通常使用**自动协商(Auto-Negotiation)**来确定最优的传输模式和速率,但静态配置不匹配仍是常见故障根源。
局域网唤醒(WoL)省电和魔术分组
局域网唤醒(Wake-on-LAN, WoL) 是一种远程电源管理技术,允许通过网络唤醒处于待机或休眠状态的计算机。
其关键机制是魔术分组(Magic Packet):
- 是一种特殊的广播帧,包含目标设备 MAC 地址重复16次;
- 网卡即使在主机休眠时,仍保留部分供电以监听魔术分组;
- 一旦检测到合法的魔术分组,即触发系统唤醒流程。
链路层流量控制
以太网通过IEEE 802.3x 全双工流量控制机制支持链路层的拥塞调节,实现方式是发送特殊的 PAUSE 帧。
当接收方缓存即将耗尽时,向发送方发出 PAUSE 控制帧,要求对方在指定时间内暂停发送。PAUSE 帧中包含“暂停时间”(单位是 512 比特时间)。机制仅适用于全双工链路。
此机制是一种端对端链路级流控,具有以下特点:
- 不依赖上层协议(如 TCP);
- 能在数据链路层直接响应拥塞,适用于低延迟、短缓冲的场景(如数据中心);
- 存在 头阻塞(Head-of-line blocking) 风险,即一个端口堵塞可能影响到与其共享缓冲区的其他端口。
另一个相关机制是 IEEE 802.1Qbb(优先级流控),提供基于 VLAN 优先级的粒度控制,避免广播/关键流因非关键流堵塞。
网桥和交换机
基础概念
网桥(Bridge) 和 交换机(Switch) 在链路层负责以太网帧的转发和隔离。
- 网桥:早期设备,通常连接两个局域网段,依据 MAC 地址表进行帧转发。
- 交换机:多端口的现代网桥,每个端口连接一个网络设备,构成星型拓扑,执行帧的学习和转发功能。
帧学习(Learning):交换机根据接收到的帧记录其源 MAC 地址和入端口,建立 MAC 地址表(也叫转发表、过滤表)。
帧转发(Forwarding):
- 如果目的 MAC 地址已知,帧被转发到特定端口;
- 如果未知,执行泛洪(flooding),将帧发送到除接收端口外的所有端口。
隔离冲突域:每个交换端口是独立冲突域,提高网络效率;
支持全双工通信,与集线器(Hub)形成对比。
生成树协议
生成树协议(Spanning Tree Protocol, STP),由 IEEE 802.1D 定义,解决网络环路问题:
- 在实际部署中,网络可能存在冗余链路,以提高可靠性;
- 然而,存在环路会导致帧无限循环、广播风暴、MAC 表混乱等问题;
- STP 通过算法禁用部分路径,构建一个无环的生成树拓扑,防止环路。
STP 工作机制简述:
- 根桥选举:所有交换机比对 Bridge ID(优先级 + MAC 地址),选出“根桥”;
- 计算最短路径:各交换机到根桥的最短路径确定主用链路;
- 端口角色分配:
- Root Port:每台非根桥与根桥之间的最佳路径端口;
- Designated Port:在网段中承担转发责任的端口;
- Blocked Port:非必要路径上的端口将被阻断,避免环路。
- 维护过程:交换机周期性发送 BPDU(Bridge Protocol Data Units) 包,用于保持拓扑结构。
扩展版本:
- RSTP(Rapid STP, IEEE 802.1w):改进收敛时间,更快切换路径;
- MSTP(Multiple STP, IEEE 802.1s):支持多个 VLAN 实例共享生成树,节省资源。
传统STP的问题之一是在拓扑变化之后,只能通过一定时间内未接收到BPDU来检测。如果这个超时很大,收敛时间(沿着生成树重新建立数据流的时间)可能比预期大。
RSTP使边缘端口(只连接到端站的端口)和正常的生成树端口之间,以及点到点链路和共享链路之间都有区别。边缘端口和点到点链路上的端口通常不会形成循环,因此允许它们跳过侦听和学习状态,直接进人转发状态。
802.1ak:多注册协议
在 VLAN、组播、服务发现等场景中,交换机需要维护大量的注册状态。传统 GARP(Generic Attribute Registration Protocol)在大规模网络中效率低,缺乏灵活性。
IEEE 802.1ak 定义了 MRP(Multiple Registration Protocol),用于替代传统的 GARP 协议,增强链路层协议的注册管理能力。
在使用MVRP时,当一个站被配置为一个VLAN成员时,该信息被传输到它所连接的交换机,并由该交换机将站加入VLAN通知其他交换机。这允许交换机根据站的VLANID添加自已的过滤表,也允许VLAN拓扑变化不必通过STP而重新计算现有生成树。避免重新计算STP是从GVRP向MVRP迁移的原因之一。
无线局域网 IEEE 802.11 WIFI
无线局域网(WLAN)最常见的标准是 IEEE 802.11,也就是我们熟知的 Wi-Fi。与有线以太网不同,802.11 网络必须应对无线信道的不稳定性、多设备共享信道以及节能需求,因此其链路层机制具有明显不同的特点。
802.11帧
802.11 帧格式比以太网复杂许多,主要原因在于无线环境需要更多控制信息以确保可靠通信。
帧类型分为三类:
- 管理帧(Management):用于发现、认证、关联接入点(AP),如 Beacon、Probe、Authentication、Association 等;
- 控制帧(Control):用于数据帧传输辅助控制,如 ACK、RTS(请求发送)、CTS(允许发送);
- 数据帧(Data):携带真正的用户数据。
控制帧与帧确认用于流量控制,帮助接收方通知发送方降低速度,并让发送方确认数据已被正确接收。802.11网络支持可选的请求发送/明确发送(RTS/CTS)机制:发送方在发送数据前先发出RTS帧,接收方回复CTS帧后,允许发送方在指定时间窗口内发送数据,从而避免隐藏终端问题。
典型的 802.11 帧包含如下字段:
- 帧控制字段:指示帧类型、子类型、加密、功率管理等状态;
- 地址字段(最多四个):支持中继、转发等复杂拓扑;
- 序列控制字段:防止重复帧;
- 帧校验序列(FCS):错误检测;
- 可选字段:如 QoS 控制、HT 控制等,用于高吞吐量或多媒体数据支持。
与以太网不同,802.11 的帧中可以同时出现源地址、目的地址、中继地址和接入点地址,以支持基础结构和临时组网模式。
省电模式与时钟同步
无线设备常常依赖电池供电,因此 802.11 专门设计了省电机制:
- TIM(Traffic Indication Map):接入点(AP)定期通过 Beacon 帧告知哪些省电终端有数据等待接收;
- **省电终端(STA)**在 Beacon 周期中唤醒,检查 TIM,如果有数据,就发送唤醒请求;
- 未被标记的终端可以继续休眠,从而节省能耗。
此外,802.11 网络依赖时钟同步来协调活动:
- 接入点周期性发送 Beacon 帧,其中包含时间戳,所有终端通过这些时间戳调整本地时钟;
- 同步有助于协同唤醒、频率切换、节能调度等机制。
802.11 介质访问控制
无线网络使用共享信道,多个终端竞争同一个频谱资源,因此 802.11 采用**CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance)**机制,而非以太网的 CSMA/CD。
核心流程如下:
- 监听信道:终端在发送前必须监听信道是否空闲;
- 随机退避:若信道忙碌,等待一段随机时间后再尝试;
- RTS/CTS(可选):为防止隐藏节点问题,可在发送数据前先交换 Request To Send 和 Clear To Send 帧,确保接收方准备就绪;
- ACK 确认:每个数据帧发送后都需接收方返回 ACK 确认,确保可靠交付。
点到点协议
点到点协议(PPP,Point-to-Point Protocol)是一种用于通过串行链路(如电话线、专线、无线链路等)传输多种网络层协议(如IP、IPX等)的数据链路层协议。PPP 提供了链路的建立、配置、维护和终止的机制,同时支持认证、压缩和多链路聚合。
链路控制协议
链路控制协议是 PPP 的核心部分,负责在点对点链路上协商和配置链路参数。它的主要功能包括:
- 建立和配置链路:确定链路的工作模式、最大传输单元(MTU)、超时和重传参数等。
- 链路质量监测:通过回显请求与响应检测链路的有效性,确保链路质量。
- 链路维护与终止:在链路出现异常时及时终止或重置连接。
LCP 包括多种帧类型,如配置请求、确认、拒绝、终止等,用于在链路两端进行协商和管理。
LCP通过一系列控制帧完成链路的协商和维护,主要操作包括:
- 配置请求(Configure-Request):一端发送,提出希望使用的链路参数和选项。
- 配置确认(Configure-Ack):另一端同意请求中的所有参数。
- 配置否认(Configure-Nak):另一端不同意部分参数,并提出建议的修改方案。
- 配置拒绝(Configure-Reject):拒绝某些选项,不支持该选项。
- 回显请求和回显应答(Echo-Request/Reply):测试链路连通性和质量。
- 终止请求和终止确认(Terminate-Request/Terminate-Ack):结束链路连接。
- 代码拒绝(Code-Reject):拒绝未知的LCP代码。
LCP定义了一些可协商的选项,用于指定链路行为和参数,常见选项包括:
- 最大接收单元(MRU):协商数据帧的最大尺寸,默认通常为1500字节。
- 认证协议:指明认证方式,如PAP或CHAP。
- 压缩协议:协商使用的数据压缩方法。
- 魔术数字(Magic Number):用于检测环回连接,防止回路。
- 协议字段压缩:指示是否压缩协议字段以节省带宽。
- 地址和控制字段压缩:指示是否压缩链路层地址和控制字段。
多链路PPP
多链路 PPP 允许将多个物理链路聚合成一个逻辑链路,以增加带宽和冗余性。MP包含一个特殊的LCP选项,表示支持多链路,以及一个用于多链路上PPP帧分片与重组的协商协议。一条聚合链路(称为一个捆绑)可作为一条完整的虚拟链路来操作,并包含自己的配置信息。链路捆绑由大量成员链路组成。每个成员链路可能有自己的选项集。
实现MP的典型方法是使分组轮流经过各个成员链路传输。这种方法称为银行柜员算法,它可能导致分组重新排序,可能为其他协议带来不良的性能影响。(虽然TCP/IP可以正确处理重新排序后的分组,但也可能不如没有重新排序处理得好),MP在每个分组中添加一个2~4字节的序列头部,而远程MP接收方的任务是重建正确的顺序。
压缩控制协议
压缩控制协议用于协商数据压缩和解压缩方法,从而提高链路传输效率。主要内容:
- 协商支持的压缩算法,如 Van Jacobson TCP/IP 头压缩、Stac LZS 压缩等。
- 动态启用或关闭压缩功能,确保链路双方兼容。
- 提供数据的实时压缩和解压缩,减少链路上的传输数据量。
- 压缩过程对上层协议透明,无需修改网络层协议。
PPP认证
PPP 支持多种认证协议,用于验证连接的合法性和安全性,防止未授权访问。常见的认证协议包括:
- PAP(密码认证协议):使用明文密码进行简单认证,安全性较低。
- CHAP(质询握手认证协议):通过挑战-响应机制定期验证身份,安全性更高。
- EAP(可扩展认证协议):支持多种认证机制(如证书、令牌),用于更复杂的安全需求。
认证过程通常发生在链路建立阶段,确保只有授权用户能成功建立连接。
网络控制协议
网络控制协议是 PPP 用于支持不同网络层协议的协商机制。每种网络层协议(如 IP、IPX、AppleTalk)都有对应的 NCP:
- 通过 NCP 协议协商网络层地址(如IP地址)和参数。
- 管理和启用特定网络协议的数据传输。
- 支持动态分配地址,简化网络配置。
常见的 NCP 包括 IPCP(IP 控制协议)、IPXCP、ATCP 等,确保 PPP 链路支持多种网络协议。
头部压缩
PPP 支持多种头部压缩技术,主要用于减少传输的协议头部开销,提升链路效率:
- Van Jacobson TCP/IP 头压缩:针对TCP/IP协议的头部进行压缩,尤其适合慢速链路。
- 其他压缩算法根据不同协议特点设计,减少冗余字段。
- 压缩过程自动且透明,对上层协议无感知。
- 头部压缩显著减少数据包大小,减少链路负载和延迟。
环回
在网络通信中,环回(Loopback)是一种特殊机制,用于让计算机与自身通信,主要用于测试、本地服务访问等目的。它通过一个虚拟的网络接口实现,该接口完全在操作系统内部运行,不经过任何实际的网络硬件。
在IPv4中,所有以 127.
开头的地址都被保留用于环回用途,其中最常用的是 127.0.0.1
,通常被命名为 localhost
。在IPv6中,环回地址为 ::1
,功能等价于 IPv4 的 127.0.0.1
。
发送到环回地址的数据报不会离开主机,它们不会出现在网络上传输。操作系统处理这些数据时,仍会让其完整地通过网络协议栈(包括传输层、网络层等),直到在网络层将数据“回送”回来。这种完整路径处理虽然绕过了硬件,但有助于调试和性能测试,确保协议栈在没有网络设备干扰的情况下正常运行。
在类 UNIX 系统(如 Linux)中,环回接口名为 lo
,可通过命令如 ping 127.0.0.1
或 ping ::1
测试本地 TCP/IP 栈是否正常工作。
MTU和路径MTU
在网络通信中,最大传输单元(MTU,Maximum Transmission Unit) 指的是链路层一次能传输的最大数据负载大小。不同链路层技术对MTU有不同的规定:
- 以太网:MTU 通常为 1500 字节,即数据帧的有效负载部分不超过 1500 字节。
- PPP(点到点协议):一般也使用 1500 字节,以与以太网保持兼容。
- 串行链路:MTU 可配置,通常取决于所采用的帧封装协议(如 PPP)。
当 IP 层需要发送一个比底层链路的 MTU 更大的数据报时,会进行 IP 分片(将在后续章节详细讨论),将数据拆分为多个小块,使每个分片都不超过链路的 MTU。
当两台主机之间的通信路径跨越多个网络链路时,每条链路可能有不同的 MTU。此时,路径 MTU 是指从源主机到目的主机路径中,所有链路中最小的 MTU 值。
为避免 IP 分片带来的性能损耗,IPv4 和 IPv6 都支持一种机制来发现路径 MTU:
- IPv4 路径 MTU 发现(PMTUD):由 [RFC 1191] 定义。
- IPv6 路径 MTU 发现:由 [RFC 1981] 定义。
- 改进型 PMTUD(PLPMTUD):由 [RFC 4821] 提出,避免依赖某些网络可能会屏蔽的 ICMP 消息。
PMTUD 的目标是自动找出通信路径上允许的最大数据报大小,以提高传输效率,避免中途分片。它对于 TCP 性能 尤其关键,因为数据传输依赖可靠且高效的分段大小。
隧道基础
在网络通信中,隧道(Tunneling) 是一种技术,用于在一个网络协议中封装另一个协议的数据包,使得它们可以在不支持原始协议的网络中传输。隧道技术广泛应用于 VPN(虚拟专用网络)、IPv6 过渡机制、多播传输、移动网络等场景。
隧道的基本原理是将原始的数据包作为负载封装进另一个数据包中(外部头部),通过中间网络传输到目标节点,目标节点解封装后还原原始数据进行处理。这种传输形式通常由一对隧道端点控制:
- 入口节点(Ingress):将原始数据包封装。
- 出口节点(Egress):接收并解封装数据包,恢复为原始协议格式。
GRE
GRE(Generic Routing Encapsulation) 是由 IETF 提出的通用隧道协议,标准为 [RFC 2784]。它支持在 IP 网络中封装多种网络层协议(如 IPX、AppleTalk、IPv6),用于构建逻辑连接。
- 协议号为
47
(IP 协议字段)。 - 支持多种封装类型,可封装 IPv4、IPv6、MPLS、甚至带有 VLAN 的帧。
- 可选字段允许加入 校验和、密钥(用于识别不同的 GRE 隧道)等扩展信息。
GRE 封装的灵活性使它在构建 VPN、负载均衡、IPv6 过渡等场景中广泛使用。然而,它本身不提供加密或认证,因此若需要安全性,常结合 IPsec 使用。
单向链路
单向链路 是一种物理或逻辑上传输仅支持一个方向的通信链路。即数据只能从发送端传到接收端,不能反方向传输。这在卫星通信、广播网络和某些高带宽光纤网络中较常见。
在 TCP/IP 协议栈中,单向链路带来如下挑战:
- 确认帧无法返回:例如 TCP 的 ACK 不能反向传输,会导致连接失败。
- 无对称路由能力:许多协议默认使用相同路径返回响应,单向链路打破这一假设。
通常会将单向链路与辅助的双向控制信道配对使用,或者采用特定协议对其进行封装和管理。隧道机制在此类场景中也可用于绕过协议栈对双向链路的需求。