本章我们详细介绍一下tcp状态转换图,以进一步了解tcp协议。

1. TCP连接状态转换图

tcp-connection

tcpip-state-transition

说明:

1) 上图中TIME_WAIT是出现在主动关闭的一方,有可能是客户端也有可能是服务端;而CLOSE_WAIT是出现在被动关闭的一方,有可能是客户端也有可能是服务端.

2. 关于同时打开与同时关闭

1) 同时打开

两个应用程序同时执行主动打开的情况是可能的,虽然发生的可能性较低。每一端都发送一个SYN,并传递给对方,且每一端都使用对端所知的端口作为本地端口。

例如:主机a中一应用程序使用7777作为本地端口,并连接到主机b8888端口做主动打开; 同时主机b中一应用程序使用8888作为本地端口,并连接到主机a7777端口做主动打开。

如下图所示:

tcpip-simu-open

tcp协议在遇到这种情况时,只会打开一条连接。这个连接的建立过程需要4次数据交换,而一个典型的连接建立只需要3次交换(即3次握手)

注: 多数伯克利版的tcp/ip实现并不支持同时打开。

2) 同时关闭

如果应用程序同时发送FIN,则在发送后会首先进入FIN_WAIT_1状态。在收到对端的FIN后,回复一个ACK,会进入CLOSING状态。在收到对端的ACK后,进入TIME_WAIT状态。这种情况称为同时关闭。

如下图所示:

tcpip-simu-close

同时关闭也需要有4次报文交换,与典型的关闭相同。



[参看]

  1. TCP状态转换图

  2. tcp 11种状态转换图

  3. 【Unix 网络编程】TCP状态转换图详解

  4. UDP SOCKET编程中的connect()

  5. tcp/ip常见问题

  6. Unix Network Programing

  7. CLOSE_WAIT问题-TCP