TCP(传输控制协议)是一种面向连接的流式控制协议,它定义了不同的状态以管理通信过程中的连接。TCP 状态迁移描述了 TCP 连接在不同状态之间的转换过程,常见的 TCP 状态包括 CLOSED、LISTEN、SYN_SENT、SYN_RECEIVED、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、CLOSE_WAIT、LAST_ACK 和 TIME_WAIT 等。
下面是一个简单的客户端发起连接: TCP 状态迁移示意流程:
1、客户端发起连接
CLOSED -> SYN_SENT
客户端发送 SYN 包(同步请求)给服务端,并且状态切换为 SYN_SENT
2、服务端响应连接
SYN_SENT -> SYN_RECEIVED -> ESTABLISHED
服务端发送 SYN-ACK 包(同步应答)给客户端,SYN_RECEIVED(触发 accept)
3、客户端确认连接
SYN_SENT -> ESTABLISHED
客户端发送 ACK 包(确认)给服务端
4、数据传输过程
ESTABLISHED
数据通过连接在客户端和服务端之间传输
5、关闭连接
ESTABLISHED -> FIN_WAIT_1
客户端发送 FIN 包(结束连接)给服务端
FIN_WAIT_1 -> CLOSE_WAIT
服务端发送 ACK 包给客户端
CLOSE_WAIT -> LAST_ACK
服务端发送 FIN 包给客户端
LAST_ACK -> CLOSED
客户端发送 ACK 包给服务端,连接关闭
6、连接终止
TIME_WAIT
客户端和服务端等待一段时间(2MSL,最长报文段寿命),确保最后一个 ACK 能够到达对方