常见提示信息与处理方案
[Packet size limited during capture]
问题现象:如下图所示,全长有171字节,但只获取到前96个字节。

可能原因:此提示说明被标记的包信息没有完整的获取,一般是由于抓包方式引起。
处理方案:在某些操作系统中,tcpdump默认只抓每个帧的前96字节,可以通过-s参数指定想要抓取的字节数。示例命令如下所示。
sudo tcpdump -i eth0 -s 1000 -w tcpdump.cap
[TCP Previous segment not captured]
问题现象:抓包时出现丢包或者抓包工具漏包。具体示例如下图所示。

可能原因:此提示说明未捕获TCP协议之前的分段,抓取的数据段缺失。一般是由于丢包或者抓包工具漏掉导致。
处理方案:具体情况需分析抓包结果并参考上述示例进行分析判断。
在使用TCP协议进行数据传输的过程中,同一主机发送的数据段应当是连续的。具体而言,后一个数据段的 Seq 应等于前一个数据段的 Seq + 数据负载长度(即 Seq + Len - TCP头部长度),而接收方的 Ack 字段值等于发送方数据段的 Seq + 数据负载长度,表示期望收到的下一个字节的序号(三次握手或四次挥手的情况除外)。若后一个数据段的 Seq 大于前一个的 Seq + 数据负载长度,且未观察到中间数据段,则可能存在以下情况:
- 抓包遗漏(TCP Previous segment not captured):若后续 Ack 包含未捕获的 Seq 范围(如发送方发送 Seq=1000 和 Seq=2000,接收方返回 Ack=2000),说明中间数据已被接收方确认,但抓包工具漏掉。
- 丢包:若后续 Ack 未覆盖未捕获的 Seq 范围(如发送方发送 Seq=1000 和 Seq=2000,接收方返回 Ack=1000),说明中间数据未被接收方确认,可能已丢包。
- 网络中可能出现数据段乱序(后续段先于前面段到达),此时接收方会通过 Ack 重复确认已接收的连续 Seq,直到收到缺失段。
对于乱序与窗口机制的处理逻辑如下:
- 若数据段 Seq 超出接收窗口(Window)范围,接收方会丢弃该段,需依赖超时重传或快速重传机制恢复。网络中可能出现数据段乱序(后续段先于前面段到达),此时接收方会通过 Ack 重复确认已接收的连续 Seq,直到收到缺失段。
- 若数据段 Seq 超出接收窗口(Window)范围,接收方会丢弃该段,需依赖超时重传或快速重传机制恢复。
- 本文固定链接: http://www.jiagou.cc/1570/
- 转载请注明: 摘星怪 于 架构迷 发表