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 协议的完整学习。

相关推荐
2501_916008892 天前
HTTPS 抓包遇到证书绑定怎么办,使用 TraceEagle 解除 App 证书校验
网络协议·计算机网络·http·网络安全·ios·adb·https
zx1154502 天前
前后端开发必备的计算机网络知识
计算机网络
砚凝霜3 天前
软考网络工程师|第 1 章 计算机网络基础 完整备考笔记
网络·笔记·计算机网络
TechEdu2026063 天前
[计算机科学]计算机网络原理
计算机网络·计算机科学
谙弆悕博士4 天前
系统集成项目管理工程师教程(第3版)笔记——第2章:信息技术发展
笔记·计算机网络·信息安全·学习方法·业界资讯·软考·系统分析师
ttod_qzstudio4 天前
【软考备考】计算机网络详解:OSI/TCP-IP 分层 + IP 子网划分,一篇拿下网络模块(附 10 道练习)
网络·tcp/ip·计算机网络·软考
2301_808414384 天前
计算机网络基础
计算机网络
Lhappy嘻嘻5 天前
网络(四)|全网最细网络层原理:IP 协议、IP 地址分类、子网划分、路由转发、NAT 穿透详解
java·笔记·网络协议·计算机网络
Tsuki_tl6 天前
UDP传输协议
网络·网络协议·udp·传输层·udp校验和·tcp与udp区别·面向数据报
儒雅的烤地瓜6 天前
计算机网络 | 网络诊断双刃剑:Tracert路由追踪实战与Windows防火墙端口配置指南
tcp/ip·计算机网络·wireshark·防火墙·powershell·cmd