端口状态 LISTENING ESTABLISHED TIME_WAIT及CLOSE_WAIT


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 表示被动关闭 ,是被动关闭连接是形成的。



猜你喜欢

转载自blog.csdn.net/qq_39385118/article/details/80467867