- 可靠数据传输对应用层、传输层、链路层都很重要
- 网络Top-10问题
- 信道的不可靠特性决定了可靠数据传输协议(rdt)的复杂性
流水线可靠数据传输
状态机(Finite State Machine, FSM)
确认机制(Acknowledgements, ACK): 接收方显式地告知发送方分组已正确接收
NAK:接收方显式地告知发送方分组有错误
- Rdt 1.0 可靠信道上的可靠数据传输
- Rdt 2.0: 产生位错误的信道 差错检测 接收方反馈控制消息: ACK/NAK 重传
- Rdt 2.1 需判断分组是否是重复
- Rdt 2.2 无NAK消息协议 rdt 2.1功能相同,但是只使用ACK
- Rdt 3.0 发送方等待“合理”时间 如果没收到ACK,重传
停等操作
“停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
在发送完一个分组后,必须暂时保留已发送的分组的副本,以备重发。 分组和确认分组都必须进行编号。
流水线可靠数据传输原理
允许发送方在收到ACK之前连续发送多个分组
- 更大的序列号范围
- 发送方和/或接收方需要更大的存储空间以缓存分组

滑动窗口协议
窗口的尺寸 = 已发送未ACK + 待发送未ACK的
回退N步(回退 N 步协议)
Go-Back-N(GBN)协议: 发送方
在 GBN 协议中,允许发送方发送多个分组(当有多个分组可用时)而不需等待确认,但它也受限于在流水线中未确认的分组数不能超过某个最大允许数 N。
- 分组头部包含k-bit序列号
- 窗口尺寸为N,最多允许N个分组未确认
- ACK(n): 确认到序列号n(包含n)的分组均已被正确接收(可能收到重复ACK)
- 为空中的分组设置计时器(timer) (用来判断是否超时 已发送未确认)

一开始就使用定时器
超时Timeout(n)事件: 重传序列号大于等于n,还未收到ACK的所有分组
接收方的FSM
ACK机制: 发送拥有最高序列号的、已被正确接收的分组的ACK
- 可能产生重复ACK
- 只需要记住唯一的expectedseqnum
- 乱序到达的分组: 直接丢弃 接收方没有缓存 重新确认序列号最大的、按序到达的分组、
例如
例题

题目中收到3的确认帧就代表编号为0、1、2、3的帧已接收,而此时发送方未收到1号帧的确认只能代表确认帧在返回的过程中丢失了 第一个题中是接收方没有收到,所以一直返回1
- 接收方对每个分组单独进行确认 设置缓存机制,缓存乱序到达的分组
- 发送方只重传那些没收到ACK的分组 为每个分组设置定时器
- 发送方窗口 N个连续的序列号 限制已发送且未确认的分组
选择重传(SR协议)
选择重传协议中的滑动窗口
发送方的任务
接收方的任务
运行中的SR
窗口的长度
重点总结




