一、实验目的
1.掌握V1Model框架下P4_16的程序结构和基本语法
2.能够运用 P4 进行简单数据平面编程
二、实验环境
1.下载虚拟机软件Oracle VisualBox或VMware;
2.在虚拟机中安装Ubuntu 16.04 Desktop amd64,并安装完整Mininet和P4开发环境;
3.提供P4镜像P4-Suite2018.ova,提取码:egwf
三、实验要求
学习P4官方示例教程,链接:https://github.com/p4lang/tutorials,了解P4-16版本的基本语法、基于V1Model的P4代码结构,完成如下练习: |
(一)基本要求
熟悉使用P4实现交换机IPv4的基本转发原理,编写P4程序,在下面的拓扑中实现IPV4 隧道转发。 |
- 进入home/P4/tutorials/exercises/basic_tunnel,完善后basic_tunnel.p4代码,完善后在该目录下打开终端,输入make run
- 使用pingall命令测试连通性,结果如下图所示:
-
(1)不使用隧道时:
-
输入xterm h1 h2 h3命令,并在h2和h3的窗口输入./receive.py,开启服务器用于接收消息
-
在h1输入./send.py 10.0.2.2 "h2,I am 031902239"
-
在h1输入./send.py 10.0.3.3 "h3,I am 031902239"
-
-
(2)使用隧道时:
-
在h1输入./send.py 10.0.2.2 "hello,i am 031902239" --dst_id 2
-
在h1输入./send.py 10.0.3.3 "hi,i am 031902239" --dst_id 2
-
对比以下两张图可知使用隧道转发时,改变IP交换机仍然将报文发送给h2主机
-
(二)进阶要求
在熟悉隧道转发原理的前提下,编写实现P4Runtime的Python代码,将流规则下发到上图拓扑中的交换机,实现依据此规则的隧道转发。 |
- 在/P4/tutorials/exercises/p4runtime目录下打开终端输入make,使用h1 ping h2命令,可见无法ping通
- 未补充mycontroller.py代码前,终端运行mycontroller.py时h1 ping h2结果如下:
- 补充mycontroller.py中的writeTunnelRules函数的代码,打开终端并输入./mycontroller.py,h1 ping h2后结果如下:
- h1和h2可ping通
四、个人总结
-
实验难度:较难
-
实验过程遇到的困难及解决办法:
-
做这个实验的第一个难受的地方就是没有网盘会员等了挺长时间才把实验环境下载下来的,好不容易下载下来了导入虚拟机后安装VMware Tools后再重启,重启后虚拟机开启时屏幕变成蓝屏,实在是不能理解,问老师但老师使用的是Virsualbox能够正常使用。虽然不明白问题出在哪里,但是在重新建个新的文件夹重新导入虚拟机后重新安装VMware Tools又可以正常使用了,还是可以解决的。
-
为了完成实验学习P4语言,感觉好难懂,结合其他同学的博客,对实验也有了些启发。
-
进阶要求有些不知所措,向同学学习如何启动P4runtime,在同学的启发下完成了进阶要求的作业。
-
-
个人感想:本次实验让我无语的还是超长时间的下载以及导入虚拟机后安装VMware Tools重启出现的“蓝屏”问题,虽然重新导入能够解决但我还是对此感觉挺疑惑的。这次实验学习了P4语言及其一些相关知识,虽然不是不太深入的实践,但我觉得是一个重要的成长,希望能在以后进一步学习这块内容。本次实验是软件定义网络的最后一次实验,这门课的八次实验让我学习到了挺多的理论知识,理论再结合实践达到了相互补充的效果,我觉得受益匪浅。