一、检测到碰撞,发送站做三件事#
- 立即停止发送数据——别再往已经废掉的信道上灌数据了。
- 继续发送若干比特的人为干扰信号(jamming signal)——强化碰撞,让所有用户都知道现在已经发生了碰撞。
- 随机退避一段时间后,再重新发送。
二、为什么"停下来"不够,还要专门发一串干扰信号#
这一步最容易被忽略,也最容易考。
- 光停下来,别的站未必察觉:信号在总线上有传播时延,远端站点可能还没"看见"碰撞就已经在准备发送了。
- 所以撞上的站要主动再发一小段干扰比特,把碰撞这件事放大、拉长,让总线上每一个站都明确感知到"刚才信道上是撞过的"。
- 目的不是传数据,是通知:这叫强化碰撞。
三、截断二进制指数退避算法#
退避多久?不能拍脑袋,教材给了一套算法:
- 基本退避时间取为争用期 2τ。
- 令 k = Min[重传次数, 10]。
- 从整数集合 {0, 1, …, 2ᵏ − 1} 中随机取出一个数 r,重传推迟的时间就是 r 倍的基本退避时间。
- 重传达 16 次仍不成功,就丢弃该帧,并向高层报告。
举个例子:第一次重传,k=1,r 只能取 0 或 1 → 等 0 或 1 倍基本退避时间; 第三次重传,k=3,r 取 {0,…,7} → 等的范围就宽了。
四、为什么必须随机#
假如几个撞了的站都只是"等信道空闲就立刻重发":
- 它们会同时发现信道空闲、同时开始重发 → 必然又撞,然后再撞、再撞……
- 随机退避把大家的等待时间错开,才有可能让其中某一个先发成功。
而且撞得越多,k 越大,可选的等待范围越大,错开得越彻底——这正是"截断二进制指数"的含义:范围随重传次数指数增长,但增长到 10 次就封顶。
五、两个"上限"各管什么#
| 上限 | 数值 | 作用 |
|---|---|---|
| k 的上限 | 10 | 重传超过 10 次后,随机范围不再扩大(最大 2¹⁰=1024 个可选值,最长等 1023 倍基本退避时间),避免等待时间无限拉长 |
| 重传次数上限 | 16 次 | 超过就放弃这一帧,向高层报告——说明网络太拥挤,再重传只会更堵 |
六、本集易错点#
- 撞了不是立刻重发:先停、再发干扰信号、然后随机退避。三步顺序不能乱。
- 干扰信号的作用是通知全网"撞了",不是重传数据。
- 基本退避时间是争用期 2τ,不是 τ(2τ 是往返时延)。
- k 的上限是 10,重传上限是 16 次(不是 10 次,也不是 16 和 10 反过来说)。
- 退避时间是 r 倍基本退避时间,r 是随机的,不是一个固定值。
#
七、关键表述依据#
| # | 表述 | 依据 |
|---|---|---|
| 1 | 检测到碰撞立即停止发送 | 谢希仁 3.3.2 CSMA/CD 协议 |
| 2 | 停止后再发若干比特人为干扰信号(强化碰撞),让所有用户都知道发生了碰撞 | 同上 |
| 3 | 然后随机退避一段时间再重发 | 同上 |
| 4 | 截断二进制指数退避算法:基本退避时间=争用期 2τ | 同上 |
| 5 | k=Min[重传次数, 10] | 同上 |
| 6 | r 从 {0, 1, …, 2ᵏ−1} 中随机取,重传推迟 r 倍基本退避时间 | 同上 |
| 7 | 重传 16 次仍不成功即丢弃该帧并向高层报告 | 同上 |
| 8 | 撞得越多 k 越大、可选范围越大,错开得越彻底 | 由算法推出的理解性说明 |