P4: Programming Protocol-Independent

P4: Programming Protocol-Independent

Packet Processors


We propose P4 as a strawman proposal for how OpenFlow should evolve in the future.

本篇论文中将P4作为OpenFlow的未来发展方向

P4旨在增加网络编程的灵活性

三个目标:

  1. 字段独立性:程序员能够自定义、改变包头字段(OpenFlow固定了包头字段数目,限制了南向协议)
  2. 协议独立性:交换机不应绑定到任何特定的网络协议。
  3. 目标独立性:程序员应该能够独立于底层硬件的具体细节来描述软件包的处理功能。

请添加图片描述

随着网络发展,OpenFlow协议规范越来越复杂,字段数不断增加,所以,P4提出:

不能再一直扩展OpenFlow规范,而应该支持更为灵活的解析数据包“匹配-动作” 的机制,且让控制器应用程序利用一个通用的开放接口来利用这些功能

总的来说:P4用来配置交换机,告诉交换机如何处理数据包


抽象转发模型

对于到达的数据包:

  1. 解析器处理:从报头中识别并提取字段,从而定义了交换机所支持的协议
  2. 将提取的报头字段传递给 “匹配-动作” 表,该表分为两部分:
    • Ingress Pipeline:数据包可以被转发、复制(用于组播、跨度或发送到控制平面)、丢弃或触发流控制
    • Egress Pipeline:执行对数据包头的每个实例的修改,例如,对组播复制

Packets can carry additional information between stages, called metadata, which is treated identically to packet header fields

请添加图片描述


一个P4实例

考虑一个L2网络部署的例子,使用顶部机架(ToR)的交换机,假设终端主机的数量正在增长,而核心L2表正在溢出

解决方案:

  • MPLS协议:为每个数据包打个Tag,只根据Tag转发(不足:难以实现具有多个标签的标签分发协议)
  • PortLand:重写MAC地址(不足:可能会破坏现有的网络调试工具,且需要新的代理来响应ARP请求)
  • P4:mTag(二者的结合)通过用4字节(32位)的Tag对“源路由”或者目的地定位器(例如PortLand’s Pseudo MAC)进行编码。每个核心交换机只需要检查其中的1个字节,并打开该信息即可

包解析器

P4的解析器其实是Header之间转换的状态机,根据检测到的值,跳转到下一个解析器

  • P4的解析器都从其start状态开始检测数据包,在stop状态或者出错时停止
  • 解析器提取到的包头信息将会交给 “匹配-动作” 表

请添加图片描述

  • 对于具有可编程解析器的设备,编译器将解析器描述转换为解析状态机
  • 对于固定解析器,编译器仅仅验证解析器描述是否与目标的解析器一致

操作规范

P4语言中动作是由一系列原语组成的:

  • set_field:设置某一包头中的某一个字段
  • copy_field:把某报头的某字段复制到另一报头的某字段
  • add_header:添加新报头
  • remove_header:删除报头
  • increment:修改报头某一字段的值
  • checksum:计算报头校验和

控制程序

经过解析处理之后:于是就来到了这里

请添加图片描述

  1. 包解析后,"source_check"表检查数据包和入口端口之间的一致性(例如,带有mTag的包只能从与核心交换机相连的端口收到)"source_check"表同时还会剥掉mTag头部,并在metadata中记录这个数据包是否带有mTag头部,防止重复的贴标签。
  2. "local_switching"表:
    • " miss ":表明数据包不是发给本地主机,交给"mTag"表进行匹配,再给"egress_check"表
    • " hit ":直接给"egress_check"表
  3. "egress_check"表:根据匹配结果或本地主机位置转发数据包,把未知目的地址的包交给SDN控制器

OpenFlow : targets fifixed-function switches

The control plane cannot express how packets should be processed to best meet the needs of control applications.

P4 : more flexible switches

The programmer decides how the forwarding plane processes packets without worrying about implementation details

请添加图片描述


参考链接:isLiuhy (cnblogs.com)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

K_Haki

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值