传输层的TCP 三次握手与四次挥手:你真的理解了吗?

举报
神的孩子在歌唱 发表于 2025/07/27 23:12:41 2025/07/27
【摘要】 传输层的TCP 三次握手与四次挥手:你真的理解了吗?前言肝文不易,点个免费的赞和关注,有错误的地方请指出,看个人主页有惊喜。作者:神的孩子都在歌唱当你打电话给朋友,不能上来就直接聊吧?总得先确认对方在线,否则就是自言自语。TCP 连接也是一样,得先握手,后通信:你:喂,在吗?(SYN)朋友:在啊,你呢?(SYN+ACK)你:OK,开始聊!(ACK)断开时,也得挥手告别,否则可能对方还在等你继...

传输层的TCP 三次握手与四次挥手:你真的理解了吗?

前言

肝文不易,点个免费的赞和关注,有错误的地方请指出,看个人主页有惊喜。

作者:神的孩子都在歌唱


当你打电话给朋友,不能上来就直接聊吧?总得先确认对方在线,否则就是自言自语。

TCP 连接也是一样,得先握手,后通信

  1. :喂,在吗?(SYN)

  2. 朋友:在啊,你呢?(SYN+ACK)

  3. :OK,开始聊!(ACK)

断开时,也得挥手告别,否则可能对方还在等你继续说话。

一. TCP 三次握手

来看一下 TCP 连接建立的完整流程:

  1. 第一次握手:客户端发送 SYN 报文,表示“我要建立连接”,同时携带一个初始序列号 seq = x

  2. 第二次握手:服务器收到 SYN 后,回应一个 SYN-ACK,表示“我收到了你的请求,并且我也准备好了”,同时附带自己的初始序列号 seq = y,以及对客户端 seq = x 的确认 ack = x + 1

  3. 第三次握手:客户端收到服务器的 SYN-ACK,发送 ACK 确认“好的,我们可以通信了”,并且 ack = y + 1,至此连接建立。

image-20250403212936163

为什么是三次握手?一次两次不行吗

  • 防止历史连接的影响:如果采用二次握手,服务器收到 SYN 后直接建立连接,但客户端的 SYN 可能是网络延迟后重复到达的“旧请求”,这会导致服务器错误地建立无效连接,而三次握手可以避免这一问题。

  • 确保双方的收发能力:第三次握手让客户端确认了服务器的接收和发送能力,避免了“盲目同意”的情况。

二. TCP 四次挥手


如果说三次握手是“恋爱的开始”,那么四次挥手就是“分手的全过程”——理性且克制,既保证对方准备好,也不给彼此拖泥带水的机会。

  1. 第一次挥手:客户端不想再发送数据了,向服务器发送一个 FIN(Finish)请求,表示“我准备关闭连接了”。

  2. 第二次挥手: 服务器收到 FIN 后,回复一个 ACK,表示“我知道你要关闭了,但我这边可能还有些数据没处理完”。

  3. 第三次挥手: 服务器处理完数据后,也发送一个 FIN,表示“好了,我也不发送数据了”。

  4. 第四次挥手: 客户端收到服务器的 FIN 后,回复 ACK,并进入 TIME_WAIT 状态,确保服务器收到 ACK 后才彻底关闭连接。

image-20250403213030996

为什么是四次挥手?

  • TCP 是全双工通信:数据的发送和接收是分开的,每一方都要单独关闭自己的数据流,因此需要两对 FIN-ACK 进行确认。

  • TIME_WAIT 机制:客户端在最后进入 TIME_WAIT 状态,确保服务器收到 ACK,防止“最后的再见”丢失。





作者:神的孩子都在歌唱 本人博客:https://blog.csdn.net/weixin_46654114 转载说明:务必注明来源,附带本人博客连接

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。