• 以太网 TCP协议(TCP报文交互后的状态机变化)


    2.7.2 以太网 TCP协议(TCP报文交互后的状态机变化)

    一、TCP状态机:

    在这里插入图片描述

    二、TCP状态机变化

    1、TCP三次握手

    1. 客户端主动发起SYN置位TCP之后,状态变为SYN_SENT(请求发送状态)
    2. 服务器默认处于LISTEN(监听状态)。收到SYN报文之后,状态变为SYN_RCVD(请求回复状态 syn_received)。回复SYN、ACK置位TCP。
    3. 客户端收到服务器回复的SYN、ACK置位TCP,状态变为ESTABLISHED(建立连接状态)。回复服务器ACK置位TCP,表示客户端连接建立成功。
      • 当服务器收到客户端的ACK置位TCP后,也将成为ESTABLISHED状态

    2、TCP四次挥手

    1. 客户端主动发送FIN、ACK置位的TCP之后,状态变为FIN_WAIT_1(结束等待状态1)
    2. 服务器收到FIN、ACK置位TCP,状态变为CLOSE_WAIT(关闭等待状态)。通知上层程序关闭相关TCP程序,同时回复ACK置位报文,表示收到断开连接信息。
      • 收到服务器回复的ACK置位TCP,状态变为FIN_WAIT_2(结束等待状态2,等待对方回复FIN、ACK报文)
    3. 服务器结束上层TCP程序之后,回复客户端FIN、ACK置位TCP,请求断开连接。状态变为LAST_ACK(最后确认状态)
    4. 客户端收到服务器FIN、ACK置位TCP后,状态变为TIME_WAIT(也称2MSL等待状态)。回复服务器ACK置位TCP,表示确认断开连接。
      • 服务器收到客户端ACK置位TCP之后,状态变为CLOSED,连接断开。

    在这里插入图片描述

    3、什么是2MSL?

    • RFC 793 [Postel 1981c] 指出MSL为2分钟。然而,实现中的常用值是30秒,1分钟,或2分钟。
    • TCP执行主动关闭的一端,收到FIN、ACK置位TCP发出最后一个ACK确认时所处状态。
    • 该连接必须在 TIME_WAIT状态停留的时间为 2倍的M S L。这样可防止最后的ACK在传输过程中丢失导致对端无法正常断开TCP:
      • 假设ACK丢失,对端因为没能及时接收到ack而超时进行重新发送FIN、ACK报文。
        • 如果不进行等待2MSL的时间,回复ACK之后就已经断开了连接。即使对端回复FIN、ACK也不会回复。
        • 如果进行等待2MSL的时间,此时连接仍然存在,收到FIN、ACK之后将再次回复ACK报文进行确认。
  • 相关阅读:
    商城系统功能需求分析_免费搭建方式介绍_OctShop
    科兴与香港大学临床试验中心研究团队和香港港怡医院合作,在中国香港启动奥密克戎特异性灭活疫苗加强剂临床试验
    java计算机毕业设计计算机散件报价系统源码+数据库+系统+lw文档+mybatis+运行部署
    jar包的一些事儿
    华为防火墙 DMZ 设置
    JDBC知识点
    day55 动规.p15 子序列
    十天学前端之JS篇(五)
    大前端 - 泛客户端 - Electron
    冒泡排序(Bubble Sort)
  • 原文地址:https://blog.csdn.net/qq_45443704/article/details/128171296