dpdk二层转发环境搭建-二

news2024/11/16 20:33:15

文章目录

    • 前言
    • 虚拟机的网络拓扑结构
      • 网络拓扑结构
      • 网络配置
    • DPDK的准备工作
      • DPDK的编译
      • 网卡绑定
    • 测试

前言

我之前尝试通过namespace,搭建dpdk的测试环境,但是对于tcp有点问题,而且过程也比较麻烦,见: dpdk网络转发环境的搭建-CSDN博客

下面,我通过多个虚拟机的方式,搭建dpdk的测试环境,感觉还行。

测试环境对于学习过程中的快速验证很重要。


虚拟机的网络拓扑结构

网络拓扑结构

在这里插入图片描述

每个虚拟机都有个桥接网卡,供外部ssh连接。

dpdk实验的时候,需要将两张网卡直接连接起来。这里使用 virtualbox - Internal Networking 来实现。

Internal networks are created automatically as needed. There is no central configuration. Every internal network is identified simply by its name. Once there is more than one active virtual network card with the same internal network ID, the Oracle VM VirtualBox support driver will automatically wire the cards and act as a network switch. The Oracle VM VirtualBox support driver implements a complete Ethernet switch and supports both broadcast/multicast frames and promiscuous mode.

上面英文的大概意思是:internal netwok 是通过名称来区别。具有相同名称的网卡可以通信。这个通信是虚拟机之间的,不经过主机。VirtualBox 驱动程序将自动连接这些卡并充当网络交换机,支持广播/多播帧和混杂模式。

所以,上面的拓扑结构相当于,名称为intnet0的两张网卡插在一个交换机上。名称为intnet1的两张网卡插在另一个交换机上。而一个交换机上只接了两个网卡,相当于这两张网卡通过网桥连接,或者相当于通过网线直接连接。

virtualbox中配置内部网络的方式,如下图。

在这里插入图片描述

注意: 运行dpdk程序的这个虚拟机的内部网络网卡,必须开启混杂模式。否则,可以抓包看下,server那个虚拟机响应client的ARP协议的数据包,不会被dpdk接收到,导致连接失败。

网络配置

# client的网络配置

## 设置intnet0网卡的ip
ip address add 10.0.1.2/24 dev enp0s8

## 设置 10.0.2.0/24的数据包,都从intnet0的网卡出去
ip route add 10.0.2.0/24  dev enp0s8

# server的网络设置
ip address add 10.0.2.2/24 dev enp0s8
ip route add 10.0.1.0/24  dev enp0s8

DPDK的准备工作

DPDK的编译

关于编译参数,自行参考官方手册和源码。

git clone git@github.com:DPDK/dpdk.git

git checkout v23.11

meson setup -Dcpu_instruction_set=corei7 -Dbuildtype=debug -Dexamples=all -Dprefix=YOUR_DPDK_INSTALL_PATH build
cd build
ninja 
ninja install

网卡绑定

# 如果包管理里面有,直接安装。如果没有,则源码编译安装。

## ubuntu
sudo apt install dpdk-igb-uio-dkms

# 编译igb_uio驱动; 在wsl中会编译失败,需要在linux环境中编译
git clone git://dpdk.org/dpdk-kmods
cd dpdk-kmods/linux 
make

# 驱动安装
modprobe igb_uio

# 停止网卡
ip link set enp0s8 down
ip link set enp0s9 down

# 绑定网卡
./dpdk-devbind.py --bind=igb_uio enp0s8
./dpdk-devbind.py --bind=igb_uio enp0s9

测试

如果没有dpdk进行数据转发,10.0.1.2的网卡是无法将数据包发送给10.0.2.2的网卡。因为两者不在一个内部网络中。

下面,我们先启动转发程序。

./dpdk-skeleton  
EAL: Detected CPU lcores: 8
EAL: Detected NUMA nodes: 1
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: Probe PCI driver: net_e1000_em (8086:100e) device: 0000:00:08.0 (socket -1)
EAL: Probe PCI driver: net_e1000_em (8086:100e) device: 0000:00:09.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Port 0 MAC: 08 00 27 7c bf 6e
Port 1 MAC: 08 00 27 af 8d 7d

