TCP 连接为什么需要 3 次握手和 4 次挥手

Posted liang1101

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP 连接为什么需要 3 次握手和 4 次挥手相关的知识,希望对你有一定的参考价值。

  技术图片

 

1、为什么需要 3 次握手

  目的:为了防止 已失效的连接请求报文段 突然又传送到了服务端,因而产生错误。主要防止资源的浪费。

  额外补充:TCP作为一种可靠传输控制协议,其核心思想:既要保证数据可靠传输,又要提高传输的效率,而用三次恰恰可以满足以上两方面的需求!两次无法保证数据可靠,四次及以上无法保证效率。

   详解过程:

    当客户端发出第一个连接请求报文段时并没有丢失,而是在某个网络节点出现了长时间的滞留,以至于延误了连接请求,然后在某个时间之后才到达服务器。

    这应该是一个早已失效的报文段。

    但是服务器在收到此失效的连接请求报文段后,以为是客户端的一个新请求,于是就响应客户端发出了确认报文段,同意建立连接。

    假设不采用三次握手,那么只要服务器发出确认后,新的连接就可以建立了。但是由于客户端没有发出建立连接的请求,因此不会管服务器的确认,也不会向服务器发送数据,但服务器却以为新的运输连接已经建立,一直在等待,所以,服务器的资源就白白浪费掉了。

    采用 “三次握手” 的办法可以防止上述现象发生,例如上面提到的这种情况,client 不会像 server 的确认发出确认。server 由于收不到确认,就知道 client 并没有要求建立连接。

2、为什么断开连接需要 4 次挥手

  目的:防止 “已失效的连接请求报文” 出现在连接中,在释放连接的过程中会有一些无效的滞留报文,这些报文在经过2MSL的时间内就可以发送到目的地,不会滞留在网络中。这样就可以避免在下一个连接中出现上一个连接的滞留报文了

  详解过程:

    为了保证在最后断开的时候,客户端能够发送最后一个ACK报文段能够被服务器接收到

    如果客户端在收到服务器给它的断开连接的请求之后,回应完服务器就直接断开连接的话,若服务器没有收到回应就无法进入CLOSE状态,所以客户端要等待两个最长报文段寿命的时间,以便于服务器没有收到请求之后重新发送请求。

 

以上是关于TCP 连接为什么需要 3 次握手和 4 次挥手的主要内容,如果未能解决你的问题,请参考以下文章

了解TCP连接中的3次握手与4次挥手

了解TCP连接中的3次握手与4次挥手

TCP三次握手和四次挥手

TCP 连接三次握手、四次挥手

网络自定向下的学习——TCP3次握手和4次挥手详解

计网 - 传输层协议 TCP:TCP 为什么握手是 3 次挥手是 4 次?