6WINDGate Overview
Author:Once Day Date:2023年4月29日
本文是对6WIND官网文档的整理和翻译,仅供学习和研究之用,原始文章可参考下面文档:
- 6WINDGate Documentation - 6WIND
- 6WINDGate Modules — 6WINDGate Modules 5.6.2 documentation
1.概述
6WIND通过帮助客户从昂贵的专有硬件迁移到软件网络设备,引领技术创新。在过去的十年中,全球客户依靠6WIND的路由、安全和TCP网络堆栈来设计业内性能最高的网络设备。
6WINDGate是下一代网络应用的基础(The Foundation for Next-Generation Networking Applications)。
6WINDGate provides the foundation for next-generation networking applications. Deployed in Tier 1 networks, 6WINDGate delivers the much-needed software solutions that enable OEMs to build networking products for 5G, SD-WAN, and IoT markets. This includes IP backhaul solutions, Unified Threat Management (UTM) products, universal Customer Premises Equipment (uCPE), Radio Access Network (RAN) solutions, and much more.
Tier 1网络是指只通过无结算对等连接运营的互联网服务提供商。在美国,Tier 1网络提供商包括:AT&T、Verizon等等。Tier 1网络提供商之间的流量交换是免费的,因为它们都有自己的网络,而且它们的网络之间的流量交换是相互平衡的。
6WINDGate提供急需的软件解决方案,使OEM厂家能够为5G, SD-WAN和物联网市场构建网络产品。这包括IP回程解决方案、统一威胁管理(UTM)产品、通用客户端设备(uCPE)、无线接入网(RAN)解决方案等等。
6WINDGate架构采用基于解决方案的方法,提供了构建各种网络应用所需的灵活性,具有通用代码库,可在x86和ARM平台上无缝部署裸机或虚拟化(虚拟机或容器)。6WINDGate还通过标准化的插件API提供扩展功能,使oem厂家能够通过加载特定的增强功能来构建定制的网络解决方案。
6WINDGate主要的特性如下:
- A flexible design,灵活的设计
- Fully supported and maintained solution,得到充分支持和维护的解决方案
- Support for multiple architectures including Intel x86, AMD and ARM,支持多种架构,包括英特尔x86, AMD和ARM
- Rich set of features and a complete networking solution,丰富的功能集和完整的网络解决方案
- Hardware independence,硬件独立
- Performance & Scalability,性能和可扩展性
- Enhanced deployment capabilities (bare metal, virtual machines and containers),增强的部署功能(裸机、虚拟机和容器)
- Extensible management and monitoring capabilities (NETCONF/YANG based),可扩展的管理和监控功能(基于NETCONF/YANG)
6WINDGate主要的应用场景如下:
- Packet Inspection Applications (Next generation firewalls, UTM, DPI),下一代防火墙,威胁管理和内容审计。
- Telecom Applications (EPC, NG-Core, RAN, NG-RAN, Security Gateways),电信应用,4G、5G、无线接入和安全网关。
- Service Providers and Enterprise Applications (SDN/NFV, SD-WAN, SASE, VPN concentrators)服务提供商和企业应用程序。
6WINDGate官方问答网页如下:
- FAQ - 6WINDGate - 6WIND
1.2 有关信息总结
(1)6WINDGate暂只支持在Linux上运行。
(2)除了TCP/UDP终止IPv4快速路径模块及其IPv6扩展需要与应用程序特定集成外,所有其他6WINDGate快速路径模块都支持与Linux的同步机制。
(3)异常机制(Exception Mechanism),在6WINDGate基于快速路径的解决方案中,快速路径接收系统中所有传入的数据包。它的目标是提供非常高的包处理性能。因此,它不会处理复杂、耗时的数据包,这些数据包只占总流量的一小部分。例如,需要状态机计算转发信息(如ARP或路由协议)的报文不在快速路径中处理。
当接收到的报文过于复杂,无法通过快速路径进行处理时,会将其作为异常报文发送给Linux,由Linux网络栈或控制平面处理。然后,由于连续同步机制,Linux中计算出来的信息会自动配置到快速路径上,使得同一流的下一个数据包可以在快速路径上处理。
这种异常机制,结合Linux的连续同步和快速路径,使6WINDGate可以处理任何类型的数据包,保证了整个系统的一致性。
(4)在标准的Linux体系结构中,控制平面为静态和动态配置更新Linux网络堆栈。当使用像6WINDGate这样的快速路径时,它还必须与相同的信息同步以具有一致的系统。6WINDGate架构旨在使这种同步完全透明。
(5)6WINDGate包处理软件运行在专用内核上,与Linux操作系统隔离。该软件由高性能网络堆栈、快速路径组成,旨在提供最高的吞吐量和最低的延迟。数据包处理从Linux操作系统中卸载。
(6)由于FPN-SDK,我们的大多数6WINDGate快速路径软件是通用的。然而,使用特定于处理器的资源(如用于QoS的硬件队列)是与处理器相关的。wind还实现了一些特定的低级优化,以最大限度地利用处理器。
(7)6WIND是dpdk.org开源项目的创始人。6WIND是该项目的主要贡献者之一。windgate在Intel和IBM Power架构中使用DPDK,两种架构的FPN-SDK是DPDK的接口。
(8)6WINDGate FPN-SDK是快速路径模块的执行环境。FPN-SDK依赖于硬件,由硬件体系结构标识。我们目前支持Intel、Cavium和IBM Power架构。Mellanox NPS和Kalray MPPA处理器的支持计划在我们的路线图中。FPN-SDK包括:
-
通用抽象api用于实现独立于底层硬件的快速路径模块,开销为零,使用处理器SDK的服务。
-
Linux与快速路径的异常机制。
(9)由于连续同步机制,能够配置Linux内核路由(OSPF,BGP…)或IPsec信息的路由和IKE软件将明显受益于6WINDGate快速路径。
(10)RIP、RIPng、OSPFv2、OSPFv3和BGP支持虚拟路由。控制平面虚拟路由已与支持虚拟路由的快速路径转发模块集成并验证。
(11)6WINDGate管理架构非常灵活,可以为6WINDGate与现有管理系统的顺利集成提供不同的解决方案:
- 调用您的6WINDGate管理系统,使用NETCONF或CLI集成6WINDGate带来的新功能的管理
- 使用Linux直接调用
- 扩展6WINDGate管理系统为您服务
(12)提供了一个命令行接口来与6WINDGate交互。它可用于配置、监控和故障排除。它提供了帮助和完成,以及配置文件的管理,以便在一个命令中保存和恢复完整和一致的配置。CLI实际上是一个NETCONF客户端,它与6WINDGate的基于yang的配置引擎通信。
(14)在单一多核体系结构的情况下,Linux网络堆栈和快速路径之间的同步是通过共享内存处理的。在双多核处理器体系结构中,Linux运行在一个处理器上,而快路径运行在另一个处理器上。Linux网络栈和快速路径之间没有共享内存。
在这种体系结构中,需要快速路径1CP - 1FP模块,它允许通过两个处理器之间的网络连接将Linux网络堆栈与远程快速路径同步。
因此,6WINDGate架构可以平等地部署在:
-
一个多核处理器的共享核心,
-
两个不同的多核处理器(一个分配给Linux,另一个分配给快速路径),
-
一个多核处理器运行快速路径,另一个可能是非多核处理器运行Linux。
(15)我们大多数的6WINDGate软件都是通用的。然而,处理器特定资源(如以太网驱动程序、加密引擎)的使用依赖于处理器。为了实现一些特定的低级优化以充分利用处理器,6WIND使用周期级模拟器(当可用时)来优化周期的数量。处理器的性能计数器和分析工具也可以用来测量处理时间。
(16)与标准Linux相比,6WINDGate通常将数据包处理性能提高5到40倍。确切的值取决于不同的参数(哪个协议是加速的,数据包大小,硬件平台…)。为了得到更精确的答案,可以提供参考平台上详细的性能测试结果。
(17)6WINDGate具有流量检测/包捕获快速路径模块,可在快速路径中提供伯克利包过滤功能。它允许从控制平面监控快速路径流量。
2.具体介绍的文档
2.1 整体架构预览
相关参考文档:
-
6WINDGate Documentation - 6WIND
-
https://www.6wind.com/wp-content/uploads/resources/6windgate/6WINDGate-Architecture-Overview-v3.0.pdf
-
https://www.6wind.com/wp-content/uploads/resources/6windgate/white-papers/6WINDGate-Architecture-Overview-Whitepaper-v3.0.pdf
基于Linux平台,在主流的处理器上都能运行,原生支持多种网络协议,提供基于YANG和NETCONF的管理系统。
与Linux同步的加速层2-4堆栈:
高度兼容的运行环境:
整体实现的细节架构:
标准的管理面架构:
2.2 Linux同步和异常处理机制
有两种方法可以实现高性能隔离快速路径与Linux控制和管理平面的集成
- 重新设计控制和管理平面如何与数据平面交互,需要大量的工作来适应和验证大量复杂的协议
- 依赖于Linux友好型数据平面的设计,让Fast Path作为Linux的透明解决方案。没有改变现有的Linux控制和管理平面,需要Linux Networking Stack和Fast Path之间的智能协作。
第二个选项已经在6WINDGate中成功实现,使用Linux - Fast Path同步,利用Linux eBPF强大的网络功能。
异常处理的策略如下:
- 由FastPath接收所有的包,但是部分包被送到Linux内核去处理:
- Local destination,报文目的地址为设备本地接口地址
- Missing processing information in Shared Memory (ARP, IPsec SA, etc.),共享内存中无有效处理信息
- Unaccelerated protocol,无法加速的协议
- 一些特殊的异常包也会送到Linux中去:
- Basic exceptions for standard processing are sent to a TUN/TAP Linux driver。
- Special exceptions for packets that have been preprocessed by the Fast Path are injected at the right place into the Linux Networking Stack thanks to an eBPF program
异常的类型有如下几种可能:
- 准备送给控制面处理的报文:
- ICMP echo requests
- Control Plane daemons (BGP, OSPF, IKE, etc.)
- 无法处理的报文(缺失路由,邻居信息等等)
- No L3 route available
- No L2 address available for destination/gateway
- No IPsec info (SP/SA)(Security Parameter/Security Association)
- Missing conntrack info
- 在Linux处理的协议报文
- ARP/NDP
- ICMP stack (TTL expiration)
2.3 eBPF(Extension Berkeley Packet Filter)
eBPF现在比较热门,各类论坛上也有很多资料,用于内核调试和网络过滤,时间追踪等等。
在6WINDGate产品上,通常用来进行包过滤处理。
2.4 Linux和FastPath信息交换
主要依靠两个模块来实现:
- Cache Manager (CM): cmgrd executable
- Fast Path Manager (FPM): fpmd executable
- Local or remote communication between CM and FPM is done by the Fast Path Control API (FPC API)
同步的路径有下面三条:
- CM -> FPC -> FPM
- FPM -> Shared Memory
- FPM -> NETFPC -> Fast Path
缓存同步模块(Cache Manager(CM))主要的特性如下:
- Runs as a Linux userland application
- Listens to the Netlink socket, for kernel internal states (Control Plane and configuration updates)
- Transforms Netlink messages into FPC messages
- Control Plane modules (routing, IKE, PPP…) are not modified
FastPath管理模块的特性主要如下:
- Runs as a Linux userland application
- Translates FPC API messages to configure Fast Path modules using:
- Read / write Shared Memory
- Send / receive notifications to / from Fast Path through NETFPC
下面是共享内存的一些信息:
- Contains structures for Physical ports、Forwarding table、Statistics、IPsec databases、etc.
- Read/write access for:
- FPM: writes local information received from CM through FPC messages
- Fast Path: reads local information used for packet processing (L2/L3 entries, IPsec SAs, etc.) and writes statistics
- FPS: reads statistics
- Allocation is specific to processor architecture, contents are generic,POSIX shmem implementation。
NETFPC是一个RPC类的API调用,用于触发FastPath中来自Linux的事件,用于获取在快速路径执行环境中被调用的函数,通常用于通过快速路径的驱动更改网卡设置。
VRF(Virtual Routing and Forwarding)虚拟路由转发的相关情况如下:
- IP technology that allows multiple instances of a routing table to work simultaneously within the same router。
- In Linux, VRFs are configured using network namespaces (netns)。
- Userland API: libvrf,This library allows to manage and monitor 6WINDGate VRFs from any Linux userland process。
- Cache Manager makes use of libvrf to synchronize netns-VRF in Fast Path VRF
Fast Path Statistics (FPS)快速路径统计信息如下:
- Reports Fast Path statistics into the Linux Networking Stack
- Fast Path modules update the Shared Memory with statistics
- FPS daemon reads Shared Memory statistics periodically
- Statistics are updated in Linux Networking Stack via NETLINK e.g. XFRM family for IPsec
- 接口统计数据和IP MIB数据无法同步,当前无用户空间API可以实现。
- Well-known tools like iproute2, SNMP, bmon use NETLINK to get statistics,FPS provides a library transparently catching NETLINK requests for statistics (IFLA_STATS attribute) and updating the answer with Fast Path statistics。
一些常见的工具,如IP(iproute2)命令,SNMP简单网管协议等等都是通过netlink来获取数据,因此FPS通过捕获netlink请求来返回FastPath的统计数据。其他的一些命令,如ifconfig不走netlink,则无法获取数据。
Hitflags(命令标记)信息同步如下:
- 当数据包经过Fast Path时,内核对象状态不会更新:
- Fast path relies on Linux slow path for ARP, conntracks, 快速路径依赖于Linux,慢速路径用于ARP,连接
- When not used, these entries will expire and get removed by Linux, 当不使用时,这些条目将过期并被Linux删除
- The synchronization will raise periodic waves of packet exceptions, 同步将引发数据包异常的周期性波动
- Fast Path Hitflags守护进程负责更新内核状态
- Fast Path module writes the hitflag field into the Shared Memory when the entry is used, 当条目被使用时,快速路径模块将hitflag字段写入共享内存.
- Hitflags daemon scans the Shared Memory entries (ARP for example) periodically, Hitflags守护进程定期扫描共享内存项(例如ARP).
- Entries marked by Fast Path are updated in Linux Networking Stack via NETLINK, 标记为快速路径的条目通过NETLINK在Linux网络堆栈中更新.
- 数据包流现在保持稳定在快速路径,在Linux中,Fast Path中的使用项仍然存在
2.5 FPN-SDK快速路径软件开发工具包
FastPath所在的基础软件开发工具包,分成两类:
- 硬件抽象层,对FastPath提供硬件无关的抽象。
- 硬件依赖层,一般是DPDK需要特定的硬件依赖。
TCP Segmentation Offload (TSO)和Large Receive Offload (LRO)是一种网络卸载技术,用于卸载TCP/IP协议栈的工作,以减轻CPU的负担。TSO是一种由网卡卸载TCP数据包分段的技术,而LRO则将传入的网络数据包重新组装成更大的缓冲区,并将结果更大但更少的数据包传输到主机或虚拟机的网络堆栈。
2.6 报文处理和异常路径
参考文章:
- 5.1 GRO(Generic Receive Offload)_Remy1119的博客-CSDN博客
- 怎么提高网络应用性能?让DPDK GRO和GSO来帮你! - 腾讯云开发者社区-腾讯云 (tencent.com)
- Open vSwitch 入门实践(1)简介 - 知乎 (zhihu.com)
- OpenvSwitch(OVS)全面解读_lonely_geek的博客-CSDN博客
- 什么是MPLS?有何特点?与SD-WAN有何区别? - 知乎 (zhihu.com)
- MPLS的概念、原理与作用 - 知乎 (zhihu.com)
- Linux 虚拟网卡技术:Macvlan - 腾讯云开发者社区-腾讯云 (tencent.com)
- 什么是VXLAN - 华为 (huawei.com)
路径描述大概如下:
-
通过DPDK PMD驱动从网卡收包,然后送入
fp_process_input
处理。 -
在
fp_process_input
里面可以进行GRO处理,网络协议处理中的GRO是Generic Receive Offload的缩写,它的功能是将多个TCP数据包聚合在一个skb结构,然后作为一个大数据包交付给上层的网络协议栈,以减少上层协议栈处理skb的开销,提高系统接收TCP数据包的性能。GRO是一种在协议栈接收报文时进行减负的处理方式,它可以支持多种协议报文,如TCP/IPv4、VxLAN和GRE。 -
OVS(Open vswitch)是一个多层的虚拟交换机软件,可以作为第2层或第3层交换机,支持多种协议和功能,如OpenFlow、NetFlow、VXLAN、IPsec等。Linux Bridge是一个简单的第2层交换机软件,只支持基本的功能,如STP、VLAN、GRE等。
-
网络协议中的MPLS是多协议标签交换(Multi-Protocol Label Switching)的缩写,它是一种使用标签来指定数据转发决策的数据包转发技术,它可支持多种网络层协议(如IP、IPv6、IPX等)且兼容多种链路层技术(如ATM、帧中继、以太网、PPP等),一般在位于第二层(数据链路层)和第三层(网络层)网络之间的以太网交换机和路由器上进行运行。
MPLS的主要特点有以下几点:
- MPLS可以实现高效的数据包转发,提高网络性能,因为它只在网络边缘分析IP报文头,而不用在每一跳都分析IP报文头,节约了处理时间。
- MPLS可以实现灵活的流量工程,优化网络资源利用率,因为它可以根据流量需求和网络状况动态地建立和拆除标签交换路径(LSP),并且可以支持多路径负载均衡和快速重路由等功能。
- MPLS可以实现多种业务的集成和隔离,提高网络安全性和可靠性,因为它可以利用标签栈来构建虚拟专用网(VPN)、QoS(服务质量)、MPLS-TE(流量工程)等业务,并且可以保证不同业务之间的逻辑隔离。
- MPLS可以实现多种网络协议的互通,提高网络兼容性和扩展性,因为它可以支持多种网络层协议,并且可以使用任意二层介质传输网络分组。
-
MACVLAN 是 Linux 的一种虚拟网络接口。它允许您在主机的一个网络接口上配置多个虚拟的网络接口,这些网络接口有自己独立的 MAC 地址,也可以配置上 IP 地址进行通信。MACVLAN 下的虚拟机或者容器网络和主机在同一个网段中,共享同一个广播域。
-
SVTI 是 Cisco IOS 提供的一种解决方案,它推荐在 IOS 12.4 以后的路由器上配置。它可以直接采用 IPsec 创建 VTI 隧道接口,相比与 GRE 节省了 GRE 的带宽开销。VTI 相比与 GRE 节省了 GRE 的带宽开销
-
VXLAN(Virtual eXtensible Local Area Network,虚拟扩展局域网),是由IETF定义的NVO3(Network Virtualization over Layer 3)标准技术之一,是对传统VLAN协议的一种扩展。 VXLAN的特点是将L2的以太帧封装到UDP报文(即L2 over L4)中,并在L3网络中传输。 VXLAN本质上是一种隧道技术,在源网络设备与目的网络设备之间的IP网络上,建立一条逻辑隧道,将用户侧报文经过特定的封装后通过这条隧道转发。
2.7 FastPath虚拟接口
Interface Between Fast Path And Linux Networking Stack: FPVI
- Provides NIC representor in Linux for standard configuration (e.g. iproute2)
- Implemented using FPN-SDK
- For DPDK, it is using Linux tun/tap + DPDK PMD virtio-user
Fast path -> Linux : receive exception path
-
Basic exception: packets are sent unmodified to get a standard processing by the Linux Networking stack
-
Special exception: packets have been preprocessed by the Fast Path and are injected at the right place into the Linux
-
Networking Stack, thanks to an eBPF program
Linux -> Fast path : transmit exception path
- Packets are sent out the physical ports by the Fast Path which owns NIC drivers
2.8 FastPath插件
快速路径插件可以在不修改原始快速路径模块的情况下自定义快速路径应用程序的某些部分,有三类插件:
- Replace a Fast Path module with custom processing
- Replace input and output functions on specific interfaces
- Handle a new protocol on top of IP
2.9 TCP/UDP终端
实现机制:
- Redesigned and fully optimized for multi-core execution environments
- Highly scalable processing of parallel establishment / shutdown of TCP connections
- High performance data exchanges on a huge number of TCP/UDP sockets on established TCP connections
- Event driven notifications from the stack to the application
- Plugin support for custom TCP/UDP applications including bridged and routed transparent proxy support with configurable IP bypass lists
套接字API:
- Full support of TCP and UDP sockets over IPv4 and IPv6
- POSIX-compliant socket API and Zero-copy based socket APIs
- VRF-aware sockets
- Netstat like support to dump state and statistics of the sockets