page contents

TCP 的十一种状态?

轩辕小不懂 发布于 2022-08-10 15:24
阅读 621
收藏 0
分类:Python开发
4055
Nen
Nen
- 程序员

三次握手:

CLOSED表示初始状态。

LISTEN表示服务器端的某个SOCKET处于监听状态,可以接受连接。

SYN_SENT表示客户端已发送SYN报文,当客户端SOCKET执行CONNECT连接时进入该状态。

SYN_RCVD表示接收到了SYN报文。

ESTABLISHED表示连接已经建立。

四次挥手:

FIN_WAIT_1表示向对方发送了FIN报文,等待对方的FIN报文。当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态。

FIN_WAIT_2表示向对方发送了FIN报文,并收到对方回应的ACK报文。该SOCKET则进入到FIN_WAIT_2状态。实际上表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。

TIME_WAIT表示收到了对方的FIN报文,并发送出了ACK报文。等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,同时收到了对方带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。

CLOSING,表示双方都正在关闭SOCKET连接,如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也就会出现CLOSING状态。

CLOSE_WAIT表示在等待关闭。当对方close一个SOCKET后发送FIN报文给自己,己方毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来查看你是否还有数据发送给对方,如果没有,就可以close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以在CLOSE_WAIT状态下,需要完成的事情是等待己方去关闭连接。

LAST_ACK表示被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。

请先 登录 后评论