记录一次net.ipv4.tcp_tw_recycl快速回收机制导致的tcp连接失败问题

背景:

        公司业务为长连接业务,然后部分用户反馈至客服为连接失败(登录),通过分析日志和抓包看是有请求包到达服务端的,但是没有回包,然后联系云厂商查看后台针对cvm的实例监控,发现有部分客户端的syn包会持续被丢弃,导致tcp连接无法建立。

原因:

        服务端这边其中某一台负责建立连接的机器,开启了以下两个参数

        net.ipv4.tcp_tw_recycle,tcp_timestamps

        net.ipv4.tcp_tw_recycle开启后可以快速回收tcp连接中timewait状态的连接,当连接处于TIME_WAIT状态时,会占用2MSL,相同四元组(源地址,源端口,目标地址,目标端口)的连接无法创建,所以有些场景为了尽快释放资源所开启此参数,但是当tcp_timestamps此参数也同时开启时(默认开启),会针对客户端请求来时的包记录发出时的时间戳,此时问题来了,客户端或者服务端处于nat网络环境中时(客户端比如在网吧、家庭带宽等,服务端比如用了反向代理lb之类的),公用出口ip或者源ip,就会因为时间戳原因丢掉一些建立请求的syn包。

举例:

        玩家1和服务端建立了请求,然后syn带了一个时间戳,玩家2和服务端建立了请求,然后带了一个时间戳,玩家1和玩家2对于服务端来说是同一个ip,此时玩家1再次和服务端建立请求时,服务端会校验此ip本次连接的时间戳是否小于上次连接的时间戳,如果小于则丢弃。

参考文档:      

         tcp_tw_recycle引起的TCP握手失败 - 灰信网(软件开发博客聚合)

        深挖由tcp_tw_recycle引发的业务超时问题 - 知乎

        TCP timestamp | 天赋 无与伦比的坚持

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值