《计算机网络》深入学:轮询和令牌传递协议

在计算机网络中,如何协调多个节点在共享信道上的通信是一个核心问题。在上一节中,我们讨论了以太网(Ethernet)所采用的"随机访问"机制(如 CSMA/CD),其特点是"先听后说,冲突重发"。然而,在某些对实时性、确定性要求极高的应用场景下,随机竞争带来的不确定性是无法接受的。

本节将深入探讨另一种介质访问控制(MAC)策略------受控访问(Controlled Access) ,重点介绍其中的令牌传递协议(Token Passing Protocol)。这种机制通过有序的"轮询"方式,彻底消除了信道冲突。

4.1 历史背景与发展

4.1.1 从无序到有序的需求

20世纪70年代末至80年代初,局域网(LAN)技术方兴未艾。虽然基于总线拓扑的以太网因其简单低廉而迅速普及,但它有一个致命弱点:不确定性。在重负载情况下,以太网的碰撞几率急剧上升,导致网络吞吐量下降,且无法保证数据包在特定时间内送达。

对于工业自动化、银行交易系统以及IBM的大型机环境而言,网络必须是"确定性"的(Deterministic)。为了解决这一问题,IBM公司牵头研发了令牌环(Token Ring)技术。

4.1.2 标准化进程

  • IEEE 802.5(令牌环): 1985年,IEEE发布了802.5标准,定义了令牌环网的物理层和MAC子层规范。它成为了当时以太网最强有力的竞争对手。
  • IEEE 802.4(令牌总线): 为了适应工厂自动化中对总线物理拓扑的需求,同时保留令牌传递的确定性,IEEE制定了802.4标准(Token Bus)。
  • FDDI(光纤分布式数据接口): 随着光纤技术的发展,基于令牌传递机制的FDDI标准出现,将传输速率提升至100 Mbps,常用于当时的园区网主干。

虽然随着交换式以太网(Switched Ethernet)的出现,令牌环在商业局域网中逐渐式微,但其核心的"轮询"与"无冲突调度"思想至今仍在工业控制、嵌入式系统及部分无线通信协议中发挥着重要作用。

4.2 令牌传递的基本原理

令牌传递协议的核心思想非常朴素:持有"许可证"的人才有资格发言 。在网络中,这个许可证被称为令牌(Token)

4.2.1 拓扑结构:物理星型,逻辑环型

在理解令牌传递前,必须厘清物理连接与逻辑流向的区别。

  • 逻辑环型: 无论物理线路如何连接,网络中的站点在逻辑上组成一个首尾相接的环。令牌和数据帧沿着环路单向(通常是顺时针)逐站传递。
  • 物理星型: 在实际部署(如IBM Token Ring)中,为了易于管理和维护,通常采用星型布线。所有计算机连接到一个中心设备------多站接入单元(MAU, Multistation Access Unit)。MAU内部通过继电器将各个端口串联成环。

图 4-1:令牌环网的物理与逻辑结构示意图

4.2.2 工作流程

令牌是一个特殊的短帧(通常只有3个字节),它有两种状态:空闲(Free)忙(Busy)

  1. 令牌巡回: 当网络空闲时,一个"空闲令牌"在环路上从一个站点传到下一个站点。
  2. 捕获令牌: 当站点 AAA 需要发送数据时,它必须等待并捕获到这个空闲令牌。
  3. 发送数据: 站点 AAA 将令牌的状态位修改为"忙",并在其后附加数据载荷,构成一个完整的数据帧发送出去。此时,环路上不再有空闲令牌,其他站点(如 B,CB, CB,C)即使想发送数据也只能等待。
  4. 数据转发与接收: 数据帧沿着环路经过 B,CB, CB,C。每个站点都会检查帧的目的地址。如果 CCC 发现自己是接收者,它会复制帧中的数据,并标记帧状态为"已接收",然后将帧转发回环路。
  5. 移除数据与释放令牌: 数据帧绕环一周后回到发送者 AAA。AAA 检查确认数据已被接收,然后将数据帧从环上"剥离"(Drain),并产生一个新的"空闲令牌"发送到下游,将发送权移交给下一个站点。

4.3 技术细节与机制分析

为了保证网络的健壮性(Robustness)和效率,令牌传递协议包含许多精细的设计。

4.3.1 帧结构与令牌格式

