什么是 TCP 状态

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议,它位于传输层和应用层之间,是一种全双工协议,它提供了可靠的、有序的、不丢失的、无差错的数据传输服务,并且提供了流量控制和拥塞控制机制。TCP 协议把数据报文段封装成 TCP 报文段,并且在传输过程中,TCP 协议会维护一个连接状态,这个状态就是 TCP 状态。

TCP 状态的分类

TCP 状态可以分为 7 种:

1、CLOSED(关闭):这是 TCP 连接的初始状态,这时,两端都没有任何连接,也没有任何连接请求。

2、LISTEN(监听):一端发起连接请求,另一端就处于监听状态,等待连接请求。

3、SYN_SENT(同步发送):这时,发起连接的一端发送了一个 SYN 报文段,表示要建立连接,等待对方确认。

4、SYN_RCVD(同步接收):接收方收到了 SYN 报文段,并发送了一个确认报文段,等待对方的确认。

5、ESTABLISHED(建立):这时,双方都确认了,连接建立成功,双方可以正常通信了。

6、FIN_WAIT_1(结束等待 1):一端发起关闭连接,发送 FIN 报文段,等待对方的确认。

7、CLOSED(关闭):双方都确认了,连接关闭成功,双方不能再进行通信。

TCP 状态的转换

TCP 状态之间的转换是有一定规律的,例如,建立 TCP 连接的过程,就是从 CLOSED 状态转换到 ESTABLISHED 状态,过程如下:

1234567CLOSED --> SYN_SENT --> SYN_RCVD --> ESTABLISHED
JavaScript

而关闭 TCP 连接的过程,则是从 ESTABLISHED 状态转换到 CLOSED 状态,过程如下:

1234567ESTABLISHED --> FIN_WAIT_1 --> CLOSE_WAIT --> LAST_ACK --> CLOSED
JavaScript