TCP 连接管理篇

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


一、客户端 / 服务器模式

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

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

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

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

完整流程解析

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

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

    • 服务器收到请求后,为该 TCP 连接分配缓存和变量,返回确认报文段;
    • 报文段中 SYN 和 ACK 标志位均置为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 协议的完整学习。

相关推荐
Java成神之路-16 小时前
【计算机网络】ICMP协议超全详解
计算机网络
流浪00118 小时前
计算机网络篇5:UDP 收发接口 recvfrom 与 sendto 的参数语义
计算机网络·udp·sendto·recvfrom
.Hypocritical.21 小时前
计算机网络】吃透 OSI 七层模型与 TCP/IP 协议栈
网络协议·tcp/ip·计算机网络
一条泥憨鱼3 天前
【从0开始学习计算机网络】| ARP 协议:地址解析,ARP 欺骗,链路层寻址
网络·后端·学习·计算机网络
为思念酝酿的痛4 天前
数据链路层--帧传输与链路控制
网络·网络协议·计算机网络·数据链路层
程序员z74 天前
【从0开始学计算机网络】| HTTP 协议的进化史
网络协议·计算机网络·http
为思念酝酿的痛4 天前
NAT技术--网络地址转换原理
网络·计算机网络·智能路由器
沫璃染墨6 天前
从零入门计算机网络系列(一):计算机网络初识——从网络发展史到TCP/IP协议》
linux·网络·网络协议·tcp/ip·计算机网络
洋不写bug7 天前
网络原理(一)应用层协议、传输层UDP/TCP报文格式解析
网络·tcp/ip·udp·tcp·应用层·javaee·传输层
洋不写bug8 天前
初识网络通信,网络发展背景,TCP/IP五层模型简介
计算机网络·网络编程·协议·ip·端口号·tcp/ip模型·网络发展背景