searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

DPDK抓包:pdump 和 dumpcap 原理对比

2025-06-20 03:26:16
3
0

1. 使用简介

1.1. dpdk-pdump

该工具是一个数据平面开发套件 (DPDK)捕获报文工具,运行方式为 DPDK Secondary 进程,能够在 DPDK Primary 进程的端口上捕获数据包。使用示例:

./dpdk-testpmd -a 0000:31:00.0 -l 0-1 -n 4 -- -i
./dpdk-pdump -a 0000:31:00.0 -l 2-3 -n 4  -- --pdump='port=0,queue=*,rx-dev=/tmp/p0rx.pcap,tx-dev=/tmp/p0tx.pcap'

该工具支持指定抓包端口,支持指定抓包方向(收包/发包),支持指定端口的队列抓包,不支持过滤条件。

更多内容:6. dpdk-pdump Application — Data Plane Development Kit 23.11.4 documentation

1.2. dpdk-dumpcap

该工具是数据平面开发套件 (DPDK) 网络流量转储工具,类似于 Wireshark 中的 dumpcap 工具。 它作为 Secondary 进程运行,并允许从 DPDK Primary 进程的端口上捕获数据包,以 Pcapng 数据包格式写入文件。使用示例:

./dpdk-testpmd -a 0000:31:00.0 -l 0-1 -n 4 -- -i
./dpdk-dumpcap -i 0000:31:00.0 -f 'tcp port 80'

该工具支持指定抓包接口,支持以 tshark 的样式过滤数据包,不支持制定抓包方向(收包/发包),不支持指定端口的队列抓包。

更多内容:5. dpdk-dumpcap Application — Data Plane Development Kit 23.11.4 documentation

2. 抓包原理

2.1. dpdk-pdump

从 dpdk 模块组成的角度分析,pdump 工具抓包过程涉及到 2 个 app(app/pdump、app/testpmd),1 个 lib 库(lib/pdump),1 个驱动库(driver/net/pcap),以下为整个抓包过程的时序图:


一、启动抓包机制

  • pdump 工具启动后,会初始化一个无锁队列 ring,并将要抓包的端口,端口队列、无锁队列 ring 等参数信息,通过 dpdk 的进程间同步通信机制,发送给 Primary 进程(testpmd);
  • testpmd 收到消息后,会触发事件中断,在中断处理中会创建一个 net_pcap 驱动类型的 vdev 设备(简称 pcap 设备);
  • testpmd 处理消息时,调用 pdump_server(),为抓包端口注册两个回调函数(收包回调:pdump_rx,发包回调:pdump_tx)。触发回调时,无锁队列 ring 将被传入回调函数;
  • testpmd 向 pdump 返回同步通信的响应结果;
  • pdump 进程同样会收到中断事件,在中断处理中,通过大页内存scan到 Primary 进程创建的 pcap 设备,并进行一系列 Secondary 初始化动作:初始化发包队列,创建用于生成 pcap 文件的 dumper 描述符,并将 dumper 挂到 pcap 设备的发包队列上,设置 tx_burst 发包函数。在 tx_burst 中,会将 mbuf 通过 dumper 写入 pcap 文件。
  • pdump 进程进入轮询无锁队列 ring 的循环。

二、运行抓包机制

  • 当 testpmd 从要抓包的网口收/发报文时,会触发回调函数,在回调函数中,报文被复制一份,写入无锁队列 ring;
  • pdump 从无锁队列 ring 中读取得到报文,调用 pcap 设备的 tx_burst 接口,将报文写入 pcap 文件。

2.2. dpdk-dumpcap

同样从 dpdk 模块组成的角度分析,pdump 工具抓包过程涉及到 2 个 app(app/pdump、app/testpmd),1 个 lib 库(lib/pdump),以下为整个抓包过程的时序图:


一、启动抓包机制

  • dumpcap 工具启动后,同样会初始化一个用于 Primary 向 Secondary 传输报文的无锁队列 ring,并将要抓包的端口,过滤条件,无锁队列 ring 等参数信息,通过 dpdk 的进程间同步通信机制,发送给 Primary 进程(testpmd);
  • testpmd 处理消息时,调用 pdump_server(),为抓包端口注册两个回调函数(收包回调:pdump_rx,发包回调:pdump_tx)。触发回调时,无锁队列 ring 以及过滤条件将被传入回调函数;
  • testpmd 向 dumpcap 返回同步通信的响应结果;
  • dumpcap 进程进入轮询无锁队列 ring 的循环。

二、运行抓包机制

  • 当 testpmd 从要抓包的网口收/发报文时,会触发回调函数,在回调函数中,根据过滤条件,将符合条件的报文过滤出来,并复制一份,转换为 pcapng 格式的 mbuf,写入无锁队列 ring;
  • dumpcap 进程从无锁队列 ring 中读取得到 pcapng 格式 mbuf ,直接将其写入 pcapng 格式的文件。

