NAT环境中tcp_tw_recycle造成的部分机器无法连接Linux机器

为什么80%的码农都做不了架构师?>>>   hot3.png

近期,笔者维护的服务器环境出现了一些连接异常,一些机器能连接,一些机器不能连接,windows都可以正常连接。

内网的Linux机器,通过NAT映射对外提供服务,因为之前routeOS的配置原因,导致客户端IP全变为routeOS的内网关ip, 久久排查经过抓包发现,内网的Linux机器接收到了TCP SYN数据包,却没有作任何响应。


结论就是:

客户端在建立一个tcp连接时,可以携带自己的timestamp, 以防止检测数据包重发行为。当服务器收到同一个IP的SYN包时,就会去比较时间戳,检查SYN包的时间戳是否滞后,如果滞后,就将其丢掉(认为是旧连接的数据)。无论是客户端还是服务器端,如果任何一方用NAT方式连接,就可能产生这个问题的。


更重要的是,大量的移动用户,均是通过NAT方式共享连接3G/4G网络的,多个用户可能来自相同的出口IP, 如果不慎,就可能产生这个问题。

net.ipv4.tcp_tw_recycle 

net.ipv4.tcp_timestamps


以上两个参数,任何一个设置为0即可。

参数具体含义,请自行在网上搜索。

转载于:https://my.oschina.net/zxu/blog/599822

你可能感兴趣的:(NAT环境中tcp_tw_recycle造成的部分机器无法连接Linux机器)