← Back to Learning Notes

1 题型 - 三种可靠传输协议

Chinese-language Computer Science 408 note: 1 题型 - 三种可靠传输协议. Original source available where applicable.

On this page

This note is currently available in Chinese. The original wording, formulas and diagrams are preserved to avoid an unverified technical translation.

描述:停止等待、后退 N 帧和选择重传都是自动重传请求协议。三者的主要差别在于发送/接收窗口大小、确认方式、接收方是否缓存失序帧,以及发生丢帧或超时时需要重传多少帧。

1.1 三种协议对比

项目 停止等待 SW 后退 N 帧 GBN 选择重传 SR
发送窗口 $W_S=1$ $1<W_S\le2^m-1$ 通常 $W_S\le2^{m-1}$
接收窗口 $W_R=1$ $W_R=1$ $W_R>1$,可缓存失序帧
确认方式 每帧确认 累计确认 逐帧/选择确认
计时器 一次只等待一个帧 通常为最早未确认帧计时 每个未确认帧分别计时
超时重传 重传当前帧 从最早未确认帧起,重传其后所有已发送未确认帧 只重传超时或被选择拒绝的帧
失序帧处理 不涉及流水失序 丢弃失序帧 缓存接收窗口内的失序帧

其中 $m$ 为帧序号位数,序号空间大小为 $2^m$。

1.1.1 窗口与序号空间

GBN 使用累计确认且接收窗口为 1,为避免新旧帧混淆:

$$W_S\le2^m-1$$

SR 的接收方会缓存失序帧,发送与接收窗口不能在循环序号空间中重叠:

$$W_S+W_R\le2^m$$

若 SR 的发送窗口和接收窗口相等,则:

$$W_S=W_R\le2^{m-1}$$

1.2 判断重传范围

1.2.1 GBN:看最高累计确认

ACK i 的编号语义必须先服从题目约定:有的教材用它表示“帧 $i$ 及以前均已确认”,也有协议用它表示“下一帧期待编号为 $i$”,此时实际累计确认到 $i-1$。本题采用前一种约定,因此 GBN 的 ACK i 表示截至帧 $i$ 的数据均已按序收到。即使发送方没有分别收到较早的 ACK,只要收到了更大的累计 ACK,较早帧也视为已确认。

若最早未确认帧超时,发送方从该帧开始,把其后所有已经发出但未被累计确认的帧全部重传。

1.2.2 SR:看各帧自身状态

SR 的每个帧独立确认、独立计时。某帧超时只重传该帧;其他已经正确到达或仍未超时的帧不随它一起重传。

1.3 历年真题

1.3.1 2009 年:GBN 累计确认

发送方已经发送编号 0-7 的帧。定时器超时时,只收到 0、2、3 号帧的确认。

由于 GBN 使用累计确认,收到 ACK 3 就表示 0-3 均已正确收到。当前未确认的已发送帧是:

4、5、6、7

发送方需从 4 号帧开始后退重传,共 4 帧。

答案:C,4 帧。

1.3.2 2011 年:SR 选择重传

发送方已发送 0-3 号帧,目前只收到 1 号帧的确认,0 号帧和 2 号帧依次超时。

SR 只重传各自超时的帧,因此需要重传:

0、2

共 2 帧;1 号帧已经确认,3 号帧尚未说明超时,均不重传。

答案:B,2 帧。

1.4 易错点

  • GBN 的累计确认以收到的最高有效 ACK 为准,不要求每个较小 ACK 都单独到达。
  • ACK i 究竟确认到 $i$ 还是期待 $i$ 并非跨教材统一;先读题目定义,再确定窗口左边界。
  • GBN 不是只重传丢失的那一帧,而是从最早未确认帧起“后退 N 帧”。
  • SR 不使用 GBN 式的累计重传;它可缓存失序帧,只重传具体丢失/超时帧。
  • “已发送但未确认”不等于“都要立即重传”,还要看协议和哪些定时器已经超时。
  • GBN 的窗口上限是 $2^m-1$,SR 等大收发窗口的上限是 $2^{m-1}$,不要混用。

相关知识

1.5 本节复盘

  • 停止等待协议的发送、接收窗口均为 1,每发一帧必须等待确认。
  • GBN 接收窗口为 1、使用累计确认;最早未确认帧超时后重传它及其后的所有未确认帧。
  • SR 对帧逐个确认和计时,可缓存失序帧,只重传发生超时的具体帧。
  • 2009 年 GBN 题收到最高 ACK 3 后重传 4-7,共 4 帧;2011 年 SR 题只重传 0、2,共 2 帧。