TCP参数tcp_tw_recycle调整

   最近一直在开发移动端的接口,在内部测试的时候发现这么个奇怪现象:linux

 

   现象:服务器

   一部Android手机访问服务器响应没什么问题,当使用两部Android手机同时访问的时候会出现有一部手机访问不了接口的现象。tcp


    解决思路:ide

    遇到这种问题首先想到的是使用linux命令查看下TCP链接数量,netstat -n|grep 8888测试

发现每当两部手机同时打开APP时只有一个TCP链接,那问题应该是在创建TCP链接上,因而带着疑问百度了一下,果真网上有不少这个样的解决方案:
设计

关闭服务器的tcp_tw_recycle,
接口

修改下TCP的参数:echo 0 > /proc/sys/net/ipv4/tcp_tw_recycle,ip

而后继续测试,问题解决。开发


  总结:这个总结是说明下出现该问题的场景以及解决方法,这个问题大多数出如今nat上网的场景下,缘由跟TCP的设计与实现有关系:TCP协议中有个TimeStamp选项,在timewait时间里,若是还有该ip syn包到达服务器,并且timestamp是以前的间,linux会认为是重试的syn包,故而会直接drop掉。it

相关文章
相关标签/搜索