1.故障背景

两个客户端同时访问某一个应用服务器,其中A客户端可以正常访问,B客户端无法正常访问;

2.分析过程

2.1 网络常规分析

客户端A和B属于相同子网,通过tracert进行路径追踪,都经过相同的防火墙,防火墙策略均permit;A和B均能ping同服务器,说明路由可达;客户端A可以正常telnet服务器的服务,客户端B失败,寻找大于客户端B且属于同一网段的客户端C,可以正常访问服务器; 初步怀疑是客户端B问题,网络是正常的,已自证清白,但故障具体根因是什么呢?帮助应用指出明路,事情才能彻底解决;

2.2 数据包深入分析

使用tcpdump抓取数据包,使用wireshark打开如下图所示: 隐藏客户端IP和服务器IP,保留源目端口作为双方识别标识; image.png 客户端发起TCP建连请求,服务器回复确认,期望客户端回复ACK确认完成三次握手,现实中客户端回复拒绝(rst),符合故障现象; 第一个syn包发送方的时间戳值是【TSval:1427927737】,服务器回复确认包的接收时间戳回显值【TSecr:1427926720】两者对不上,客户端拒绝连接; 根据数据包的分析结果,应该是服务器存在异常,导致客户端B访问失败,为什么客户端A和客户端C正常,同样抓包分析,发现客户端A和C未启用时间戳参数,服务器忽略时间戳,建连正常;

故障处置

临时处置:服务器通过修改参数net.ipv4.tcp_timestamps=0,关闭时间戳,所有通讯正常; 后续处理:应用排查软件代码,问题修复后,重新发版后,问题彻底解决;