CLOSED | 没有使用这个套接字[netstat 无法显示closed状态] |
LISTEN | 套接字正在监听连接[调用listen后] |
SYN_SENT | 套接字正在试图主动建立连接[发送SYN后还没有收到ACK] |
SYN_RECEIVED | 正在处于连接的初始同步状态[收到对方的SYN,但还没收到自己发过去的SYN的ACK] |
ESTABLISHED | 连接已建立 |
CLOSE_WAIT (服务器) | 远程套接字已经关闭:正在等待关闭这个套接字[被动关闭的一方收到FIN] |
FIN_WAIT_1 (客户端) | 套接字已关闭,正在关闭连接[发送FIN,没有收到ACK也没有收到FIN] |
CLOSING | 套接字已关闭,远程套接字正在关闭,暂时挂起关闭确认[在FIN_WAIT_1状态下收到被动方的FIN] |
LAST_ACK (服务器) | 远程套接字已关闭,正在等待本地套接字的关闭确认[被动方在CLOSE_WAIT状态下发送FIN] |
FIN_WAIT_2 (客户端) | 套接字已关闭,正在等待远程套接字关闭[在FIN_WAIT_1状态下收到发过去FIN对应的ACK] |
TIME_WAIT (客户端) | 这个套接字已经关闭,正在等待远程套接字的关闭传送[FIN、ACK、FIN、ACK都完毕,这是主动方的最后一个状态,在过了2MSL时间后变为CLOSED状态] |
Client:
TCP 的Client发出FIN结束报文以后,client 进入TIME_WAIT_1状态,从而等待server的ACK , 收到ACK以后表明从client到server的连接断开了,此时client进入TIME_WAIT_2状态。
如果client收server传来的FIN以后,client 会发送一个ACK,然后进入TIME_WAIT状态。client需要在TIME_WAIT保持2MSL的时间才会进入CLOSED状态。
Server:
当server 收到client发过来的断开连接的FIN包以后,会进入CLOSE_WAIT状态,并向上层应用通告这个消息,同时返回ACK ,至此client到server的连接断开了。
上层应用处理完相关的信息以后会向client发送FIN, 进入LAST_ACK状态,等待client返回ACK ,如果收到ACK,至此server到client的连接断开,server进入CLOSED状态。
所以TIME_WAIT 表示主动关闭,是主动关闭连接时形成的,CLOSE_WAIT 表示被动关闭 ,是被动关闭连接是形成的。
![]()