Appearance
题目
对于滑动窗口协议,如果分组序号采用 3 比特编号,发送窗口大小为 5,则接收窗口最大是( )。
错因
A
按""等更紧的约束推:,得 2。错的根源:把约束记成了"严格小于 "——其实正确的滑动窗口约束是 (取等也合法),不需要再 −1。多扣 1 就把答案压低到 2。
C
只用了"接收窗口上限 "这一条独立约束,没考虑发送窗口的影响。这条上限本身没错(接收窗口确实不能超过序号空间的一半,否则在重传场景下分不清新旧帧),但本题发送窗口 已经接近序号空间 的极限——必须再叠加 这条联合约束:,比 4 更紧。错的根源:忘了双约束并存时要取较紧的那条。
D
误以为接收窗口可以等于发送窗口()——但接收窗口本身就有上限 ,5 已经超出了。错的根源:把"对称"想象成无条件成立,没意识到接收窗口的"序号空间一半"硬约束。
总解析
第一步:明确序号空间
3 比特编号 → 序号空间 。
第二步:列出滑动窗口协议的两条核心约束
对于使用接收窗口缓存乱序帧的滑动窗口协议(典型如 SR),有两条并存的约束:
| 约束 | 含义 | 本题代入 |
|---|---|---|
| ① | 接收窗口本身上限:不能超过序号空间一半 | |
| ② | 联合约束:发送方重传与接收方期待在 mod 下不重叠 |
第三步:取较紧的那条
两条约束必须同时满足,所以取较紧(数值较小)的那条作为最终上限:
为什么 ② 是必要的?
考虑最坏场景:发送方发出 5 个帧 [a, a+1, a+2, a+3, a+4](mod 8),所有 ACK 全丢,发送方等不到 ACK 后重传同样 5 个帧。
- 接收方下一轮期待的"新一组"序号 = (mod 8)
- 若 :期待集合 = (mod 8)—— a 与重传的旧帧重叠!接收方收到序号 的帧时无法判断是"新一轮的新帧 "还是"上一轮重传的旧帧 ",产生歧义
- 若 :期待集合 = (mod 8)—— 不与 相交 ✓
所以本题 不安全,必须 。
第四步:核对
最大 = 3,命中选项 B。
最终答案是 B(3)。
编者注(生僻术语):序号回卷(sequence number wrap-around)防护是滑动窗口协议设计的关键考量——序号字段位数有限(n 比特,仅 个值循环使用),如果允许接收窗口和发送窗口加起来超过 ,重传场景下接收方无法区分新旧帧。所以一般教材把约束写成 ;又因 SR 协议默认收发对称(),单边约束就是 。本题发送窗口被故意取得偏大(),就是为了让"联合约束"成为更紧的那一条,考查能否同时考虑两条约束。