TCP的11种状态

前言

前面文章中有谈到 TCP 的3次握手与4次挥手,其中涉及到一些状态值,因篇幅过长,所以在此篇进行梳理

状态

img

状态值 表示
CLOSED 初始状态:连接‘关闭’ 或 ‘未打开’
LISTEN 服务端的某个SOCKET处于监听状态,可以接受客户端的连接
SYN_SEND 客户端已发送SYN报文
SYN_RCVD 服务器接收到了来自客户端请求连接的SYN报文
ESTABLISHEND TCP连接成功
FIN_WAIT_1 A想主动关闭连接,A发送FIN报文后进入
CLOSE_WAIT B正在等待关闭。收到A的FIN报文,发送ACK,同意关闭连接。此时已经关闭了 A -> B 连接
FIN_WAIT_2 A收到B的ACK后
此时SOCKET为半连接,有一方关闭了连接
LAST_ACK B等待A的ACK报文
当收到对方的ACK报文后,就关闭了B -> A的连接
TIME_WAIT A发出ACK报文,与CLOSE_WAIT不同,并未关闭连接
CLOSING 比较罕见的状态(下表)
当双方几乎同时CLOSE()一个SOCKET的话,就会出现双方同时发送FIN报文的情况——导致:一方发送FIN报文后,并没有收到对方的ACK报文,反而收到对方的FIN报文

img