原因:tcp_tw_recycle默认是关闭的,有不少服务器,为了提高性能,开启了该选项。如果同时激活tcp_timestamps和tcp_tw_recycle,在一些高并发的 WebServer上,为了端口能够快速回收,打开了net.ipv4.tcp_tw_recycle,而在关闭 net.ipv4.tcp_tw_recycle的时候,kernal 是不会检查对端机器的包的时间戳的;打开了 tcp_tw_reccycle 了,就会检查时间戳,很不幸移动的cmwap发来的包的时间戳是乱跳的,所以服务器就把带了“倒退”的时间戳的包当作是“recycle的tw连接的重传数据,不是新的请求”,于是丢掉不回包,造成大量丢包。

解决办法:

1、推荐关闭net.ipv4.tcp_tw_recycle

修改/etc/sysctl.conf  把net.ipv4.tcp_tw_recycle=1这条删除或者改为0

sysctl -p 配置生效

2、关闭时间戳功能tcp_timestamps

修改/etc/sysctl.conf 添加tcp_timestamps=0

sysctl -p 配置生效