LiSheng's blog LiSheng's blog
首页
笔记
个人简历
随笔集
GitHub (opens new window)
首页
笔记
个人简历
随笔集
GitHub (opens new window)
  • golang

  • cplus

  • leetcode

  • 存储技术

  • 分布式系统

  • 计算机网络

    • tcp通信
    • tcp三次握手及其状态变化
    • tcp四次挥手及其状态变化
      • http
    • Linux操作系统

    • Redis

    • 其他

    • 笔记
    • 计算机网络
    lisheng
    2024-09-10
    目录

    tcp四次挥手及其状态变化

    TCP 的四次挥手(Four-Way Handshake)是关闭一个可靠的 TCP 连接的过程。与三次握手建立连接时的状态变化一样,四次挥手在关闭连接的过程中也涉及双方状态的变化。以下是四次挥手的详细过程及连接状态的变化。

    # 四次挥手过程

    阶段 1:客户端主动关闭连接

    1. 客户端发送一个 FIN(Finish)报文段,表示客户端没有数据要发送了,想要关闭连接。
      • 状态变化:
        • 客户端状态:ESTABLISHED → FIN_WAIT_1
        • 服务器状态:ESTABLISHED

    阶段 2:服务器确认关闭请求

    1. 服务器接收到 FIN 报文段后,发送一个 ACK 报文段,确认收到客户端的关闭请求,同时服务器可能会继续发送数据,直到没有数据为止。
      • 状态变化:
        • 客户端状态:FIN_WAIT_1 → FIN_WAIT_2
        • 服务器状态:ESTABLISHED → CLOSE_WAIT

    阶段 3:服务器准备关闭连接

    1. 服务器准备关闭连接时,发送一个 FIN 报文段给客户端,表示服务器也没有数据要发送了。
      • 状态变化:
        • 客户端状态:FIN_WAIT_2
        • 服务器状态:CLOSE_WAIT → LAST_ACK

    阶段 4:客户端确认关闭连接

    1. 客户端接收到服务器的 FIN 报文段后,发送一个 ACK 报文段给服务器,表示连接关闭流程完成。
      • 状态变化:
        • 客户端状态:FIN_WAIT_2 → TIME_WAIT
        • 服务器状态:LAST_ACK → CLOSED

    最终状态: 5. 客户端在 TIME_WAIT 状态保持一段时间(通常为 2倍的最大报文段生存时间(MSL))以确保服务器收到了 ACK,然后转换为 CLOSED 状态。

    • 状态变化:
      • 客户端状态:TIME_WAIT → CLOSED

    # 总结连接状态变化

    操作 客户端状态 服务器状态
    Start Disconnect ESTABLISHED → FIN_WAIT_1 ESTABLISHED
    Receive FIN FIN_WAIT_1 → FIN_WAIT_2 ESTABLISHED → CLOSE_WAIT
    Send FIN FIN_WAIT_2 CLOSE_WAIT → LAST_ACK
    Receive ACK FIN_WAIT_2 → TIME_WAIT LAST_ACK → CLOSED
    Timeout (2MSL) TIME_WAIT → CLOSED CLOSED

    # 握手示意图

    以下是 TCP 四次挥手的示意图:

    Client                                               Server
       |     FIN ------------------------------------------> |
       |                                                  |
       |     <-------------------- ACK ------------------- |
       |                                                  |
       |     <-------------------- FIN ------------------- |
       |                                                  |
       |     ACK ------------------------------------------> |
       |                                                  |
       |                  Connection Closed                |
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    # 总结

    TCP 的四次挥手过程确保了正常和有序地关闭连接,每个阶段都通过状态变化反映连接的关闭过程。由于 TCP 是面向连接的协议,关闭连接的过程同样需要确保双方都确认没有更多的数据需要发送或接收。这种设计可以防止数据丢失,并确保连接的可靠性。

    编辑 (opens new window)
    上次更新: 2024/09/13, 11:59:12
    tcp三次握手及其状态变化
    http

    ← tcp三次握手及其状态变化 http→

    最近更新
    01
    ceph分布式存储-对象存储(RGW)搭建
    10-27
    02
    ceph分布式存储-集群客户端连接
    10-27
    03
    ceph分布式存储-管理crushmap
    10-27
    更多文章>
    Theme by Vdoing
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式