Tcpreplay与DPDK的收发包测试实验(草稿,未完整)

主实验文档

实验环境:

  1. 服务器设备有网卡数张,其中网卡A连网,网卡B被DPDK绑定,网卡C与网卡B直连。
  2. 服务器已经搭建好DPDK环境,已经装好tcpreplay、tcpdump等相关工具
  3. 本人使用另一台电脑访问服务器进行操作
    注:一般装好tcpreplay之后,其他的套件也在tcpreplay安装时安装了。

网络拓扑大致如下:
Tcpreplay与DPDK的收发包测试实验(草稿,未完整)_第1张图片

我们的目的是使用tcpreplay工具从C网卡向B网卡发包,而利用DPDK的testpmd工具监测B网卡的数据流量,同时用dpdk-pdump工具捕获B网卡收到的数据包。

pcap数据包准备

我们需要准备pcap网络包,我们捕获自己访问某个网站的数据包,其中我们联网的A网卡是ens1f0,ip地址是172.17.16.50,
(这个根据设备情况而定,可以通过ifconfig命令查看,详见文末的补充)访问网站用的是http协议,因此只监听该主机地址
和端口的数据包,下面的命令语法具体参看tcpdump的语法。

上面的命令只是抓包,但并没有保存下来,我们将上面的命令修改成下面的方式运行:

执行上面的命令后,会显示正在监听状态,此时再打开一个新的终端,访问一个网站

等待几秒后,利用ctrl+c或者ctrl+z等方式终止监听,此时能看到捕获的数据包数量,到保存的路径能看到捕获下来的包
由于数据包的源mac和目的mac地址都不符合我们即将要实验的环境,因此先使用tcprewrite工具修改捕获到的pcap文件

本来目的mac地址是应该填入B网卡的mac地址,但由于我无法获得B网卡的mac地址,此处就用广播地址替代。至于源mac地址
自然就是C网卡的mac地址。同时,由于我们是做
单向发包实验,不考虑双向发包,所以不需要对一开始捕捉下来的数据包文件
进行客户端与服务器端的区分,也就是不用导出cache文件。

Tcpreplay向DPDK绑定的网卡发包

前面已经做好准备工作,接下来我们开始进行发包测试。
(1)、在这里我们检验一下Tcpreplay的发包,DPDK是否能检测到:
使用命令打开testpmd,此时先使用交互模式打开,命令语句没什么特别要求

接着使用show port stats 0 或者使用show port stats all查看端口状态,此时应该全部是0

Tcpreplay与DPDK的收发包测试实验(草稿,未完整)_第2张图片

在另一终端运行tcpreplay进行发包:

注:--loop参数是指明发包次数,参数为1,则最终发出去的包packets = 1 * 13(我们的pcap中的包数量)
调用这句命令应该会显示:

Tcpreplay与DPDK的收发包测试实验(草稿,未完整)_第3张图片

而与此同时在testpmd查看端口数据包状态:

Tcpreplay与DPDK的收发包测试实验(草稿,未完整)_第4张图片

可以看到收发是成功的,那么如何再用pdump捕捉下来呢,在测试中,我发现当使用交互模式打开时,pdump捕获不到包,
因此我们需要在启动testpmd时去掉-i命令,然后再运行pdump,接着再进行tcpreplay发包即可。

细节补充:

网卡信息获取
被DPDK绑定的网卡是获取不到信息的,除非你一开始就知道是用哪张网卡绑定,当然也有可能我没找到方案。
以下提供几种方式获取网卡信息:
1.使用:lshw -c network | grep -E "logical name"
可以获得当前设备具备的网卡,要注意的是我们只要以太网卡的信息,也就是下图的ens开头

Tcpreplay与DPDK的收发包测试实验(草稿,未完整)_第5张图片

2.使用:ifconfig
可以获得这些网卡的详细信息

Tcpreplay与DPDK的收发包测试实验(草稿,未完整)_第6张图片

3.使用:ethtool 网卡名
可以获得当前网卡的连接状态(是否插了线)(如果你事先知道网络拓扑就不用了)

Tcpreplay与DPDK的收发包测试实验(草稿,未完整)_第7张图片

你可能感兴趣的:(DPDK学习记录)