可编程网元的过去
在过去的很长一段时间里,网元之间通过 OSPF(开放式最短路径优先协议)、BGP(边界网关协议)等运行在设备控制面的分布式路由协议,进行交互工作。
网元提供 SNMP、NETCONF、WEB、CLI 等接口,进行配置下发或状态获取,控制面和转发面都由设备商或芯片商实现,内部架构或实现细节对网元的拥有者而言是一个黑盒。这种网元,属于“可配置网元”。
后来,有了 SDN(软件定义网络)。
SDN 的一个标志性动作,就是转发面和控制面分离。这两者破天荒地结束了你中有我、我中有你的耦合状态。
控制面常采用软件的方式实现,集中方式部署,可以同时管控多个数据面转发网元。比较知名的开源 SDN 控制器,有 ONOS、ODL 等。
控制器会集中进行路由计算,并把每个受控转发网元的表项以 Openflow 等标准 API 的方式进行下发。
网络的拥有者可以对转发网元的控制面按需定制(通过控制器),对转发面的定制尺度有限,往往取决于采用的 Openflow 规范和所选择的 ASIC 硬件。
SDN 时代的硬件转发网元,属于“控制面可编程网元”。
可编程网元的现状随着数据面可编程交换芯片及 P4 语言的出现,转发网元的数据面也变的“善解人意”起来,可以根据用户的业务场景和流量模型进行定制。
比如,传统的 IP 类转发网元,对 5G 用户面网元 UPF 所采用的 GTP 报文的封装和解封装并不支持。数据面不可编程时代,要支持 GTP 就需要重新设计硬件,重走一遍传统产品需求调研、立项、研发、测试等环节,这个周期想想都很长。
可编程数据面硬件的出现,运行在设备侧的 P4 Runtime 代理(如 stratum)与控制面通过 P4 Runtime 交互,动态切换或改变转发逻辑(如转换为支持 GTP 的数据面)成为可能。这种网元,属于“全可编程网元”。
通过下表,可以对三种类型网元做个简要对比:
转发网元数据面可编程,其实也不是可编程交换芯片的专属。
软件实现的虚拟网元、网络多核处理器 NP、FPGA 等实现的网元,都可以作为 P4 语言的运行 target(目标)。而且,这些网元的可编程能力较之可编程交换芯片往往更好。
不过,论带宽、功耗、成本之类的硬指标,胜出的还是可编程交换芯片。
网元的控制面、转发面全可编程带来的直接好处,是网络的拥有者不再受设备和芯片商的锁定。
全可编程网元及由这些网元构成的可编程网络,能够极大激发产学研各界对网元、网络创新的热情,同时,也通过 P4 语言等降低了创新的门槛。
针对控制面的研究,随着 SDN 的成熟,可谓硕果累累。
下面,笔者罗列了一些针对数据面可编程进行的优秀创新和实践。通过这些案例,可以更好地了解可编程网元的现状:
负载均衡
大型数据中心网络虚拟 IP 地址流量约占 44%,需要做带状态负载均衡来维持每条连接的一致性。
数据中心通常的解决方案,是用上百台服务器专门来做负载均衡。这大约会占用 4% 的计算资源,这部分计算资源无法再售卖给客户进行变现。
雪上加霜的是,用服务器跑软件的方式进行负载均衡,会带来较高的延时和抖动,影响用户的体验。
2017 年的一篇 SIGCOMM 论文抛出了 SilkRoad 方案(没错,汉语意思是“丝绸之路”),成功的将这一棘手问题扔进了垃圾桶。
SilkRoad 使用可编程交换机来做带状态四层负载均衡,通过存储流的五元组哈希值与 DIP 池版本号来分别减少匹配域和动作的大小,从而实现在交换机上同时维护上百万条流的带状态连接。通过硬件实现的 bloom filter,用于确保即使 DIP 池发生更新,也能维持每条连接的一致性。
SilkRoad 这样做的好处也很明显,可以用一台可编程交换机代替上百台服务器来完成带状态负载均衡的工作。这样不仅将带状态负载均衡的成本降低了两个数量级,还锦上添花地降低了延迟与抖动。
网络测量
有网络运维经验的读者一定深有体会,日常的网络管理和维护依赖于及时有效的网络测量和监控。
也许有的读者也听说过 NetFlow,一款应用广泛的网络监控工具。如果监控所有流,会带来较高的处理时间,以及较大的存储空间消耗,很难在数据中心的商用交换机中进行部署。
因此 NetFlow 需要对数据包进行抽样,只能监控一部分流。这样一来,对暂态路由循环、路由黑洞、突发流等进行检测,就变得不切实际。因为这些都需要在短时间内,对所有流不采样地进行监控。
一篇题为《A better NetFlow for data centers》的文献,设计了 FlowRadar(流雷达),专门来解决这个痛点。
它的核心思想是,在可编程交换机上使用扩展的可逆布鲁过滤器查询表,对每条流的计数器进行编码。然后,使用远程采集器的计算能力,对全网流计数器进行解码和分析。
这样一顿折腾,FlowRadar 比 NetFlow 的优势就出来了。它可扩展性更好,可以监控所有的流,可以搞定暂态路由循环、路由黑洞、突发流等棘手问题的检测。
网络安全
DDoS 攻击,大家应该不会陌生,没经历过至少也应该听说过。因为它是目前网络环境中规模最大、频率最高的网络攻击手段。
应对这种攻击的传统方法,是使用中间件来缓解。虽然 SDN 技术也可以被用来防御 DDoS 攻击,但它本身又引入了新的 DDoS 的攻击点。SYN-flood 攻击会使控制信道的链路容量和数据平面缓存很快成为瓶颈,就是个有血有肉的例子。
那么,有没有在数据平面直接把 DDoS 攻击流量清理掉的方案呢?
还真有,题为《Network anti spoofing with SDN data plane》的文献,就提出了可以完全实现在可编程数据平面上的 DDoS 流量清理方法,这就避免了和控制器的交互。
它的核心思想是,数据平面设备会拦截并代理 SYN 请求,根据报文重新计算出的随机 SYN-ACK challenge 作为应答号,成功响应 challenge 的源地址会被加入白名单并重设连接。
在通过 challenge 验证前,服务器和数据平面设备都不需要维护任何带状态的信息,可以应对很大的攻击流量。
当攻击流量超过了单一设备资源限制时,使用同一条转发路径上所有可编程数据平面的资源对攻击流量进行协同过滤,每个设备只负责清洗一部分流量,剩下的交由下游设备处理,让 DDoS 攻击来的更猛烈一些吧!
利用数据面可编程进行创新的例子,我们还可以举出很多。限于篇幅,笔者打算用一张图来进行这一节的收尾。
下图显示,可编程网元的研究在网络遥测、性能优化、加速卸载、安全等方方面面都有覆盖。对这一领域感兴趣的读者,也可以将这张提作为开启深入学习研究之旅的导航图。
可编程网元的未来随着数据面可编程方案的逐渐丰富,可编程网元已经迈入控制面、数据面都可编程的全可编程网元时代。
用户、业务和网络对可编程网元的期待是否都已变成现实?未来的网络是否会由可编程网元一统江湖?
上面的问题,每个读者都有自己的理解。下面笔者抛砖引玉,说说我的看法。
首先,用户、业务和网络的需求,本身就在不断的发展变化。而且,这个变化的趋势在逐渐加快。所以,对可编程网元的需求或期待,永远不会消失。
其次,未来网络一定是弹性灵活高性能、SLA 有保障的智慧管道,要实现这一目标,可编程网元绝对是个潜力股。
不过如前文所述,可编程网元的硬件形态,较之目前五花八门的种类和型号,一定会有所减少,但也不大可能会只有一种硬件形态。至少,通用服务器的虚拟化可编程网元和采用可编程交换芯片、NP 或 FPGA 其中的一种或几种组合的软硬一体化可编程硬件网元,大概率会存活下来。
目前,主流芯片供应商纷纷推出了自己的可编程芯片解决方案。白盒设备商,也迫不及待地基于可编程芯片,推出了各自的可编程网元硬件。国内外头部互联网公司,如 AWS、Google、阿里、腾讯等,纷纷调兵遣将,进行可编程网元的研发和落地。
未来针对软硬一体化可编程硬件网元的学术研究和产业应用,一定会呈井喷式发展。基于可编程硬件网元的玩法,也会百花齐放。
最后,上个图供读者参考,希望不会因此挤压了大家对基于可编程网元进行创新的想象力。