实验8:数据平面可编程实践——P4

一、实验目的

  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 隧道转发。
img

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

    image-20211103144436275

  • 测试连通性

    image-20211103144729017

  • (1)不使用隧道时:

    • 输入xterm h1 h2 h3命令,并在h2和h3的窗口输入./receive.py,开启服务器用于接收消息

    • 在h1输入./send.py 10.0.2.2 "031902218 experiment"

      • 输入指令

        image-20211103151052282

      • 结果显示

        image-20211103150742293

        image-20211103150806594

        image-20211103150828425

    • 在h1输入./send.py 10.0.3.3 "031902218 experiment2"

      • 输入指令

        image-20211103151255868

      • 结果显示

        image-20211103150947288

        image-20211103151005542

  • (2)使用隧道时:

    • 在h1输入./send.py 10.0.2.2 "031902218 experiment1" --dst_id 2

      • 输入指令

        image-20211103151653998

      • 结果显示:

        image-20211103151729357

        image-20211103151714820

    • 在h1输入./send.py 10.0.3.3 "031902218 experiment2" --dst_id 2

      • 输入指令:

        image-20211103151859755

      • 输出结果:

        image-20211103151947858

        image-20211103151938690

        image-20211103152002511

    对比以下两种情况可知,使用隧道转发时,改变IP交换机仍然会将报文发送给h2主机

(二)进阶要求

在熟悉隧道转发原理的前提下,编写实现P4Runtime的Python代码,将流规则下发到上图拓扑中的交换机,实现依据此规则的隧道转发。

  • /P4/tutorials/exercises/p4runtime目录下打开终端输入make,建立拓扑

    image-20211103154346385

  • 完善/P4/tutorials/exercises/p4runtimemycontroller.pywriteTunnelRules函数的代码,打开终端并输入python mycontroller.py,实现流表的下发与隧道转发

    image-20211103154617917

  • p1 ping p2验证结果

    image-20211103155535632

    可以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课程让我受益匪浅,感谢老师的指导和同学的帮助。

posted @ 2021-11-03 16:13  NoahQ  阅读(87)  评论(0编辑  收藏  举报