tcp_tw_recycle导致NAT网络TCP连接失败

问题描述:

同时使用4个手机一起登陆游戏,会出现有手机登陆不上的问题(4个手机用wifi连在同一个局域网内)

使用同一内网中多个pc同时登陆游戏,都可以正常登陆


我们游戏登陆流程大概是 客户端先登陆Login Server,获取到Game Server的IP和端口,然后服务器主动断开连接,客户端再去连接Game Server


实验发现,手机上登陆不上的客户端,反复登陆,还是登陆不上,这时候使用命令发现有socket处于TIME_WAIT状态,等到TIME_WAIT状态结束,再登陆,则可以正常登陆

由于TCP执行主动关闭的一方才会经历TIME_WAIT状态,所以很容易想到,由客户端执行主动关闭,问题果然解决了。


但还是有不解的地方,于是在网上找到了如下参考连接,大概原因是说,由于服务器设置了 tcp_tw_recycle导致的问题,查看服务器 /etc/sysctl.conf 文件,果然设置了此参数,于是把sysctl.conf文件清空,再使用手机登陆,但还是有手机登陆不上,然后把tcp_tw_recycle改为0,并执行sysctl -p命令,就正常了,4个手机都能正常登陆。


参考连接:

http://huoding.com/2012/01/19/142

http://chenzhenianqing.cn/articles/1150.html


通过以上文章分析,可能出现问题的原因如下:

一个客户端连上Login Server,获取到Game Server的信息,然后Login Server主动断开连接,此时Login Server 的 Socket处于TIME_WAIT状态,由于设置了 tcp_tw_recycle参数,导致TIME_WAIT状态的socket被回收,而连接的端口信息被清除,但IP和时间戳仍被保存,倒是后来上来的分节如果时间戳小于此ip上之前的时间戳,则此分节会被丢弃。此处分析比较粗略,具体分析可参考上面的链接。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值