专栏首页chenchenchen为什么tcp建立连接需要三次握手,断开连接需要四次挥手

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

三次握手

三次握手的目的,是为了防止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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • TCP为什么建立连接需要三次握手,而断开连接则需要四次?

    一个 segment 包含 header 和 data 两个部分,对于这篇文章需要理解的就是,Sequence number 和 Acknowledgement...

    程序员小强
  • 为什么TCP的连接建立需要三次握手?

    互联网的通信都是遵循着一定的协议的,通信双方必须经过一些约定俗成的协议才能互相通信,不然我说中文,你说英文,两者相互听不懂对方的消息,这样是无法通信的,因此就必...

    xujjj
  • 为什么 TCP 建立连接是三次握手,关闭连接确是四次挥手呢?

    我们知道网络层,可以实现两个主机之间的通信。但是这并不具体,因为,真正进行通信的实体是在主机中的进程,是一个主机中的一个进程与另外一个主机中的一个进程在交换数据...

    Criss@陈磊
  • 为什么 TCP 建立连接是三次握手,关闭连接确是四次挥手呢?

    我们知道网络层,可以实现两个主机之间的通信。但是这并不具体,因为,真正进行通信的实体是在主机中的进程,是一个主机中的一个进程与另外一个主机中的一个进程在交换数据...

    Java技术栈
  • 为什么 TCP 建立连接是三次握手,关闭连接确是四次挥手呢?

    https://blog.csdn.net/qzcsu/article/details/72861891

    一个优秀的废人
  • TCP连接的建立(三次握手)和释放(四次挥手)

    所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。  三次握手的目的是连接服务器指定端口,建...

    汤高
  • 【漫画】TCP断开连接为什么是四次挥手,不是二次挥手/三次挥手?

    小萌:额...哦!这就是两次挥手,我这里就好比是服务端还有消息没发送完,乔哥你的客户端就突然把我拉黑(断开了连接),导致我(服务器)这里还有消息给你,但你因为关...

    乔戈里
  • TCP为什么需要3次握手与4次挥手

    http://blog.csdn.net/xifeijian/article/details/12777187

    bear_fish
  • TCP为什么需要3次握手与4次挥手

    http://blog.csdn.net/xifeijian/article/details/12777187   (排名655)

    bear_fish
  • 为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?

    看到了一道面试题:“为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?为什么不能用两次握手进行连接?”,想想最近也到金三银四了,所以就查阅了相关资料...

    平头哥的技术博文
  • java---网络知识点---TCP三次握手连接 断开四次挥手

    一、TCP握手协议  在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。  第一次握手:建立连接时,客户端发送syn包(syn=...

    wust小吴
  • [TCP/IP] TCP关闭连接为什么四次挥手

    1.建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。

    陶士涵
  • 为什么TCP 建连接要3次,断连接却要4次呢?

    而TCP所谓的“连接”,其实只不过是在通讯的双方维护一个“连接状态”,让它看上去好像有连接一样。所以,TCP的状态变换是非常重要的。

    架构精进之路
  • TCP协议为什么需要三次握手?

    TCP实现原理和为什么需要三次握手?两次握手不可以?四次握手不可以?读者可以带着疑问,看一遍本篇博客的详细讲解

    SmileNicky
  • 网络编程之TCP为什么需要3次握手与4次挥手

    在谢希仁著《计算机网络》第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。在另一部经典的《计算机网...

    lyb-geek
  • 白话TCP为什么需要进行三次握手

    第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

    良月柒
  • 【漫画】TCP连接为什么是三次握手,而不是两次握手,也不是四次握手?

    乔哥:你说“喂喂喂,能听到我说话吗?”,是第一次握手,也就是说小萌你的发送消息的能力没有问题,然后我回了你一句“小萌,我可以听到你说话,你能听到我说话吗?”这是...

    Java识堂
  • 【漫画】TCP连接为什么是三次握手,而不是两次握手,也不是四次握手?

    乔哥:你说“喂喂喂,能听到我说话吗?”,是第一次握手,也就是说小萌你的发送消息的能力没有问题,然后我回了你一句“小萌,我可以听到你说话,你能听到我说话吗?”这是...

    乔戈里
  • 令人懵逼的TCP三次握手过程:连接建立,连接管理和连接中断

    我想任何人只要对TCP协议有一丁点了解,都会知道它有一个三次握手过程。然而你未必知道这三次握手过程其实非常复杂,而且成本很高,很多上层协议就是为了避免三次握手带...

    望月从良

扫码关注云+社区

领取腾讯云代金券