13.TCP协议-同时关闭

有同学会问,为什么不写同时打开?(同时打开指的是两端都是服务器,两端同时向对方建立连接请求)。

一方面,在我们实际生活中几乎遇不到;另一方面,很多操作系统实际都不能正确的支持同时打开,所以,这里就不写了,如果你对这个很感兴趣,请参考《TCP/IP 详解卷1:协议》的 18.8 小节。

1. 同时关闭

同时关闭,指的是已建立连接的两端同时发起主动关闭

TCP 协议允许这种事情发生。见图 1.


13.TCP协议-同时关闭 
图1 同时关闭 

应用层的进程,同时发出关闭命令,两端均从 ESTABLISHED 变为了 FIN_WAIT1 状态,同时发送 FIN 段给对方。

然而发送完 FIN 段后,并未收到对端的 ack 而是对方发来的一个 FIN 段,于是直接进入 CLOSING 状态,CLOSING 状态是一个新状态,之前我们没有遇到过,只在 TCP 状态机图里看到过。现在你要记住,CLOSING 状态是由于同时关闭导致的。

又过了一会儿,TCP 接收到 ack 后,进入 TIME_WAIT 状态。

因为这种情况很罕见,实验也不好演示,所以大家只要知道就行了。