P4_lang

P4_lang

p4语言简介

P4(Programming Protocol-Independent Packet Processors) 是一种数据面的高级编程语言。数据面编程就是我们自定义匹配字段 ,自定义动作类型 , 从而自定义流表 ,进而形成流水线。p4不仅可以对数据流进行转发,还可以对交换机等转发设备的数据处理流程进行软件编程定义。p4语言实现的交换机架构如下图

p4语言特点

p4的几个需要注意的点:

  • 可以实现现有协议的转发功能
  • 可以自定义数据包结构
  • 可以在现有协议的基础上进行新的功能开发
  • SW 风格开发——协议和转发的开发模式类似于软件开发

    p4的语言要素

  1. headers(metadata)
  2. parser
  3. table & action
  4. control flow code

    headers

    可以自定义header,添加目前数据包中不存在的字段,便于实现转发时候特定字段的匹配和动作。但是p4写成的程序只负责解析字段,所以还需要软件环境。

    parser

    用于解析数据包的headers的状态机,他可以有很多种状态,可以根据来的数据包的状态来选择变成哪个状态,而且有三个预留的状态
  • start
  • reject
  • accept
    状态机转变关系
    除这三个之外的状态可以自己定义,状态之间的转变也可以用户自己定义,完全是可编程的。

    table & action

    table是由controller通过南向协议进行下发,而匹配的模式可以由p4语言来确定,table只提供了表,怎么去查表,查表之后进行怎么样的动作,也都完全由p4程序来确定,包括匹配的key,下一步的action id,但是action data是由table传出来的。

    control flow code

    这部分就像是c++程序里面的顺序结构,规定先干什么,然后在干什么,最后干什么,这部分的可编程化,把交换机的单一功能变得更加自主和智能化。交换机不再仅仅完成简单的ip或者名称匹配,而是又一个复杂的流程需要完成,可以是多个匹配任务的连续,也可以对数据包的包头进行修改,增加,删减等动作。所谓的协议和转发策略一切变得跟软件开发一样简单。
# P4

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×