本文主要介绍可编程P4语言在提高网络监控和管理方面的应用。如果您对网络虚拟化、DPDK、智能网卡、VPP、P4等感兴趣,欢迎关注公众号:通信行业搬砖工
计算虚拟化和虚拟机的广泛部署导致网络扩展到虚拟机管理程序。网络虚拟化解决方案已经出现,能够为虚拟机和容器网络接口快速配置网络服务(逻辑交换机、逻辑路由器、负载平衡器、防火墙等)。VMware NSX 是一个网络虚拟化平台,旨在与物理网络分离,以便支持在任何物理网络基础架构上部署虚拟服务,物理网络的唯一要求是虚拟机管理程序之间的 IP 连接。
虽然物理和虚拟拓扑的解耦具有优势,但物理和虚拟交换机之间进行一些交互非常重要,以便从“单一管理平台”对整个物理 + 虚拟网络进行端到端监控,并帮助在复杂的物理 + 虚拟拓扑中进行故障排除和故障隔离。
我们提出了各种网元实时收集和报告其状态的方法,从而可以改善虚拟层和物理层之间的协作,而无需中间层,例如CPU驱动的控制平面。我们应用于这些方法的一般术语是INT:带内网络遥测。
网络元素要报告的有用网络状态的一些示例包括:
INT的前提非常简单:管理网络的传统方法几乎完全基于客户端/服务器或“拉取”模型。管理设备定期轮询感兴趣的设备以获取特定数据,这些请求由本地控制平面堆栈处理,并收集数据并发回。几代网络已经证明了这种模型的缺点,这是由于基于CPU的控制平面的限制以及网元和端口(虚拟和物理)以及链路带宽数量的爆炸性增加。
在 INT 模型中,直接从数据平面提取和导出来自网络数据平面的信息,而没有控制平面 CPU 的开销或规模限制。此外,驻留在数据平面中的信息本质上通常是短暂的:队列深度、数据包丢弃和路由/ECMP 路径选择等状态通常会在几毫秒内发生变化,如果它们没有被跟踪或在数据平面上可见,则信息(或潜在问题)不会被注意到。因此,将编程接口直接连接到数据平面是开发这些类型应用程序的关键要求。
在使用 INT 的网络部署中,源 vSwitch 在数据包中嵌入“指令”,这些指令指定中间 INT 感知网络元素插入数据包中的所需网络状态。目标交换机收集上报状态。目标交换机可以将收集到的数据导出到本地CPU以供本地设备使用,将数据导出到远程服务器,或者将数据反馈给发送交换机,以便其根据数据采取某些操作。也可以采取这些行动的组合。
P4 非常适合开发这些类型的 INT 应用程序:它足够通用,可以表达多种数据包格式和标头字段,它在如何封装和/或编码此信息方面非常灵活,并提供寄存器等原语来执行有意义的分析、状态管理和阈值 - 所有这些都在数据平面内。以灵活的方式操作标头的能力是解决方案的关键部分,另一个是数据平面本身可见的信息。当涉及多个设备时,此模型可以进一步扩展:P4 中的寄存器功能允许对遥测信息进行比较、阈值和有状态处理等功能。
如下图所示: INT 应用场景:测量和报告虚拟交换机之间的端到端延迟
此处描述了 INT 的一个说明性示例。源交换机 (vSwitch 1) 为每个网元嵌入指令,以报告数据包在网元遇到的延迟(本地出口时间戳和本地入口时间戳之间的增量)。接收 vSwitch (vSwitch2) 可以将端到端延迟计算为每跳延迟的总和(假设交换和排队延迟占主导地位,传播延迟最小,这在当今的网络中通常是正确的)。在目标 vSwitch 接收的数据包中的每跳延迟也可用于确定哪个网元对端到端延迟的贡献最大。
虽然上面的示例说明了单个网络状态的集合,但可以一起收集多种类型的网络状态。例如,<交换机 ID、输入端口、输出端口、出口链路利用率>都可以收集在一起,以发现一对端点之间的不同路径以及每条路径上的拥塞级别。
能够使用自定义元数据插入或修改标头具有重要价值,但能够以某种方式过滤或限制要对其执行操作的信息量也很重要。P4 语言允许基本的有状态操作,可以检查此数据的阈值,允许用户过滤掉“正常”流量,仅在满足特定条件或发生特定数据平面事件时才采取措施。一旦将这些基础功能添加到网络中,就可以实现一系列全新的应用程序、调试和优化。动态监控链路利用率(并立即响应该信息)、自动快速重新路由(不仅围绕总故障,而且围绕部分降级的链路)以及硬件精确的路径和延迟跟踪:这些和其他应用程序由可编程数据平面、高级语言和 INT 构建块实现。