在 IEEE 802.5 标准中,令牌和数据帧共用部分字段。

  • 令牌(3字节): 起始定界符(SD) + 访问控制字段(AC) + 结束定界符(ED)。
  • 访问控制字段(AC): 这是核心字段,包含:
    • 优先级位(Priority Bits, P): 用于服务质量(QoS)控制。
    • 令牌位(Token Bit, T): T=0T=0T=0 表示空闲令牌,T=1T=1T=1 表示数据帧(忙)。
    • 监视位(Monitor Bit, M): 用于防止孤儿帧无限循环。

4.3.2 环的维护:主动监视器

如果令牌丢失了怎么办?如果数据帧在环上无限循环怎么办?

为了解决这些问题,环中会选举出一个站点作为主动监视器(Active Monitor, AM)

AM 的职责包括:

  1. 检测令牌丢失: 如果在设定时间 TmaxT_{max}Tmax 内未检测到令牌经过,AM 会生成一个新的空闲令牌。
  2. 处理孤儿帧: 当一个忙令牌(数据帧)经过 AM 时,AM 会将帧中的 MMM 位置为 1。如果该帧再次经过 AM 且 M=1M=1M=1,说明发送该帧的站点未能将其移除(可能已宕机),AM 会强制销毁该帧并生成新令牌。

图 4-2:主动监视器的工作机制

4.3.3 性能分析:确定性与效率

假设环上有 NNN 个站点,信号在环上传播一圈的时间为 τ\tauτ(包括线路传播延迟和每个站点的比特延迟)。

  • 无冲突: 任何时刻只有一个站点持有令牌,因此信道利用率 theoretically 可以接近 100%,不会像 CSMA/CD 那样在高负载下因碰撞导致吞吐量骤降。
  • 最大等待时间: 设每个站点持有令牌传输数据的最大时间为 ThtT_{ht}Tht (Token Holding Time)。那么,一个站点想要发送数据,最坏情况下的等待时间 TwaitT_{wait}Twait 约为:
    Twait≈N×(Tht+τN) T_{wait} \approx N \times (T_{ht} + \frac{\tau}{N}) Twait≈N×(Tht+Nτ)
    这表明等待时间是有上界的(Bounded Latency),这就是确定性的来源。

4.4 实际应用与现代演进

4.4.1 传统应用领域的衰退

在20世纪90年代,随着交换式以太网技术的成熟(全双工通信消除了冲突域)以及快速以太网(100Mbps/1000Mbps)带来的巨大带宽优势,复杂的令牌环硬件(需要昂贵的MAU和复杂的MAC芯片)在办公网络市场逐渐被淘汰。

4.4.2 工业控制系统(Fieldbus)

然而,令牌传递并未消失。在工业自动化领域,如 Profibus 等现场总线协议,依然广泛使用令牌总线(Token Bus)机制。

  • 原因: 工厂里的机械臂、流水线必须在严格的时间窗口内接收指令。以太网的"大概率送达"无法满足工业级的"绝对准时"。令牌机制保证了指令传输的实时性和最坏情况响应时间。

4.4.3 现代及嵌入式网络

  1. 光传输网络: 一些城域网环网保护技术(如RPR, Resilient Packet Ring)借用了令牌环的拓扑和公平性算法。
  2. 存储区域网络(SAN): 光纤通道(Fibre Channel)的某些仲裁环路模式(FC-AL)采用了类似的轮询访问机制。
  3. 无线网络: 虽然 Wi-Fi 主要使用 CSMA/CA,但其协议中包含一个无竞争周期(CFP),在此期间,接入点(AP)充当中央控制器,通过轮询(Polling)各个站点来分配传输机会,这本质上就是一种集中式的令牌传递,用于保障语音或视频流的质量。

小结

令牌传递协议代表了计算机网络中"有序控制"的设计哲学。与以太网的"自由竞争"相比,它通过牺牲一定的设备复杂度和轻负载下的延迟,换取了高负载下的高吞吐量和严格的确定性延迟。

尽管经典的 IEEE 802.5 令牌环网已成为历史,但其蕴含的轮询(Polling)环路维护 以及无冲突调度的思想,依然深深植根于现代通信系统的底层逻辑中,特别是在那些对可靠性和实时性要求苛刻的关键任务系统中。

相关推荐
JaguarJack2 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo2 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack3 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理3 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1233 天前
matlab画图工具
开发语言·matlab
dustcell.3 天前
haproxy七层代理
java·开发语言·前端
norlan_jame3 天前
C-PHY与D-PHY差异
c语言·开发语言
多恩Stone3 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
QQ4022054963 天前
Python+django+vue3预制菜半成品配菜平台
开发语言·python·django
QQ5110082853 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php