P4学习-1:介绍与参考资料

实验前

  1. P4的PISA(Protocol-Independent Switch Architecture)结构:

    Programmable Parser—>Programmable Match-Action Pipeline—> Programmable Deparser;

    Parser作用:程序员声明应该被识别的头和它们在包中的顺序

    Match-Action作用:程序员定义表和精确的处理算法

    Deparser作用:程序员声明输出的包怎样输出到总线上

    image-20210220162023603

    整个结构都是流水线架构,一个来自外部的网络数据包经过层层流程首先被Parser解析出headers,然后进入Match-Action Table进行匹配和操作,这些headsers可以被添加/修改/删除;然后进入Deparser组装好流入外部网络,因为是流水线,所以Match-Action部分是不可以回头的 ;

  2. 实验部分——文件结构:(主要参考博客)

    tutorials的文件结构:

    1
    2
    3
    4
    tutorials/
    ├── exercises # 存放各种练习
    ├── utils # 工具脚本目录
    └── vm # 用于vagrant构建虚拟机的目录,可以无视

    例子的文件结构:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 我们切换进入 exercises/basic_tunnel 这个例子
    basic
    ├── basic_tunnel.p4 # 要编写的p4代码
    ├── build # 生成文件的目录
    ├── logs # 日志文件, 在调试的时候真的非常重要!
    ├── Makefile ### 通过Makefile 来调用utils下的脚本!
    ├── pcaps # 生成的pcap包,可以使用wireshark等工具来分析
    ├── README.md # 详细的指导
    ├── receive.py ## 利用scapy写的抓取和分析数据包的工具
    ├── s1-runtime.json #
    ├── s2-runtime.json # 在运行同时加载入交换机的控制面代码,这里有争议,稍后再谈
    ├── s3-runtime.json #
    ├── send.py ## 利用scapy写的构建和发送数据包的工具
    ├── solution # 这里有这个例子的示例代码(答案)
    └── topology.json # 描述拓扑的json文件

    这部分摘自参考资料的博客,实际情况有所不同

    Makefile会调用前面提到的utils下面的Makefile脚本,运行P4代码;

    使用make run 启动;

    调用make run,我们可以运行当前目录下(以basic目录为例)的代码,它将执行以下几个步骤:

    • 编译basic.p4 代码,生成basic.json
    • 解析topology.json, 并且构建相应的mininet仿真拓扑,按照该拓扑启动一台或者多台BMv2交换机,以及一些host
    • 启动BMv2的同时会将p4代码编译产生的json文件导入
    • 启动BMv2后会解析 sN-runtime.json 文件(s1,s2,s3……),将其载入 交换机sN流表之中
    • 进入mininet命令行,同时开始记录log以及搜集pcap文件
  3. P4的参考手册:https://p4.org/p4-spec/docs/P4-16-v1.0.0-spec.html

参考资料