理解TIME_WAIT,彻底弄清解决TCP: time wait bucket table overflow

理解TIME_WAIT,彻底弄清解决TCP: time wait bucket table overflow一直对这个问题知其然而不知其所以然,这些日子再次碰到,看了很多的资料,彻底解决一下,呵呵,先上个图,所有理解围绕着此图来看,此图描述了四次挥手的整个过程:650)this.width=650;”title=”QQ截图20160425180531.png”alt=”wKiom1cd6_mwEZr2AACU62IiAp4333.png”src=”http://s5.51cto.com/wyfs

大家好,又见面了,我是你们的朋友全栈君。

    一直对这个问题知其然而不知其所以然,这些日子再次碰到,看了很多的资料,彻底解决一下,呵呵,先上个图,所有理解围绕着此图来看,此图描述了四次挥手的整个过程:

wKiom1cd6_mwEZr2AACU62IiAp4333.png

通过此图先说明几个概念:

TIME_WAIT的产生条件:主动关闭方在发送四次挥手的最后一个ACK会变为TIME_WAIT状态,保留次状态的时间为两个MSLlinux里一个MSL30s,是不可配置的)


TIME_WAIT两个MSL的作用:可靠安全的关闭TCP连接。比如网络拥塞,主动方最后一个ACK被动方没收到,这时被动方会对FIN开启TCP重传,发送多个FIN包,在这时尚未关闭的TIME_WAIT就会把这些尾巴问题处理掉,不至于对新连接及其它服务产生影响。


TIME_WAIT占用的资源:少量内存(查资料大概4K)和一个fd


TIME_WAIT关闭的危害:1、  网络情况不好时,如果主动方无TIME_WAIT等待,关闭前个连接后,主动方与被动方又建立起新的TCP连接,这时被动方重传或延时过来的FIN包过来后会直接影响新的TCP连接;

2、  同样网络情况不好并且无TIME_WAIT等待,关闭连接后无新连接,当接收到被动方重传或延迟的FIN包后,会给被动方回一个RST包,可能会影响被动方其它的服务连接。


TCP: time wait bucket table overflow产生原因及影响:原因是超过了linux系统tw数量的阀值。危害是超过阀值后﹐系统会把多余的time-wait socket 删除掉,并且显示警告信息,如果是NAT网络环境又存在大量访问,会产生各种连接不稳定断开的情况。

 

 

相关参数优化调整(当然得根据服务器的实际情况配置,这里着重讲参数意义):

    既然知道了TIME_WAIT的用意了,尽量按照TCP的协议规定来调整,对于twreuserecycle其实是违反TCP协议规定的,服务器资源允许、负载不大的条件下,尽量不要打开,当出现TCP: time wait bucket table overflow,尽量调大下面参数:

tcp_max_tw_buckets = 256000 

调整次参数的同时,要调整TIME_WAIT_2TIME_WAIT的超时时间,默认是60s,优化到30s

net.ipv4.tcp_fin_timeout = 30

其它TCP本身的配合参数类似与synack重传次数、syn重传次数等以后介绍,优化后也是有所益处的。

 

     下面再说一下linuxTIME_WAIT专有的优化参数reuserecycle,默认也都是关闭的,这两个参数必须在timestamps打开的前提下才能生效使用:

net.ipv4.tcp_timestamps = 1

net.ipv4.tcp_tw_reuse = 1

机器作为客户端时起作用,开启后time_wait在一秒内回收

net.ipv4.tcp_tw_recycle = 0 不要开启,现在互联网NAT结构很多,可能直接无法三次握手

开启后在3.5*RTO(RTO时间是根据RTT时间计算而来)内回收TIME_WAIT,并60s内同一源ip主机的socket connect请求中的timestamp必须是递增的,对于服务端,同一个源ip可能会是NAT后很多机器,这些机器timestamp递增性无可保证,服务器会拒绝非递增请求连接,直接导致不能三次握手。

本文出自 “奔跑的linux” 博客,请务必保留此出处http://benpaozhe.blog.51cto.com/10239098/1767612

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144907.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sudoers修改_ubuntu sudoers 文件修改「建议收藏」

    sudoers修改_ubuntu sudoers 文件修改「建议收藏」自己作死,没有用visudo修改/etc/sudoers文件,结果导致sudoers文件出错,sudo无法使用。在网上找了一圈才搞好,哎!首先,不要慌,重启电脑,切换到recovery模式:###########开机后长按shift键,进入选择启动的界面光标移动到advance模式(14.04是第二排的)按enter进入后,选择recoverymode切换到rootroot@use…

    2022年6月20日
    46
  • dirsearch使用_elasticsearch fielddata

    dirsearch使用_elasticsearch fielddatadirsearch配置1.下载地址:https://github.com/maurosoria/dirsearch/archive/master.zip2.安装3.7以上版本python或者gitclonehttps://github.com/maurosoria/dirsearch.gitcddirsearchpip3install-rrequirements.txtpython3dirsearch.py-u<URL>-e<EXTENSI

    2022年10月5日
    0
  • Codeforces 432 D. Prefixes and Suffixes

    Codeforces 432 D. Prefixes and Suffixes

    2022年1月14日
    50
  • densenet解析_给我一个承诺详细解读

    densenet解析_给我一个承诺详细解读这篇文章是DenselyConnectedConvolutionalNetworks的解读,在精简部分内容的同时补充了相关的概念。如有错误,敬请指正。

    2022年9月29日
    0
  • 理解的英文_Spring ioc

    理解的英文_Spring ioc前言:这是在慕课网上学习SpringBoot2.0深度实践之核心技术篇时所做的笔记,主要供本人复习之用。目录第一章概要1.1基本使用1.1.1直接运行1.1.2自定义1.2用到的基础技术1.3用到的扩展衍生技术第二章SpringApplication的准备阶段2.1配置SpringBean的来源2.2推断Web应用类型2.3推断引…

    2022年9月10日
    0
  • 51单片机抢答器程序_用keil编写4路抢答器程序

    51单片机抢答器程序_用keil编写4路抢答器程序基于AT89C51单片机的八路抢答器设计方案毕业设计(论文)-基于AT89C51单片机的八路抢答器设计图书分类号:密级:毕业论文基于AT89C51的八路抢答器设计OCTALANSWERDESIGNACCORDINGONAT89C51班级学号学生姓名学院名称信电学院专业名称电子信息工程技术指导教师2010年05月20日摘要本设计是以八路抢答为基本理念。考虑到依需…

    2022年10月20日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号