前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么tcp建立连接需要三次握手,断开连接需要四次挥手

为什么tcp建立连接需要三次握手,断开连接需要四次挥手

作者头像
chenchenchen
发布2021-09-06 14:22:00
7K1
发布2021-09-06 14:22:00
举报
文章被收录于专栏:chenchenchenchenchenchen

三次握手

三次握手的目的,是为了防止A端已经失效的连接请求突然又传到B端,被误认为是A端再次发出的一个新的连接请求,如果B端这时又再次向A发出确认报文,表示同意建立连接,就会产生错误。

第一次是A端向B端发送请求,如果是只有一次握手的话,A端不知道B端是不是收到了这个请求。

第二次是B端确认收到A端请求,如果只有两次的话,B端不确定A端是否收到了确认消息,这个确认消息有可能会在半路丢了。

第三次是A端确认收到了B的确认消息,A和B双方都是通的,然后AB就可以建立连接相互通信了。

![](https://gitee.com/chenyy-2017/pic/raw/master/note/59bd6d1dff4f17d36c9446fa87e1f9cf_.jpg)

四次挥手

四次挥手的本质原因是tcp是全双公的,通信是双向的, A到B是一个通道,B到A又是另一个通道。

A端确认没有数据发送后,发出结束报文,此时B端返回确认后,B端也不会接收A端数据。

但是此时B端可能还有数据没有传输完,A端还是可以接收数据。

只有当B端数据发送完之后,才能发出结束报文,并且确认A端接收到的时候,两边才会真正的断开连接,双方的读写分开。

![](https://gitee.com/chenyy-2017/pic/raw/master/note/eccc7a3872de7084fd0f7a2b43f8838b_.jpg)

四次挥手释放连接时,等待2MSL的意义?

第 一,为了保证A发送的最有一个ACK报文段能够到达B。

这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN和ACK 报文段的确认。B会超时重传这个FIN和ACK报文段,而A就能在2MSL时间内收到这个重传的ACK+FIN报文段。接着A重传一次确认。

第二,就是防止上面提到的已失效的连接请求报文段出现在本连接中。

A在发送完最有一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。

参考:

tcp建立连接为什么需要三次握手:https://www.jianshu.com/p/e7f45779008a

TCP三次握手四次挥手详解:https://www.cnblogs.com/zmlctt/articles/3690998.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-04-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 三次握手
  • 四次挥手
    • 四次挥手释放连接时,等待2MSL的意义?
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档