目录
- 一、前言
- 二、环境部署
-
- 1、安装VirtualBox虚拟机
- [2、下载 P4 Tutorial 虚拟机镜像](#2、下载 P4 Tutorial 虚拟机镜像)
- 3、导入镜像文件
- 4、配置网络
- 三、测试
-
- 1、测试网络
-
- [1.1 查看网络配置](#1.1 查看网络配置)
- [1.2 测试网络连通性](#1.2 测试网络连通性)
- [2 更新教程代码库](#2 更新教程代码库)
- [3 核心工具简介](#3 核心工具简介)
一、前言
- 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 命令查看网络接口配置。通常,eth0 或 ens33 是主网络接口,应显示一个与宿主机同网段的IP地址(如 192.168.1.x)。
1.2 测试网络连通性
网络配置正确后,需要测试虚拟机与外部网络的连通性。请按顺序执行以下测试:
-
测试本地回环(Loopback):确保系统网络栈基本正常。
ping 127.0.0.1 -c 4预期结果:应看到
4 packets transmitted, 4 received,丢包率为0%。 -
测试与宿主机(你的物理电脑)的连通性 :
首先,在宿主机上打开命令提示符(Windows)或终端(Mac/Linux),输入
ipconfig或ifconfig找到宿主机的IP地址(例如192.168.1.100)。然后,在虚拟机终端中,ping 宿主机的这个IP地址:
ping <宿主机IP> -c 4例如:
ping 192.168.1.100 -c 4预期结果:成功收到回复包。如果失败,请检查VirtualBox的桥接网卡设置是否正确选择了你正在使用的物理网卡。
-
测试与外网的连通性:通过ping一个公共DNS服务器来验证虚拟机是否可以访问互联网。
bashping 8.8.8.8 -c 4预期结果:成功收到来自Google DNS服务器的回复。
-
测试域名解析:验证DNS服务是否工作正常。
bashping www.baidu.com -c 4预期结果:成功解析域名并收到回复。如果此步骤失败但上一步成功,可能是DNS配置问题,可以尝试修改
/etc/resolv.conf文件。
图:使用 ping 命令测试与外网连通性。
-
使用超级终端连接虚拟机
-
直接在虚拟机中的终端中操作,界面与操作体验很差,我们一般网络正常后,会使用超级终端或其他SSH软件连接虚拟机

2 更新教程代码库
P4 Tutorial 项目持续更新,为了获得最新的实验内容和错误修复,请确保你的虚拟机中的教程代码是最新版本。
-
进入教程目录:
cd ~/tutorials -
从远程仓库拉取最新代码:
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交换机的虚拟网络,并模拟终端主机发送和接收测试数据包。
三者协同工作流程:
- 你用P4语言编写数据平面程序(
.p4文件)。 p4c编译器将.p4文件编译成.json文件。- Mininet 启动一个网络拓扑,其中包含一个BMv2交换机实例。
- Mininet 将编译好的
.json文件加载到BMv2交换机中,配置其转发逻辑。 - 你通过Mininet的命令行或Python脚本,在虚拟主机上发送测试数据包,观察BMv2交换机根据你的P4程序处理这些数据包的结果。
实验目录结构预览 :
进入 ~/tutorials/exercises 目录,你会看到许多以实验主题命名的子目录(如 basic, calc, tunnel)。每个实验目录通常包含以下关键文件:
Makefile:核心构建脚本。运行make命令通常会依次执行:- 使用
p4c编译P4程序。 - 启动Mininet拓扑并加载BMv2交换机。
- 有时还会自动运行一些基本的测试。
- 使用
*.py:Python脚本。通常是Mininet拓扑的定义文件,或者用于发送特定测试数据包的自动化测试脚本。*.p4:P4源代码文件,即你需要编写或学习的核心程序。
在后续的实验中,你将频繁使用 make run 命令来启动一个实验环境。