最近在知乎上发现一本 FPGA 大部头:

随手翻到 34 章,网络数据包处理,笔者正在做这方面工作,觉得很有趣。就翻译了一小段,以雍读者。上方的链接中有电子书。

注:原文版权归作者所有,本翻译仅为爱好所作,最先以 ljgibbs 署名发表于知乎。


Reconfigurable Computing: The Theory and Practice of FPGA-Based Computing Chapter 34

可重构硬件网络数据包处理 原作者 :John W. Lockwood 圣路易斯华盛顿大学,斯坦福大学

本章通过举例来说明如何在可重构硬件上构建网络处理系统。讨论如何在FPGA上处理网络数据包,执行数据包的交换,路由,缓存,处理,扫描以及过滤操作。

本章首先阐述网络数据包通过分片组帧后在网络上传输的机制;引入IP协议的概念并介绍其是如何简化大型网络处理系统的实现;之后将讨论实现一个模块化,可用于实现网络防火墙以及入侵检测系统的框架;并详细解释布隆过滤器(Bloom Filter)是如何扫描数据流中的固定字符串;以及有限自动机(Finite Automata)如何实现在数据流扫描中匹配正则表达式。

本章提供的学习案例展示了如何在可重构硬件上实现一个深度包检测系统,其中一个电路用于检测网络连接中的蠕虫以及其他病毒。另一个电路分析数据流中的文本语义来判断文档所使用的语言。本章还展示了常用的检测系统SNORT的硬件加速版本,其中FPGA硬件和主机上的软件协同工作来分析数据包。 34.1 网络与可重构硬件 34.1.1使用可重构硬件构建网络系统的动机

尽管现代微处理器性能不断提升,但仍无法比肩因特网中数据量增长的速度。随着处理器性能逼近摩尔定律上限,性能提升放缓,需要采用不同于通用处理器的计算结构来完成网络数据包的路由,缓存,处理,过滤以及转发(transform)操作。

基于可重构硬件的网络处理系统具有灵活性,且易于修改以提供新的功能。可重构硬件可以在网络平台上实现与现有功能截然不同的特性,可以构建全新的模块化组件并动态安装于远程网络系统中。

通过使用硬件替代软件来处理数据包,网络应用的性能将不会因为接收大量连续的数据处理请求而下降。

随着互联网的演进,需要路由器在现有网络的基础上增加新的协议,特性以及满足新的要求。协议方面,比如实现允许更多设备拥有IP地址的IPv6协议。新的功能比如基于队列调度(per-flow queuing),支持实时传输语音和视频数据。比如防火墙以及入侵检测系统(IPSs)来增加系统安全性。

现有基于可编程硬件的网络平台,可实现数据流量的路由,包过滤以及缓存功能。得益于采用可重构硬件,这些平台可以快速改变包处理算法以及涉及的协议。在FPGA构建的网络系统上,所有包处理特性可以配置到逻辑门级别。这些系统可以快速部署新的服务,并最高可以支持主干网级别的高速网络。 34.1.2 硬件与软件网络数据包处理

在数据包处理中,当前速度最快的路由器使用基于定制化芯片(custom silicon)或者专用集成电路(ASIC)的网络处理器。如图 34.1 所示,网络处理器单元在系统中的位置处于线速网卡(line card),负责网络数据包的接收与发送,和千兆(Gigabit/second)速率的交换结构,负责路由器各端口互联,之间。网络处理器中包含了数以千计并行工作的逻辑电路以及有限状态机,并面向数据包的路由,过滤,排队以及/或者数据报文处理应用优化。

enter image description here

图34.1线速网卡和交换结构之间的可重构网络处理器单元

在目前已有的网络处理器平台中,许多采用通用处理器方案,比如 Intel Pentium,AMD Athlon 或者 Motorola/IBM PowerPC 产品。

译者注,本书成于 2008 年,没办法半导体发展就是这么快,不过 Pentium (实际是小酷睿的马甲)还在更新

部分采用 ASIC 方案,来自 Agere,Intel,Motorola,Cavium,Broadcom以及 Vitesse 等厂商。尽管基于软件的网络处理系统拥有出色的灵活性,但他们处理数据包的速度,往往受到通用处理器指令串行执行的限制。ASIC 以及定制芯片提供更高的性能,但从硬件可编程的角度来说,只能提供非常有限的灵活性。图34.2阐释了他们在灵活性和性能方面的trade-off。 enter image description here

图34.2 通用处理器,网络处理器,ASIC,以及可编程器件在灵活性和性能方面的trade-off

[1]译者注:Agere 被 LSI 收购,后 LSI 被 AVAGO 收购;Motorola 芯片业务拆分为安森美和飞思卡尔,飞思卡尔被恩智浦收购;Cavium 被 Marvell 收购;Broadcom 被 AVAGO 收购;Vitesse 被 Microsemi 收购,后 Microsemi 被 Microchip 收购;恩,半导体世界就是那么变化多端,反复无常,唯有 Intel,大佬还是大佬。

34.1.3 FPGA网络数据包处理

可重构硬件和 ASIC 都享有高速处理的优势,因为本质上可重构硬件也是通过内部的并行硬件电路来处理数据包。而且因为其电路能够动态地更改,所以也拥有通用或者网络处理器的灵活性。

在Illinois Pular (译者注:应为 Pulsar )-based Optical Interconnect(iPOINT)项目的测试平台开发中,研究人员使用 FPGA 探索开发了基于异步传输(asynchronous transfer mode ,ATM)的高性能网络系统。在这个项目中,基于 FPGA 开发的 ATM 交换机搭载了先进的队列管理模块,因此可实现基于队列的数据包管理功能。FPG A一方面实现了交换机的数据交换通路,另一方面实现了控制电路,管理接收的 ATM 单元在交换机的各端口上缓存。FPGA 结构中的查找表(LUTs)元件既构成多路选择器,用于选通交换机不同端口之间的数据交换。查找表又构成了状态控制电路中的组合逻辑,用于控制数据包在缓存介质 SRAM 上的的读写。

