用P4 Tutorial、BMv2 和 Mininet‌解析网络第一集------模拟环境搭建

目录

一、前言

  • ‌P4 Tutorial、BMv2 和 Mininet‌ 是 P4 网络编程生态系统中三个关键组件,它们协同工作,用于实现可编程数据平面的仿真与测试
  • 三者的关系可概括为:‌P4 Tutorial 提供实验内容,BMv2 提供可编程交换机能力,Mininet 提供虚拟网络环境‌
  • 本系列文章,试图用上述三个工具,通过具体实验,详解解读数据包在设备内部的详细动作与处理流程

二、环境部署

1、安装VirtualBox虚拟机

  • 可以前往官网下载安装

2、下载 P4 Tutorial 虚拟机镜像

  • P4 Tutorial 虚拟机镜像是一个用于学习和实践 P4 编程语言的虚拟机镜像文件,包含了运行 P4

    程序所需的完整开发环境,如编译工具、Mininet 网络仿真环境和示例代码等,这里我给一个我自己用的版本(P4 Tutorial 2021-06-01.ova‌):

    https://pan.baidu.com/s/1KJN4jSjqhKUo1AHNBjSydw?pwd=1234 提取码: 1234

3、导入镜像文件

  • 打开VirtualBox---管理---导入虚拟电脑
  • 然后导入你下载的P4 Tutorial.ova‌镜像文件

4、配置网络

  • 打开P4 Tutorial虚拟机
  • 选中新导入的虚拟机
  • 点击设置---网络---连接方式选择桥接网卡----节目名称选择你正常上网使用的网卡
  • 这时候你的IP地址默认为动态分配

三、测试

1、测试网络

完成网络配置后,需要验证虚拟机的网络连接是否正常,这是后续所有P4实验的基础。本节将分步指导你进行网络连通性测试,并确保开发环境是最新的。

1.1 查看网络配置

首先,打开虚拟机终端,使用以下命令查看当前的IP地址、子网掩码和默认网关等网络配置信息:

复制代码
ifconfig

或者使用更现代的 ip 命令:

复制代码
ip addr show

图:使用 ifconfig 命令查看网络接口配置。通常,eth0ens33 是主网络接口,应显示一个与宿主机同网段的IP地址(如 192.168.1.x)。

1.2 测试网络连通性

网络配置正确后,需要测试虚拟机与外部网络的连通性。请按顺序执行以下测试:

  • 测试本地回环(Loopback):确保系统网络栈基本正常。

    复制代码
    ping 127.0.0.1 -c 4

    预期结果:应看到 4 packets transmitted, 4 received,丢包率为0%。

  • 测试与宿主机(你的物理电脑)的连通性

    首先,在宿主机上打开命令提示符(Windows)或终端(Mac/Linux),输入 ipconfigifconfig 找到宿主机的IP地址(例如 192.168.1.100)。

    然后,在虚拟机终端中,ping 宿主机的这个IP地址:

    复制代码
    ping <宿主机IP> -c 4

    例如:ping 192.168.1.100 -c 4

    预期结果:成功收到回复包。如果失败,请检查VirtualBox的桥接网卡设置是否正确选择了你正在使用的物理网卡。

  • 测试与外网的连通性:通过ping一个公共DNS服务器来验证虚拟机是否可以访问互联网。

    bash 复制代码
    ping 8.8.8.8 -c 4

    预期结果:成功收到来自Google DNS服务器的回复。

  • 测试域名解析:验证DNS服务是否工作正常。

    bash 复制代码
    ping www.baidu.com -c 4

    预期结果:成功解析域名并收到回复。如果此步骤失败但上一步成功,可能是DNS配置问题,可以尝试修改 /etc/resolv.conf 文件。

    复制代码
    		![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4889c4b106ca4b11b06ed055279e9e08.png)

图:使用 ping 命令测试与外网连通性。

  • 使用超级终端连接虚拟机

  • 直接在虚拟机中的终端中操作,界面与操作体验很差,我们一般网络正常后,会使用超级终端或其他SSH软件连接虚拟机

2 更新教程代码库

P4 Tutorial 项目持续更新,为了获得最新的实验内容和错误修复,请确保你的虚拟机中的教程代码是最新版本。

  1. 进入教程目录:

    复制代码
    cd ~/tutorials
  2. 从远程仓库拉取最新代码:

    复制代码
    git pull

    如果这是你第一次使用,可能需要配置Git用户信息。如果出现"Already up to date."提示,说明已经是最新版本。

3 核心工具简介

在开始P4实验前,你需要了解我们将要使用的三个核心软件工具及其关系:

  • BMv2 (Behavioral Model version 2) :一个用软件实现的、支持P4编程的软件交换机。它负责执行你编写的P4程序,模拟真实交换机的数据包处理行为。
  • p4c :P4语言的参考编译器 。它将你编写的P4源代码(.p4文件)编译成BMv2交换机可以理解和加载的JSON格式配置文件。
  • Mininet :一个轻量级的网络仿真环境。它可以快速创建包含虚拟主机、交换机、链路的自定义网络拓扑。在我们的实验中,Mininet负责创建包含BMv2交换机的虚拟网络,并模拟终端主机发送和接收测试数据包。

三者协同工作流程

  1. 你用P4语言编写数据平面程序(.p4文件)。
  2. p4c 编译器将 .p4 文件编译成 .json 文件。
  3. Mininet 启动一个网络拓扑,其中包含一个BMv2交换机实例。
  4. Mininet 将编译好的 .json 文件加载到BMv2交换机中,配置其转发逻辑。
  5. 你通过Mininet的命令行或Python脚本,在虚拟主机上发送测试数据包,观察BMv2交换机根据你的P4程序处理这些数据包的结果。

实验目录结构预览 :

进入 ~/tutorials/exercises 目录,你会看到许多以实验主题命名的子目录(如 basic, calc, tunnel)。每个实验目录通常包含以下关键文件:

  • Makefile:核心构建脚本。运行 make 命令通常会依次执行:
    1. 使用 p4c 编译P4程序。
    2. 启动Mininet拓扑并加载BMv2交换机。
    3. 有时还会自动运行一些基本的测试。
  • *.py:Python脚本。通常是Mininet拓扑的定义文件,或者用于发送特定测试数据包的自动化测试脚本。
  • *.p4:P4源代码文件,即你需要编写或学习的核心程序。

在后续的实验中,你将频繁使用 make run 命令来启动一个实验环境。

相关推荐
.YYY3 小时前
RHCE--Linux循环执行的例行性任务:crontab从入门到精通
linux·运维·服务器
木欣欣粉皮3 小时前
解决Ubuntu 26.04的挂起状态唤醒问题
linux·运维·ubuntu
ambition202423 小时前
UNIX消息队列:从理论模型到工程实现的演进
linux·服务器·unix
高翔·权衡之境3 小时前
主题10:实时性——硬实时与软实时
服务器·网络·驱动开发·信息与通信·智能硬件
BullSmall3 小时前
Promtheus和Alertmanager 之间是通过管理平面还是业务层面IP交互
网络协议·tcp/ip·平面
云商直通车4 小时前
华为云ECS购买与配置超详细教程
服务器·数据库·华为云
黄筱筱筱筱筱筱筱4 小时前
交换综合实验
网络
zhojiew4 小时前
使用Redis Stream订阅HUATUO发布SSE内核可观测性事件并进行AI分析的数据管道实践
运维·hbase·aws
DONSEE广东东信智能读卡器4 小时前
用PowerShell实现Windows 本地 WSS/HTTPS 自签名证书配置方法
windows·网络协议·https·powershell·身份证阅读器