这一块在 408 里非常容易“越学越乱”,因为题目会把停止-等待、滑动窗口、ARQ、发送窗口、接收窗口、序号位数、信道利用率这些内容混在一起考。真正把主线理顺之后,会发现它们并不是零散知识点,而是同一个问题的不同侧面。
先把最核心的一句话放在前面:
数据链路层一方面要解决“别把接收方压垮”,这叫流量控制;另一方面要解决“帧丢了、错了要能恢复”,这叫可靠传输。
而停止-等待、GBN、SR,本质上都是“流量控制 + 差错控制 + 序号机制”结合后的具体协议形式。
所以这部分最好的复习方式,不是一个个背协议,而是沿着下面这条链去理解:
发送得多快 → 接收方能不能跟上 → 出错后怎么补救 → 需要多大的窗口 → 需要多少位编号 → 最终信道利用率是多少。
先把几个最容易混淆的概念拆开
停止-等待“流量控制”与停止-等待“协议”不是完全一回事
很多题会默认把这两个混着说,但严格一点看,它们有层次差别。
停止-等待流量控制,强调的是发送方每发 1 帧,就先停下来,等对方“允许”再发下一帧。它解决的是“别发太快”。
停止-等待协议如果再加上确认、超时重传、帧编号,那么它就变成了停止-等待 ARQ。它不仅能控流,还能保证可靠传输。
也就是说:
停止-等待流量控制 = 最朴素的“发一帧等一帧”
停止-等待 ARQ = 在“发一帧等一帧”的基础上,加上确认、编号、超时重传
在考题里,默认说“停止-等待协议”,通常就是后者。
ARQ 的三种典型协议,其实就是三种窗口模型
ARQ 就是自动重传请求。数据链路层常考的 ARQ 有三类:
- 停止-等待协议
- 后退 N 帧协议 GBN
- 选择重传协议 SR
如果从“滑动窗口”的视角看,它们可以统一理解成:
- 停止-等待:单帧滑动窗口
- GBN:多帧滑动窗口,但接收方很保守
- SR:多帧滑动窗口,接收方也有缓存能力
这三者最该比较的,不是名字,而是下面这几项。
| 协议 | 发送窗口 W_T | 接收窗口 W_R | 确认方式 | 出错后的处理 |
|---|---|---|---|---|
| 停止-等待 | 1 | 1 | 逐帧确认 | 重传当前帧 |
| GBN | >1 | 1 | 累计确认 | 从出错帧开始,把后面的已发帧一起重传 |
| SR | >1 | >1 | 单独确认 | 只重传出错或丢失的那几帧 |
这张表几乎是这一章最重要的区分表。
三种协议到底差在哪
停止-等待:最简单,但效率最低
发送方每次只能有 1 帧处于“已发送但未确认”状态。
所以它的发送窗口和接收窗口都等于 1。
优点是结构简单。
缺点是传播时延稍微一大,发送方大部分时间都在“等”,信道利用率很低。
所以停止-等待的本质缺陷,不是“不可靠”,而是“太慢”。
GBN:发送方能连续发,但接收方只认按序到达
GBN 的核心特点是:
- 发送方窗口可以大于 1,可以连续发送多个帧
- 接收方窗口固定为 1
- 接收方只接收按序到达的帧
- 如果某一帧丢失或出错,那么后面即使到达了,接收方也直接丢弃
- 确认采用累计确认
所谓累计确认,可以这样理解:
如果已经确认到 4 号帧,那么通常意味着 0、1、2、3、4 都已经按序正确收到。
GBN 的最大问题是:
一旦中间某帧出错,后面很多本来已经发送出去的帧也要跟着重传,所以出错时代价大。
SR:发送方连续发,接收方也能缓存乱序帧
SR 是在 GBN 基础上“更聪明”的版本:
- 接收方窗口不再是 1,而是大于 1
- 乱序到达的帧可以先收下、缓存起来
- 每一帧单独确认
- 真正丢哪一帧,就只重传哪一帧
所以 SR 在误码率较高时效率明显比 GBN 高。
但代价是协议实现更复杂,因为接收方要缓存乱序帧,发送方也通常要给每一帧单独定时。
这里有个非常重要的考试陷阱:
SR 的优势主要体现在“出错后更省重传”,不是“无差错时信道利用率一定比 GBN 高”。
在同样的序号位数限制下,GBN 的发送窗口上限往往比 SR 更大,所以在“无差错、只看最大流水线能力”时,GBN 的最大发送方利用率反而可能高于 SR。
这是特别爱出选择题的点。
序号位数和窗口大小,才是这部分最核心的硬约束
这部分最容易考公式,也最容易错。
1. 停止-等待协议
发送窗口和接收窗口都为 1。
通常只需要 1 位序号就够了,0 和 1 交替使用。
为什么要编号?
因为如果确认丢失,发送方会重发上一帧;接收方必须能分辨“这是重传的旧帧”还是“新帧”。
2. GBN 协议
设帧序号字段为 n 位,则序号空间大小为 2^n。
GBN 中:
- 接收窗口
W_R = 1 - 发送窗口必须满足
W_T <= 2^n - 1
这个式子必须会背,也必须理解。
为什么不是 2^n?
因为必须至少留出 1 个编号空位,否则一旦序号回绕,接收方就可能分不清某个到来的帧到底是“新一轮的帧”还是“老帧的重传”。
所以 GBN 的记忆法很简单:
W_R = 1,W_T 最大只能到 2^n - 1
3. SR 协议
SR 的限制更严格。
一般条件是:
W_T + W_R <= 2^n
如果题目默认发送窗口和接收窗口相等,也就是 W_T = W_R,那么就得到:
W_T <= 2^(n-1),W_R <= 2^(n-1)
这就是为什么大家常背:
SR 中发送窗口、接收窗口最大都不能超过序号空间的一半。
原因也一样,都是为了防止序号回绕后,新旧帧混淆。
信道利用率怎么统一看
这一部分建议直接统一成一个模型,不要三套三套背。
设:
- 数据帧发送时延为
T_d - 确认帧发送时延为
T_ack - 单向传播时延为
T_p - 发送窗口大小为
W
那么:
停止-等待协议
U = T_d / (T_d + 2T_p + T_ack)
如果确认帧很短,可以忽略不计,那么:
U = T_d / (T_d + 2T_p)
如果再设 a = T_p / T_d,则:
U = 1 / (1 + 2a)
滑动窗口协议(GBN、SR)在无差错时
U = min { 1, W × T_d / (T_d + 2T_p + T_ack) }
如果确认帧发送时延忽略不计,则变成:
U = min { 1, W / (1 + 2a) }
这个式子非常重要,因为它说明了一个本质:
在无差错情况下,GBN 和 SR 的利用率表达式形式是一样的。
差别不在公式形式,而在于两者允许的最大窗口不同、出错后的重传代价不同。
哪些协议理论上可以达到 100% 利用率
标准考法下,答案是:
滑动窗口协议可以理论上达到 100%,也就是 GBN 和 SR 可以。
停止-等待通常做不到,因为它每发一帧就要等确认。
更准确一点说,只要窗口足够大,满足:
W × T_d >= T_d + 2T_p + T_ack
发送方就可以一直连续发送,不必停下来等,利用率就能达到 100%。
下面把你列的题逐题吃透
你给的题里有几处是语音转写后有点模糊,我按 408 里最常见的原题语境来理解并作答。对明显有单位疑点的题,我会顺便指出。
例题 1:停止-等待协议下,最大利用率 80%,数据帧长度至少多少
题意理解:
- 数据传输速率:4 KB/s
- 单向传播时延:30 ms
- 停止-等待协议
- 最大信道利用率 80%
- 求数据帧长至少多少
解题思路
停止-等待协议,通常忽略确认帧发送时延时:
U = T_d / (T_d + 2T_p)
代入:
0.8 = T_d / (T_d + 60 ms)
解得:
0.8T_d + 48 = T_d
0.2T_d = 48
T_d = 240 ms
再由
帧长 = 速率 × 发送时延
得到:
L = 4 KB/s × 0.24 s = 0.96 KB
所以最少需要:
960 B
本题结论
数据帧长度至少为 960 B
易错点
最容易错在两处:
第一,传播时延是单向 30 ms,所以往返要乘 2。
第二,停止-等待里求利用率,核心不是“发得多快”,而是“发一帧之后等多久”。
例题 2:GBN 已发 0 到 6,超时后只收到对 1、2、4 号帧的确认,要重传多少帧
这道题的关键在于:GBN 采用累计确认。
如果已经收到了对 4 号帧的确认,那么通常表示 0 到 4 号帧都已被确认。
因此当前未确认的就是 5、6 两帧。
一旦超时,GBN 要从最早未确认帧开始,把后面已发未确认的帧全部重传。
所以要重传:
5、6 两帧,共 2 帧
本题结论
需要重传 2 帧
易错点
很多人会把“收到 1、2、4 的确认”理解成只有 1、2、4 被分别确认。
但 GBN 不是 SR,GBN 的核心是累计确认,看到较大的确认号时,要想到它把前面按序的一串都确认掉了。
例题 3:GBN 中发送窗口为 32,至少需要多少位序列号
GBN 的约束是:
W_T <= 2^n - 1
已知 W_T = 32,求最小 n。
有:
2^n - 1 >= 32
即:
2^n >= 33
所以:
2^5 = 32不够2^6 = 64可以
本题结论
至少需要 6 位序列号
例题 4:GBN 协议中,帧编号字段为 7 位,发送窗口最大长度是多少
GBN 最大发送窗口:
W_T(max) = 2^n - 1
代入 n = 7:
W_T(max) = 2^7 - 1 = 127
本题结论
最大发送窗口为 127
例题 5:SR 协议中,若采用 5 位帧序号,最大接收窗口是多少
SR 的常见结论是:
W_R(max) = 2^(n-1)
代入 n = 5:
W_R(max) = 2^4 = 16
本题结论
最大接收窗口为 16
例题 6:窗口大小为 n 的滑动窗口,最多可以有多少帧已发送但未确认
这个题本质上是在问发送窗口的定义。
发送窗口大小是多少,就最多允许多少帧处于“已发送但还没收到确认”的状态。
本题结论
最多有 n 帧已发送但未确认
易错点
不要把“窗口里可发送的帧”和“序号总空间”混在一起。
这个题问的是发送方流水线里最多能压多少个未确认帧,答案就是发送窗口大小本身。
例题 7:SR 协议中,4 比特编号,接收窗口为 7,发送窗口最大是多少
SR 的一般约束条件是:
W_T + W_R <= 2^n
题中:
n = 4,所以序号空间为16W_R = 7
所以:
W_T <= 16 - 7 = 9
本题结论
发送窗口最大为 9
补充说明
如果题目额外说明“发送窗口和接收窗口相等”,那就不能这么算了,那时应取二者都不超过 8,并且若已知 W_R = 7,则 W_T = 7。
但按你给出的表述,最标准的解法就是:
W_T + W_R <= 2^n,所以最大发送窗口是 9
例题 8:3 比特编号,利用率大于 80%,AB 之间采用什么协议
你这道题的口述里有明显的转写/单位疑点,我先按你给出的数值直接验算一下:
- 速率:20 KB/s
- 数据帧和确认帧都为 2000 B
- 往返传播时延 1400 ms
- 3 比特编号
则:
T_d = 2000 / 20000 = 0.1 s = 100 ms
T_ack = 100 ms
等待一个确认回来需要:
T_d + RTT传播 + T_ack = 100 + 1400 + 100 = 1600 ms
若要利用率大于 80%,需要:
W × 100 / 1600 > 0.8
得到:
W > 12.8
也就是至少要 W = 13
但 3 比特编号下:
- GBN 最大窗口
7 - SR 若发收窗口相等,最大只能
4
所以按你现在给出的数值,没有任何标准协议能做到大于 80%。
本题结论
按你当前给出的数据,这道题无解,说明原题大概率有单位或数字转写错误。
这题真正的价值
这类题不要急着猜协议,而要先算“达到目标利用率至少需要多大窗口”,再看序号位数是否允许。
这一步一旦不满足,就应该立刻意识到题目数据有问题,而不是强行选 GBN 或 SR。
例题 9:理论上可以达到 100% 通信利用率的是哪些协议
本题结论
滑动窗口协议可以理论上达到 100%,即 GBN 和 SR。
停止-等待一般不行。
易错点
不要机械地认为“SR 一定比 GBN 利用率高”。
在无差错情况下,两者的公式形式一样,只是允许的窗口上限不同。
SR 的真正优势是出错后只重传少量帧。
例题 10:GBN 中,速率 16 KB/s,单向传播 270 ms,帧长 128~512 B,确认帧与数据帧等长,最高利用率下至少需要几位序号
题目说“为使信道利用率达到最高”,那显然应该取最大帧长 512 B,因为帧越长,发送时延越大,越容易填满传播等待时间。
取 L = 512 B
若按常规考试近似:
T_d = 512 / 16000 = 0.032 s = 32 ms
确认帧等长,所以:
T_ack = 32 ms
单向传播 270 ms,所以往返传播:
2T_p = 540 ms
要达到最高利用率,也就是达到 100%,需要满足:
W × T_d >= T_d + 2T_p + T_ack
即:
W × 32 >= 32 + 540 + 32 = 604
所以:
W >= 18.875
故至少需要:
W = 19
GBN 中要求:
W_T <= 2^n - 1
所以:
2^n - 1 >= 19
有:
2^4 - 1 = 15不够2^5 - 1 = 31可以
本题结论
至少需要 5 位序号
易错点
这道题特别容易错在“帧长范围 128~512 B 该取哪个”。
既然题目说“使利用率达到最高”,就一定取最大帧长 512 B。
例题 11:3 比特编号,发送窗口大小为 5,接收窗口最大是多少
这题本质还是用:
W_T + W_R <= 2^n
已知:
n = 3,所以序号空间为8W_T = 5
所以:
W_R <= 8 - 5 = 3
本题结论
接收窗口最大为 3
例题 12:3 比特编号下,停止-等待、GBN、SR 的最大信道利用率关系
设三者最大信道利用率分别为 U_SW、U_GBN、U_SR。
当帧序号位数为 3 时:
- 停止-等待:发送窗口
1 - GBN:发送窗口最大
7 - SR:若发送窗口和接收窗口相等,则发送窗口最大
4
在无差错、忽略确认帧长时:
U_SW = min{1, 1 / (1 + 2a)}U_GBN = min{1, 7 / (1 + 2a)}U_SR = min{1, 4 / (1 + 2a)}
因此一般关系为:
U_GBN >= U_SR >= U_SW
如果传播时延足够大,通常会严格表现为:
U_GBN > U_SR > U_SW
本题结论
一般应选 U_GBN >= U_SR >= U_SW
易错点
很多人凭直觉会选“SR 最大”。
这是错误的。
SR 的强项是出错时代价小,不是固定序号位数下最大流水线一定最长。
例题 13:50 kb/s,帧长 1 kbit,捎带确认,3 bit 序号,单向传播 270 ms,求三种协议的最大利用率
已知:
- 传输速率
R = 50 kb/s - 数据帧长
L = 1 kbit - 所以发送时延
T_d = 1000 / 50000 = 0.02 s = 20 ms
- 单向传播时延
T_p = 270 ms - 往返传播时延
2T_p = 540 ms
因为题目说采用捎带确认,所以确认帧发送时间不单独计入。
1)停止-等待协议
U = T_d / (T_d + 2T_p)
代入:
U = 20 / (20 + 540) = 20 / 560 = 1 / 28
所以:
U = 3.57%
2)GBN 协议
3 bit 序号,GBN 最大发送窗口:
W = 2^3 - 1 = 7
因此:
U = min{1, 7 × 20 / 560} = 140 / 560 = 0.25
所以:
U = 25%
3)SR 协议(发送窗口和接收窗口相等)
3 bit 序号时,SR 最大窗口:
W = 2^(3-1) = 4
因此:
U = min{1, 4 × 20 / 560} = 80 / 560 = 1 / 7
所以:
U = 14.29%
本题结论
- 停止-等待:3.57%
- GBN:25%
- SR:14.29%
这题真正考什么
这题最想考的不是计算,而是让人真正明白:
在给定序号位数、且发送窗口和接收窗口相等的条件下,
GBN 的最大无差错利用率确实可能高于 SR。
这是很多人第一次做会错的地方。
这部分最容易出错的几个陷阱,建议单独记住
第一类错误:把“GBN 更高效”和“SR 更高效”机械化
应该这样记:
- 无差错时:两者公式形式相同,谁窗口更大谁流水线更长
- 有差错时:SR 只重传错帧,因此效率通常优于 GBN
所以“谁更高效”必须看题目到底在比什么。
第二类错误:把发送窗口限制公式记混
直接强记成三条最稳:
- 停止-等待:
W_T = 1,W_R = 1 - GBN:
W_R = 1,W_T <= 2^n - 1 - SR:
W_T + W_R <= 2^n- 若发收窗口相等,则都不超过
2^(n-1)
- 若发收窗口相等,则都不超过
第三类错误:利用率公式里忘记传播时延要往返
只要协议里“发出去后要等确认回来”,那等待里就一定会出现往返传播时延。
所以经常是 2T_p,这一点很容易漏。
第四类错误:看到“接收窗口”还在按 GBN 思维做
GBN 的接收窗口固定就是 1。
只要题里接收方能缓存失序帧、能有大于 1 的接收窗口,基本就是 SR 的思路。
最后把这部分压缩成一个真正做题时可直接调用的判断框架
遇到这类题,建议固定按这 4 步走:
第一步:先辨协议类型
先看是:
- 停止-等待
- GBN
- SR
不要一上来就算。
第二步:立刻写出窗口约束
看到序号位数就立刻想到:
- GBN:
W_T <= 2^n - 1 - SR:
W_T + W_R <= 2^n
这是解大多数题的起点。
第三步:再看利用率公式
若考利用率,先求:
T_dT_ackT_p
再代:
- 停止-等待:
U = T_d / (T_d + 2T_p + T_ack) - 滑动窗口:
U = min{1, W × T_d / (T_d + 2T_p + T_ack)}
第四步:最后结合协议特性判断
例如:
- GBN 超时后重传一串
- SR 只重传个别帧
- GBN 累计确认
- SR 单独确认
- GBN 接收窗口固定为 1
这一步通常决定选择题能不能选对。



