状态 | 解释 |
---|---|
CLOSED | 表示初始状态 |
LISTEN | 表示服务器端的某个SOCKET处于监听状态,可以接受连接了 |
SYN_RCVD | 表示接受到了SYN报文,此这种状态时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。 |
SYN_SENT | SYN_SENT状态表示客户端已发送SYN报文,这个状态与SYN_RCVD遥想呼应 |
ESTABLISHED | 表示连接已经建立了 |
FIN_WAIT_1 | FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态 时,它想主动关闭连接,向对方发送了FIN报文 ,此时该SOCKET即 进入到FIN_WAIT_1状态 |
FIN_WAIT_2 | 主动发送FIN报文的一方 ,等待对方回应ACK报文后,则进入到FIN_WAIT_2状态,这种情况也叫做半连接 ,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。 |
TIME_WAIT | 表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了,如果FIN_WAIT_1状态下,收到了对方同时带 FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。 |
CLOSING | 实际情况中应该是很少见 表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文 |
CLOSE_WAIT | 当对方close一个SOCKET后发送FIN报文给自己,你系统毫无疑问地会回应一个ACK报文给对 方,此时则进入到CLOSE_WAIT状态 |
LAST_ACK | 被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了 |
为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
原文:https://www.cnblogs.com/lodger47/p/14797832.html