一、实验目的
- 掌握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课程让我受益匪浅,感谢老师的指导和同学的帮助。