3. 总结

3.1. 共同点

  • 都是以 Secondary 的形式运行,支持抓取 Primary 进程中网卡的收发报文。
  • 都是通过无锁队列的方式,从 Primary 进程向 Secondary进程传输报文。
  • 都依赖 lib/pdump 模块,且在该模块的执行流程完全相同:都采用了注册回调的方式进行抓包,且注册的回调函数相同;
  • 都支持指定端口进行抓包;

3.2. 异同点/优缺点

  • 抓包条件对比:
    • 官方 pdump 工具不支持过滤条件,不过可以根据需求进行定制开发(天翼云 dpdk 平台版本中的 pdump 工具已支持过滤条件,且支持指定 vxlan/geneve 内层五元组抓包);
    • dumpcap 工具不支持制定抓包方向(收包/发包),不支持指定端口的队列抓包,支持以 tshark 的样式过滤数据包(不支持指定 vxlan/geneve 内层五元组抓包);
  • 抓包流程对比:
    • pdump 工具抓包依赖 driver/net/pcap 驱动库,需要创建 pcap vdev,抓包流程复杂;
    • dumpcap 工具抓包无需创建 pcap vdev,抓包流程简单。
  • 运行工具参数对比:
    • pdump 工具运行需要指定 eal 参数,且需指定抓包端口和端口队列,所需参数较多;
    • dumpcap 工具运行无需指定 eal 参数,可以不指定抓包端口(默认选择 DPDK 接管的第 1 个可用接口),所需参数较少;

3.3. 适用场景

  • 如果想指定某网卡快速抓包,优先选择所需参数较少的 dpdk-dumpcap 工具;
  • 如果需要使用过滤条件,优先选择支持tshark样式(同 tcpdump)的 dpdk-dumpcap 工具;
  • 如果需要指定网卡的抓包方向(收包/发包)、网卡队列,需使用 dpdk-pdump 工具;

3.4. 注意事项/遗留问题

  • 实际环境中,使用 dpdk-dumpcap 工具抓包,如果 primary 进程启动时指定了 pci 白名单,dpdk-dumpcap 工具可能无法正常运行,而 dpdk-pdump 无此问题。
0条评论
0 / 1000
王越
1文章数
0粉丝数
王越
1 文章 | 0 粉丝
王越
1文章数
0粉丝数
王越
1 文章 | 0 粉丝
原创

DPDK抓包:pdump 和 dumpcap 原理对比

2025-06-20 03:26:16
3
0

1. 使用简介

1.1. dpdk-pdump

该工具是一个数据平面开发套件 (DPDK)捕获报文工具,运行方式为 DPDK Secondary 进程,能够在 DPDK Primary 进程的端口上捕获数据包。使用示例:

./dpdk-testpmd -a 0000:31:00.0 -l 0-1 -n 4 -- -i
./dpdk-pdump -a 0000:31:00.0 -l 2-3 -n 4  -- --pdump='port=0,queue=*,rx-dev=/tmp/p0rx.pcap,tx-dev=/tmp/p0tx.pcap'

该工具支持指定抓包端口,支持指定抓包方向(收包/发包),支持指定端口的队列抓包,不支持过滤条件。

更多内容:6. dpdk-pdump Application — Data Plane Development Kit 23.11.4 documentation

1.2. dpdk-dumpcap

该工具是数据平面开发套件 (DPDK) 网络流量转储工具,类似于 Wireshark 中的 dumpcap 工具。 它作为 Secondary 进程运行,并允许从 DPDK Primary 进程的端口上捕获数据包,以 Pcapng 数据包格式写入文件。使用示例:

./dpdk-testpmd -a 0000:31:00.0 -l 0-1 -n 4 -- -i
./dpdk-dumpcap -i 0000:31:00.0 -f 'tcp port 80'

该工具支持指定抓包接口,支持以 tshark 的样式过滤数据包,不支持制定抓包方向(收包/发包),不支持指定端口的队列抓包。

更多内容:5. dpdk-dumpcap Application — Data Plane Development Kit 23.11.4 documentation

2. 抓包原理

2.1. dpdk-pdump

从 dpdk 模块组成的角度分析,pdump 工具抓包过程涉及到 2 个 app(app/pdump、app/testpmd),1 个 lib 库(lib/pdump),1 个驱动库(driver/net/pcap),以下为整个抓包过程的时序图:


