TCP 连接管理篇

在上一篇中,我们梳理了 TCP 协议的核心特点与首部格式,而 TCP 作为面向连接的协议,连接的建立与释放是其通信的前提与收尾。TCP 通过 "三次握手" 建立可靠连接,通过 "四次挥手" 优雅释放连接,确保通信过程的有序与安全。下面结合思维导图,系统梳理 TCP 连接管理的完整流程,为后续拥塞控制、流量控制等机制的学习做好铺垫。


一、客户端 / 服务器模式

TCP 连接采用典型的客户端 / 服务器(C/S)模式:

  • 客户端:主动发起连接请求,向服务器发送连接建立报文;
  • 服务器:被动监听连接请求,响应客户端的连接请求,建立连接后双方进入数据传输阶段。

二、TCP 连接建立:三次握手

三次握手是 TCP 建立连接的核心流程,通过三次报文交互,同步双方的初始序号、确认双方的发送与接收能力,确保连接的可靠性。

完整流程解析

  1. 第一次握手(客户端 → 服务器)

    • 客户端发送连接请求报文段,不携带应用层数据;
    • 报文段中 SYN 标志位被置为1,客户端随机选择一个初始序号 seq = x
    • 注:SYN 报文即使不携带数据,也会消耗一个序号,后续数据的序号从 x+1 开始。
    • 客户端状态从 CLOSED 转为 SYN-SENT
  2. 第二次握手(服务器 → 客户端)

    • 服务器收到请求后,为该 TCP 连接分配缓存和变量,返回确认报文段;
    • 报文段中 SYNACK 标志位均置为1,确认号 ack = x + 1(期望收到客户端下一个报文段的序号为x+1);
    • 服务器随机产生自身的初始序号 seq = y,该报文段同样不携带数据,但会消耗一个序号;
    • 服务器状态从 LISTEN 转为 SYN-RCVD
  3. 第三次握手(客户端 → 服务器)

    • 客户端收到服务器的确认后,为该 TCP 连接分配缓存和变量,返回确认报文段;
    • 报文段中 ACK 标志位置为1,序号字段为 seq = x + 1,确认号字段为 ack = y + 1
    • 该报文段可携带应用层数据,也可不携带数据;若不携带数据,则不消耗序号;
    • 客户端状态转为 ESTABLISHED;服务器收到该确认后,状态也转为 ESTABLISHED,三次握手完成,双方进入数据传输阶段。

三、TCP 连接释放:四次挥手

TCP 连接是全双工的,双方均可主动发起连接释放请求,因此连接释放需要四次报文交互,确保双方都已发送完数据并确认对方收到了所有数据。

完整流程解析

假设客户端主动发起连接释放请求:

  1. 第一次挥手(客户端 → 服务器)

    • 客户端发送连接释放报文段,停止发送数据,主动关闭 TCP 连接;
    • 报文段中 FIN 标志位被置为1,序号 seq = u(已传送数据的最后一个字节序号加 1);
    • FIN 报文段即使不携带数据,也会消耗一个序号;
    • 客户端状态转为 FIN-WAIT-1,不再发送数据,但仍可接收服务器发送的数据。
  2. 第二次挥手(服务器 → 客户端)

    • 服务器收到 FIN 报文段后,返回一个确认报文段;
    • 报文段中 ACK 标志位置为1,确认号 ack = u + 1,序号 seq = v(服务器已传送数据的最后一个字节序号加 1);
    • 服务器状态转为 CLOSE-WAIT,此时 TCP 处于半关闭状态,服务器可继续向客户端发送剩余数据,客户端仍需接收;
    • 客户端收到确认后,状态转为 FIN-WAIT-2,等待服务器的连接释放报文。
  3. 第三次挥手(服务器 → 客户端)

    • 服务器发送完所有数据后,发送连接释放报文段,主动关闭 TCP 连接;
    • 报文段中 FIN 标志位被置为1,序号 seq = w(服务器发送完剩余数据后的序号),确认号 ack = u + 1
    • 服务器状态转为 LAST-ACK,等待客户端的确认。
  4. 第四次挥手(客户端 → 服务器)

    • 客户端收到 FIN 报文段后,返回确认报文段;
    • 报文段中 ACK 标志位置为1,确认号 ack = w + 1,序号 seq = u + 1
    • 客户端状态转为 TIME-WAIT,并等待 2MSL(最长报文寿命)时间后,彻底关闭连接;
    • 服务器收到该确认后,状态转为 CLOSED,连接释放完成。

补充:TIME-WAIT 状态的意义

客户端在第四次挥手后进入TIME-WAIT状态并等待2MSL,核心目的有两个:

  1. 确保服务器收到最后一个 ACK 报文段 :若服务器未收到 ACK,会重发 FIN 报文段,客户端在TIME-WAIT状态内可重新发送 ACK,避免服务器一直处于LAST-ACK状态;
  2. 清除旧连接的报文段 :等待2MSL可确保本次连接的所有报文段在网络中消失,避免后续新连接收到旧连接的延迟报文,保证通信的可靠性。

TCP 连接管理通过三次握手和四次挥手,实现了连接的可靠建立与优雅释放,为数据传输提供了稳定的基础。而在数据传输过程中,TCP 还需通过流量控制、拥塞控制和可靠传输机制,保障数据高效、有序、无差错地送达。下一篇,我们将深入梳理这三大核心机制,完成 TCP 协议的完整学习。

相关推荐
爱讲故事的2 小时前
计算机网络第二章:应用层完整复习笔记
笔记·计算机网络
爱讲故事的2 小时前
计算机网络第三讲:传输层 Transport Layer 全面复习
计算机网络
艾莉丝努力练剑2 小时前
【Linux网络】NAT、内网穿透、内网打洞
linux·运维·服务器·网络·计算机网络·udp·php
爱讲故事的2 小时前
计算机网络第一讲:Introduction 复习博客
计算机网络
我是一颗柠檬2 小时前
【计算机网络全面教学】传输层TCP与UDP,三次握手到拥塞控制彻底搞懂Day4(2026年)
tcp/ip·计算机网络·udp
JZZC21 天前
第1章 计算机网络概论-历史
计算机网络·历史
kidding7231 天前
高效备忘清单工具类小程序
前端·计算机网络·微信小程序·小程序
梁辰兴1 天前
计算机网络基础:在 P2P 对等方中搜索对象
网络·计算机网络·计算机·p2p·计算机网络基础·梁辰兴
JZZC21 天前
第1章 计算机网络概论-其他
计算机网络