- KNI
KNI是指内核(态)虚拟出来的一个 Veth0,是内核协议栈的一个借口,kni 是用于 dpdk 与 内核通信的,不用于对外通信.
dpdk 协议栈 和 内核协议栈是同时在跑的。 dpdk 需要独占 cpu,内核不会使用。
-
DPDK 基于多线程绑定 CPU 从而降低cpu在进程间的切换,提升包的转发效率
-
udp
-
两个字节以上的包括两个字节一定要转网络字节序
-
vpp
dpdk 是一个用户态网络开发框架 需要直接实现协议,开发难度较大。 vpp: 包括数据面与控制面: 常用于:vpn, ddos, 黑名单,安全策略,LB
vpp 结合 dpdk, 1. 基于 dpdk 抓取数据, 2. vpp 再接着处理 优点:
- vpp 是一个完整的数据面的开发框架, 具备 flowtable
- 完全以 “插件式” (plugin|node 设计) 实现开发
缺点:
- 需要开发者引用,不支持持久化
plugin: 表示应用,即插即用 node: 表示网络功能
ddos --> 黑名单 --> 白名单 --> nat --> flowcontrol
以上每个部分是一个node,将网络功能以链表串起来
plugin的流程:
-
init_plugin
-
set command
-
function
-
mempool 与 mempool
- ring buffer
- igb uio
igb是一个名字,uio是一个框架
-
- dpdk绑定以后,ifconfig 看不到对应网口
-
- vmxnet3/nfio/igb_uio/e1000 概念
-
- virtio/vhost 概念
-
- kni
- kni
kni
kni_open
/dev/kni net_device
insmod kni.ko /usertools/dpdk-setup.sh 45
dpdk-rec --> alloc
kni_rx
kni_tx
kni_close