Tcp的有限状态机--【全面解析】

版权声明:本文为博主原创文章,转载请注明出处-- https://blog.csdn.net/qq_38790716/article/details/85220490

在这里插入图片描述

了解Tcp的有限状态机,有助于我们理解Tcp的3次握手与四次挥手

  • CLOSED:表示初始状态
  • LISTEN:表示服务器端的某个socket处于监听状态,可以接受连接
  • SYN_SENT:在服务端监听后,客户端socket执行CONNECT连接时,客户端发送SYN报文,此时客户端就进入SYN_SENT状态,等待服务端的确认
  • SYN_RCVD:表示服务端接收到了SYN报文,发送SYN+ACK,当收到客户端的ACK报文时,它就会进入到ESTABLISHED状态
  • ESTABLISHED:表示连接已建立了
  • FIN_WAIT_1:已经建立连接后,其中一方请求终止连接,等待对方的FIN报文
  • FIN_WAIT_2:这个状态下的socket,表示半连接,即有一方要求关闭连接,但另外还告诉对方:暂时还有一些数据需要传给你,请稍后再关闭连接(即只收到ACK,并未收到FIN
  • TIME_WAIT:表示收到了对方的FIN报文,并发送出了ACK报文,等待2MSL后即可回到CLOSED可用状态了。由FIN_WAIT_1进入该状态:同时收到带FIN标志和ACK标志的报文;由FIN_WAIT_2进入该状态:收到FIN报文,此时发送ACK报文
  • CLOSING:双方同时在关闭一个socket,就出现了双方同时发送FIN报文的情况,就会出现CLOSING状态,表示双方都正在关闭socket
  • CLOSE_WAIT:表示在等待关闭(即这个状态下是在考虑你是否还有数据发送给对方)
  • LAST_ACK:它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文
  • CLOSED:当收到对方的ACK报文后,也即进入到CLOSED状态

2MSL等待状态:在上图中,有一个TIME_WAIT等待状态,这个状态又被称为2MSL等待状态,由上述两种情况进入到TIME_WAIT状态,这个状态是防止最后一次握手的数据报没有传送到对方那里所准备的

FIN_WAIT_2状态:著名的半关闭状态,这是在关闭连接时,客户端和服务器两次握手后的状态。在这个状态下,应用程序还有接收数据的能力,但是已经无法发送数据;还有一种可能就是,客户端一直处于FIN_WAIT_2状态,而服务器则一直处于WAIT_CLOSE状态,直到应用层来决定关闭这个状态

猜你喜欢

转载自blog.csdn.net/qq_38790716/article/details/85220490