首页 > 首页 > 基础理论 > tcpdump 抓包常见问题处理方案
2025
10-23

tcpdump 抓包常见问题处理方案

常见提示信息与处理方案

[Packet size limited during capture]

问题现象:如下图所示,全长有171字节,但只获取到前96个字节。

tcpdump 抓包常见问题处理方案 - 第1张  | 架构迷

可能原因:此提示说明被标记的包信息没有完整的获取,一般是由于抓包方式引起。

处理方案:在某些操作系统中,tcpdump默认只抓每个帧的前96字节,可以通过-s参数指定想要抓取的字节数。示例命令如下所示。

sudo tcpdump -i eth0 -s 1000 -w tcpdump.cap

[TCP Previous segment not captured]

问题现象:抓包时出现丢包或者抓包工具漏包。具体示例如下图所示。

tcpdump 抓包常见问题处理方案 - 第2张  | 架构迷

可能原因:此提示说明未捕获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)范围,接收方会丢弃该段,需依赖超时重传或快速重传机制恢复。
最后编辑:
作者:摘星怪
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。