三次握手:
CLOSED表示初始状态。
LISTEN表示服务器端的某个SOCKET处于监听状态,可以接受连接。
SYN_SENT表示客户端已发送SYN报文,当客户端SOCKET执行CONNECT连接时进入该状态。
SYN_RCVD表示接收到了SYN报文。
ESTABLISHED表示连接已经建立。
四次挥手:
FIN_WAIT_1表示向对方发送了FIN报文,等待对方的FIN报文。当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态。
FIN_WAIT_2表示向对方发送了FIN报文,并收到对方回应的ACK报文。该SOCKET则进入到FIN_WAIT_2状态。实际上表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。
TIME_WAIT表示收到了对方的FIN报文,并发送出了ACK报文。等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,同时收到了对方带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
CLOSING,表示双方都正在关闭SOCKET连接,如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也就会出现CLOSING状态。
CLOSE_WAIT表示在等待关闭。当对方close一个SOCKET后发送FIN报文给自己,己方毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来查看你是否还有数据发送给对方,如果没有,就可以close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以在CLOSE_WAIT状态下,需要完成的事情是等待己方去关闭连接。
LAST_ACK表示被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。
三次握手:
CLOSED表示初始状态。
LISTEN表示服务器端的某个SOCKET处于监听状态,可以接受连接。
SYN_SENT表示客户端已发送SYN报文,当客户端SOCKET执行CONNECT连接时进入该状态。
SYN_RCVD表示接收到了SYN报文。
ESTABLISHED表示连接已经建立。
四次挥手:
FIN_WAIT_1表示向对方发送了FIN报文,等待对方的FIN报文。当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态。
FIN_WAIT_2表示向对方发送了FIN报文,并收到对方回应的ACK报文。该SOCKET则进入到FIN_WAIT_2状态。实际上表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。
TIME_WAIT表示收到了对方的FIN报文,并发送出了ACK报文。等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,同时收到了对方带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
CLOSING,表示双方都正在关闭SOCKET连接,如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也就会出现CLOSING状态。
CLOSE_WAIT表示在等待关闭。当对方close一个SOCKET后发送FIN报文给自己,己方毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来查看你是否还有数据发送给对方,如果没有,就可以close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以在CLOSE_WAIT状态下,需要完成的事情是等待己方去关闭连接。
LAST_ACK表示被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。