本帖最后由 lzwml 于 2016-1-14 19:07 编辑
下面用Wireshark的分析Server与Client通信异常前后数据包状况
找到点线索,可能是TCP包错位【没有重传】导致
下面的图片是两组数据包处理重传的情况,
其中第一种处理了重传,另一个没有
54号数据(第14秒):序列号是117,下一个期望序列号(121)
66号数据(第22秒):错误(TCP Previous segment not capture)表示这个包(273)之前的包(121)没有收到,序列号错误。
121的数据包没有发送成功(该包可能路由走错了),序列号变成【273】不是(121)
同时67号数据(第22秒),纠正错误(重传TCP Retransmission)
这样,通信一切正常
紧接着7S后又出现一次(TCP Previous segment not capture)错误
93号数据(第21秒):序列号421,下一个期望序列号(也是421,因为这个包是个【纯ACK】包)
104号数据(第27秒):(TCP Previous segment not capture)错误,序列号473,不是431
次后从115号数据(第33秒)到185号数据(第69秒)就是该帖子最开始描述的现象,“server能收到client的心跳数据(整个帧长94byte,心跳内容40byte),server只返回纯ACK应答(帧长60byte),无心跳应答,持续30秒”
下面是拓扑图
我怀疑上面的两次数据错误是因为交换机数据转发错误,
因为在抓包端【偶尔】能收到192.168.1.254(服务器)发往192.168.0.6(另一台客户端)的流量
那么同样两次错误包也有可能将本该发往192.168.0.20(关注的客户端)的数据发往192.168.0.6(另一台客户端),
【并且】这之后还发生了什么????导致服务器不重发该数据包!!!!
|