前言
前面文章中有谈到 TCP 的3次握手与4次挥手,其中涉及到一些状态值,因篇幅过长,所以在此篇进行梳理
状态
状态值 | 表示 |
---|---|
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报文 |