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

  • 相关阅读:
    appium+python自动化测试之webview的处理。
    Mysql为什么要使用视图
    show status 查看各种状态
    MySQL show processlist
    Java爬虫系列(五)
    div p、div>p、div+p、div~p、div.a 、p,span的用法和区别
    Spring Boot 定时任务 -- @Scheduled
    设计模式
    12月15日总结
    成员变量和静态变量的区别
  • 原文地址:https://www.cnblogs.com/beyondzones/p/15504112.html
Copyright © 2020-2023  润新知