阅读笔记|P4: programming protocol-independent packet processors
warning: 这篇文章距离上次修改已过315天,其中的内容可能已经有所变动。
info: Bosshart, Pat, Dan Daly, Glen Gibb, Martin Izzard, Nick McKeown, Jennifer Rexford, Cole Schlesinger, et al. “P4: Programming Protocol-Independent Packet Processors.” ACM SIGCOMM Computer Communication Review 44, no. 3 (July 28, 2014): 87–95. https://doi.org/10.1145/2656877.2656890.
背景
- OpenFlow采用了固定的包解析方式,只识别预定义的协议标头和固定字段。
- 为了支持更多协议,OpenFlow不得不持续扩展支持的字段列表。
- 字段数量的增加导致了OpenFlow规范的复杂性持续上升。
- 但扩展现有规范仍然无法提供足够的灵活性,无法支持新增的自定义头格式。运营商往往需要采用软交换机来实现新功能。
- OpenFlow对标头的假设限制了其扩展性。控制器无法表达新的包头应该如何被处理。
- 固定标头机制与SDN控制交换机转发的初衷不符。控制器应该能定义包的解析方式和处理流程。
- 作者认为,未来OpenFlow应该提供灵活的包解析机制,而不是继续扩展固定的字段列表。控制器应通过通用开放接口使用这些能力。
## 目标
- 可重构性:允许控制器对已部署的交换机进行重构,重新定义数据包解析和处理方式。
- 协议独立性:不依赖特定协议,控制器可以指定包解析方式和处理字段。
- 目标独立性:可以适配不同软硬件设备,并对上层屏蔽这些差异。
抽象转发模型
作者提出了一个包含可编程解析器和多阶段匹配动作的抽象转发模型。解析器可编程可支持新的报头;匹配动作阶段可串联或并联;动作由交换机支持的原语组成。该模型概括了不同的转发设备和技术的packet处理方式。
P4编程语言
作者设计了P4语言来表达交换机的配置和包处理方式,与Click等过于泛化的语言不同,P4对可表达性和硬件映射进行了平衡。P4包含下面几个关键组成部分:
- 报头定义:定义报头序列和每字段的参数
- 解析器:定义如何识别和提取报头
- 表:匹配动作表执行包处理
- 动作:构建复杂动作原语
- 控制流程:定义表的执行顺序
编译
编译可将P4的目标无关表示映射到不同的交换机平台。解析器编译为状态机,控制流程先转换为表依赖图然后再映射到不同的交换机硬件。
个人思考
- P4与OpenFlow并不冲突,都负责对网络的进一步抽象化,屏蔽底层复杂性,只是P4这方面做得相对更好。对于底层复杂性的屏蔽有利于意图的实现,使得IBN四环中意图激活的环节可以得到保障,让研究精力可以集中到更为重要的意图分析和翻译上来。也就是说,现在可以认为P4编程语言可以作为意图翻译后的一种中间表示。
- P4提出的三大目标对于IBN来说至关重要。首先意图发生修改时需要可重构性。其次,意图作为高层抽象完全可能独立于目标设备(当然意图也可以具体化,只要能通过校验)。