tcp连接和断开过程中的状态变化
全部的11种状态
(1) SYN_SEND (2)FIN_WAIT1 (3) FIN_WAIT2 (4) CLOSING (5) TIME_WAIT
(1) LISTEN (2) SYN_RCVD (3) CLOSE_WAIT (4) LAST_ACK
(1)CLOSED (2) ESTABLISHED
刚开始都为CLOSED状态
在连接的过程中。
A 创建socket socket
B 创建socket,然后bind,然后listen变为LISTEN状态
A 执行connect,发送syn 进入到SYN_SENT状态
B 服务端收到SYN 向客户端发送ACK和SYN 进入SYN_RCVD状态 (服务端的连接有操作系统完成)
A 客户端收到SYN和ACK就向服务端发送ACK,进入到ESTABLISHED状态
B 服务端收到ACK之后也进入到ESTABLISHED状态
断开过程中
A 客户端发送FIN给B服务端,状态变为FIN_WAIT1.
B 服务端收到FIN向A客户端发送ACK,服务端状态变为CLOSE_WAIT
A 客户端收到ACK进入到FIN_WAIT2状态,此时连接断开了一半,服务端任然能给客户端发送数据
B 服务端发完了所有的数据之后,再发送FIN,服务端进入到LAST_ACK状态
A 客户端收到FIN之后,发送ACK给B服务端,然后进入到TIME_WAIT状态
B 服务端收到ACK进入CLOSED状态
A 客户端经过了2MSL长的时间之后就进入到CLOSED状态
CLOSING状态:
出现在同时关闭中:
客户端和服务端同时发送FIN,发送后进入FIN_WAIT1状态
客户端和服务端都收到对方发送的FIN后,回复ACK,进入到CLOSING
收到对方的ACK之后,进入TIME_WAIT状态。