WARNING: Too many lcores enabled. Only 1 used.

Core 0 forwarding packets. [Ctrl+C to quit]

然后使用10.0.1.2网卡,给10.0.2.2发送ICMP数据包,连接正常。

ping 10.0.2.2
PING 10.0.2.2 (10.0.2.2) 56(84) bytes of data.
64 bytes from 10.0.2.2: icmp_seq=1 ttl=64 time=1.01 ms
64 bytes from 10.0.2.2: icmp_seq=2 ttl=64 time=1.26 ms
^C

我们再尝试下tcp协议。

# 在server上启动监听程序
nc -l -k -s 10.0.2.2 -p 80

# client与server建立连接
nc -s 10.0.1.2  10.0.2.2 80

# 两者通信正常

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1526355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

es文档操作命令

文档操作 documents 创建数据(put) 向 user 索引下创建3条数据 PUT /user/_doc/1 {"name":"zhangsan","age":18,"sex":"男","info":"一顿操作猛如虎,一看工资2500"…

【OpenCV • c++】图像平滑处理(1) —— 线性滤波

文章目录 一、平滑处理二、图像滤波三、邻域算子与线性邻域滤波四、方框滤波代码演示 一、平滑处理 平滑处理也称为模糊处理,是一种简单且使用频率很高的图像处理方法,平滑处理的用途有很多,最常见的是用来减少图像上的噪点或者失真。在涉及到…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:EffectComponent)

特效合并容器组件,用于子节点特效绘制的合并,实现特效的绘制性能优化。 说明: 该组件从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 该组件为系统接口。 目前该组件仅支持子组件背景…

[java基础揉碎]Object类详解

目录 equals方法: hashCode: toString: finalize: equals方法: 和equals对比 1.: 既可以判断基本类型,又可以判断引用类型 2.: 如果判断基本类型,判断的是值是否相等。示例: int i10; double d10.0; 3.:如果判断引用类型,判断的是地址是…

信息检索(十三):On Complementarity Objectives for Hybrid Retrieval

On Complementarity Objectives for Hybrid Retrieval 摘要1. 引言2. 相关工作2.1 稀疏和密集检索2.2 互补性 3. 提出方法3.1 Ratio of Complementarity (RoC)3.2 词汇表示(S)3.3 语义表示(D)3.4 互补目标 4. 实验4.1 实验设置4.2…

哪里有视频素材网站免费下载?高清烟花视频素材哪里有?

如果你在寻找那些能点亮夜空的绚丽烟花视频素材,或者无水印的高清视频素材,那下面这些资源网站将会是你的宝库。今天,我要分享给你一些最佳的无水印视频素材下载网站,让你的视频制作闪耀起来。 1.蛙学府 这个网站是视频创作者的天…

windows使用docker运行TP6使用swoole内置http服务

1,下载docker-Windows客户端 下载地址:https://www.docker.com/products/docker-desktop docker --version #查看docker版本 docker-compose --version #查看docker-compose版本 2,安装环境 使用一键安装包:https://gitee.com/yes…

如何在Linux CentOS部署宝塔面板并实现固定公网地址访问内网宝塔

文章目录 一、使用官网一键安装命令安装宝塔二、简单配置宝塔,内网穿透三、使用固定公网地址访问宝塔 宝塔面板作为建站运维工具,适合新手,简单好用。当我们在家里/公司搭建了宝塔,没有公网IP,但是想要在外也可以访问内…

Android和IOS应用开发-Flutter 应用中实现记录和使用全局状态的几种方法

文章目录 在Flutter中记录和使用全局状态使用 Provider步骤1步骤2步骤3 使用 BLoC步骤1步骤2步骤3 使用 GetX:步骤1步骤2步骤3 在Flutter中记录和使用全局状态 在 Flutter 应用中,您可以使用以下几种方法来实现记录和使用全局状态,并在整个应…

深度学习pytorch——基本数据类型创建Tensor(持续更新)

声明:本深度学习笔记基于课时18 索引与切片-1_哔哩哔哩_bilibili学习而来 All is about Tensor 定义:Tensors are simply mathematical objects that can be used to describe physical properties, just like scalars and vectors. In fact tensors a…

