Skip to content

2022年 408 计算机网络 第 39 题

计算机网络2022年选择题2分

题目

假设客户 C 和服务器 S 已建立一个 TCP 连接,通信往返时间 RTT = 50 ms,最长报文段寿命 MSL = 800 ms,数据传输结束后,C 主动请求断开连接。若从 C 主动向 S 发出 FIN 段时刻算起,则 C 和 S 进入 CLOSED 状态所需的时间至少分别是( )。

错因

A

C 的时间算成 850 ms = 50 ms(挥手)+ 800 ms(1 MSL)—— 把 TIME_WAIT 的等待时间记成 1 MSL(800 ms)。实际 TIME_WAIT 是 2 MSL = 1600 ms,C 应该 = 50 + 1600 = 1650 ms。S 的时间 50 ms 也错——应是 1.5 RTT = 75 ms(C 的 ACK 走半 RTT 才到 S)。

B

C 时间 1650 ms 对(2 MSL 算法),但 S 时间 50 ms 错——把 S 的时间算成 1 RTT。实际 S 在收到 C 的 ACK 后立即 CLOSED,C 的 ACK 是 1.5 RTT 后到 S,所以 S 用了 1.5 RTT = 75 ms。

C

C 时间 850 ms 错(同 A 的错,TIME_WAIT 当成 1 MSL),S 时间 75 ms 对。

总解析

第一步:列出 TCP 四次挥手时序

设 t = 0 时 C 发出 FIN,时间向右推进。

时刻事件C 状态S 状态
0C 发 FINFIN_WAIT_1ESTABLISHED
0.5 RTT = 25 msS 收 FIN,发 ACK + FIN(合并)FIN_WAIT_1LAST_ACK
1 RTT = 50 msC 收 ACK + FIN,发 ACKTIME_WAITLAST_ACK
1.5 RTT = 75 msS 收到 C 的 ACKTIME_WAITCLOSED
50 ms + 2 MSL = 1650 msC 等待 2 MSL 结束CLOSEDCLOSED

第二步:算 C 进入 CLOSED 的时间

C 在 1 RTT = 50 ms 时进入 TIME_WAIT,然后等待 2 MSL = 1600 ms

第三步:算 S 进入 CLOSED 的时间

S 在 LAST_ACK 等 C 的 ACK,C 的 ACK 在 1 RTT 时刻发出,传到 S 用 0.5 RTT,所以 S 在 1.5 RTT = 75 ms 收到 ACK 立即进入 CLOSED:

第四步:核对

选项C 时间S 时间判定
A85050双错
B165050S 时间错
C85075C 时间错
D165075正确

最终答案是 D(1650 ms, 75 ms)

编者注(生僻术语):TIME_WAIT 等 2 MSL 是为了双重保险

  1. 如果最后那个 ACK 丢了,对端 LAST_ACK 状态会重传 FIN(最坏 1 MSL 后到达本端);本端在 TIME_WAIT 期间还能收到这个重传 FIN 并回复新 ACK(再 1 MSL 后到达对端)—— 共 2 MSL 覆盖最坏情形
  2. 让本次连接所有的"在飞"分组在网络中超时消失,避免新连接复用四元组时收到旧分组造成混乱

主动关闭方独自承担 2 MSL 的等待,被动方收到 ACK 即可立刻 CLOSED。

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数