当你浏览网页或视频通话时,计算机之间如何建立连接?这一切的秘密藏在TCP协议的三次握手和四次挥手中——它们是网络世界的握手礼与告别仪。

三次握手:建立连接的信任之桥

客户端                             服务器|                                ||        SYN(序列号=X)          || -----------------------------> ||                                ||    SYN-ACK(序列号=Y, 确认号=X+1)|| <----------------------------- ||                                ||        ACK(确认号=Y+1)        || -----------------------------> ||                                |
【连接建立成功】

关键步骤解析:

  • 第一次握手:客户端发出同步请求(SYN包),带上随机序列号X
  • 第二次握手:服务器同意连接(SYN-ACK包),返回序列号Y,并确认收到X
  • 第三次握手:客户端确认收到响应(ACK包),完成连接建立

设计精妙:三次握手解决了历史连接问题。当延迟的旧SYN包到达服务器,客户端通过新序列号比对可识别并拒绝无效连接,从而维护可靠性。

四次挥手:优雅断开连接的艺术

客户端                             服务器|                                ||        FIN(结束请求)          || -----------------------------> ||                                ||             ACK                || <----------------------------- ||                                ||              ...               ||    [等待服务器关闭]              ||                                ||               FIN              || <----------------------------- ||                                ||             ACK                || -----------------------------> ||                                |
【连接完全断开】

挥手过程揭秘:

  1. 主动方发送FIN包申请关闭
  2. 被动方立即回应ACK确认收到(进入半关闭状态)
  3. 被动方完成数据发送后发出FIN包
  4. 主动方确认后关闭连接(需等待2MSL防止丢包)

技术难点:为何需要四次挥手?因为TCP是全双工通道,必须双向独立关闭。被动方在收到FIN后可能仍需传输数据,需要额外两次交互确认最终关闭。

TCP设计哲学:可靠性的代价

这种“繁琐”机制源于TCP的核心目标:在不可靠的IP协议上实现可靠传输。三次握手规避网络延迟造成误连接,四次挥手处理半关闭状态数据,而TIME_WAIT状态(主动方最后等待2倍报文寿命周期)确保网络中所有残留数据包彻底消亡。