NAT环境中tcp_tw_recycle造成的部分机器无法连接Linux机器
2016-01-08 17:23
411 查看
近期,笔者维护的服务器环境出现了一些连接异常,一些机器能连接,一些机器不能连接,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即可。
参数具体含义,请自行在网上搜索。
内网的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即可。
参数具体含义,请自行在网上搜索。
相关文章推荐
- 【Linux】Linux C socket 编程之UDP
- linux下mysql的root密码忘记解决方
- 将程序从windows平台迁移到Linux平台
- Linux安装jdk
- centos基本操作命令
- Linux学习笔记——慕课 Linux达人养成计划 I
- Centos上安装eclipse
- Linux笔记(3)——设备文件名与挂载
- linux服务器重启init 6和reboot区别
- 每天一个Linux之tail命令
- centos 下安装 php 5.6,测试方法可用
- centos6.5配置nfs服务详细
- linux性能测试命令
- linux 进程死锁
- 嵌入式linux问题杂锦
- Linux raw socket
- 64位centos6.5安装mysql-5.6.25问题解决
- Ubuntu、CentOS、debian下Zabbix agent自动安装脚本
- Linux下更改Mysql数据库密码
- 总结:c 语言与Linux操作系统的关系