理解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)
上一篇 2022年5月12日 下午7:00
下一篇 2022年5月12日 下午7:00


相关推荐

  • 极大平面图

    极大平面图一特殊平面图1极大平面图及其性质极大平面图的两种情况,一种是K1到K4四种特殊情况,即1阶到4阶的完全图是极大可平面图另一种就是一般的情况,任意非邻接顶点间添加一条边后,得到的图均是非可平面图。二、平面图的对偶图…

    2022年5月12日
    68
  • 360 安全 OpenClaw 龙虾 – 开箱即用,无需复杂配置!

    360 安全 OpenClaw 龙虾 – 开箱即用,无需复杂配置!

    2026年3月16日
    2
  • websocket 实现长连接原理「建议收藏」

    websocket 实现长连接原理「建议收藏」一、WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)首先HTTP有1.1和1.0之说,也就是所谓的keep-alive,把多个HTTP请求合并为一个,但是Websocket其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的握手规范而已,也就是说它是HTTP协议上的一种补充可以通过这…

    2022年7月11日
    80
  • http.sys远程代码注入漏洞

    http.sys远程代码注入漏洞http.sys是一个位于Win2003和WinXPSP2中的操作系统核心组件,能够让任何应用程序通过它提供的接口,以http协议进行信息通讯。主要存在于在Windows+IIS环境下,影响了包括Windows7、WindowsServer2008R2、Windows8、WindowsServer2012、Windows8.1和WindowsServer2012

    2022年7月25日
    11
  • 中科院计算机生物学,中科院计算生物学重点实验室揭牌[通俗易懂]

    中科院计算机生物学,中科院计算生物学重点实验室揭牌[通俗易懂]德国马普学会副主席HerbertJaeckle和中科院副院长李家洋共同为重点实验室揭牌3月29日下午,中科院计算生物学重点实验室在上海生科院计算生物学所正式揭牌。德国马普学会副主席HerbertJaeckle教授、德国马普学会分子植物生理所所长LotharWillmitzer教授、中科院副院长李家洋院士、中科院生命科学与生物技术局局长张知彬研究员、国际合作局局长吕永龙研究员,上海生科院副院长…

    2022年7月27日
    12
  • js split str.split(" "); split使用方法 在某处截字符串

    js split str.split(" "); split使用方法 在某处截字符串

    2021年12月7日
    68

发表回复

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

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