实验8:数据平面可编程实践——P4
一、实验目的
- 掌握V1Model框架下P4_16的程序结构和基本语法
- 能够运用 P4 进行简单数据平面编程
二、实验环境
- 下载虚拟机软件Oracle VisualBox或VMware;
- 在虚拟机中安装Ubuntu 16.04 Desktop amd64,并安装完整Mininet和P4开发环境;
- 提供P4镜像P4-Suite2018.ova,提取码:egwf
三、实验要求
学习P4官方示例教程,链接:https://github.com/p4lang/tutorials,了解P4-16版本的基本语法、基于V1Model的P4代码结构,完成如下练习:
(一)基本要求
熟悉使用P4实现交换机IPv4的基本转发原理,编写P4程序,在下面的拓扑中实现IPV4 隧道转发。

-
进入
/P4/tutorials/exercises/basic_tunnel用编辑器打开basic_tunnel.p4 完善代码,完善后在该目录下打开终端,输入make run运行
-
测试连通性

-
(1)不使用隧道时:
-
输入
xterm h1 h2 h3命令,并在h2和h3的窗口输入./receive.py,开启服务器用于接收消息 -
在h1输入
./send.py 10.0.2.2 "031902218 experiment"-
输入指令

-
结果显示



-
-
在h1输入
./send.py 10.0.3.3 "031902218 experiment2"-
输入指令

-
结果显示


-
-
-
(2)使用隧道时:
-
在h1输入./send.py 10.0.2.2 "031902218 experiment1" --dst_id 2
-
输入指令

-
结果显示:


-
-
在h1输入./send.py 10.0.3.3 "031902218 experiment2" --dst_id 2
-
输入指令:

-
输出结果:



-
对比以下两种情况可知,使用隧道转发时,改变IP交换机仍然会将报文发送给h2主机
-
(二)进阶要求
在熟悉隧道转发原理的前提下,编写实现P4Runtime的Python代码,将流规则下发到上图拓扑中的交换机,实现依据此规则的隧道转发。
-
在
/P4/tutorials/exercises/p4runtime目录下打开终端输入make,建立拓扑
-
完善
/P4/tutorials/exercises/p4runtime下mycontroller.py中writeTunnelRules函数的代码,打开终端并输入python mycontroller.py,实现流表的下发与隧道转发
-
p1 ping p2验证结果

可以ping通,说明步骤正确
四、个人总结
-
实验难度:难
这次实验感觉非常难,由于对P4比较陌生,学习的过程中很困难,有时候完全不懂得为什么会发生这样那样的问题
-
实验过程遇到的困难:
1.问题:打开老师给的虚拟机后发现界面非常小不易操作
解决方案:经过查找资料和询问同学后发现需要安装VMware Tools,安装后就能够正常进行实验操作了,这里给出参考链接https://blog.csdn.net/qq_42239069/article/details/82659948
2.问题:对于编写实现P4Runtime不太清楚,感觉没有什么思路
解决方案:进一步了解P4的相关使用,阅读
mycontroller.py中的源码和注释,然后在同学的帮助下终于解决了这个问题 -
个人感想:
这次实验总体上感觉起来比以往都难,可能是我对P4的不够了解的原因,不过一步步遇到问题解决问题的过程,还是让我收获到了很多,这是SDN的最后一次实验了,通过这次SDN的课程,我感觉自己学习到了很多新的有趣的知识,阅读源码也更加得心应手,通过learning by doing的方式也锻炼了我的编码能力。总的来说,这次SDN课程让我受益匪浅,感谢老师的指导和同学的帮助。

浙公网安备 33010602011771号