TCP三次握手及关闭时的2MSL分析

来源:互联网 发布:华为记录运动数据 编辑:程序博客网 时间:2024/06/06 19:02

   TCP/IP三次握手四次挥手,是非常重要的,这个链接与关闭过程也是很简单的,但为什么是三次握手?以及为什么要等待2MSL的状态?大部分人也许听到这个问题就蒙了,这篇博客就综合《TCP/IP详解:卷一》来分析一下原因:

下面看TCP三次握手四次挥手的原理图:


1.为什么要三次握手?

     为了避免已失效的连接报文段又到达可服务器。考虑这样一个正常的情况:

   假设TCP连接是两次握手。当客户端发送了一个请求连接的报文时,由于网络原因这个报文丢失了,那么客户端一段时间内没有收到服务器的确认就会再次发送请求连接报文,这次服务器收到了,双方都建立了连接,然后数据传输,最后关闭连接。

  但是考虑一下,上文中的丢失数据包若没有丢失,只是在一个网络节点长时间滞留了,这时双方都已经关闭了连接,此时服务器又收到了丢掉了的数据包,认为客户端又要建立连接,因为是两次握手所以服务器向客户端发送了确认报文,并变 为 建立连接状态。

   可想而知客户端并没有发起连接所以会忽略服务器的确认,这样就浪费了服务器的资源。

2.为什么要等待2MSL时间?

      1.  当客户端的最后一次确认连接的报文丢失(第四次挥手发送的),服务器会再次发送FIN报文,等待客户端的确认,客户端在2MSL内收到服务器重传的报文再次确认(防止此时客户端已经关闭)。

      2.  2MSL 的时间可以使所有已失效的报文都消失(防止对新建的连接造成影响),若在不等待2MSL,马上建立新的连接,那么在关闭连接前发送的失效报文段很可能影响本次连接。

   然而,TCP规定处于2MSL状态的的插口对(客户端IP/端口和服务器IP和端口)不能再次被使用。 若在2MSL状态下新建连接可以使用这个插口对,当已失效的数据包再次到达这个新连接,判断插口一致就会接受这个报文,但实际上这不是新建连接交互的数据,因此不能使用此无效数据包。

      


0 0
原创粉丝点击