可靠传输-选择重传协议
本文最后更新于:2025年11月10日 下午
一、协议背景与核心目标
1. 问题起源
回退N帧协议(GBN)存在资源浪费缺陷:
- 接收窗口尺寸 ,仅能按序接收数据
- 若某一数据分组误码,后续无错分组会因"失序"被丢弃
- 导致发送方超时重传这些无错分组,浪费通信资源
2. 核心目标
- 仅重传误码分组
- 增大接收窗口尺寸
- 缓存"序号在接收窗口内、无错但失序"的分组
- 待缺失分组补全后再一并提交上层
- 提升传输效率
二、协议关键机制
1. 分组序号编码
- 采用 比特编号
- 序号范围:
- 示例:,序号范围
2. 窗口尺寸规则
发送窗口
取值范围:
关键约束:
- 时:退化为停止-等待协议
- 时:接收方无法区分新/旧分组
示例:取最大值 ()
接收窗口
取值范围:
关键说明:
- 时:退化为 GBN 协议
- 无意义
示例:
3. 发送方行为规则
- 批量发送:连续发送序号在发送窗口内的分组
- 窗口滑动:
- 仅在按序收到已发送分组确认时向前滑动
- 收到未按序确认时,记录确认但窗口不滑动
- 超时重传:仅重传超时且未收到确认的分组
4. 接收方行为规则
- 分组接收:可接收窗口内无错但失序的分组,并缓存
- 确认方式:逐一确认,不使用累积确认
- 窗口滑动:仅在按序接收完当前窗口内分组时滑动
三、错误案例:窗口尺寸超限
问题场景
- (实际最大值应为 )
风险
重传计时器超时后,接收方无法区分:
- 重传的旧分组
- 新窗口内的新分组
四、协议对比
| 协议类型 | 接收窗口 | 确认方式 | 重传策略 | 效率 |
|---|---|---|---|---|
| 停止-等待协议(SW) | 1 | 逐一确认 | 超时重传1个分组 | 低 |
| 回退N帧协议(GBN) | 1 | 累积确认 | 超时重传所有后续分组 | 中 |
| 选择重传协议(SR) | 逐一确认 | 仅重传超时/误码分组 | 高 |
附:SR协议伪代码示例
1 | |
可靠传输-选择重传协议
https://hellowydwyd.github.io/2025/10/08/可靠传输-选择重传协议/