TCP/IP三次握手四次挥手中的两个问题-----通俗解析

问题一:两次握手后也可以建立连接,为什么还需要第三次握手之后才能传送数据?也即第三次握手有什么用?

TCP/IP三次握手四次挥手中的两个问题-----通俗解析

 

答:如果没有第三次握手,可能会出现以下情况:

        由于连接过程中发出的数据包可能会走不同的路线,A主动发起连接建立请求所发出的数据包(第一次握手)可能会选择一条较远的路径(用时较长),经过一段时间如果没有收到B的回复,就会重新发送一个数据包(超时重传),B在收到数据包后就会给出相应回复,然后等待A发数据过来。A在收到B的回复(第二次握手)后就开始传数据。在传送数据的过程中B又收到了A第一次发送的走远路径到达的那条请求消息,此时B将再一次回复,试图与A建立第二条连接,但这时候A已经在传数据,就不理会B第二次发送的确认连接。这将导致B的第二条连接一直处于等待状态,造成B计算机的资源浪费。如果这种情况比较多,严重的话会导致B计算机瘫痪掉。

        所以在第二次握手后A还要给B一个确认,B收到确认信息后(第三次握手),B认为第二次握手是有效的,就不再回复其他的请求信号。如果没有收到第三次的确认信号,B计算机等待一段时间之后就释放,不等了。三次握手完成后就准备接收A发送的数据。

 

问题二:TIME-WAIT状态存在的意义?有什么用?

TCP/IP三次握手四次挥手中的两个问题-----通俗解析

答:MSL=2分钟,2MSL=4分钟

计算机A有TIME-WAIT状态的原因是因为它要等待主机B收到第四次挥手的信号。

假设主机A发出第四次挥手信号后直接关闭,进入closed状态,可能会发生以下情况:

         第四次挥手信号在传输过程中丢失,主机B由于没有收到第四次挥手信号,超时重新给A发送第三次挥手信号时A已经关闭,无法接收该信号,这将导致主机B一直处在last-ack状态而无法关闭。

        所以A在发出第四次挥手信号后需要等待2MSL的时间,以备B再次发送第三次挥手信号的时候能够及时作出回应。