网络问题排查实战经典案例汇总( 二 )


网络问题排查实战经典案例汇总

文章插图
所以要修改之前输入的tcpdump命令 , 命令中指定抓eth1网卡的数据包:
 
tcpdump -i eth1 -s 0 -w dvsserver.pcap
 
或者抓所有网卡的数据包:
 
tcpdump -i any -s 0 -w dvsserver.pcap

3、升级服务器的端口改变了 , 导致软件无法进行在线升级
网络问题排查实战经典案例汇总

文章插图
 
某日测试同事在客户端软件上发起在线版本监测 , 结果始终连不上服务器 。使用wireshark抓包看到 , 软件在发送TCP三次握手的SYN包后 , 远端服务器直接回了个RST包 , 强行将客户端的连接请求给终止了 。
首先 , 服务器回包了 , 那服务器肯定是能ping通的 , 于是使用telnet命令检测升级服务器的63000服务端口是否正常 , 结果该端口是连不上的 。一般情况下直接回复RST可能是端口不存在引起的 , 经后来和升级服务器开发确认 , 升级服务器的端口已经变更了 , 不再是之前的60000端口号了 。
其实这个问题中 , 还有两点是有问题的:
 
(1)客户端软件侧处理的有问题 , 不应该将升级服务器的端口在代码中固定为某个数字 , 应该使用登录时平台返回的升级服务器端口 。(2)平台变更端口后应该发邮件通知客户端侧 , 平台侧应该对老的客户端提供兼容支持 , 老的版本已经发布已经交付给客户使用 , 平台要对老版本做兼容 , 应该做个端口重定向 , 老版本使用60000端口发起连接时应该重定向到最新的端口上 。
 
4、Linux服务器系统中开启了reuse和recycle选项 , 导致客户端会时不时连不上服务器
网络问题排查实战经典案例汇总

文章插图
有用户反馈软件客户端会时不时出现无法登录服务器的问题 。使用Wireshark抓包看 , 客户端在发出三次握手的SYN包 , 始终收不到服务器的ACK包 , 甚至触发了客户端的丢包重传 , 即多次发送SYN包 , 服务器都没有回应 , 导致客户端和服务器建TCP连接失败 。
后来在平台侧也进行了抓包 , 发现服务器确实收到了客户端发来的SYN包 , 但就是没有回ACK应答包 。经排查得知 , 服务器的Linux系统的TCP/IP协议栈开启了reuse和recycle选项 , 这和协议栈的timestamp时间戳策略会冲突 , 如果短时间内多次收到SYN包 , 平台侧TCP/IP协议栈会直接将请求拒绝掉 , 不给SYN包发送端任何回应 。
服务器侧这两个选项一般都不能开启 , 特别是tcp_tw_recycle选项开启后 , 可能会导致部分连接请求不响应 , 导致连接失败 。在服务器侧 , 可以通过命令直接将这两个选项关闭掉:
echo 0 > /proc/sys/net/IPv4/tcp_tw_reuseecho 0 > /proc/sys/net/ipv4/tcp_tw_recycle
关于这两个选项的说明如下:
 
(1)tcp_tw_reuse:主要用于端口复用 , 用在客户端侧 , 将其设置为1表示允许将TIME-WAIT sockets重新用于新的TCP连接 , 默认为0 , 表示关闭 。(2)tcp_tw_recycle:将其设置为1表示开启TCP连接中TIME-WAIT sockets的快速回收 , 默认为0 , 表示关闭 。

5、Windows系统中使用双网卡时 , 可能需要添加策略路由 
在一台测试用的Windows PC机上 , 配置了两张网卡 , 一张是连接外网的网卡 , 用于上外网;一张是连接内网的网卡 , 用于连局域网
如下:
网络问题排查实战经典案例汇总


推荐阅读