《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 工作机制简述:

  1. 根桥选举:所有交换机比对 Bridge ID(优先级 + MAC 地址),选出"根桥";
  2. 计算最短路径:各交换机到根桥的最短路径确定主用链路;
  3. 端口角色分配
    • Root Port:每台非根桥与根桥之间的最佳路径端口;
    • Designated Port:在网段中承担转发责任的端口;
    • Blocked Port:非必要路径上的端口将被阻断,避免环路。
  4. 维护过程 :交换机周期性发送 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。

核心流程如下:

  1. 监听信道:终端在发送前必须监听信道是否空闲;
  2. 随机退避:若信道忙碌,等待一段随机时间后再尝试;
  3. RTS/CTS(可选):为防止隐藏节点问题,可在发送数据前先交换 Request To Send 和 Clear To Send 帧,确保接收方准备就绪;
  4. 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.1ping ::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 不能反向传输,会导致连接失败。
  • 无对称路由能力:许多协议默认使用相同路径返回响应,单向链路打破这一假设。

通常会将单向链路与辅助的双向控制信道配对使用,或者采用特定协议对其进行封装和管理。隧道机制在此类场景中也可用于绕过协议栈对双向链路的需求。

相关推荐
sakoba2 小时前
Docker学习其二(容器卷,Docker网络,Compose)
运维·网络·学习·docker·容器·基础
惜.己4 小时前
appium中urllib3.exceptions.LocationValueError: No host specified. 的错误解决办法
网络·appium
吉凶以情迁4 小时前
window服务相关问题探索 go语言服务开发探索调试
linux·服务器·开发语言·网络·golang
专注VB编程开发20年4 小时前
UDP受限广播地址255.255.255.255的通信机制详解
网络·udp·智能路由器
189228048615 小时前
NX947NX955美光固态闪存NX962NX966
大数据·服务器·网络·人工智能·科技
Sadsvit6 小时前
Linux 进程管理与计划任务
linux·服务器·网络
一碗白开水一7 小时前
【模型细节】FPN经典网络模型 (Feature Pyramid Networks)详解及其变形优化
网络·人工智能·pytorch·深度学习·计算机视觉
什么都想学的阿超7 小时前
【网络与爬虫 38】Apify全栈指南:从0到1构建企业级自动化爬虫平台
网络·爬虫·自动化
D-海漠8 小时前
安全光幕Muting功能程序逻辑设计
服务器·网络·人工智能
都给我9 小时前
可计算存储(Computational Storage)与DPU(Data Processing Unit)的技术特点对比及实际应用场景分析
运维·服务器·网络·云计算