主页 > 开源代码  > 

tcp连接的11种状态及常见问题。

tcp连接的11种状态及常见问题。

tcp链接整体流程,如下图所示:

TCP协议在连接的建立和终止过程中涉及11种状态,这些状态反映了连接的不同阶段。以下是每种状态的详细说明:


1. CLOSED 初始状态,表示没有活动的连接或连接已完全关闭。当应用程序关闭连接或终止后进入此状态。
2. LISTEN 服务器端状态,表示正在等待客户端的连接请求(SYN报文)。服务器通过调用listen()进入此状态,准备接受新的连接。
3. SYN_SENT 客户端状态,客户端发送SYN报文后进入此状态,等待服务器的SYN-ACK响应。触发条件:客户端调用connect()发起连接。
4. SYN_RECEIVED (SYN_RCVD) 服务器端状态,服务器收到客户端的SYN报文后,发送SYN-ACK并等待客户端的ACK确认。若未收到ACK,服务器可能重传SYN-ACK。
5. ESTABLISHED 连接已建立,双方可以自由传输数据。客户端收到服务器的SYN-ACK后进入此状态;服务器收到客户端的ACK后也进入此状态。
6. FIN_WAIT_1 主动关闭方(如客户端) 发送FIN报文后进入此状态,等待对方的ACK或FIN响应。可能直接进入FIN_WAIT_2(收到ACK)或CLOSING(同时收到FIN)。
7. FIN_WAIT_2 主动关闭方 已收到对FIN的ACK,等待对方发送FIN报文以终止连接。此时仍可能接收数据,但不再发送数据。
8. CLOSE_WAIT 被动关闭方(如服务器) 收到对方的FIN报文后进入此状态,发送ACK确认,并等待应用程序关闭连接。应用程序需调用close()发送FIN以进入后续状态。
9. CLOSING 罕见状态,双方同时发起关闭(均发送FIN报文),等待对方的ACK。当双方同时处于FIN_WAIT_1并交换FIN时进入此状态。
10. LAST_ACK 被动关闭方 发送自己的FIN报文后进入此状态,等待对方的最终ACK确认。收到ACK后进入CLOSED状态。
11. TIME_WAIT 主动关闭方 收到对方的FIN并发送ACK后进入此状态,等待2MSL(最大报文生存时间)以确保所有报文消失。防止旧连接的延迟报文干扰新连接。
状态转换图

连接建立(三次握手) CLOSED → SYN_SENT → ESTABLISHED(客户端) CLOSED → LISTEN → SYN_RCVD → ESTABLISHED(服务器)

连接终止(四次挥手) ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED(主动关闭方) ESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSED(被动关闭方)


关键点 TIME_WAIT 是主动关闭方的最终状态,确保可靠终止。CLOSING 和 LAST_ACK 处理异常关闭场景。实际应用中,可通过netstat命令查看TCP连接状态。

理解这些状态有助于诊断网络问题(如连接泄漏、端口占用等)。

标签:

tcp连接的11种状态及常见问题。由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“tcp连接的11种状态及常见问题。