在上一篇中,我们梳理了 TCP 协议的核心特点与首部格式,而 TCP 作为面向连接的协议,连接的建立与释放是其通信的前提与收尾。TCP 通过 "三次握手" 建立可靠连接,通过 "四次挥手" 优雅释放连接,确保通信过程的有序与安全。下面结合思维导图,系统梳理 TCP 连接管理的完整流程,为后续拥塞控制、流量控制等机制的学习做好铺垫。
一、客户端 / 服务器模式
TCP 连接采用典型的客户端 / 服务器(C/S)模式:
- 客户端:主动发起连接请求,向服务器发送连接建立报文;
- 服务器:被动监听连接请求,响应客户端的连接请求,建立连接后双方进入数据传输阶段。
二、TCP 连接建立:三次握手
三次握手是 TCP 建立连接的核心流程,通过三次报文交互,同步双方的初始序号、确认双方的发送与接收能力,确保连接的可靠性。

完整流程解析
-
第一次握手(客户端 → 服务器)
- 客户端发送连接请求报文段,不携带应用层数据;
- 报文段中
SYN标志位被置为1,客户端随机选择一个初始序号seq = x; - 注:SYN 报文即使不携带数据,也会消耗一个序号,后续数据的序号从
x+1开始。 - 客户端状态从
CLOSED转为SYN-SENT。
-
第二次握手(服务器 → 客户端)
- 服务器收到请求后,为该 TCP 连接分配缓存和变量,返回确认报文段;
- 报文段中
SYN和ACK标志位均置为1,确认号ack = x + 1(期望收到客户端下一个报文段的序号为x+1); - 服务器随机产生自身的初始序号
seq = y,该报文段同样不携带数据,但会消耗一个序号; - 服务器状态从
LISTEN转为SYN-RCVD。
-
第三次握手(客户端 → 服务器)
- 客户端收到服务器的确认后,为该 TCP 连接分配缓存和变量,返回确认报文段;
- 报文段中
ACK标志位置为1,序号字段为seq = x + 1,确认号字段为ack = y + 1; - 该报文段可携带应用层数据,也可不携带数据;若不携带数据,则不消耗序号;
- 客户端状态转为
ESTABLISHED;服务器收到该确认后,状态也转为ESTABLISHED,三次握手完成,双方进入数据传输阶段。
三、TCP 连接释放:四次挥手
TCP 连接是全双工的,双方均可主动发起连接释放请求,因此连接释放需要四次报文交互,确保双方都已发送完数据并确认对方收到了所有数据。

完整流程解析
假设客户端主动发起连接释放请求:
-
第一次挥手(客户端 → 服务器)
- 客户端发送连接释放报文段,停止发送数据,主动关闭 TCP 连接;
- 报文段中
FIN标志位被置为1,序号seq = u(已传送数据的最后一个字节序号加 1); - FIN 报文段即使不携带数据,也会消耗一个序号;
- 客户端状态转为
FIN-WAIT-1,不再发送数据,但仍可接收服务器发送的数据。
-
第二次挥手(服务器 → 客户端)
- 服务器收到 FIN 报文段后,返回一个确认报文段;
- 报文段中
ACK标志位置为1,确认号ack = u + 1,序号seq = v(服务器已传送数据的最后一个字节序号加 1); - 服务器状态转为
CLOSE-WAIT,此时 TCP 处于半关闭状态,服务器可继续向客户端发送剩余数据,客户端仍需接收; - 客户端收到确认后,状态转为
FIN-WAIT-2,等待服务器的连接释放报文。
-
第三次挥手(服务器 → 客户端)
- 服务器发送完所有数据后,发送连接释放报文段,主动关闭 TCP 连接;
- 报文段中
FIN标志位被置为1,序号seq = w(服务器发送完剩余数据后的序号),确认号ack = u + 1; - 服务器状态转为
LAST-ACK,等待客户端的确认。
-
第四次挥手(客户端 → 服务器)
- 客户端收到 FIN 报文段后,返回确认报文段;
- 报文段中
ACK标志位置为1,确认号ack = w + 1,序号seq = u + 1; - 客户端状态转为
TIME-WAIT,并等待2MSL(最长报文寿命)时间后,彻底关闭连接; - 服务器收到该确认后,状态转为
CLOSED,连接释放完成。
补充:TIME-WAIT 状态的意义
客户端在第四次挥手后进入TIME-WAIT状态并等待2MSL,核心目的有两个:
- 确保服务器收到最后一个 ACK 报文段 :若服务器未收到 ACK,会重发 FIN 报文段,客户端在
TIME-WAIT状态内可重新发送 ACK,避免服务器一直处于LAST-ACK状态; - 清除旧连接的报文段 :等待
2MSL可确保本次连接的所有报文段在网络中消失,避免后续新连接收到旧连接的延迟报文,保证通信的可靠性。
TCP 连接管理通过三次握手和四次挥手,实现了连接的可靠建立与优雅释放,为数据传输提供了稳定的基础。而在数据传输过程中,TCP 还需通过流量控制、拥塞控制和可靠传输机制,保障数据高效、有序、无差错地送达。下一篇,我们将深入梳理这三大核心机制,完成 TCP 协议的完整学习。