1.引言
完成实验前先要了解VPP和DPDK的相关知识点:
1.1 VPP
VPP (Vector Packet Processing, 矢量化报文处理) 是一个可扩展, 高性能的数据包处理框架, 可用于快速构建交换/路由功能. VPP 最初是由 Cisco 开发的商用技术(2002年), 并申请了专利, 开源后(2016)成为 Linux 基金会的开源项目 FD.io (Fast Data I/O) 的核心部分.
VPP 提供了大量的功能特性, 完整列表见: https://fd.io/vppproject/vppfeatures/.
1.2 DPDK
DPDK1
DPDK2
DPDK3
DPDK(Data Plane Development kit):应用程序运行在操作系统的用户空间,利用自身提供的数据平面库来收发包处理,绕过了linux操作系统内核协议栈对数据包处理的过程,以提升报文数据包的处理速度。
dpdk-decbind.py文件描述
实验设计示意图
如图所示本实验设计的场景为从服务器1里利用tcpreplay命令发送pcap,然后在服务器2中利用vpp将服务器2网卡eth0接收到的数据包转发给服务器2中创建的虚拟网口host-vpp1out
- 在服务器2中创建虚拟网卡,并启动虚拟网卡
ip link add name vpp1out type veth peer name vpp1host
#ip link delete vpp1host type veth #删除虚拟网卡
ip link set dev vpp1host up
ip link set dev vpp1out up
ip addr show vpp1host #查看虚拟网口转态
- 在服务器2中运行vpp,在vpp中添加物理网卡,并设置网卡数据接收模式
set interface promiscuous on eth0 #开启eth0网口数据接收的混杂模式
set interface state eth0 up #开启物理网卡
create host-interface name vpp1out #添加虚拟网卡
set int state host-vpp1out up
test l2patch rx eth0 tx host-vpp1out#设置vpp中二层转发路线 eth0->host-vpp1out
3.在服务器1中发送数据包
本实验中服务器2中eth0对应的pci_id号为0000:02:00.0
服务器1和服务器2物理上是由网线连接的,为了使服务器1转发的数据包可以被服务器2的网卡eth0接收到,首先要使用DPDK中的dpdk-devbind.py文件查看设备与驱动的绑定关系:
./dpdk-devbind.py -s
然后将服务器1中pci_id为0000:02:00.0对应的虚拟网卡名为ens1f0与DPDK-compatible driver绑定
./dpdk-devbind -b ixgbe 0000:02:00.0
数据包发送命令
tcpreplay -i ens1f0 -l 0 -M 10 udp.pcap