注:实线路线表示客户端的正常状态变迁
虚线路线表示服务端的正常状态变迁
RST表示复位,用来异常的关闭连接,在TCP的设计中它是不可或缺的。发送RST包关闭连接时,不必等缓冲区的包都发出去,直接就丢弃缓存区的包发送RST包。而接收端收到RST包后,也不必发送ACK包来确认。
简单解释:
1 CLOSED:初始状态,表示TCP连接是“关闭着的”或“未打开的”。
2 LISTEN :表示服务器端的某个SOCKET处于监听状态,可以接受客户端的连接。
3 SYN_SENT :这个状态与SYN_RCVD 状态相呼应,当客户端SOCKET执行connect()进行连接时,它首先发送SYN报文,然后随即进入到SYN_SENT 状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT 状态表示客户端已发送SYN报文。
4 SYN_RCVD :表示服务器接收到了来自客户端请求连接的SYN报文。在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat很难看到这种状态,除非故意写一个监测程序,将三次TCP握手过程中最后一个ACK报文不予发送。当TCP连接处于此状态时,再收到客户端的ACK报文,它就会进入到ESTABLISHED 状态。
5 ESTABLISHED :表示TCP连接已经成功建立。
6 FIN_WAIT_1 :这个状态得好好解释一下,其实FIN_WAIT_1