一、问题
最近测试一个音视频项目,APP在第一次流程中,所有信令都走完了,然后断掉连接,清理现场后。第二次重新连接服务,进行第二次业务的时候缺失败了。服务器是没用网卡没用绑定固定IP的云服务器。
测试1:
使用WEB测试,在不同分公司电脑打开是可以连接服务器的,成功。
测试2:
在本地局域网打开APP,然后打开web连接测试,失败。telnet别的端口也失败。
测试3:
在本地局域网打开APP,然后手机使用wifi打开web连接测试,失败。telnet别的端口也失败。
测试4:
在本地局域网打开APP,然后手机使用4G网络打开web连接测试,成功。
测试5:
在别的服务器机器,正常
针对失败情形抓包:
二、排查
1,发现系统没有任何负载,top命令看CPU和网络正常
2,网卡也没有丢包
3,iptables策略也都没问题
4,系统的SYN_RECV连接很少,也没超限
5,系统的文件描述符等资源也都没问题
6,messages和dmesg中没有任何提示或者错误信息
7,通过netstat命令查看系统上协议统计信息,发现很多请求由于时间戳的问题被rejected
root@005027:~# netstat -s | grep timestamp
2984 packets rejects in established connections because of timestamp
大概猜测到什么,于是查看内核参数
再看正常机器的内核参数:
修改内核参数,重启机器正常
三、分析:
为何在同一个网络,连接服务器会失败(测试1,4),不同网络却是能成功连接服务器(测试2,3)
tcp_timestamps和recycle 选项开启之后&#x