TCP 通信过程中的一些异常状态分析学习

TCP 通信过程中的一些异常状态分析学习

一 重传

1.超时重传   [TCP Retransmission]

发包出去,一定超时时间内没有收到对端的ack,触发超时重传。一般重传时间是遵循 指数退避 的策略,即例如第一次间隔100ms重传,重传后仍未收到回复则间隔200ms重传,此后400ms,800ms,1600ms........

 

2. 快速重传   [TCP Fast Retransmission]

发送方连续收到3个重复的ack后,无需等待超时时间,直接重传对于序号的报文

 

3. 虚假重传  [TCP Spurious Retransmission]

发送方重传了某一包数据,但实际上是对端已经收到了,只是回复ack延时,导致发送方误判对端没有收到产生的一种现象。

 

重传造成影响最直接就是性能的下降

二 ACK类

1.重复ack  [TCP Dup ACK x#y],x为ack号,y为重复的次数

通俗理解,发送方连发5包数据,接受方只收到了前两包,那么接收方会重复发送相同ack号的确认包,告知发送方我一直没收到第三包,请求发送第三包

造成的原因,一般要么是真正的丢包,包在环境中丢失了,要么是网络环境节点分配的问题导致后发的报文先到,短暂触发重复ack

 

2. ack丢失

wireshark无专门的错误异常标记,但发送方莫名开启了重传,一般考虑ack在网络环境中丢失。

 

三 乱序类  [TCP Out-Of-Order]

收到的报文的seq号,小于已接收到的报文的最大的seq号,简单理解就是 迟到的旧的报文

一般是数据包在传输过程中,走了不同路由不同路径,导致到达顺序和发送顺序不一致

现象:乱序一般和重复ack搭配出现,短暂的乱序对性能无明显影响,严重乱序会触发大量的虚假重传,从而浪费带宽影响性能

 

四 窗口流量类

抓包看一般有两个窗口参数,Window size value 是 TCP 首部原始 16 位值,Calculated window size 是经过窗口缩放因子(Window Scale) 计算后的实际窗口大小,分析时以后者为准。

1.窗口满  [TCP Window Full]

由发送方告知,一般是发送方所发数据填满接受发通告的窗口大小,此时发送方不可以再发送新的数据,必须等待接收方腾出窗口空间

本质是接受方的处理性能跟不上

 

2.零窗口(TCP Zero Window)

接收方通告我的窗口变为0了,明确告知发送方不可再发数据。一般和窗口满搭配出现

 

3. 窗口探测与更新

·探测  [TCP ZeroWindowProbe]

发送方在零窗口状态下,以固定时间发送探测报文监测接收方的窗口是否恢复正常

·更新  [TCP Window Update]

接收方窗口恢复后,主动发送该报文通知发送方恢复通信

 

五 捕获类

1.前序报文未捕获   [TCP Previous segment not captured]

收到的报文 Seq 号大于当前期望序号,但中间缺失的报文在抓包文件中找不到,这是属于wireshark端的标识

一般要么只是抓包没抓包,实际上报文的交换没有问题;要么是真的丢包了,一般这种情况会伴随大量的重复ack以及重传

 

2.确认了未捕获的报文  [TCP ACKed unseen segment]

通俗讲,就是接收方回复ack确认了抓包没有抓到的报文段,导致wireshark端产生此标识