一、启动抓包机制

  • pdump 工具启动后,会初始化一个无锁队列 ring,并将要抓包的端口,端口队列、无锁队列 ring 等参数信息,通过 dpdk 的进程间同步通信机制,发送给 Primary 进程(testpmd);
  • testpmd 收到消息后,会触发事件中断,在中断处理中会创建一个 net_pcap 驱动类型的 vdev 设备(简称 pcap 设备);
  • testpmd 处理消息时,调用 pdump_server(),为抓包端口注册两个回调函数(收包回调:pdump_rx,发包回调:pdump_tx)。触发回调时,无锁队列 ring 将被传入回调函数;
  • testpmd 向 pdump 返回同步通信的响应结果;
  • pdump 进程同样会收到中断事件,在中断处理中,通过大页内存scan到 Primary 进程创建的 pcap 设备,并进行一系列 Secondary 初始化动作:初始化发包队列,创建用于生成 pcap 文件的 dumper 描述符,并将 dumper 挂到 pcap 设备的发包队列上,设置 tx_burst 发包函数。在 tx_burst 中,会将 mbuf 通过 dumper 写入 pcap 文件。
  • pdump 进程进入轮询无锁队列 ring 的循环。

二、运行抓包机制

  • 当 testpmd 从要抓包的网口收/发报文时,会触发回调函数,在回调函数中,报文被复制一份,写入无锁队列 ring;
  • pdump 从无锁队列 ring 中读取得到报文,调用 pcap 设备的 tx_burst 接口,将报文写入 pcap 文件。

2.2. dpdk-dumpcap

同样从 dpdk 模块组成的角度分析,pdump 工具抓包过程涉及到 2 个 app(app/pdump、app/testpmd),1 个 lib 库(lib/pdump),以下为整个抓包过程的时序图:


一、启动抓包机制

  • dumpcap 工具启动后,同样会初始化一个用于 Primary 向 Secondary 传输报文的无锁队列 ring,并将要抓包的端口,过滤条件,无锁队列 ring 等参数信息,通过 dpdk 的进程间同步通信机制,发送给 Primary 进程(testpmd);
  • testpmd 处理消息时,调用 pdump_server(),为抓包端口注册两个回调函数(收包回调:pdump_rx,发包回调:pdump_tx)。触发回调时,无锁队列 ring 以及过滤条件将被传入回调函数;
  • testpmd 向 dumpcap 返回同步通信的响应结果;
  • dumpcap 进程进入轮询无锁队列 ring 的循环。

二、运行抓包机制

  • 当 testpmd 从要抓包的网口收/发报文时,会触发回调函数,在回调函数中,根据过滤条件,将符合条件的报文过滤出来,并复制一份,转换为 pcapng 格式的 mbuf,写入无锁队列 ring;
  • dumpcap 进程从无锁队列 ring 中读取得到 pcapng 格式 mbuf ,直接将其写入 pcapng 格式的文件。

3. 总结

3.1. 共同点

  • 都是以 Secondary 的形式运行,支持抓取 Primary 进程中网卡的收发报文。
  • 都是通过无锁队列的方式,从 Primary 进程向 Secondary进程传输报文。
  • 都依赖 lib/pdump 模块,且在该模块的执行流程完全相同:都采用了注册回调的方式进行抓包,且注册的回调函数相同;
  • 都支持指定端口进行抓包;

3.2. 异同点/优缺点

  • 抓包条件对比:
    • 官方 pdump 工具不支持过滤条件,不过可以根据需求进行定制开发(天翼云 dpdk 平台版本中的 pdump 工具已支持过滤条件,且支持指定 vxlan/geneve 内层五元组抓包);
    • dumpcap 工具不支持制定抓包方向(收包/发包),不支持指定端口的队列抓包,支持以 tshark 的样式过滤数据包(不支持指定 vxlan/geneve 内层五元组抓包);
  • 抓包流程对比:
    • pdump 工具抓包依赖 driver/net/pcap 驱动库,需要创建 pcap vdev,抓包流程复杂;
    • dumpcap 工具抓包无需创建 pcap vdev,抓包流程简单。
  • 运行工具参数对比:
    • pdump 工具运行需要指定 eal 参数,且需指定抓包端口和端口队列,所需参数较多;
    • dumpcap 工具运行无需指定 eal 参数,可以不指定抓包端口(默认选择 DPDK 接管的第 1 个可用接口),所需参数较少;

3.3. 适用场景

  • 如果想指定某网卡快速抓包,优先选择所需参数较少的 dpdk-dumpcap 工具;
  • 如果需要使用过滤条件,优先选择支持tshark样式(同 tcpdump)的 dpdk-dumpcap 工具;
  • 如果需要指定网卡的抓包方向(收包/发包)、网卡队列,需使用 dpdk-pdump 工具;

3.4. 注意事项/遗留问题

  • 实际环境中,使用 dpdk-dumpcap 工具抓包,如果 primary 进程启动时指定了 pci 白名单,dpdk-dumpcap 工具可能无法正常运行,而 dpdk-pdump 无此问题。
文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
1
1