流水线可靠数据传输协议
停等协议的效率极低,发送方的理论效率不到链路物理上限的千分之一
流水线
允许发送方发送多个分组而无需等待确认
流水线技术:
- 分组编号 每个输送中的逻辑分组(即不计重传)必须有唯一序号
- 分组缓存 发送方和接收方必须缓存多个分组
- 差错恢复 包括回退N步和选择重传两种基本方法
滑动窗口协议
- 用于实现流水线机制的技术
窗口
- 允许使用的序列号范围
- 对发送方,已被发送但未被确认的分组的许可序号范围以及可用序号的范围
- 窗口长度为N:最多有N个等待确认的消息
滑动窗口
- 随着协议的运行,窗口在序列号空间内向前滑动
重传机制
- 根据重传机制的不同,有回退N步和选择重传两者实现
回退N步(Go-Back-N,GBN)
以回退N步作为差错恢复机制的滑动窗口协议
分组序号
- 基序号 最早的未确认分组的序号
- 下一个序号 下一个待发送分组的序号,即最小的未使用序号
累积确认 对序号n的ACK代表接收方已经正确接收序号不超过n的所有分组
发送方行为
- 上层调用 若窗口未满,产生分组并发送之,同时更新相应状态;若窗口已满,暂不发送(缓存数据,通知上层,同步机制等方式)
- 收到ACK
- 超时事件 若出现超时,重传所有已发送且未确认的分组
接收方行为
对按序到达的分组,接收并发送ACK;对失序分组,直接丢弃,并重新确认序列号最大的、按序到达的分组
特点
接收方只需要记住一个待接收分组序号
接收方没有分组缓存
回退N步的问题 单个分组的差错能引起大量分组的重传
状态机

发送方.png

接收方.png
选择重传(Selective Repeat,SR)
选择重传协议让发送方仅重传那些它怀疑在接收方出错的分组,以避免不必要的重传。
新机制
- 不再使用累积确认,ACK只确认特定分组。
- 接收方设置缓存,缓存乱序到达的分组
- 发送方只重传那些没收到ACK的分组,为每个分组设置定时器
发送方行为
- 从上层收到数据 检查下一个可用于该分组的序号,若序号位于发送方窗口内,则打包数据并发送。否则暂不发送(缓存,通知上层,同步机制等待)
- 分组超时 每个已发送未确认分组都有一个逻辑定时器,一定时间内未收到该分组的ACK则重传之
- 收到分组i的ACK 若i在窗口内,将该分组标记为已确认。若i=窗口基序号,则窗口前移。若窗口前移了且有序号落在窗口内的未发生分组,则发送这些分组。
接收方行为
- 确认正确接收的分组。若该分组失序,则将之缓存直至所有该分组之前的分组都被接收,再将一批连续的分组按序交付上层。若该分组已被正确接收(说明对该分组的ACK丢失或损坏了),仍要发送一个ACK。
状态机

发送方.png

接收方.png
序列号空间大小限制
问题:序列号空间大小与窗口
尺寸需满足什么关系?
NS+NR<=2k
底层信道具有分组重排序的可能
即分组通过链路网络传播时,分组序列的接收顺序和分组序列的发送顺序可能不一致。
具有分组重排序可能性的信道,可视为信道具有缓存分组,并在将来任意时刻释放所缓存的分组的可能。
实际应用中,通常假定分组在底层信道中存活时间不会超过某个固定值(如3分钟)。