客户端:10.1.76.193
服务端:10.1.23.12
1、抓包
通过wireshark抓包,设置捕获包含目标主机ip的数据过滤条件,ip.addr == 10.1.23.12
成功包:success_dump.pcapng
失败包:error_dump.pcapng
也可以通过tcpdump获取,然后导入wireshark分析
tcpdump -i ens33 host 10.1.23.12 and port 8081 -n -vvv -X -w ./target.cap
2、比对分析:
成功状态下:服务端收到请求后,会给客户端发送确认收到信息ACK
失败状态下:
现象:1、成功的请求 Timestamp value
值都比较小
2、失败的请求没收到服务端返回ACK的通知
3、客户端补发的请求发生TCP Retransmission 连接超时异常
3、解决方式:
修改服务器/etc/sysctl.conf文件里面的(没有就添加)
net.ipv4.tcp_timestamps=0
再次 抓包测试 TCP 连接没有再出现 超时
timestamp扩展:
同时开启timestamp
(时间戳)和tw_recycle
(快速回收),会导致在一个MSL时间内只响应timestamp递增的请求,对于时间戳较小的请求都抛弃了(不响应ack)
MSL
扩展: RFC793中规定MSL为2分钟,也就是说2分钟内同一个ip的请求的时间戳要求递增,不是递增的话服务器不予响应。