Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

三次握手

 Image Modified

TCP三次握手变2次会有什么问题

  1. 客户端第一次发出连接请求,因为一些网络原因长时间滞留。
  2. 此时因为一直没有接到服务端确认应答,发出第二次连接请求。
  3. 第二次连接请求被服务端处理并建立了连接,当数据传输结束后关闭连接。
  4. 第一次因为网络原因长时间滞留的第一次的请求,终于到达了服务端。
  5. 服务端处理后又会建立连接,但是此时客户端已经结束任务了。
  6. 所以客户端会忽略服务端的确认,也不会进行数据传输。
  7. 所以服务端会一直等待客户端传输数据,造成资源浪费。

四次挥手

Image Modified

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

MSL是Maximum Segment Lifetime的英文缩写,可译为“最长报文段寿命”,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。

  • 保证客户端发送的最后一个ACK报文段能够到达服务端

    • 保证客户端发送的最后一个ACK报文段能够到达服务器,确保服务器也能正常关闭。
    • 因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。
    • 服务器会超时重传这个FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。 最后客户端和服务器都能正常的关闭。
    • 假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。
  • 防止“已失效的连接请求报文段”出现在本连接中

    • 客户端在发送完最后一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失,使下一个新的连接中不会出现这种旧的连接请求报文段。

参考资料





Panel
titleContent Menu

Table of Contents