前言
Wireshark 抓取的网络包经过分析后,会根据每个数据包的信息进行分类(分级),并给出颜色。
对于错误包会使用黑底红字重点突出出来。
由于TCP(Transmission Control Protocol 传输控制协议)一种面向连接的、可靠的、基于字节流的传输层通信协议,这些错误提示很多是TCP协议可以自己修复的,但是也不排除某些错误提示是致命性错误,了解这些错误提示的具体意义和产生原因就变得至关重要。
错误类型和原因
TCP previous segment lost (tcp先前的分片丢失)
到达分组中的序列号高于下一期望的序列号,指示至少一个段被丢弃/丢失。接收站通过针对其接收的每个附加分组发送重复ACK来纠正这种情况,直到发送方重传丢失的分组为止。
TCP acked lost segment(tcp应答丢失)
发送方发送了报文之后等待接收方给出ACK应答,在规定的等待时间内没有收到接收方的ACK会提示该信息。
TCP window update(tcp窗口更新)
TCP Window Update 是TCP通信中的一个状态,它可以发生的原因有很多,但最终归结于发送者传输数据的速度比接收者读取的数据还快,这使得接收端的在缓冲区必须释放一部分空间来装发送过来的数据,然后向发送者发送Windows Update,告诉给发送者应该以多大的速度发送数据,从而使得数据传输与接受恢复正常。
TCP dup ack(tcp重复应答)
Tcp Dup Ack xxx#y 代表了数据段丢失TCP状态,xxx代表数据丢失的位置,#后代表第几次丢失文。
一般来说是网络拥塞导致丢包,比如发送方的报文到达不了接收方,接受方收不到预期序列号的报文就会发送dup ack给发送方,发送方收到3个dup ack就会快速重传而不必等超时定时器。
TCP keep alive(tcp保持活动)
Keep-alive的机制可以检测死连接,TCP会在空闲了一定时间后发送数据给对方:
-
如果主机可达,对方就会响应ACK应答,就认为是存活的。
-
如果可达,但应用程序退出,对方就发RST应答,发送TCP撤消连接。
-
如果可达,但应用程序崩溃,对方就发FIN消息。
-
如果对方主机不响应ack, rst,继续发送直到超时,就撤消连接。这个时间默认是2小时。
TCP retransmission(tcp重传)
TCP port numbers reused(tcp端口重复使用)
TCP协议中规定,处在 TIME-WAIT 状态的TCP端,必须等待一定时长(协议建议2MSL),尽量确保TCP远端能够收到最后一次FIN分段的ACK确认。处于TIME-WAIT状态的TCP端,不能重建以同一四元组标识的TCP替身连接。该提示是由于客服端重新建立连接的端口号使用了仍然处在2MSL等待时长内的端口号
TCP fast retransmission (tcp快速重传)
TCP层检测到拥塞发生一般是两个条件之一,超时或者dup ack。
dup ack三次之后就进入快速重传/快速恢复 or 快速重传/慢启动
TCP spurious retransmission(tcp伪重传)
该提示是由于发送端重发了一个已经收到应答的报文段导致。
TCP segment of a reassembled PDU (重新组装的PDU的TCP片段)
TCP层收到上层大块报文后分解成段后发出去。
收到一个报文后如何确定它是一个”TCP segment”?如果有几个报文的ACK序号都一样,并且这些报文的Sequence Number都不一样,并且后一个Sequence Number为前一个Sequence Number加上前一个报文大小再加上1的话,肯定是TCP segment了,对于没有ACK标志时,则无法判断。