事实上,FPGA 也适合高效地实现基于比特位(bit-intensive)的网络功能,比如前向纠错码(FEC),以此提升网络协议的处理性能。位操作可以很好地映射到 FPGA 的粗粒度可编程逻辑上。由 FPGA 片上的 LUTs 构成的组合逻辑来处理纠错码编解码,纠错码由数据和包含数据信息冗余的比特编码而成。在解码时,冗余比特中的信息被提取用于恢复存在错误的数据。通过编解码电路的可编程特性,可以在片上构成若干数量,不同的码型纠错码编解码算法。

现场可编程端口扩展(Field-Programmable Port Extender, FPX)平台的开发,可作为一个例子表明基于 FPGA 构建高性能网络数据包处理系统是实际可行的。FPX 平台拥有双千兆网口,四通道片外存储以及两片 FPGA,平台实现了超过 30 种网络应用。这些网络应用包括 IP 地址路由寻址模块[7];数据包载荷固定或正则字符串扫描与匹配;提供 QoS 功能的多数据包队列;网络威胁入侵检测以及网络数据语义检测。

34.1.4 模块化网络处理系统

模块化是网络系统的核心特性。网络开发者需要网络系统提供标准接口,连接高层协议组件与下层网络。可重构硬件构成的系统中,各模块可以分布在 FPGA 各区域,各模块之间通过设计良好的,连通数据通路以及外部存储介质通信的接口互联。可以集成多个模块化数据处理组件到一个系统中。存储接口可以将内部逻辑同用于数据缓存的外部存储连接,以及访问用作内部存储的大型查找表(译者注:比如使用 LUT 构建的 FIFO 或 RAM)。

FPX 的数据包处理模块通过 32bit 位宽的 Utopia(Universal Test & Operations PHY Interface for ATM)接口,以异步传输单元( ATM cell )的形式接收和发送数据。一个ATM 单元包括 48 字节载荷以及 4 字节首部信息。首部信息包括 VPI(virtual path identifier)以及 VCI(virtual circuit identifier)。ATM 单元还可以包括 8 比特校验和,校验覆盖范围为 ATM 首部。模块之间通过更大的IP数据报通信,这些 IP 数据报收发时通过分层协议处理接口(layered protocol wrapper)模块分片或者将多个 ATM 单元组成 AAL5 帧(ATM adaptation layer 5)。这些帧包括一系列 ATM 单元中的数据,以及位于帧尾的,校验覆盖整个帧载荷的 32 比特校验和。在网络发送时,需要将 ATM 单元组帧,而接收后的帧会重新分片为 ATM 单元。

FPX 平台(见图34.4)有两类提供数据读取功能的存储介质。分别是双通道 36 比特位宽的 SRAM 以及双通道 64 比特位宽 SDRAM。 在 IP 地址查找模块实现中,片外 SRAM 用于存储 IP 查找的数据结构,片外 SDRAM 则用于缓存数据包。SRAM 的低访问延迟对于实现查找功能很重要,因为查找中的中间结果之间存在依赖,需要频繁地访问 SRAM。而 SDRAM 的大容量特性有助于降低大块数据缓冲的成本,比如用于缓存网络数据流。

(译者注:随着 FPGA 片内 RAM 容量在最近十几年中的增长,单位价格大幅下降,已经取代了外部 SRAM。在今天的设计中鲜见片外 SRAM。外部 SDRAM 及其后继者 DDR 仍广泛活跃于 FPGA 方案设计,并不断保持容量速率增长的趋势)

在可编程应用芯片(reprogrammable application device,RAD)中实现了一个交换结构,可将数据包转发到其他可扩展模块。分层协议处理接口负责 AAL5 帧的重组和分片,在AAL5 帧和 FPGA 处理的 ATM 单元之间提供转换,使 FPGA 有能力处理 AAL5 帧。系统的配置和控制逻辑位于扮演网络接口芯片(network interface device,NID)的 FPGA上,可以对 RAD 进行重编程。

FPX 平台集成于华盛顿大学的千兆交换机项目(WUGS),WUGS 是一个可扩展交换机项目,用于处理交换机传输的网络数据包。WUGS 平台提供有各数据端口之间传输 ATM 单元所需的传输底版。通过在网卡和交换结构之间增加 FPX 平台,系统具备了线速分析,处理,路由以及过滤 IP 报文的能力。本项目中使用的 OC-3,OC-48 网卡来传输 ATM 单元,千兆网卡用于数据帧的分片以及重组。通过 FPX 模块的数据包会进入交换矩阵,根据其首部的 VPI 以及 VCI 标志,数据包会被转发给下一个 FPX 单元。 enter image description here

图34.3 FPX平台的原理图(a)与实物(b)

J. W. Lockwood. Evolvable Internet hardware platforms.NASA/DoD Workshop onEvolvable Hardware, July 2001.

J. W. Lockwood, H. Duan, J. M. Morikuni, S. M. Kang, S. Akkineni, R. H. Campbell.Scalable optoelectronic ATM networks: The iPOINT fully functional testbed.IEEEJournal of Lightwave Technology, June 1995.

H. Duan, J. W. Lockwood, S. M. Kang, J. D. Will. A high-performance OC-12/OC-48queue design prototype for input-buffered ATM switches.IEEE Infocom ’97, April1997.

W. Marcus, I. Hadzic, A. McAuley, J. Smith. Protocol boosters: Applying program-mability to network infrastructures.IEEE Communications Magazine36(10), 1998.