Time_Wait相关问题

TCP四次挥手

Time_Wait相关问题_第1张图片

步骤

  1. 主机1发送FIN报文,主机2进入CLOSE_WAIT状态,并发送一个ACK应答。
  2. 主机2通过read调用获得EOF,并将次结果通知应用程序进行主动关闭,发送FIN报文。
  3. 主机1在接收到FIN报文后发送ACK应答,此时主机1进入TIME_WAIT状态。

TIME_WAIT的特点

  1. 主动关闭方最后才会进入TIME_WAIT状态
  2. TIME_WAIT停留持续时间是固定的,是MSL的两倍(maximum segment lifetime- 最长分节生命期),一般TIME_WAIT为60s
  3. 2MSL的时间是从主机1接收到FIN后发送ACK开始计时,弱国主机1的ACK没有到达主机2,又收到了主机2发的FIN报文,那么会重新计时

TIME_WAIT的作用

  1. 确保最后的ACK能让被动关闭方接收,帮助其征程关闭
  2. 为了让旧连接的重复分节在网络中自然消失(因为可能旧连接关闭了,又开了一个与旧连接类似的连接,这个包就会影响到新的连接)

TIME_WAIT的危害

  1. 占用端口,导致一些端口连接不上
  2. 占用内存

解决TIME_WAIT带来的连接不上的问题

  1. net.ipv4.tcp_tw_reuse:处于TIME_WAIT的套接字也可以被复用

思考

  1. 最大分组存活时间MSL是怎么计算出来的?怎么样的机制,可以保证在MSL达到后,报文就可以自然消亡?
    MSL是处于工程上的考虑。MSL区别于TTL。

你可能感兴趣的:(网络编程,网络,服务器,tcp/ip)