zoukankan      html  css  js  c++  java
  • 负载均衡服务器中存在大量的TIME_WAIT怎么解决

    首先需要明白什么是TIME_WAIT。TIME_WAIT是在tcp断开连接时进行四次回收的时候,主动断开端在收到被动关闭端的FIN包并发送ACK包给被动关闭后进入的状态。这个状态默认情况下是2倍的MSL(Max segment lifetime,数据段在网络中的最大存活时间),设置TIME_WAIT的主要目的主要有三个:

    1.确保被动关闭端收到了第四次握手的ACK包,否则被动关闭端在LAST_ACK状态中会超时重传FIN包,浪费带宽。

    2.tcp的端口是可以复用的,这次用完这个端口,下次建立连接时,还是可以用这个端口(想想socket,就是个源IP、源port、目的IP、目的port、协议类型这样一个五元组),在复用这个端口后,可能又收到了遗留在网络中的上一次连接的包比如是个FIN包,导致自己又要发送一个RST包。有了TIME_WAIT,那么FIN包肯定已经不会有了(有两倍的MSL啊)。

    3.如果没有TIME_WAIT,但主动关闭端企图发起一个新的tcp连接并且发出第一次握手消息(SYN置1),被动关闭端可能此时还处在LAST_ACK状态,它此时在等待的是一个ACK包,却收到一个SYN包,于是他返回一个RST包,导致新连接失败。有了TIME_WAIT,可以避免这种情况发生。

    所以,TIME_WAIT很重要,并且时长为2MSL,通常为30秒,当有大量的短连接是,就会导致出现大量的TIME_WAIT。

    未完待续~~

  • 相关阅读:
    HDU 3033 I love sneakers!
    HDU 1712 ACboy needs your help
    FZU 1608 Huge Mission
    HDU 3394 Railway
    【MySQL】20个经典面试题,全部答对月薪10k+
    mysql故障解决笔记
    mysql 索引类型
    linux禁用锁定和解除解锁用户账号的方法
    Linux服务器制定mysql数据库备份的计划任务
    网站服务器安全防范小知识
  • 原文地址:https://www.cnblogs.com/JMLiu/p/8886751.html
Copyright © 2011-2022 走看看