tcp状态转换图
本章我们详细介绍一下tcp状态转换图,以进一步了解tcp协议。
1. TCP连接状态转换图
说明:
1) 上图中TIME_WAIT
是出现在主动关闭的一方,有可能是客户端
也有可能是服务端
;而CLOSE_WAIT
是出现在被动关闭的一方,有可能是客户端
也有可能是服务端
.
2. 关于同时打开与同时关闭
1) 同时打开
两个应用程序同时执行主动打开的情况是可能的,虽然发生的可能性较低。每一端都发送一个SYN,并传递给对方,且每一端都使用对端所知的端口作为本地端口。
例如:主机a
中一应用程序使用7777作为本地端口,并连接到主机b
8888端口做主动打开; 同时主机b
中一应用程序使用8888作为本地端口,并连接到主机a
7777端口做主动打开。
如下图所示:
tcp协议在遇到这种情况时,只会打开一条连接。这个连接的建立过程需要4次数据交换,而一个典型的连接建立只需要3次交换(即3次握手)
注: 多数伯克利版的tcp/ip实现并不支持同时打开。
2) 同时关闭
如果应用程序同时发送FIN,则在发送后会首先进入FIN_WAIT_1
状态。在收到对端的FIN后,回复一个ACK,会进入CLOSING状态。在收到对端的ACK后,进入TIME_WAIT
状态。这种情况称为同时关闭。
如下图所示:
同时关闭也需要有4次报文交换,与典型的关闭相同。
[参看]