快速了解 TCP 连接的 11 种状态及其转换
本文意在用简短的文字总结一下 TCP 的 11 种状态及其转换过程。
相关文章
TCP 的 11 种状态
1. CLOSED
• 表示连接处于关闭状态。
• 这是 TCP 连接的初始状态或连接终止后的状态。
• 常见场景:服务端程序尚未启动监听,或者客户端和服务端都已完成连接释放。
2. LISTEN
• 服务器端状态,表示服务器在监听某个端口,等待客户端发起连接。
• 常见于服务端主动调用
listen()函数时。
3. SYN-SENT
• 客户端发起连接请求后进入此状态。
• 表示已经发送了 SYN(同步序号)包,等待服务器的响应。
• 常见于客户端调用
connect()函数后。
4. SYN-RECEIVED
• 服务端收到客户端的 SYN 包后,回复 SYN+ACK(同步序号+确认)包,并进入此状态。
• 等待客户端的最终确认(ACK)。
5. ESTABLISHED
• 表示连接已成功建立,客户端和服务端可以正常发送和接收数据。
• 这是 TCP 连接的稳定状态,也是数据传输的主要阶段。
6. FIN-WAIT-1
• 主动关闭连接的一方进入此状态,表示发送了 FIN(结束)包,等待对方的 ACK。
• 常见于调用
close()函数的程序。
7. FIN-WAIT-2
• 主动关闭的一方收到对方的 ACK 后进入此状态,等待对方发送 FIN。
• 表示本方已完成数据发送。
8. CLOSE-WAIT
• 被动关闭的一方收到对方的 FIN 后进入此状态,表示对方已关闭数据发送。
• 等待本方处理完剩余任务并发送 FIN。
9. CLOSING
• 当双方几乎同时发起关闭请求时会进入此状态。
• 表示双方都发送了 FIN,但尚未收到对方的 ACK。
• 此状态比较少见。
10. LAST-ACK
• 被动关闭的一方发送 FIN 后进入此状态,等待对方的 ACK。
• 收到 ACK 后即可进入 CLOSED 状态。
11. TIME-WAIT
• 主动关闭的一方在收到对方的 FIN 和 ACK 后进入此状态。
• 等待一段时间(通常是 2MSL,两个最大报文段生存时间),以确保对方收到 ACK,防止旧数据包干扰。
TCP 状态转换流程
三次握手(连接建立)
TCP 通过三次握手建立可靠连接,具体流程如下:
1. CLOSED → SYN-SENT(客户端发起连接)
• 客户端发送 SYN 包,并进入 SYN-SENT 状态。
2. LISTEN → SYN-RECEIVED(服务器接收连接请求)
• 服务器收到 SYN 包后,回复 SYN+ACK,并进入 SYN-RECEIVED 状态。
3. SYN-SENT → ESTABLISHED(客户端确认连接)
• 客户端收到 SYN+ACK 后,回复 ACK,进入 ESTABLISHED 状态。
4. SYN-RECEIVED → ESTABLISHED(服务器确认连接)
• 服务器收到 ACK 后,进入 ESTABLISHED 状态。
此时连接建立完成,双方可以开始数据通信。
四次挥手(连接释放)
TCP 通过四次挥手确保连接安全关闭,具体流程如下:
1. ESTABLISHED → FIN-WAIT-1(主动关闭方发送 FIN)
• 主动关闭的一方发送 FIN 包,进入 FIN-WAIT-1 状态。
2. ESTABLISHED → CLOSE-WAIT(被动关闭方收到 FIN)
• 被动关闭的一方收到 FIN 包后,回复 ACK,进入 CLOSE-WAIT 状态。
3. FIN-WAIT-1 → FIN-WAIT-2(主动关闭方收到 ACK)
• 主动关闭的一方收到对方的 ACK 后进入 FIN-WAIT-2 状态。
4. CLOSE-WAIT → LAST-ACK(被动关闭方发送 FIN)
• 被动关闭的一方完成必要的任务后,发送 FIN,进入 LAST-ACK 状态。
5. FIN-WAIT-2 → TIME-WAIT(主动关闭方收到 FIN)
• 主动关闭的一方收到对方的 FIN 后,回复 ACK,进入 TIME-WAIT 状态。
6. LAST-ACK → CLOSED(被动关闭方收到 ACK)
• 被动关闭的一方收到 ACK 后,进入 CLOSED 状态。
7. TIME-WAIT → CLOSED(主动关闭方等待超时)
• 主动关闭的一方等待 2MSL 后,进入 CLOSED 状态。
特殊状态转换
1. CLOSING
• 当双方几乎同时发起关闭时,会进入此状态,表示双方都发送了 FIN,但还在等待对方的 ACK。
• 状态转换较快,最终会进入 TIME-WAIT 或 CLOSED。
2. TIME-WAIT
• 确保延迟的数据包不会干扰后续连接。
• 等待时间通常是两个最大报文段生存时间(2MSL)。