TCP的11种状态


  • CLOSED:没有使用这个套接字[netstat 无法显示closed状态],也是一种初始状态,TCP连接是“关闭着的”或“未打开的”

  • LISTEN:套接字正在监听连接[调用listen后],表示服务器端的某个SOCKET处于监听状态,可以接受客户端的连接。

  • SYN_SENT:套接字正在试图主动建立连接[发送SYN后还没有收到ACK],很短暂,基本上用netstat很难看到这种状态

  • SYN_RECEIVED:正在处于连接的初始同步状态[收到对方的SYN,但还没收到自己发过去的SYN的ACK]

  • ESTABLISHED:连接已建立

  • CLOSE_WAIT:远程套接字已经关闭:正在等待关闭这个套接字[被动关闭的一方收到FIN]。正在等待关闭,当对方close()一个SOCKET后发送FIN报文给自己,你的系统毫无疑问地将会回应一个ACK报文给对方,此时TCP连接则进入到CLOSE_WAIT状态

  • FIN_WAIT_1:套接字已关闭,正在关闭连接[发送FIN,没有收到ACK也没有收到FIN],FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET进入到FIN_WAIT_1 状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2 状态。这个状态通过NETSTAT比较少见到

  • CLOSING:套接字已关闭,远程套接字正在关闭,暂时挂起关闭确认[在FIN_WAIT_1状态下收到被动方的FIN],比较少见:当双方几乎在同时close()一个SOCKET的话,就出现了双方同时发送FIN报文的情况,这是就会出现CLOSING 状态,表示双方都正在关闭SOCKET连接。

  • LAST_ACK:远程套接字已关闭,正在等待本地套接字的关闭确认[被动方在CLOSE_WAIT状态下发送FIN]

  • FIN_WAIT_2:套接字已关闭,正在等待远程套接字关闭[在FIN_WAIT_1状态下收到发过去FIN对应的ACK]

  • TIME_WAIT:这个套接字已经关闭,正在等待远程套接字的关闭传送[FIN、ACK、FIN、ACK都完毕,这是主动方的最后一个状态,在过了2MSL时间后变为CLOSED状态] --主动方,为了让连接维持,而禁止这个端口不让其他进程用,

 

 

参考资料:

https://time.geekbang.org/course/intro/100026801

https://blog.csdn.net/wentinghe/article/details/9455399

https://www.cnblogs.com/qingergege/p/6603488.html

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM