暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

通俗介绍一下三次握手和四次挥手的?

Mark 2026-06-11
57

我们可以把 TCP 协议想象成“打电话”的过程。TCP 是一个非常靠谱的传输协议,为了保证沟通顺畅且不丢数据,它在建立连接和断开连接时,有着一套非常严谨的规矩。

📞 三次握手(建立连接)

这就像是你给好朋友打一通重要的电话,必须确认双方都能听清对方说话:

  • 第一次握手(你发起):“喂?你在吗?”(发送 SYN 报文)
    • 潜台词:我想和你建立连接,你能听到我吗?
  • 第二次握手(朋友回复):“我在呢!你能听到我说话吗?”(发送 SYN+ACK 报文)
    • 潜台词:我收到你的请求了,我也准备好了,但我不确定我的声音能不能传到你那边。
  • 第三次握手(你确认):“能听到!咱们开始聊吧!”(发送 ACK 报文)
    • 潜台词:我也收到你的消息了,双向通道确认畅通,可以正式传数据了!

💡 为什么不能只握两次手?
如果只有前两次握手,朋友虽然知道你发起了通话,但他无法确认你是否收到了他的回复。万一网络不好你没听到,朋友以为连接成功了就开始疯狂发数据,而你根本没准备好,这就造成了资源浪费和数据混乱。所以,必须有第三次确认来保证“双向通信能力”都是正常的。


👋 四次挥手(断开连接)

当你们聊完准备挂断电话时,因为 TCP 是“全双工”的(即双方都可以同时说话),所以不能单方面直接挂断,必须礼貌地互相确认:

  • 第一次挥手(你说完了):“我这边的事情讲完了,不说了哈。”(发送 FIN 报文)
    • 潜台词:我没有新数据要发了,但我还可以继续听你说。
  • 第二次挥手(朋友回应):“好的,我知道了。但我这边还有点收尾工作没做完,你先别挂啊。”(发送 ACK 报文)
    • 潜台词:收到你的关闭请求了,等我把手头剩下的数据发完。
  • 第三次挥手(朋友也说完了):“好了,我的事也处理完了,可以挂了吧!”(发送 FIN 报文)
    • 潜台词:我也没有数据要发了,同意断开连接。
  • 第四次挥手(你最后确认):“OK,拜拜~”(发送 ACK 报文)
    • 潜台词:收到,那我们就正式断开连接啦!

💡 为什么挥手比握手多了一次?
核心原因在于“数据的传输是双向且独立的”。当你表示不想再说话时,对方可能还有话没说完。因此,对方的“收到通知(ACK)”和“我也说完了(FIN)”通常是分两步进行的,不能合并在一起,这就导致了断开连接需要四次交互才能安全、优雅地完成。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论