🌟 TCP三次握手 & 四次挥手:一场“确认眼神”与“礼貌告别”的对话 🌟
一、三次握手:建立连接的“确认眼神”
场景:想象你和朋友打电话,如何确认对方能听到你说话?
过程:
1️⃣ 第一次握手(你喊话)→
你:“喂,能听到吗?”(发送 SYN 包,携带初始序列号 seq=x)
状态:你进入 SYN_SENT(等待确认中)
2️⃣ 第二次握手(朋友回应)→
朋友:“能听到!你也能听到我吗?”(发送 SYN+ACK 包,ack=x+1 确认你的消息,并携带自己的序列号 seq=y)
状态:朋友进入 SYN_RCVD(等待你的最终确认)
3️⃣ 第三次握手(你确认)→
你:“当然能!”(发送 ACK 包,ack=y+1)
状态:双方进入 ESTABLISHED(连接成功,开始传数据)
为什么必须三次?
防“诈尸”连接:网络延迟可能让旧的连接请求突然到达服务器。三次握手能识别并拒绝“过期请求”。
同步序列号:确保双方数据顺序一致(比如防止聊天内容错乱)。
二、四次挥手:断开连接的“礼貌告别”
场景:结束通话时,如何确保双方都说完了?
过程:
1️⃣ 第一次挥手(你主动说再见)→
你:“我说完啦,拜拜!”(发送 FIN 包,进入 FIN_WAIT_1 状态)
2️⃣ 第二次挥手(朋友先回应)→
朋友:“好,我听到了!”(发送 ACK 包,进入 CLOSE_WAIT 状态)
此时:你停止发送数据,但朋友可能还有话要说。
3️⃣ 第三次挥手(朋友也说再见)→
朋友:“我也说完啦,拜拜!”(发送 FIN 包,进入 LAST_ACK 状态)
4️⃣ 第四次挥手(你最后确认)→
你:“收到,真的拜拜了!”(发送 ACK 包,进入 TIME_WAIT 状态,等待 2MSL 后关闭)
为什么必须四次?
全双工特性:TCP连接是双向通道,双方需独立关闭自己的“发送端”。
防“最后的话丢失”:TIME_WAIT 状态确保对方收到最终确认,避免服务器无限等待。
三、记忆口诀
三次握手:一喊(SYN)、二应(SYN+ACK)、三确认(ACK) → “确认眼神”。
四次挥手:一拜(FIN)、二应(ACK)、三回拜(FIN)、四确认(ACK) → “礼貌告别”。
四、趣味类比
三次握手:像两人初次见面握手,必须“伸手→握住→再握紧”才算正式认识。
四次挥手:像告别时,一人说“走了啊”,另一人点头;等对方也说“走了”,再挥手目送。
总结
三次握手防错乱,四次挥手保周全。
TCP用“仪式感”确保网络世界的可靠对话,就像生活中的礼貌交流一样!🚀