转载自:https://blog.csdn.net/yuanbinquan/article/details/75434732
wireshark异常数据,软件本身会以特殊颜色底纹标识。或者可以通过Analyze-->Expert Information分析。
1、TCP Previous segment not captured 、TCP Out-Of-Order
[TCP Previous segment not captured]在TCP传输过程中,同一台主机发出的数据段应该是连续的,即后一个包的Seq号等于前一个包的Seq + Len(三次握手和四次挥手是例外)。如果Wireshark发现后一个包的Seq号大于前一个包的Seq Len,就知道中间缺失了一段数据。
[TCP Out-of-Order]在TCP传输过程中(不包括三次握手和四次挥手),同一台主机发出的数据包应该是连续的,即后一个包的Seq号等于前一个包的Seq + Len。也可以说,后一个包的Seq会大于或等于前一个包的Seq。当Wireshark发现后一个包的Seq号小于前一个包的Seq Len时,就会认为是乱序了,因此提示 [TCP Out-of-Order] 。
Wireshark在获取包序号25时,解析的序列号seq = 20441,而按正常逻辑对25的seq = 17521 + 1460 = 18981,所以wireshark软件认为异常,将包25以黑色底纹标识,并添加解析文字[TCP Previous segment not captured],注意这里的解析文字是Wireshark软件自己添加的,而不是tcp数据体本身的。在没有接收到seq=18981的数据包之前,接收到了seq=2441数据包,所以提示 tcp 没有捕获前一个数据段。
Wireshark在获取包序号26时发现seq=18981,而包序号25的数据包seq = 20441,所以wireshark认为数据包顺序错了,提示[TCP Out-of-Order]
2、TCP Dup ACK x#y
[TCP Dup ACK]当乱序或者丢包发生时,接收方会收到一些Seq号比期望值大的包。它每收到一个这种包就会Ack一次期望的Seq值,以此方式来提醒发送方,于是就产生了一些重复的Ack。Wireshark会在这种重复的Ack上标记[TCP Dup ACK] 。
客户端117.136.81.177包序号41和42到达服务器之后(包序号异常,理应先42后41),服务器115.28.150.86上发送包序号43的应答,是针对包序号41所做的应答,在服务器发送包序号40时就说,我希望获取seq=28852的数据包,但是接下来获取数据包41的seq=30312,所以服务器在发达应答的时候,发送Ack=28852,SLE=30312 SRE=31560用于提示客户端,其中SLE:Sequence Left Edge(序列号左边界值) SRE:Sequence Right Edge(序列号有边界值)。Wireshark 添加解释:[TCP Dup ACK]40#1。其中40表示对包序号40重复,#号之后的1表示重复次数为1次。
3、TCP Spurious Retransmission
[TCP spurious retransmission]意味着发送端认为发送的包已经丢失了,然后就重传了,尽管此时接收端已经发送了对这些包的确认(确认还没收到或者已经丢失了)。
在客户端117.136.81.177发送包序号352、353、354、355、356之后,服务器给出了包序号357、358、359、360、361的应答,但是客户端只收到了包序号357的应答,应答数据seq=104605-105035,即对应包序号352,客户端认为353、354、355、356丢失,于是从新发送包序号362、363、366、367。这些数据发送到服务器之后,服务器tcp层数据检测冗余之后就会被丢弃。Wireshark添加解释文本:[TCP spurious retransmission]
4、TCP Fast Retransmission
当发送方收到3个或以上[TCP Dup ACK],就意识到之前发的包可能丢了,于是快速重传它(这是RFC的规定)。
当服务器115.28.150.86连续发送了1165、1168、1169三条应答之后,客户端快速重传seq=291935的数据包
5、TCP Retransmission
[TCP Retransmission]如果一个包真的丢了,又没有后续包可以在接收方触发[Dup Ack],就不会快速重传。这种情况下发送方只好等到超时了再重传,此类重传包就会被Wireshark标上[TCP Retransmission]。
包序号6661应答Ack=121046
包序号6662,syn=128347, len=1460, 不符合期待值121046,所以wireshark添加注释文本[TCP Previous segment not captured]。理论下一包syn = 128347+1460=129807
包序号6663,syn=129807, len=1460, 符合期待值数据包正常,理论下一包syn = 129807+1460=131267
包序号6664,ack=121046, SLE=128347, SRE=129807,表示对包序号6662进行应答,检测到数据包不连续,启用tcp重复应答提示发送端可能数据丢失,wireshark添加注释文本[TCP Dup ACK 6661#1]
包序号6665,ack=121046, SLE=128347, SRE=131267,表示对包序号6663进行应答,检测到数据包不连续,启用tcp重复应答提示发送端可能数据丢失,wireshark添加注释文本[TCP Dup ACK 6661#2]
包序号6666,syn=123966, len=1460, 不符合期待值131267,所以wireshark添加注释文本[TCP Out-Of-Order]
包序号6667,syn=121046, len=1460, 不符合期待值,所以wireshark添加注释文本[TCP Out-Of-Order]
包序号6668,syn=122506, len=1460, 不符合期待值,所以wireshark添加注释文本[TCP Out-Of-Order]
包序号6669,ack=121046, SLE=123966, SRE=123967, SLE=128347, SRE=131267 表示已经接收到了数据片段[123966-123967][128347-131267],因为[128347-131267]数据片段在6665包中已经应答,
所以这里是应答6666,启用tcp重复应答提示发送端可能数据丢失,wireshark添加注释文本[TCP Dup ACK 6661#3]
包序号6670,ack=122506, SLE=123966, SRE=123967, SLE=128347, SRE=131267 表示对6667应答
包序号6671,ack=123967, SLE=128347, SRE=131267,表示对6668应答。并告诉发送到差[123967-128346]数据段,已有数据段[128347-131267]
包序号6672,包序号6673,包序号6676,采取的tcp重传措施,传送数据段[123967-128346]