考虑运行在两台不同机器上的 TCP 客户端和 TCP 服务器。完成数据传输后,TCP 客户端调用close终止连接,并向TCP 服务器发送一个FIN 段。服务器端 TCP 通过发送客户端 TCP 接收到的 ACK 进行响应。根据 TCP 连接状态图(RFC 793),客户端 TCP 连接在哪种状态下等待来自服务器端 TCP 的 FIN?
(A)最后确认
(B)时间等待
(C) FIN-WAIT-1
(D) FIN-WAIT-2答案: (D)
说明: Client已经向服务器发送了FIN段,移动到FIN-WAIT-1,即等待自己的ACK
鳍段。这里有两种可能性:
- 如果客户端收到其 FIN 的 ACK,则客户端将移动到 FIN-WAIT-2 并等待匹配
来自服务器端的 FIN。客户端收到服务器的 FIN 后,会发送 ACK 并移动到 TIME-WAIT
状态。 - 客户端已发送 FIN 段,但直到此时才收到 ACK。客户端收到 FIN 而不是 ACK
从服务器端。客户端将确认此 FIN 并进入 CLOSE 状态。这里客户端将等待
其自己的 FIN 的 ACK。收到 ACK 后,客户端将进入 TIME-WAIT 状态。
在这里,我们遇到了第一种情况。所以,答案是(D)。
这个问题的测验