TCP 连接状态流转图
完整状态机

image.png
分离的状态流转图
服务端状态流转

image.png
客户端状态流转

image.png
三次握手时序图

image.png
四次挥手时序图

image.png
状态转换汇总表
| 状态 | 角色 | 触发操作 | 下一状态 |
|---|---|---|---|
| CLOSED | 服务端 | socket() + listen() | LISTEN |
| CLOSED | 客户端 | connect() → 发送 SYN | SYN_SENT |
| LISTEN | 服务端 | 收到 SYN → 发送 SYN+ACK | SYN_RECV |
| SYN_SENT | 客户端 | 收到 SYN+ACK → 发送 ACK | ESTABLISHED |
| SYN_RECV | 服务端 | 收到 ACK | ESTABLISHED |
| ESTABLISHED | 客户端 | close() → 发送 FIN | FIN_WAIT_1 |
| ESTABLISHED | 服务端 | 收到 FIN → 发送 ACK | CLOSE_WAIT |
| FIN_WAIT_1 | 客户端 | 收到 ACK | FIN_WAIT_2 |
| CLOSE_WAIT | 服务端 | close() → 发送 FIN | LAST_ACK |
| FIN_WAIT_2 | 客户端 | 收到 FIN → 发送 ACK | TIME_WAIT |
| LAST_ACK | 服务端 | 收到 ACK | CLOSED |
| TIME_WAIT | 客户端 | 等待 2MSL (约 60 秒) | CLOSED |