粤嵌6818开发板通过MobaXterm使用SSH连接开发板

链接:https://pan.baidu.com/s/18ISP4Ub1HtQx6jCvTQTUHw?pwdfjmu 提取码:fjmu 1.把SSH_config.tar.bz 下载到开发板中 2.解压 SSH_config.tar.bz 解压命令:tar -xzvf SSH_config.tar.bz 3.配置SSH 进入SSH/openssh目录&am…

【深度长文】聊一聊 Java AbstractQueuedSynchronizer 以及在 ReentrantLock 中的应用

文章目录 AQS 原理简述内部数据结构公平锁 vs. 非公平锁ReentrantLock 非公平锁ReentrantLock 公平锁 AQS 源码分析加锁过程addWaiteracquireQueuedshouldParkAfterFailedAcquirecancelAcquire 解锁过程unparkSuccessor AbstractQueuedSynchronizer (AQS) 是 Java 并发包中&…

【Qt问题】解决已经下载好的qt怎么添加或卸载其他组件

问题描述: 使用一段时间Qt以后发现需要用到某个组件,比如Qt Webengine这个组件等,而此时我又不可能把Qt卸载了,重新安装一次。 解决办法: 其实Qt提供了安装或卸载其他组件的方式,以下是操作步骤&#xff…

nuxt3项目总结

nuxt3项目总结 仓库 前言 大半年的时间,项目从秋天到春天,从管理后台到APP再到数据大屏,技术栈从vue3到uniApp再到nuxt3,需求不停的改,注释掉代码都快到项目总体的三分之一。 一、准备-搭建项目架子 1.1 创建一个…

windows无法启动HV主机服务 服务(位于本地计算机上) 错误 1068:依赖服务或组无法启动

背景: LZ本地装了VMware Workstation虚拟机,里面装了Oracle, 又在Docker里装了PostgreSQL, 操作系统是Windows10 专业版 如果启动VM,就报这个错Device/Credential Guard 不兼容 参考这个博客,就可以解决 与Device/Credetial Guard不兼容 我用到的是方法二, 但是想用Docker时, …

吴恩达机器学习笔记 二十四 决策树模型 学习过程 什么时候停止分裂 如何选择结点特征

案例:识别小猫,上面这个分类的特征 x 采用分类值(几个离散的值) 决策树最顶端的结点称根结点(root node),除了根结点和叶子结点之外的叫决策结点(decision node),最底层的叫叶子结点(leaf node)&#xff0c…

JVM的双亲委派模型和垃圾回收机制

jvm的作用是解释执行java字节码.java的跨平台就是靠jvm实现的.下面看看一个java程序的执行流程. 1. jvm中的内存区域划分 jvm也是一个进程,进程在运行过程中,要行操作系统申请一些资源.这些内存空间就支撑了后续java程序的执行. jvm从系统申请了一大块内存,这块内存在java程序使…

蓝桥杯2022年第十三届省赛真题-选数异或

solution1&#xff08;55/100 只保留最后一次的位置&#xff0c;其实有点问题&#xff0c;能骗一点分数 #include<iostream> #include<map> using namespace std; const int maxn 1e5 10; int a[maxn]; int main(){int n, m, x, l, r, t, flag;map<int, int…

知识分享:宣传海报中的APP下载二维码如何制作?

近期&#xff0c;在北京地铁西直门站内&#xff0c;出现了一组十分醒目的海报&#xff0c;海报上加大、加粗的趣味文字深深地共情了每一个苦命的打工人。 比如&#xff1a; 查询我的精神状态 老板画的饼有多大&#xff1f; 为什么早上的会那么好睡&#xff1f; 再比如&#x…

云计算与APP开发,如何利用云端服务提升应用性能?

随着移动应用程序&#xff08;APP&#xff09;的普及&#xff0c;如何提升应用性能成为了开发者们关注的重点之一。而云计算技术的发展为APP开发者提供了全新的解决方案。本文将探讨云计算与APP开发的结合&#xff0c;以及我们公司提出的解决方案&#xff0c;帮助开发者利用云端…