• 可靠数据传输对应用层、传输层、链路层都很重要
  • 网络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之前连续发送多个分组

  • 更大的序列号范围
  • 发送方和/或接收方需要更大的存储空间以缓存分组

image.png
滑动窗口协议
image.png

窗口的尺寸 = 已发送未ACK + 待发送未ACK的

回退N步(回退 N 步协议)

Go-Back-N(GBN)协议: 发送方
在 GBN 协议中,允许发送方发送多个分组(当有多个分组可用时)而不需等待确认,但它也受限于在流水线中未确认的分组数不能超过某个最大允许数 N。
image.png

  • 分组头部包含k-bit序列号
  • 窗口尺寸为N,最多允许N个分组未确认
  • ACK(n): 确认到序列号n(包含n)的分组均已被正确接收(可能收到重复ACK)
  • 为空中的分组设置计时器(timer) (用来判断是否超时 已发送未确认)

image.png
一开始就使用定时器

  • 超时Timeout(n)事件: 重传序列号大于等于n,还未收到ACK的所有分组

    接收方的FSM

  • ACK机制: 发送拥有最高序列号的、已被正确接收的分组的ACK

  • 可能产生重复ACK
  • 只需要记住唯一的expectedseqnum
  • 乱序到达的分组: 直接丢弃 接收方没有缓存 重新确认序列号最大的按序到达的分组、

例如
image.png
例题
image.png
image.png
题目中收到3的确认帧就代表编号为0、1、2、3的帧已接收,而此时发送方未收到1号帧的确认只能代表确认帧在返回的过程中丢失了 第一个题中是接收方没有收到,所以一直返回1
可靠数据传输原理 - 图9

  • 接收方对每个分组单独进行确认 设置缓存机制,缓存乱序到达的分组
  • 发送方只重传那些没收到ACK的分组 为每个分组设置定时器
  • 发送方窗口 N个连续的序列号 限制已发送且未确认的分组

SR协议

选择重传(SR协议)

选择重传协议中的滑动窗口

image.png

发送方的任务

image.png
这里接收方窗口的移动同理

接收方的任务

image.png

运行中的SRimage.png

收到下界才进行移动

窗口的长度

image.png

重点总结

image.png
image.pngimage.png