记录一次,三次握手中缺少第二次握手导致的问题(即缺少SYN ACK返回,实际是tcp_tw_recycle设置导致的问题)

三次握手中缺少第二次握手导致的问题

阿里云新购的ECS,镜像使用的微柳科技的Centos7+PHP环境,实际使用中发现如下现象:
1.公司IP/某常用IP经常无故无法连接服务器(包括ssh-22,mysql-3306,http-80等)
2.在公司IP无法连接的时候,手机网或其他IP网络,可以连上
3.关闭防火墙,开启阿里安全组也不行
4.服务器抓包正常连接ssh的包大概有30行,非正常的连接只有一行SYN包,没有SYN ACK包
5.最突出的现象,时断时续

解决过程:

刚开始以为是服务器的问题,为此加了好几个centos/linux群请教几个群主等,他们听完描述后基本上告诉我是公司网络的问题,我在公司网络上也花费了很多时间,却始终未解决问题.
其实在这时候,抓包已经做过了,对于服务器没有返回SYN ACK包也看到了,也怀疑了,但却不知道怎么百度这个问题,因为无法对这个第二次握手增加准确的关键词来描述(百度”三次握手 第二次”之类的关键词,结果都是知乎的文章,我也是醉了).
后来实在没办法,只能自补一下三次握手,然后从中抽取出 SYN ACK这个关键词,百度这个词得到了tcp_tw_recycle这个设置,看了前辈们的描述,立马感觉就是这个问题,依法配置服务器后,得到解决.
解决办法较为简单

#>vi /etc/sysctl.conf
//将以下两项置0
net.ipv4.tcp_tw_recycle=0
net.ipv4.tcp_timestamps = 0
//之后执行sysctl -p或重启
#>sysctl -p

注:本人直接修改了以上两项,建议各位了解以上两项后再做修改,因为这两项是基础配置,而且tcp_timestamps 还有其他用处.
总结:基础知识永不过时,思路大于做事.

在此补充两个抓包图
正常包:
抓的正常包
异常包:
抓的异常包
图2中,只有SYN,没有SYN ACK

猜你喜欢

转载自blog.csdn.net/kk1946n/article/details/78327189