可靠传输-停止等待协议
本文最后更新于:2025年11月10日 下午
一、停止 - 等待协议(SW)核心机制
停止 - 等待协议是最基础的可靠传输协议,核心逻辑为 “发送方发送一个数据分组后,停止发送并等待接收方确认,收到确认后再发送下一个分组”,具体机制包含以下 4 个关键模块:
1. 确认与否认(ACK/NAK)
- 正常场景:发送方发送
DATA分组,接收方正确接收后,返回ACK(确认)分组,发送方收到ACK后继续发送下一个DATA。 - 误码场景:接收方检测到
DATA分组存在误码时,有两种处理方式:- 直接丢弃误码分组,等待发送方超时重传(适用于误码率较低的链路);
- 向发送方发送
NAK(否认)分组,触发发送方尽早重传(适用于误码率较高的点对点链路)。
2. 超时重传
- 核心问题:若
DATA分组丢失或ACK分组丢失,发送方会一直等待确认,陷入死锁。 - 解决方案:发送方发送
DATA分组后,立即启动超时计时器;若计时器超时仍未收到ACK/NAK,则重传原DATA分组。 - 重传时间设定:需 “略大于发送方到接收方的平均往返时间(RTT)”,避免过早重传导致资源浪费,或过晚重传导致时延增加。
- 数据链路层:点对点往返时间稳定,重传时间易设定;
- 运输层:端到端往返时间不确定,重传时间设定难度较高。
3. 分组编号(避免重复)
- 数据分组编号:由于协议 “停等” 特性,只需 1 个比特编号(0 和 1)即可区分新分组与重复分组(确保每次新分组编号与上一次不同)。
- ACK 分组编号:理论上需与数据分组编号比特数一致(帮助发送方判断
ACK是否重复),但数据链路层极少出现ACK迟到场景,因此可省略ACK编号。
4. 异常场景处理
文档明确了 4 种典型异常场景的协议行为,具体如下表:
| 异常场景 | 发送方行为 | 接收方行为 | 最终结果 |
|---|---|---|---|
DATA分组丢失 |
启动超时计时器,超时后重传DATA |
未收到DATA,不发送ACK/NAK |
重传DATA被正确接收,返回ACK |
ACK分组丢失 |
未收到ACK,超时后重传DATA |
已正确接收原DATA,收到重传DATA后丢弃(因编号重复),重新发送ACK |
发送方收到重发的ACK,继续发送下一个DATA |
DATA分组误码 |
若收到NAK则立即重传;若未收到NAK,则超时后重传 |
丢弃误码DATA,可选发送NAK |
重传DATA被正确接收,返回ACK |
ACK分组迟到 |
未及时收到ACK,超时后重传DATA |
已收到原DATA,收到重传DATA后丢弃,重新发送ACK |
发送方收到迟到 / 重发的ACK,停止重传 |
二、停止 - 等待协议的信道利用率
1. 利用率公式
信道利用率()表示有效传输时间占总周期时间的比例,公式如下:
其中:
- :数据分组发送时延(发送分组所需时间)
- :往返时间(分组从发送到接收ACK的总时间)
- :ACK分组发送时延(通常远小于,可忽略)
简化公式为:
2. 核心缺陷
当远大于(如卫星链路)时,信道利用率极低;若出现重传,利用率会进一步下降 —— 这也是 GBN 和 SR 协议产生的核心原因(弥补 SW 利用率低的缺陷)。
三、相关协议对比(GBN 与 SR)
文档虽未详细展开 GBN 和 SR 协议,但明确其设计目标是 “解决 SW 信道利用率低的问题”,三者核心差异如下:
| 协议 | 发送方式 | 重传策略 | 信道利用率 | 复杂度 |
|---|---|---|---|---|
| 停止 - 等待(SW) | 一次发 1 个,停等确认 | 仅重传超时 / 否认的分组 | 最低(RTT 越大越低) | 最低 |
| 回退 N 帧(GBN) | 连续发 N 个,无需等待确认 | 超时后重传该分组及后续所有分组 | 中等 | 中等 |
| 选择重传(SR) | 连续发 N 个,无需等待确认 | 仅重传超时 / 否认的分组 | 最高 | 最高(需缓存已发未确认分组) |
四、总结
停止 - 等待协议是可靠传输的 “基础模型”,通过 “停等确认 + 超时重传 + 分组编号” 实现数据可靠交付,优点是逻辑简单、易于实现,缺点是信道利用率极低(尤其长时延链路)。GBN 和 SR 协议在此基础上优化,通过 “连续发送 + 选择性重传” 提升利用率,但复杂度相应增加。三者共同构成了计算机网络各层可靠传输的核心技术框架,需结合场景选择适用协议
可靠传输-停止等待协议
https://hellowydwyd.github.io/2025/10/08/可靠传输-停止等待协议/