📚 第三章 数据链路
📄 一句话概括

令牌环靠「拿到令牌才能说话」,所以它根本不会碰撞。 代价是「等令牌」——站越多等得越久,但这个等待是「算得出来」的。

📝 本节和前面几节的关系

3.6.3 讲的是光纤环,这一节讲铜线环:令牌环。 它的价值不在速率,在「延迟有上界」——这一点在工业现场很值钱。

一、令牌怎么转

规则只有一条:有令牌才能发:

状态 站的行为
空闲 令牌绕圈,谁拿到谁发
发送 把令牌改成「忙」,发完再放出新令牌
接收 目的站复制一份,继续往下传

第二行那个「改成忙」是关键:令牌本身是一个特殊的帧,改一个比特就从「空闲」变「忙」。 所以「谁在发」这件事,环上所有人都知道——不需要碰撞检测。 第三行「继续往下传」是环的特点: 帧会绕一圈回到发送者,发送者确认「发出去了、也收到了」才放新令牌。 这个动作自带「送达确认」,所以令牌环比以太网更容易做可靠传输。 代价是「绕一圈」的时间:每个站都有 1 个比特的延迟(转发要时间),站越多,一圈越久。 这就是「令牌环的延迟可以算出来」的原因。

二、延迟为什么可算

因为「等令牌」的时间只跟站数有关:

站数 4 Mbps 一圈 16 Mbps 一圈
10 2.50 微秒 0.62 微秒
100 25.00 微秒 6.25 微秒
250 62.50 微秒 15.62 微秒

这两列是「空转一圈」的时间:250 个站时,4 Mbps 要 62.5 微秒、16 Mbps 只要 15.6 微秒。 注意这不是「传数据的时间」,纯粹是「令牌绕一圈」的开销。 所以站越多、速率越低,这份固定开销占比越高。 「可算」这件事本身就是价值:因为「最坏延迟 = 环一圈的时间」, 所以「产线控制指令最多晚多少」是可以承诺的。 而以太网的「撞了就退避」没有上界——最坏情况可能等很久。

三、它为什么输

和 FDDI 一样,输在「迁移成本」:

对比 令牌环 以太网
拓扑 环 星型(交换机)
布线 环,一段断全网断 每台一根线到交换机
设备 贵(MAU、专用网卡) 便宜

第二行是运维上的差别:环网「一段断全网断」, 虽然令牌环用了「MAU(多站访问单元)」把环做成星型布线,但它仍然是「逻辑环」—— 一个站故障可能把整个环拖垮。 以太网的交换机方案在运维上简单得多:坏一个口只影响一台, 而且「拔了插另一个口」就能定位问题。 所以运维体系成熟之后,以太网的优势越来越明显。 但令牌环的思想没消失: 今天的「TSN(时间敏感网络)」就在以太网上实现「有界延迟」—— 用时间片调度代替令牌,目标还是三十年前那个目标。 所以「输掉的技术」不等于「错的技术」,它的目标常常被后来的技术继承。

四、动手 Demo:令牌环为什么不会撞车

算不同站数下「令牌绕一圈」要多久,再对比「最坏延迟」。 注意这是「空转」的时间,不是传数据的时间。

for n in (10, 50, 100, 250):
    print('%3d 站:4 Mbps 一圈 %5.2f 微秒  16 Mbps 一圈 %5.2f 微秒'
          % (n, n * 1.0 / 4e6 * 1e6, n * 1.0 / 16e6 * 1e6))

for name, worst, why in (('以太网 CSMA/CD', '不确定', '撞了退避,无上界'),
                         ('令牌环', '环一圈', '有确定上界')):
    print('%-14s 最坏延迟 %-8s 原因 %s' % (name, worst, why))

实跑输出:

--------------------------------------------------------------------
令牌环为什么不会撞车
--------------------------------------------------------------------
**令牌环的规矩是「谁拿到令牌谁说话」,所以它根本不会碰撞。**
**代价是「等令牌」——站越多、等得越久。**这个代价可以精确算出来,因为它只跟「站的个数」有关。

  站数     4 Mbps 环一圈 微秒     16 Mbps 环一圈 微秒
  ----------------------------------------------------
  10       2.50                   0.62
  50       12.50                  3.12
  100      25.00                  6.25
  250      62.50                  15.62

**第二列和第三列是「空转一圈」的时间**:
**250 个站时,4 Mbps 要 62.5 微秒、16 Mbps 只要 15.6 微秒。**
**注意这两列都不是「传数据的时间」,纯粹是「令牌绕一圈」的开销。**
**所以站越多、速率越低,这份固定开销占比越高。**
**令牌环的真正优势是「可预期的延迟」**:
  网络                   最坏延迟             原因
  -----------------------------------------------------------------------
  以太网(CSMA/CD)     **不确定**           撞了就退避,最坏情况无上界
  令牌环                 **环一圈的时间**     有确定上界
  令牌环(优先级)       **可再压缩**         高优先级可以预定令牌

**第一行那个「不确定」是工业现场的致命问题**:**产线上的控制指令晚 100 毫秒,可能就是一炉废品。**
**所以令牌环在工厂里活得比在办公室里久**——**办公要的是「平均快」,工业要的是「最坏也够快」。**
**这也是今天「TSN(时间敏感网络)」要解决的问题**:
**在以以太网为基础的前提下,把「最坏延迟」做成有上界的**。
**换了个做法,目标还是三十年前令牌环那个目标。**

每站 1 比特延迟这个假设:意思是「站转发一个比特要花 1 个比特的时间」, 所以 250 个站就是 250 个比特的时间。 4 Mbps 下 250 比特要 62.5 微秒,16 Mbps 下 15.6 微秒。 这个数说明「站数」是令牌环的核心约束:站越多,一圈越久,每个站「等令牌」的平均时间越长。 所以令牌环适合「站数可控」的场景(比如一个车间),不适合「随便加设备」的场景。 「最坏延迟有上界」这件事在工业上是刚需:产线控制要求「指令最晚 10 毫秒内到达」, 而「撞了退避」给不出这个保证。 所以令牌环在工厂里活得比在办公室久。 今天 TSN 要解决的还是这个问题。

30 秒实验

  1. 算一下:如果每个站是 2 比特延迟,250 个站 16 Mbps 一圈多久?
  2. 想一下:为什么「令牌环的最坏延迟」能算出来,而以太网不能?
  3. 查一下 TSN 的时间片调度,看它和令牌环的异同。

常见误区

  1. 以为令牌环「更慢」。 重负载下它的效率比以太网高,因为不碰撞。
  2. 以为「不会碰撞就没有延迟」。 等令牌也是延迟,而且和站数成正比。
  3. 以为「令牌环被淘汰说明思路是错的」。 TSN 还在做同一件事,只是换了实现。
自测三问(点开对答案) 1. 令牌环为什么不碰撞? —— **只有拿到令牌的站才能发**,其余站只能等,所以物理上不会有并发发送。 2. 令牌环的最坏延迟为什么可算? —— **它等于「环一圈的时间」**,而这个时间只跟站数和速率有关。 3. 令牌环输在哪? —— **设备和布线贵,运维不如交换机方案方便。**但「有界延迟」的思想被 TSN 继承了。

下一节看几个更小众的链路:100VG、光纤通道、HIPPI 等。

相关笔记