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

一、实验目的

  • 掌握V1Model框架下P4_16的程序结构和基本语法
  • 能够运用 P4 进行简单数据平面编程

二、实验环境

  • 下载虚拟机软件Oracle VisualBox或VMware
  • 在虚拟机中安装Ubuntu 16.04 Desktop amd64,并安装完整Mininet和P4开发环境
  • 提供P4镜像P4-Suite2018.ova,提取码:egwf

三、实验要求

(一)基本要求

1.熟悉使用P4实现交换机IPv4的基本转发原理,编写P4程序,在下面的拓扑中实现IPV4 隧道转发


  • 补全/P4/tutorials/exercises/basic_tunnel中的basic_tunnel.p4代码
  • 在此文件夹中打开终端并输入make run命令运行后用xterm命令打开主机h1 h2 h3

  • h2h3中输入./receive.py,在h1中分别输入./send.py 10.0.2.2 "P4 is 666"./send.py 10.0.3.3 "P4 is 777"



  • 可以看到没有采用隧道转发的情况下,由ip地址来决定目的主机
  • 采用隧道转发,在h1中输入./send.py 10.0.3.3 "P4 is really cool!" --dst_id 2

  • 可以看到虽然修改了目的ip地址,但是h2还是收到了报文,而h3没有收到,因为此时通信是根据mytunnel标头指定的dst_id进行转发的。

(二)进阶要求

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

  • 首先在/P4/tutorials/exercises/p4runtime中打开终端运行命令make,并进行h1 ping h2操作

  • mycontroller.py里面的writeTunnelRules函数的代码进行补充(主要是三个规则)
  • 另开一个终端输入命令./mycontroller.py



  • 这个时候可以看见ingress,egress的计数都上涨了,并且h1h2也可以ping通

四、个人总结

  • 实验难度:适中
  • 实验过程中遇到的困难及解决办法
    • 因为这次实验使用了新的虚拟机P4-Suite2018,发现复制粘贴功能用不了了,手动安装了vmwaretools之后成功解决问题。
    • 刚开始不懂得如何启动P4runtime服务,在网上参考了P4相关学习笔记后知道要用make而不是make run,(如果报错就先make clean)并且还要运行mycontroller.py,因为mycontroller.py作为一个结能的控制平面做了以下的事情:
      • 为P4Runtime服务构建了一个到交换机的 gRPC连接
      • 把P4程序push给各个交换机
      • 在h1,h2之间的两个隧道编写了ingress/egress规则
      • 每两秒读隧道的ingress/egress计数器
  • 个人感想
    • 这几年可编程硬件越来越重要了。在本次实验中,我们接触到了P4可编程语言,P4 作为一个编程语言,还算比较年轻,但也已经有6年多的历史了。类似于Python2和3的版本区别,P4也有两个版本,老的是P4 14,新的是P4 16,大体上看其编程难度也不是很难,作者给的代码都有比较详尽的注释,但自己对于P4编程来说还是不太熟练,在进行进阶要求时,参考了P4学习笔记-3,希望以后还能有机会接触到。
posted @ 2021-11-02 22:39  雀食蟀  阅读(191)  评论(0编辑  收藏  举报