一、四次挥手

tcp连接关闭时需要四次握手,如下图所示:

TIME_WAIT是什么?

二、四次状态变化

在tcp断开的过程中会有四个状态变化过程,如下图所示:

TIME_WAIT是什么?

在连接关闭过程中,有如下过程:

(1)host1上的应用程序关闭己方的连接导致tcp发送一个FIN消息给host2.

(2)host2 发送一个确认消息给host1,并且host2把fin作为EOF递交给HOST2上的应用程序。

(3)一段时间过后,host2 上的应用程序关闭它那边的连接,引发一个fin消息给host1.

(4)host1给host2发送一个确认消息,然后host2关闭连接并释放资源,然而,host1却没有关闭连接,而是进入了TIME_WAIT状态,并为两个最大段生存时间(2MSL)保留在此状态

三、 为什么需要TIME_WAIT?

(1) 因为在第四步的时候,HOST1发送的ACK可能丢失并导致HOST2重新发送FIN消息,TIME_WAIT维护连接状态。

​ 如果执行主动关掉的一方HOST1不进入到TIME_WAIT状态就关闭连接那会发生什么?当重传的FIN 消息到达时, 因为TCP已经不再连接的信息了,所以就用RST(重新启用)信息应答,导致HOST2进入错误的状态而不是有序终止状态,如果发生最后ACK信息的一方处于TIME_WAIT状态仍然记录着连接的信息,它就可以正确的响应对等方host2的fin信息了

(2)TIME_WAIT为连接中“离群的段”提供从网络中消失的时间。

考虑一下,如果延迟或者重传段在连接关闭后到达时会发生什么呢?通常情况下因为tcp仅仅丢弃该数据并响应RST消息,所以这不会造成任何问题。当RST消息到达发出延时段的主机时,因为该主机也没有记录连接的任何信息,所以它也丢弃该段。然而,如果两个相同主机之间又建立了一个具有相同端口号的新连接,那么离群的段就可以被看成是新连接的,如果离群的段中数据的任何***恰恰在新连接的当前接收窗口中,数据就会被重新接收,其结果就是破坏新连接

相关文章:

  • 2021-11-03
  • 2022-12-23
  • 2022-12-23
  • 2022-02-08
  • 2022-12-23
  • 2022-12-23
  • 2021-12-05
  • 2021-12-22
猜你喜欢
  • 2021-10-20
  • 2022-12-23
  • 2021-07-24
  • 2022-12-23
  • 2022-02-09
  • 2022-12-23
  • 2021-11-07
相关资源
相似解决方案