linux协议栈源码(用dpdk实现一个网络协议栈只需100行代码)
linux协议栈源码(用dpdk实现一个网络协议栈只需100行代码)第三步:然后将接口名称补全 保存并退出进入 cd /opt/../opt/dpdk/mod执行 ./dpdk-devbind.py -sNetwork devices using DPDK-compatible driver 9000:05:00.0 'I350 Gigabit Network Connection' drv=igb_uio unused=igb 0000: 01: 00. 0 'NetXtreme BCM5720 Gigabit Ethernet PCIe' ifeeml drv=tg3 unused=igb_ uio' Active*0000:01:00.1 'NetXtreme BCM5720 Gigabit Ethernet PCIe' if=em2 drv=tg3 unused=igb_uio0000:02:
DPDK全称Intel Data Plane Development Kit,是intel提供的数据平面开发工具集,为Intel architecture(IA)处理器架构下用户空间高效的数据包处理提供库函数和驱动的支持。通俗地说,就是一个用来进行包数据处理加速的软件库。
DPDK不同于Linux系统以通用性设计为目的,而是专注于网络应用中数据包的高性能处理。具体体现在DPDK应用程序是运行在用户空间上利用自身提供的数据平面库来收发数据包,绕过了Linux内核协议栈对数据包处理过程。它不是一个用户可以直接建立应用程序的完整产品,不包含需要与控制层(包括内核和协议堆栈)进行交互的工具。
详细教程资料关注 后台私信;资料;两个字可以免费视频领取 文档 各大厂面试题 资料内容包括:C/C ,Linux,golang Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,嵌入式 等。相比原生 Linux(Native Linux),采用Intel DPDK技术后能够大幅提升IPV4的转发性能,可以让用户在迁移包处理应用时(从基于NPU的硬件迁移到基于Intel x86的平台上),获得更好的成本和性能优势。同时可以采用统一的平台部署不同的服务,如应用处理,控制处理和包处理服务
dpdk的网卡绑定第一步:停止服务
进入 cd /opt/../opt/dpdk/mod
执行 ./dpdk-devbind.py -s
Network devices using DPDK-compatible driver
9000:05:00.0 'I350 Gigabit Network Connection' drv=igb_uio unused=igb
0000: 01: 00. 0 'NetXtreme BCM5720 Gigabit Ethernet PCIe' ifeeml drv=tg3 unused=igb_ uio' Active*0000:01:00.1 'NetXtreme BCM5720 Gigabit Ethernet PCIe' if=em2 drv=tg3 unused=igb_uio0000:02:00.0 'NetXtreme BCM5720 Gigabit Ethernet PCIe' if=em3 drv=tg3 unused=igb_uio0000: 02:00. 1 'NetXtreme BCM5720 Giaabit Fthernet PCTe' ifeem4 drv=ta3 unusedsiab uio *Active0000:05:00.1'I350 Gigabit Network Connection' if=p5p2 drv=igb unused=igb_uio
0000:05:00.2 'I350 Gigabit Network Connection' if=p5p3 drv=igb unused=igb_uio0000:05:00.3 'I350 Gigabit Network Connection' if=p5p4 drv=igb unused=igb unused=igd-uio
第二步:进入 need_bind_nic.sh文件进行编辑
然后将接口名称补全 保存并退出
第三步:
执行绑定网卡命令
./dpdk-devbind.py -b igb p5p1
./dpdk-devbind.py -b igb p5p2
./dpdk-devbind.py -b igb p5p3
./dpdk-devbind.py -b igb p5p4
执行完以后 查看网卡绑定信息
./dpdk-devbind.py -s
执行 ./init_env.sh 命令
./dpdk-devbind.py -s 查看网卡绑定情况
第四步:
然后重启服务器 重启服务
burst接收与发送发送示意图
每一个(description entry) 作为一对组合,对应一个mbuf。如果一个报文需要用多个mbuf存储,则会占用多个(description entry) 组合。
每个tx entry中有一个last id指向本报文的EOP mbuf。entry的next id则一直指向紧邻的下一个entry。
每个data description中存储着报文的属性,和mbuf中的buffer addr(物理地址,通过mbuf中的iova得到)。
当burst个报文放入tx ring/sw ring之后,通过寄存器告诉DMA从description中取报文信息进行真正发送。
混杂模式是指一台主机能够接受所有经过它的数据流,不论这个数据流的目的地址是不是它,它都会接受这个数据包。也就是说,混杂模式下,网卡会把所有的发往它的包全部都接收。在这种情况下,可以接收同一集线器局域网的所有数据。
交换机网络时代,交换机会在内部计算目的主机究竟在哪一个端口,然后只会将数据包发往该端口,所以这不仅减少了网络流量,也提高了安全性。
交换式网络环境下进行网络嗅探依赖端口镜像,采集端口的主机获取来自进出源端口的所有数据包,有两个问题:1)是否设置目的端口主机网卡为混杂模式?2)如何采集到源端口进出(inboud和outbound)的所有数据包?wireshark可以实现,其代码可以参考!通过冒充路由,来实现数据包经过本机,做到抓包。
总结端口镜像模式,可以将交换机所有端口转到一个端口,从而实现抓包。
如果不才采用端口镜像,则只能监视一个端口的流量。
详细教程资料关注 后台私信;资料;两个字可以免费视频领取 文档 各大厂面试题 资料内容包括:C/C ,Linux,golang Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,嵌入式 等。