CN115733782A - 用于数据包处理操作的双用户空间-内核空间数据路径 - Google Patents

用于数据包处理操作的双用户空间-内核空间数据路径 Download PDF

Info

Publication number
CN115733782A
CN115733782A CN202211019732.6A CN202211019732A CN115733782A CN 115733782 A CN115733782 A CN 115733782A CN 202211019732 A CN202211019732 A CN 202211019732A CN 115733782 A CN115733782 A CN 115733782A
Authority
CN
China
Prior art keywords
network
data
kernel
packet
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202211019732.6A
Other languages
English (en)
Inventor
达雷尔·鲍尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Juniper Networks Inc
Original Assignee
Juniper Networks Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US17/446,145 external-priority patent/US12003429B2/en
Application filed by Juniper Networks Inc filed Critical Juniper Networks Inc
Publication of CN115733782A publication Critical patent/CN115733782A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/25Routing or path finding in a switch fabric
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/606Protecting data by securing the transmission between two devices or processes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/545Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/15Interconnection of switching modules
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/02Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
    • H04L63/0227Filtering policies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45595Network integration; Enabling network access in virtual machine instances

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

公开了用于数据包处理操作的双用户空间‑内核空间数据路径,用于在计算装置的网络中增强数据包处理的技术。计算装置被配置为响应于经由第一网络接口从第一网络装置接收流量的入口数据,基于装置的内核空间中的挂钩点执行内核程序,以经由用户模块的第一套接口传送用于数据包处理的入口数据;为第二网络接口配置代码点,其中,用户模块被配置为将第二套接口与代码点耦接;以及响应于将第二网络装置确定为流量的下一跳,基于代码点,经由第二套接口将流量的出口数据传送到第二网络接口,其中,第二网络接口能操作以向第二网络装置输出出口数据。

Description

用于数据包处理操作的双用户空间-内核空间数据路径
本申请要求2021年8月26日提交的美国申请号17/446,145的权益,其全部内容通过引用结合于此。
技术领域
本公开的技术总体上涉及计算机网络,更具体地,涉及网络中的数据包处理。
背景技术
计算机网络是可以交换数据和共享资源的互连计算装置的集合。在诸如以太网之类的基于数据包的网络中,计算装置通过将数据分成称为数据包的小块来传送数据,数据包通过网络从源装置单独路由到目的地装置。目的地装置从数据包中提取数据,并将数据组装成原始形式。中间装置(称为网络装置或节点)互连,以便提供用于在计算装置之间转发数据包的基础设施。例如,计算机网络可以包括路由器、交换机、网关、防火墙和各种其他网络装置。
在网络装置处,操作系统实现多个组件/特征,这些组件/特征将网络装置内的硬件/软件资源配置为作为路由器、交换机、网关等来运行。操作系统例如通过调用多个路由协议来配置用于路由和转发数据包的硬件组件。存在网络装置必须依赖操作系统来配置网络装置以路由和转发数据包的情况。
在大规模计算机网络(例如,典型的云数据中心环境)中,存在大量互连的服务器,这些服务器提供计算和/或存储能力来运行各种应用程序。例如,数据中心可以包括为用户(即数据中心的客户)托管应用程序和服务的设施。例如,数据中心可以托管所有基础设施设备,例如,网络和存储系统、冗余电源和环境控制。在典型的数据中心中,存储系统和应用服务器的集群经由一层或多层物理网络交换机和路由器提供的高速交换结构相互连接。更复杂的数据中心为遍布全球的基础设施提供位于各种物理托管设施中的用户支持设备。
虚拟化网络正成为现代信息技术(IT)基础设施的核心基础。例如,现代数据中心已经广泛利用虚拟化环境,其中,在物理计算装置的底层计算平台上部署并执行虚拟主机(在本文也称为虚拟执行元件,例如,虚拟机或容器)。通过在计算机网络中采用虚拟化,可以实现几个优点,从而增加投资回报(ROI),包括显著提高效率和显著控制计算基础设施。
发明内容
总体上,描述了用于增强计算机网络中网络装置的操作的技术。实现本文描述的技术使得网络装置能够以增强的本地功能或新功能来操作,作为对先前网络装置运行的改进。本公开还引入了硬件和/或软件中的装置组件来执行任务(根据一些技术),以增强网络装置中的数据包处理操作。一些技术针对提供对物理网络和/或虚拟网络的访问的网络装置中的增强的数据包处理操作。
如本文所述,在资源分配、控制、安全性(例如,访问权限)等方面,计算装置(例如,其操作系统)的内核空间通常优先于用户空间,以比较低优先级的存储区域更多的限制来保护其中的任何存储区域(例如,用于存储计算机数据或软件代码)。网络装置可以将内核空间用于执行数据包处理操作的软件程序或硬件单元,有利地利用上述限制来保持一定级别的数据安全性和完整性。另一方面,由于给予内核空间的优先级,可供执行和运行的软件程序较少;此外,某些软件程序可能是实现增强的数据包处理所期望的,但是并没有被设计成在内核空间上运行。内核空间数据路径中的延迟可能与保护内核空间和遵守操作系统的优先级所消耗的时间和资源成比例。
然而,在没有实现用户空间数据路径的情况下,网络装置在网络装置可以利用哪些特征方面受到限制。将数据包处理限制到内核空间数据路径的网络装置不能利用只能从用户空间访问的软件和硬件能力。应该注意,在下面的描述中,“用户数据路径”和“内核数据路径”分别与用户空间数据路径和内核空间数据路径是可互换的。为了提供对这些能力的访问,本文描述的技术利用内核空间中的挂钩点来引入内核程序,用于将网络流量放置到用户数据路径上。可以描述用户数据路径,作为被配置为执行多个数据包处理操作的软件代码程序的管线。一些技术可以将管线配置为访问用户空间功能(例如,网络安全应用)和内核空间联网基础设施功能(例如,网络功能)。
一些技术利用用户数据路径来执行安全数据包处理操作(例如,路由和转发)。作为用户数据路径的一部分,可以执行在用户空间中运行的应用程序,以作为控制程序来操作,用于处理上述路由和转发操作以及各种其他数据包处理操作的性能。除了(例如,虚拟的)网络功能(例如,网络服务),用户数据路径可以调用从定制软件代码和/或多个助手功能构建的功能,包括但不限于网络安全功能、管理程序功能等。为了实现本文描述的技术的益处和优点,一些网络装置可以通过主要通过用户空间配置数据路径来提高其数据包处理性能,用于将输入/输出数据包路由/转发到下一跳,该下一跳是在不同网络或相同网络中操作的网络装置,并且可能是数据包数据的最终目的地。除了或代替内核空间中的数据路径,用户数据路径可以由网络装置来实例化。因此,为了改善客户的网络,例如,通过增强的网络管理,客户可以在网络基础设施中实施这些技术。以这种方式,该客户网络中的网络装置可以配置有用户数据路径,以便受益于可能在操作系统网络栈中找不到的和/或可能不在内核空间中运行的功能。
在一个示例中,一种用于包括与至少两个网络装置通信耦接的至少两个网络接口的计算装置的方法,包括:在计算装置的内核空间中,配置用于第一网络接口的挂钩点,其中,挂钩点被配置为将内核程序与计算装置的用户模块的第一套接口耦接,其中,第一网络接口将第一网络装置与计算装置通信地耦接;在计算装置的内核空间中,配置用于第二网络接口的代码点,其中,代码点被配置为将内核程序与用户模块的第二套接口耦接,其中,第二网络接口将第二网络装置与计算装置通信地耦接;响应于从第一网络装置接收流量的入口数据,基于挂钩点执行内核程序,以经由第一套接口将入口数据传送到用户模块;以及响应于将第二网络装置确定为流量的下一跳,基于代码点,经由第二套接口将流量的出口数据传送到第二网络接口,其中,第二网络接口可操作,以向第二网络装置输出出口数据。
在一个示例中,一种计算装置包括:第一网络接口,第一网络接口通信地耦接到第一网络装置;第二网络接口,第二网络接口通信地耦接到第二网络装置;存储器;以及处理器,处理器连接到存储器和网络接口,其中,存储器包括指令,当由处理器执行时,指令使得处理器:响应于经由第一网络接口从第一网络装置接收流量的入口数据,基于装置的内核空间中的挂钩点执行内核程序,以经由用户模块的第一套接口传送用于数据包处理的入口数据;为第二网络接口配置代码点,其中,用户模块被配置为将第二套接口与代码点耦接;以及响应于将第二网络装置确定为流量的下一跳,基于代码点,经由第二套接口将流量的出口数据传送到第二网络接口,其中,第二网络接口可操作,以向第二网络装置输出出口数据。
在另一示例中,一种网络系统包括:交换结构,包括多个交换机,多个交换机互连,以形成物理网络;虚拟网络控制器装置,虚拟网络控制器装置被配置为配置和管理物理网络内的一个或多个虚拟网络;以及多个服务器,多个服务器由所述交换结构互连,其中,每个服务器包括执行一个或多个虚拟机的操作环境,虚拟机经由虚拟路由实例与一个或多个虚拟网络通信,其中,每个服务器包括在服务器上的内核空间中执行的主机操作系统(OS),其中,在连接到一个或多个虚拟网络的虚拟网络栈中的每个服务器上,内核程序在内核空间中执行,用户模块在用户空间中执行,其中,每对内核程序和用户模块被配置为将一个或多个虚拟网络扩展到虚拟机的操作环境,其中,第一服务器被配置为:在计算装置的内核空间中,配置用于第一网络接口的挂钩点,其中,内核程序被配置为将挂钩点与计算装置的用户模块的第一套接口耦接,其中,第一网络接口将第一网络装置与计算装置通信地耦接;在计算装置的内核空间中,配置用于第二网络接口的代码点,其中,用户模块被配置为将代码点与用户模块的第二套接口耦接,其中,第二网络接口将第二网络装置与计算装置通信地耦接;响应于从第一网络装置接收流量的入口数据,基于挂钩点执行内核程序,以经由第一套接口将入口数据传送到用户模块;以及响应于将第二网络装置确定为入口数据的下一跳,基于代码点,经由第二套接口将流量的出口数据传送到第二网络接口,其中,第二网络接口可操作,以向第二网络装置输出出口数据。
在附图和下面的描述中阐述本发明的一个或多个实施例的细节。根据说明书和附图以及权利要求书,本发明的其他特征、目的和优点将变得显而易见。
附图说明
图1是示出了具有数据中心的示例性网络的框图,在该数据中心中,可以实现本文描述的技术的示例;
图2是更详细地示出图1的数据中心的示例性实施方式的框图;
图3是示出根据本文描述的技术的作为图1的示例性网络的实施例的软件定义网络的框图;
图4A是示出根据本文描述的技术的图1的示例性网络的示例性网络装置的示例性双数据路径实施方式的流程图;
图4B是更详细地示出了图4A的示例性双数据路径实施方式的示例性架构的框图;
图5是示出根据本文描述的技术的图3的软件定义的网络中的服务器的示例多核计算环境的框图;
图6是示出根据本文描述的技术的示例性操作模式的流程图,其中,用户应用控制入口和出口数据的路由和转发。
在所有附图和文本中,相同的附图标记表示相同的元件。
具体实施方式
本公开描述了用于增强计算机网络的装置的操作的多种技术。网络装置如本文所述操作,并且通常在同一计算机网络内或不同网络之间相互交换数据。对于这种交换,从用于多种适用技术(例如,通信协议)的兼容硬件/软件中选择的适当的装置组件(例如,逻辑组件、电磁组件等)可以被配置到任何给定的网络装置中。适当的装置组件执行必要的功能(例如,使两个或更多个网络装置能够以协议数据单元(PDU)(例如,数据包)交换数据)。确保上述装置组件的操作的机制通过禁止扩展到新功能和额外硬件/软件以及阻止或限制额外硬件/软件的可用性来限制这些装置组件的能力。本公开的一些技术在符合这些机制的同时,以多种方式增强了上述装置组件的操作,从而有利于计算机网络及其客户和所有者。
一种保护网络装置组件的机制是上述装置组件在内核空间和用户空间之间的操作划分。出于多种原因,沿着内核空间中的数据路径处理PDU,与用户空间中的应用程序的交互是有限的(如果有的话)。一个装置组件(操作系统)创建至少一个计算环境,在该计算环境中,经由入口网络接口接收输入数据包,作为入口数据,然后由内核数据路径处理(例如,以识别其目的地),并且在该计算环境中,从具有某些修改的属性的入口数据生成输出数据包,然后经由出口网络接口作为出口数据被传输到所识别的目的地。
本公开的技术提供了通过用户空间的第二数据路径,并且使得操作系统能够在本文描述的网络装置的双数据路径实施方式中将PDU引导到第二用户数据路径。通过采用这些技术,上述操作系统可以创建计算环境,在该计算环境上,用户空间应用接收并最终处理入口数据(例如,识别其目的地),直到经由出口网络接口传输到所识别的目的地。操作系统可以为PDU(例如,数据包)处理操作配置一个或两个数据路径。
在一个示例中,操作系统可以经由处理电路执行第一数据路径(即扩展的伯克利数据包过滤器(eBPF)快速数据路径(XDP)内核数据路径)和第二数据路径(即基于地址族快速数据路径(AF_XDP)的用户数据路径),具有多种能力。具有上述操作系统的网络装置可以以多种方式受益于实现用于数据包处理的基于AF_XDP的用户数据路径。AF_XDP和XDP技术是高度可靠、高效的,并且如本文所描述的,使得操作系统能够绕过几乎整个内核数据路径。操作系统可以用基于AF_XDP的用户数据路径替换eBPF XDP内核数据路径,以避免与执行用于数据包处理的eBPF XDP内核数据路径相关联的一个或多个典型延迟。
为了说明,在入口,内核空间中的eBPF XDP数据路径可以响应于入站数据包接收而执行,并且在一些初始分类之后将数据包从入口网络接口引导到AF_XDP套接口,并且在出口,基于AF_XDP的用户数据路径可以将数据包从AF_XDP套接口引导到出口网络接口,用于出站数据包传输。通过这样做,这些数据包不会在内核空间中排队,从而避免了与这种排队相关的延迟。
作为执行基于AF_XDP的用户数据路径的另一个好处,操作系统可以访问由用户空间中的一个或多个软件程序提供的额外功能。基于AF_XDP的用户数据路径的一个示例包括用户空间网络栈的软件代码。除了网络栈的软件代码之外,另一个示例性基于AF_XDP的用户数据路径可以引入一个或多个软件程序。例如,操作系统可以执行软件程序,以生成接口,另一个程序(例如,控制程序)通过该接口调用增强的数据包处理操作。
将eBPF XDP内核数据路径与基于AF_XDP的用户数据路径相结合,提供了额外的好处和优势;即,反应式流设置,其中,AF_XDP套接口为第一数据包与用户空间通信,并消除来回复制内核空间和用户空间之间的数据包数据。作为另一个好处/优点,在双数据路径中处理数据包允许永久或暂时标记流量,使得eBPF XDP数据路径可以被编程为将这些流量的数据包引导到AF_XDP套接口用户数据路径,以进行处理。
一些示例技术为输入/输出数据包提供了双数据路径实施方式,以便利用增强的数据包处理来改进路由/转发功能。经由双数据路径实施方式,相同流量的数据包可以从内核数据路径(例如,具有定制的内核程序和/或操作系统网络栈)转移到用户数据路径(例如,具有定制的用户应用),用于数据包处理(例如,路由/转发决策),而不同流量的数据包由定制的网络栈处理或者在内部消费。在一些示例中,在相同流量的多个数据包之后,相同流量的后续数据包可以具有被编程到内核空间中的下一目的地(例如,在网络接口驱动程序的存储区域中)。
图1是示出具有数据中心10的示例性网络8的框图,在数据中心中可以实现本文描述的技术的示例。总体上,数据中心10为通过服务提供商网络7耦接到数据中心的客户11提供应用和服务的操作环境。例如,数据中心10可以托管基础设施设备,例如,网络和存储系统、冗余电源和环境控制。服务提供商网络7可以耦接到由其他提供商管理的一个或多个网络,并且因此可以形成大规模公共网络基础设施(例如,因特网)的一部分。
在一些示例中,数据中心10可以表示许多地理上分布的网络数据中心之一。如图1的示例所示,数据中心10可以是为客户11提供网络服务的设施。客户11可以是集体实体,例如,企业和政府或个人。例如,网络数据中心可能为几个企业和最终用户托管网络服务。其他示例性服务可以包括数据存储、虚拟专用网、流量工程、文件服务、数据挖掘、科学或超级计算等。在一些实施例中,数据中心10可以是单独的网络服务器、网络对等体等。
在这个示例中,数据中心10包括一组存储系统和应用服务器12A-12X(本文称为“服务器12”),其经由一层或多层物理网络交换机和路由器提供的高速交换结构14互连。由一组互连的架顶式(TOR)交换机16A-16BN(统称为“TOR交换机16”)提供交换结构14,这些交换机耦接到机箱交换机18A-18M(统称为“机箱交换机18”)的分布层。虽然未示出,但是数据中心10还可以包括例如一个或多个非边缘交换机、路由器、集线器、网关、诸如防火墙、入侵检测和/或入侵预防装置之类的安全装置、服务器、计算机终端、膝上型电脑、打印机、数据库、诸如蜂窝电话或个人数字助理之类的无线移动装置、无线接入点、网桥、电缆调制解调器、应用加速器或其他网络装置。
在这个示例中,TOR交换机16和机箱交换机18为服务器12提供经由子网17.1-17.N(统称为“子网17”)到IP结构20和服务提供商网络7的冗余(多连接)连接。机箱交换机18聚集业务流,并提供TOR交换机16之间的高速连接。TOR交换机16可以是提供第二层(例如,MAC)和/或第3层(例如,IP)路由和/或交换功能的网络装置。TOR交换机16和机箱交换机18可以均包括一个或多个处理器和存储器,并且能够执行一个或多个软件处理。机箱交换机18耦接到IP结构20,IP结构执行第3层路由,以通过服务提供商网络7在数据中心10和客户11之间路由网络流量。
根据本公开的一个或多个实施例,虚拟网络控制器22(“VNC”)提供逻辑上并且在某些情况下物理上集中的控制器(以软件形式),用于促进数据中心10内的一个或多个虚拟网络的操作。在一些示例中,虚拟网络控制器22是模仿/虚拟化被称为网络控制器(例如,网络接口卡(NIC))的硬件组件(例如,电路板或芯片组)的软件组件,网络控制器被安装在计算装置上,以与物理网络通信。总体上,(物理)网络控制器向其他计算装置提供功能,例如,支持I/O中断、直接存储器访问(DMA)接口、数据传输、网络流量工程和分区。在一些示例中,虚拟网络控制器22可以响应于从网络管理员24接收的配置输入而操作。
NIC既是物理层装置,也是数据链路层装置,即提供必要的硬件电路,以便物理层进程和一些数据链路层进程可以在其上运行。从最严格的意义上来说,桥接到物理NIC的虚拟NIC是真正的以太网网桥。在网络上发送其数据包,带有自己唯一的MAC地址。物理NIC驱动程序以混杂模式运行桥接的物理NIC,以便拾取对该MAC地址的回复。虚拟NIC出现在本地以太网网段上,与任何真实机器都没有区别。因此,具有桥接虚拟NIC的虚拟机可以完全参与访问和提供网络服务。总体上,虚拟网络控制器22可以指示服务器12和网络7的任何物理或虚拟网络装置执行各种操作,例如,通过覆盖网络转发流量;由于网络事件,在虚拟网络中重新路由流量;为多播、网络服务(包括安全、网络地址转换(NAT))、反射和负载平衡而复制流量;提供多租户服务,以支持多个虚拟网络;监控和记录虚拟网络内的流量特征;以及其他操作。
在一个示例性方法中,虚拟网络控制器22是逻辑上集中但物理上分布的软件定义网络(“SDN”)控制器。物理上分布意味着虚拟网络控制器22可以包括多种类型的节点,每种节点可以具有多个高可用性(HA)和水平扩展的实例。在一个这样的示例性方法中,虚拟网络控制器22包括三种类型的节点:配置节点、控制节点和分析节点。这些节点实例可以在物理服务器12或虚拟机上实现。在一个这样的示例性方法中,虚拟网络控制器22中的配置节点经由存储在元数据访问点接口(IF-MAP)服务器26上的技术数据模型来配置控制节点。
通常,任何两个网络装置之间的流量(例如,IP结构20内的网络装置(未示出)、不同的服务器12或客户11和服务器12之间的流量)可以使用许多不同的路径穿过物理网络。例如,两个网络装置之间可能有多条不同的等价路径。在一些情况下,属于从一个网络装置到另一个网络装置的网络流量的数据包可以在每个网络交换节点使用称为多路径路由的路由策略在各种可能的路径中分发。例如,互联网工程任务组(IETF)RFC 2992“Analysisof an Equal-Cost Multi-Path Algorithm”描述了一种沿等价多路径路由数据包的路由技术。RFC 2992的技术分析了一种特定的多路径路由策略,该策略涉及通过散列数据包报头字段将流量分配给箱,这些数据包报头字段在单个确定性路径上发送来自特定网络流量的所有数据包。
例如,“流量”可以由在数据包的报头中使用的五个值或“五元组”来定义,即,用于通过物理网络路由数据包的协议、源IP地址、目的IP地址、源端口和目的端口。例如,协议指定了通信协议,例如,TCP或UDP,源端口和目的端口是指连接的源端口和目的端口。与特定流条目匹配的一组一个或多个分组数据单元(PDU)表示流量。可以使用PDU的任何参数对流量进行宽泛的分类,例如,源和目的地数据链路(例如,MAC)和网络(例如,IP)地址、虚拟局域网(VLAN)标签、传输层信息、多协议标签交换(MPLS)或通用MPLS(GMPLS)标签以及接收流量的网络装置的入口端口。例如,流量可以是在传输控制协议(TCP)连接中传输的所有PDU、由特定MAC地址或IP地址发起的所有PDU、具有相同VLAN标签的所有PDU或者在相同交换机端口接收的所有PDU。
根据本公开中描述的技术的各个方面,一个或多个服务器12可以包括网络装置30,该网络装置为数据中心10内的相应物理网络和/或虚拟网络执行多个路由实例。表示本文描述的网络装置示例中的任何一个或多个的网络装置30可以在软件中实现为逻辑装置(例如,虚拟路由器或交换机),或者在硬件中实现为电气装置(例如,物理路由器或交换机)。为了在网络7中实现高持续吞吐量和/或低延迟,任何服务器12的网络装置30实现用于执行对应于输入/输出数据包的路由实例的软件程序,并且配置该软件程序(例如,控制程序),以在用户空间中操作(例如,作为用户空间应用运行)。
在一个示例性实施方式中,网络装置30被配置为在用户空间中运行用于数据包处理的控制程序,并将该控制程序指定为输入数据包的数据路径的一部分。这个用户数据路径可以是内核空间中的数据路径的补充或替代。作为主控制程序的操作系统可以在内核空间中提供计算环境,在该计算环境中,另一个程序(例如,另一个控制程序)为输入数据包启动内核数据路径。内核数据路径可以包括形成管线的软件代码,其中,软件栈实现一个或多个网络层,并且栈中的一个或多个层被应用于输入数据包。遵循(例如,单个)内核数据路径(例如,根据软件栈表示)的网络驱动程序避免执行在该软件栈中找不到的任何代码。具有上述网络驱动程序的网络装置可以调用用户空间中的功能,例如,在给上述网络驱动程序的消息中返回指示目的地的信息以及从网络驱动程序接收的任何数据包数据的副本。数据包数据的副本被传输到用户空间中的存储区域,然后返回到沿着内核数据路径的位置(例如,内核空间中的相同存储区域),因此,导致沿着内核数据路径很少或没有进展。
出于多种原因,网络驱动程序可能会将某些数据包从内核空间过滤到用户空间。在实现单个内核数据路径的传统网络装置中,在路径确定之前,不同的网络驱动程序可能在内核空间(例如,存储器)中对经由入口网络接口接收的输入数据包进行排队,从而导致数据包处理(例如,数据包传输)中的重大延迟。实际上,这种排队实质上暂停了内核数据路径,直到至少一个路由/转发决策被编程到内核空间(例如,存储器)中。将额外延迟聚集到上述延迟,内核数据路径的一些示例性实施方式利用用户空间资源,但是对所有输入数据包实施单个数据路径,例如,通过将那些数据包保留在内核空间中,而不将任何数据包转移到用户空间,和/或通过在内核空间和用户空间之间来回复制一个或多个数据包。
网络装置30在用户空间中实现完整的数据路径,如本文针对一些示例所描述的,在内核空间中配置过滤器,以将输入数据包偏离到用户数据路径中,在用户数据路径中,用户控制程序执行数据包处理操作(例如,用于路径确定)。总体上,过滤器可以在操作系统挂钩点上配置,在该挂钩点上,子系统(例如,容器/虚拟机)运行用于执行过滤器的环境,以处理用户控制程序的操作。当输入数据包到达挂钩点时,网络驱动程序从内核空间存储器执行过滤器,该过滤器被授予访问由在用户空间中执行的软件代码编程的至少一个存储区域的权利,反过来,子系统加载过滤器,以处理来自用户控制程序的通信。用户控制程序可以经由过滤器指示子系统在至少一个用户空间存储区域和内核空间中的存储区域之间生成接口(例如,诸如AF_XDP套接口之类的套接口接口)。这个接口可以被称为入口套接口接口。
为了完成在本文描述的双数据路径实施方式中的用户数据路径的实施例,用户控制程序调用(例如,XDP子系统的)功能,以在至少一个存储区域(例如,共享存储器)和内核空间中的存储区域(例如,用于出口网络接口的网络驱动程序代码点)之间生成第二接口(例如,诸如AF_XDP套接口之类的套接口接口)。第二接口可以被称为出口套接口接口。
网络驱动程序的另一个实施例可以构成内核数据路径的至少一部分,并且经由挂钩(例如,预路由挂钩点),可以调用定制内核程序,该定制内核程序被配置为通过将输入数据包放置在共享存储器上,然后生成共享存储器的存储器映射,来启动用户数据路径。存储器映射被配置为将用户数据路径引导至数据包内的特定存储位置。
软件栈(本文称为网络栈)可以包括用于多个通信协议的软件程序,其中,每个软件程序被配置为根据相应的网络层处理数据包。网络驱动程序可以调用对堆栈中的下一个网络层的编程,使数据包通过内核数据路径前进(例如,直到传输到下一个装置或被本地应用消费)。网络层可以在存储器中编程,作为数据包的内核数据路径的一部分。至少一个程序(作为第2层或第3/4层协议运行)可以解决路由和/或转发决策。如本文所述,内核空间限于内核认可的程序,并且尽管内核数据路径可以调用某种用户空间功能(例如,网络服务),但是需要相当多的时间,例如,来回复制数据包。最终,数据包传输由内核数据路径执行,内核数据路径经由第二网络接口提交出口的出站数据包。
用户数据路径可以是网络驱动程序在存储器中编程的另一个内部数据路径,作为输入数据包的路径或管线。类似于内核数据路径,用户数据路径可以包括存储在用户空间的存储器中的代码点;内核空间中的网络驱动程序可以访问这些存储位置。例如,用户数据路径可以是网络装置中的单个数据路径,作为内核数据路径的替代。在其他示例中,用户数据路径可以替代内核数据路径。
为了形成用户数据路径的(例如,管线)表示,网络驱动程序可以将包括该数据路径的软件程序组织成一种结构(例如,软件栈)。网络驱动程序可以将该表示存储在用户空间存储器中,并为具有单个用户数据路径的网络装置中的一个或多个输入数据包执行该结构的代码。对于双数据路径实施方式,内核程序(例如,eBPF XDP程序)可以被配置为将输入数据包从内核数据路径转移到用户数据路径上。网络驱动程序可以将XDP绑定到挂钩代码点,从而响应于穿过挂钩代码点的数据包,网络驱动程序将eBPF XDP程序加载到内核空间存储器中,然后将eBPF XDP程序绑定到入口网络接口。因此,eBPF XDP程序可以绑定到虚拟网络接口或物理网络接口。
因为eBPF XDP程序驻留在内核空间中,所以套接口接口可以是可选的特征(例如,附加元件)。双数据路径实施方式的一些示例不依赖于AF_XDP套接口在内核空间和用户空间之间进行通信。存在于内核空间中的存储区域可以存储数据包的副本,并且内核程序可以将该副本转移到用户空间,例如,通过与用户空间共享那些存储区域。这可以通过存储器映射的方式来实现,其中,网络驱动程序(或另一操作系统组件)将内核地址空间映射到用户地址空间。这消除了将用户空间信息复制到内核空间的开销,反之亦然。网络驱动程序可以配置用户空间网络接口而不是套接口接口。网络驱动程序可以创建具有虚拟地址和物理地址的虚拟存储区域。处理电路(例如,CPU)可以访问(从内核空间)虚拟地址,这些虚拟地址由存储器管理单元在页表的帮助下转化成物理地址。因此,包括数据包数据的存储区域被映射成页面大小的倍数。
在其他示例中,在内核中可能有一个副本,其中,将数据包制作到存储器中,然后经由入口套接口接口与用户空间共享。通过该副本的存储器映射,生成映射信息,以将用户数据路径引导至该数据包内的适当存储位置。用户数据路径继续解析数据包并执行各种程序,来执行本文描述的各种数据包处理操作。内核程序可以用作用户数据路径调用内核空间功能的接口(例如,应用编程接口(API))。因为被映射的存储器在内核空间中具有地址空间,所以用户数据路径可以调用内核空间中的辅助函数。用户数据路径使用出口套接口接口将数据包传输到下一个目的地。
尽管以上描述涉及网络装置30对进入服务器12A的非隧道和隧道数据包执行数据包处理操作,但是图1示出了覆盖网络的网络基础设施,并且网络装置30可以将控制程序配置为(具体地)处理服务器12A的用户空间中的隧道数据包,如下面在公开中所述。
由服务器12A的网络装置例如从底层物理网络结构接收的数据包可以包括外部报头,以允许物理网络结构将有效载荷或“内部数据包”隧道传输到用于执行网络装置的服务器12A的网络接口的物理网络地址。外部报头不仅可以包括服务器的网络接口的物理网络地址,还可以包括虚拟网络标识符,例如,识别一个虚拟网络的VxLAN标签或多协议标签交换(MPLS)标签以及由网络装置执行的相应路由实例。内部数据包包括具有目的网络地址的内部报头,该目的网络地址符合由虚拟网络标识符识别的虚拟网络的虚拟网络寻址空间。在图1的示例性方法中,服务器12A上的网络装置30经由隧道15与服务器12X上的网络装置30通信,这将在下面更详细地讨论。
在一些示例性方法中,网络装置30在将从底层物理网络结构接收的一个或多个隧道化数据包递送到数据包的适当路由实例之前,将这些数据包引导到在用户空间中运行的用户控制程序。在一些示例中,网络装置30将每个(新)流量的第一数据包转移到用户数据路径,其中,用户控制程序调度生成(新)流量上下文并将其编程到内核空间中。在其他示例中,网络装置30将相同流量的一个或多个数据包转移到用户数据路径,用于根据匹配标准进行数据包处理,该匹配标准包括外部报头的虚拟网络标识符以及内部报头的一个或多个字段。也就是说,在一个服务器12上执行的网络装置30可以从交换机16接收数据包流量的入站隧道数据包,并且在将隧道数据包转发到本地执行的虚拟机、远程执行的虚拟机和/或不同网络中的装置之前,在用户空间而不是内核空间中处理隧道数据包。
在一些示例性实施方式中,在服务器12上执行的网络装置30可以在多个处理器核之间操纵接收到的入站隧道数据包,以在处理数据包以便路由到一个或多个虚拟和/或物理机器时促进核之间的数据包处理负载平衡。
在其他示例性实施方式中,在服务器12上执行的网络装置30可以由网络装置主动添加流表条目,以识别由网络装置的路由实例处理的流量的反向流。
应当注意,实践本文描述的技术的网络装置可以包括以软件和/或硬件实现的用户数据路径。作为基于软件的实施方式或基于硬件的实施方式,用户数据路径表示用于数据包接收和数据包传输的完整数据路径。在以上对图1的描述中公开的技术涉及网络装置30,该网络装置在服务器12上执行,并且具有基于软件的用户数据路径,用于对入口数据执行数据包处理操作,并且处理出口数据到下一个目的地的传输。
本公开还描述了用户数据路径的基于硬件的实施方式的示例,用于对入口数据执行数据包处理操作,并处理出口数据到下一目的地的传输。类似于网络装置30,具有基于硬件的实施方式的网络装置可以是涉及多个网络的网络系统的一部分。作为一个示例,网络装置可以包括用于存储和/或执行用户数据路径的硬件单元,例如,用于转发入口数据的数据包,作为出口数据的输出数据包。用户数据路径的用户模块可以被称为数据包处理器。硬件单元可以包括被配置用于数据包接收的第一网络接口卡(NIC)和被配置用于数据包传输的第二网络接口卡(NIC),其中,每个网络接口卡通信地耦接到相应的网络装置。至少一个数据包处理器可以可操作地耦接到存储器,可由处理电路从存储器执行,并且被配置为在用户空间中运行。内部数据路径包括在内核空间中运行的逻辑,用于将输入数据包从第一网络接口卡传送到至少一个数据包处理器。内部数据路径还包括在用户空间中运行的逻辑,用于将输出数据包从至少一个数据包处理器传送到第二网络接口卡。如本文所述,至少一个数据包处理器可以是用户数据路径的一部分,用于确定输入数据包的下一目的地,然后修改输入数据包,以生成输出数据包。内部数据路径的至少一部分可以存储在存储器中,并且可由处理电路执行。
图2是更详细地示出图1的数据中心10的示例性实施方式的框图。在图2的示例中,数据中心10包括覆盖网络,该覆盖网络将交换机结构14从物理交换机16、18延伸到软件或“虚拟”交换机30A-30X(统称为“网络装置30”)。网络装置30动态地创建和管理可用于在应用实例之间通信的一个或多个虚拟网络34。在一个示例中,网络装置30执行虚拟网络,作为覆盖网络,该覆盖网络提供了将应用程序的虚拟地址与应用程序正在其上执行的服务器12A-12X(“服务器12”)之一的物理地址(例如,IP地址)分离的能力。每个虚拟网络可以使用其自己的寻址和安全方案,并且可以被视为与物理网络及其寻址方案正交。可以使用各种技术通过物理网络在虚拟网络34内和跨虚拟网络34传输数据包。在一些示例中,本公开中描述的技术实现了网络装置中增强的数据包处理功能,例如,通过将某些操作卸载到用户空间上。
每个网络装置(例如,图1的网络装置30)可以在管理程序31、主机操作系统或每个服务器12的其他组件内执行双数据路径实施方式的一个或两个数据路径。每个服务器12可以表示能够执行虚拟机36的x86或其他通用或专用装置(例如,服务器或路由器/交换机)。在图2的示例中,控制程序33在系统管理程序31内执行,系统管理程序通常也被称为虚拟机管理器(VMM),其提供允许多个操作系统在一个服务器12上同时运行的虚拟化平台。
如本文针对图1的网络装置30所描述的,主机操作系统可以将内核数据路径和用户数据路径编程到管理程序31和/或一个或多个主机操作系统组件中。在图2的示例中,当来自在内核空间中运行的内核程序的入口数据提示时,管理程序31在用户空间中执行控制程序33,即用户模块。控制程序33和内核程序分别表示(至少一部分)用户数据路径和内核数据路径,如本文所述。内核程序与在内核空间中运行的一个或多个其他软件组件相结合,可以形成本文描述的整个内核数据路径。上述内核程序的合适示例包括数据包过滤模块,例如,运行快速数据路径(XDP)子系统的扩展的伯克利数据包过滤器(eBPF)程序。操作系统(例如,主机或客户/虚拟操作系统)组件可以支持内核程序,例如,定制内核程序或网络栈;一个示例组件可以是网络接口驱动程序,并且存在驱动程序可以使用的内核程序的多个示例。作为一种选择,多个软件程序可以组合,以形成核心程序。
控制程序33和一个或多个硬件/软件组件通过跟随用户数据路径直到数据包经由出口网络接口传输,在数据包处理操作上配合。例如,控制程序33A和VN代理35A可以被配置为交换数据(例如,数据包报头数据、数据包有效载荷数据、进程间消息数据、进程数据等),以执行某些路由/转发操作。本文描述的内核数据路径(例如,内核程序)和用户数据路径(例如,用户模块)的控制程序33可以形成图1的网络装置30的示例性实施例。
图1的网络装置30的替代硬件架构可以包括多个硬件组件,例如,配置有用于转发平面功能的逻辑的(硬件)转发单元、配置有用于控制平面功能的逻辑的(硬件)控制单元等。当在替代硬件架构的一些示例中实现时,控制程序33A可以被编程到转发单元中,以实现转发平面功能,并且VN代理35A可以被编程到控制单元中,以实现控制平面功能。
在图2的示例中,网络装置30A(未示出)管理虚拟网络34,每个虚拟网络提供网络环境,以供在由管理程序31提供的虚拟化平台之上执行的一个或多个虚拟机(VM)36使用。每个VM 36与虚拟网络VN0-VN1中的一个相关联,并且可以表示运行客户应用程序的租户VM,例如,网络服务器、数据库服务器、企业应用程序或者用于创建服务链的托管虚拟化服务。在一些情况下,任何一个或多个服务器12或另一计算装置可以直接托管客户应用程序,即,不作为虚拟机。本文所指的虚拟机(例如,VM 36、110和服务器12或托管客户应用程序的独立计算装置)也可以称为“主机”。
总体上,每个VM 36可以是任何类型的软件应用程序,并且可以被分配虚拟地址,以在相应的虚拟网络34内使用,其中,每个虚拟网络可以是由控制程序33A提供的不同虚拟子网。VM 36可以被分配其自己的虚拟第三层(L3)IP地址,例如,用于发送和接收通信,但是可能不知道虚拟机在其上执行的物理服务器12A的IP地址。这样,“虚拟地址”是不同于底层物理计算机系统(例如,图2的示例中的服务器12A)的逻辑地址的应用程序的地址。
在一个实施方式中,每个服务器12包括虚拟网络(VN)代理35A-35X(统称为“VN代理35”)中相应的一个,其控制虚拟网络34的覆盖并协调服务器12内的数据数据包的路由。总体上,每个VN代理35与虚拟网络控制器22通信,虚拟网络控制器生成命令,来控制通过数据中心10的数据包路由。VN代理35可以作为虚拟机36和虚拟网络控制器22之间的控制平面消息的代理。例如,VM 36可以请求使用其虚拟地址经由VN代理35A发送消息,并且VN代理35A可以依次发送该消息,并且请求接收对发起第一消息的VM 36的虚拟地址的消息响应。在一些情况下,VM36可以调用由VN代理35A的应用编程接口提供的过程或函数调用,并且VN代理35A也可以处理消息的封装,包括寻址。
在一个示例中,由虚拟网络域内的虚拟机36执行的应用实例生成或消费的网络数据包(例如,第三层(L3)IP数据包或第二层(L2)以太网数据包)可以封装在由物理网络传输的另一数据包(例如,另一IP或以太网数据包)中。在虚拟网络中传输的数据包在本文可以被称为“内部数据包”,而物理网络数据包在本文可以被称为“外部数据包”或“隧道数据包”。虚拟网络数据包在物理网络数据包中的封装和/或解封装可以在图1的网络装置30或控制程序33内执行,例如,在运行在每个服务器12上的管理程序31或主机操作系统内执行。作为另一示例,封装和解封装功能可以在第一跳TOR交换机16处的交换结构14的边缘执行,该第一跳TOR交换机是从发起数据包的应用实例移除的一跳。如上所述,该功能在本文中被称为隧道,并且可以在数据中心10内用于创建一个或多个覆盖网络。除了IPinIP之外,可以使用的其他示例隧道协议包括GRE上的IP、VxLAN、GRE上的MPLS、UDP上的MPLS等。
如上所述,虚拟网络控制器22提供逻辑上集中的控制器,用于促进数据中心10内的一个或多个虚拟网络的操作。虚拟网络控制器22可以例如维护路由信息库,例如,存储数据中心10的物理网络以及一个或多个覆盖网络的路由信息的一个或多个路由表。类似地,交换机16、交换机18和网络装置30维护路由信息,例如,一个或多个路由和/或转发表。在一个示例性实施方式中,管理程序31的控制程序33A为每个虚拟网络34实现网络转发表(NFT)32。总体上,每个NFT 32存储对应虚拟网络34的转发信息,并识别数据数据包将被转发到哪里以及数据包是否将封装在隧道协议中,例如,利用可以包括虚拟网络协议栈的不同层的一个或多个报头的隧道报头。
在一个这样的示例性方法中,虚拟机VM1通过内部链路向控制程序33A发送“内部数据包”。控制程序33A使用NFT1来查找内部数据包的虚拟网络目的地网络地址。在一个这样的示例性方法中,NFT1指定了控制程序33A的出站接口和内部数据包的封装。控制程序33A应用封装,以添加隧道报头,来生成外部数据包,并在出站接口上输出外部数据包,或者在这种情况下,向TOR交换机16A输出外部数据包。
路由信息可以例如将数据包密钥信息(例如,目的地IP信息和来自数据包报头的其他选择信息)映射到由控制程序33和交换结构14提供的网络内的一个或多个特定下一跳。在某种情况下,下一跳可以是链式下一跳,其指定在转发数据包时要对每个数据包执行的一组操作,例如,可以用于泛洪下一跳和多播复制。在一些情况下,虚拟网络控制器22以根树的形式维护路由信息,该根树具有表示网络内的目的地的叶节点。
如图2所示,每个虚拟网络34为通过交换结构14建立的覆盖网络提供封装的数据包通信框架37。以这种方式,可以使用封装的数据包通信框架37经由覆盖网络来传输与任何虚拟机36相关联的网络数据包。此外,在图2的示例中,每个控制程序33包括默认网络转发表NFT0,并提供默认路由,该默认路由允许数据包在没有封装的情况下被转发到虚拟子网VN0,即,根据数据中心10的物理网络的路由规则的非封装数据包通信框架39。以这种方式,子网VN0和虚拟默认网络转发表NFT0提供了一种机制,用于绕过覆盖网络并经由非封装通信框架39向交换结构14发送非封装数据包通信。
此外,虚拟网络控制器22和控制程序33(或图1的网络装置30)可以在覆盖网络的发现和初始化期间以及在故障链路已经暂时停止经由覆盖网络的通信的情况期间,根据默认网络转发表NFT0 32使用虚拟子网VN0进行通信。一旦建立了与虚拟网络控制器22的连接,虚拟网络控制器22更新其本地路由表,以考虑关于任何故障链路的新信息,并引导控制程序33更新其本地网络转发表32。例如,虚拟网络控制器22可以向虚拟网络代理35输出命令,以更新一个或多个NFT 32,从而引导控制程序33改变隧道封装,以便在覆盖网络内重新路由通信,例如,避免故障链路。
当检测到链路故障时,故障链路本地的虚拟网络代理35(例如,VN代理35A)可以立即改变网络数据包的封装,以重定向覆盖网络内的流量,并且可以向虚拟网络控制器22通知路由变化。反过来,虚拟网络控制器22可以更新其路由信息,并且可以向其他虚拟网络代理35发出消息,以更新由虚拟网络代理存储在网络转发表32内的本地路由信息。
图3是示出根据本文描述的技术的网络8(图1-图2)的示例性软件定义的网络实施方式的框图。在一个示例性方法中,每个网络装置30经由一组服务器到服务器隧道将数据包从一个虚拟机36转发到其他虚拟机。隧道形成位于物理网络(例如,物理以太网IP网络)之上的覆盖网络。在图3所示的示例中,一个网络装置30上的虚拟机36经由GRE上的MPLS、UDP上的MPLS或VXLAN与其他网络装置30上的虚拟机36通信。
在图3的示例性方法中,虚拟网络控制器22是软件定义网络(SDN)控制器。如上面在图1的讨论中所述,在一个示例性方法中,虚拟网络控制器22在逻辑上是集中的,但是在物理上可以分布在许多装置上。在一个示例性方法中,控制器22包括多种类型的节点,每种节点可以具有多个高可用性(HA)和水平扩展的实例。在一个这样的示例性方法中,虚拟网络控制器22包括三种类型的节点:配置节点40、控制节点42和分析节点44。这些节点实例可以在物理服务器12或虚拟机上实现。在一个这样的示例性方法中,虚拟网络控制器22中的配置节点40经由存储在元数据访问点接口(IF-MAP)服务器26上的技术数据模型来配置控制节点。
在一个示例性方法中,配置节点40提供用于配置控制节点42的管理层。在图3所示的示例中,配置节点40提供北向表征状态转移(REST)应用编程接口(API),该接口可被协调器46用来配置网络8或提取网络8的操作状态。在一个示例性方法中,实例化的服务由水平可伸缩数据库中的对象来表示,该数据库由正式的服务数据模型来描述。配置节点还包含转换引擎(有时称为编译器),该转换引擎将高级服务数据模型中的对象转换为技术数据模型中相应的低级对象。高级服务数据模型描述了需要实现什么服务,而低级技术数据模型描述了需要如何实现这些服务。在一个示例性方法中,描述实例化服务的对象经由正式的服务数据模型来定义。该正式的服务数据模型可以被转换成描述如何实现服务的低级技术数据模型。在一个这样的示例性方法中,虚拟网络控制器22中的配置节点40使用元数据访问点接口(IF-MAP)协议向控制节点发布存储在IF-MAP服务器26上的低级技术数据模型的内容。
在一个示例性方法中,控制节点42实现控制平面的逻辑集中部分。并非所有的控制平面功能都是逻辑集中的,一些控制平面功能仍然以分布式方式在网络8中的物理和虚拟网络装置30(例如,路由器和交换机)上实现。控制节点42可以使用IF-MAP协议来监控由配置节点40计算的描述网络期望状态的低层技术数据模型的内容。控制节点42可以使用南向协议(例如,可扩展消息和存在协议(XMPP))的组合来配置网络装置30,并且使用边界网关协议(BGP)和网络配置(NETCONF)协议来控制物理路由器(例如,IP结构20中的底层交换机50)。在一些这样的示例性方法中,BGP和NETCONF协议也可以用于控制网关52。在一个示例性方法中,当出于向外扩展和HA原因存在控制节点42的多个实例时,控制节点42也使用BGP来实现彼此之间的状态同步。
在一个示例性方法中,分析节点44用于收集、整理和呈现分析信息,用于故障排除问题和确定网络使用。在一个这样的示例性方法中,网络8的每个组件为系统中的重大事件生成详细的事件记录。可以将这些事件记录发送到分析节点44的多个实例之一(用于向外扩展),分析节点使用针对时间序列分析和查询而优化的格式来整理信息并将其存储在可水平扩展的数据库中。分析节点44还可以包括当发生某些事件时自动触发收集更详细记录的机制,允许网络控制22得到任何问题的根本原因,而不必再现。在一个示例性方法中,分析节点44还向协调器46提供北向分析查询REST API。
在一个示例性方法中,虚拟网络控制器22实现三个基本构件:多租户、网关功能和服务链。多租户也称为网络虚拟化或网络切片,是创建虚拟网络的能力,该虚拟网络向多组VM 36提供封闭的用户组。网关功能是指经由网关路由器(例如,互联网)将虚拟网络连接到物理网络的能力以及经由网关将非虚拟化服务器或网络服务连接到虚拟网络的能力。服务链也称为NFV,是通过一系列物理或虚拟网络服务(例如,防火墙、DPI或负载平衡器)控制流量的能力。
本公开描述了多个示例,其中,与单数据路径实施方式和/或任意数量的网络功能的服务改变相比,实现双数据路径改善了网络装置30的性能。在内核空间中具有数据路径,将网络装置30限制于有限的一组数据包处理操作。相比之下,在用户空间中具有用于路由/转发数据包的数据路径,能够实现网络装置30的额外功能。这可能是因为有各种被配置用于增强数据包处理的并且可包含在用户数据路径中的额外应用程序。例如,当输入数据包到达网络接口卡时,网络装置30可以沿着用户数据路径执行应用程序,以确定这些数据包的下一个目的地。除了上述确定下一个目的地之外,可以为用户数据路径执行至少一个额外应用程序,以增强其数据包处理操作。
被配置用于增强数据包处理的一个示例性应用程序可以用软件代码来配置,以实现在线深度数据包检查(DPI)相关的功能。在提供L7防火墙(IDS/IPS)支持的应用程序中使用在线DPI可能会有好处。用于增强数据包处理的另一示例性应用程序可以是被配置为对同一流量的一个或多个数据包执行签名和协议异常检查的安全应用程序。第三示例性应用程序可以被配置为处理应用级网关支持,例如,FTP或SIP;例如,当需要更复杂的检查时,其他协议可能会受益。将数据包处理操作卸载到用户空间,提供了额外的好处和优势,例如,显著降低内核健康的风险,并避免由于移入内核空间内的代码库、用于增强数据包处理的用户应用软件代码而导致的资源和时间的显著成本。对于最常见的转发情况,这种方法还避免了内核转发性能的下降。
图4A是示出根据本文描述的技术的图1的示例性网络的计算装置60的示例性双数据路径实施方式的流程图。本文描述的计算装置60可以是一种类型的网络装置(例如,物理路由器或交换机),或者表示一种类型的网络装置的物理计算机/虚拟机(例如,虚拟路由器/交换机)。不管实施了哪个实施例,计算装置60都配置有用于数据包处理的适当功能(例如,路由/转发决策)。
如图4A所示,计算装置60(或简称为装置60)包括用于示例性双数据路径实施方式的各种硬件/软件组件。这些硬件/软件组件包括各种基于硬件的物理组件和/或基于软件的虚拟组件。网络接口61A、网络接口61B以及可能更多的网络接口是计算装置60支持的硬件/软件组件的示例。网络接口61A可以表示转发硬件(例如,在ASIC中),例如,物理计算机或一种网络装置(例如,路由器或交换机)中的物理网络接口卡(NIC)的转发单元。网络接口61A也可以表示虚拟NIC。
总体上,双数据路径实施方式是指装置60在用户空间62A中具有数据包处理路径,在内核空间62B中具有单独的数据包处理路径。包括一个或多个输入数据包的入口数据通过这些处理路径中的一个前进,并且或者被用户空间62A中的应用程序消费,或者转发到路由的下一目的地(即下一跳)。当由用户空间62A中的用户模块64或内核空间62B中的网络栈转发到下一个目的地时,修改输入数据包,以包括识别下一个目的地的信息(例如,在修改的数据包报头中)。修改后的数据包成为用于数据包传输的出口数据的输出数据包。在用户空间62A的处理路径中,用户模块64确定下一个目的地,然后将输出数据包直接馈送到适当的出口网络接口(例如,网络接口61B)。在另一个处理路径中,内核空间62B中的网络栈确定下一个目的地,然后将输入数据包直接馈送到适当的网络接口。
网络接口61包括用于处理入口数据和出口数据的硬件/软件组件。计算装置60内的每个网络接口61与内核空间62B内的数据结构和其他组件对准。为此,当与其他装置的网络交换数据包时,网络接口61从网络装置接收输入数据包,并将输出数据包发送到相同的网络装置或不同的网络装置。在每种情况下,内核空间62B中的网络驱动程序(例如,也称为网络装置驱动程序)在由网络接口61A接收之后处理输入数据包,并且在一些示例中,在由网络接口61B传输之前处理输出数据包。在其他示例中,用户模块64配置有接口,即套接口74,以直接将出口数据的输出数据包插入网络接口61的存储区域中的数据包缓冲器。代表内核程序68的网络驱动程序将出口数据的输出数据包存储在用户空间62A和内核空间62B之间的共享存储区域中。内核空间62B中的网络驱动程序包括多个挂钩点,用于将数据包重定向到用户模块64或用户空间62A中的另一个应用程序。
挂钩点66是指上述网络驱动程序中的挂钩软件代码。总体上,挂钩点66将入口数据流沿着用户数据路径引导到用户空间62A,或者沿着内核数据路径引导到内核空间62B。当数据包第一次到达网络接口61A时,网络驱动程序访问数据包,并开始沿着内核数据路径处理数据包,直到到达挂钩点。数据包穿过快速数据路径(XDP),这是挂钩点66的示例性实施例,并且是Linux操作系统(OS)中的子系统的一部分。到达网络装置驱动程序中的挂钩点66,使得在内核空间62B中(例如,在网络驱动程序的存储区域内)执行内核程序68(例如,扩展的伯克利数据包过滤器(eBPF)程序),然后,提示用户模块64将执行内核程序68加载到内核空间62B的存储区域中。
内核程序68可以被称为在虚拟机/虚拟容器中运行的eBPF XDP模块,该虚拟机/虚拟容器被配置为生成运行eBPF程序的操作环境。在一些示例中,内核程序68启用用户模块64和内核空间62B中的存储区域之间的接口,例如,网络栈和网络接口61的存储区域。在一个示例中,内核程序68被配置为将套接口72耦接到包括网络接口61A的内核空间62B中的存储区域。以这种方式,到达网络接口61A的相同流量的后续数据包被内核程序68重定向到用户空间62A;然而,在一些替代方案中,内核程序68或另一内核空间62B组件(例如,网络装置驱动程序)可以包括针对流量的下一目的地(例如,流量上下文)的编程,并且将同一流量的后续数据包重定向到网络接口61B,以便传输到下一目的地。在一个示例中,内核程序68被配置为生成套接口74,然后将套接口74耦接到网络接口61B。
总体上,用户模块64是被配置为执行数据包处理操作的应用程序(例如,控制程序),作为本文描述的用户数据路径的一部分,这些操作包括入口数据的路由和转发决策。当内核程序68基于挂钩点66将上述数据包传送到用户空间62A时,该传送导致执行用户模块64的数据包处理操作。因此,根据一些示例,用户模块64可以每个数据包或每个数据包流执行一次。在确定每个数据包的判决之后,用户模块64将该数据包传送到网络接口61B,以传输到下一跳,或者传送到用户空间62A中的应用程序,以供消费。用户模块64通过将数据包直接传递到网络接口61B来安排数据包的输出传输,而不是将数据包返回到网络驱动程序和/或内核空间62B中的网络栈。这是从其他装置中的XDP出发,不用于出口流量。此外,通过处理数据包接收和数据包传输,在某些情况下,用户数据路径可以操作完整的数据包处理数据路径,作为内核数据路径的替代。
在一些示例中,代码点70被配置为将网络接口61B绑定到用户模块64中的套接口74。代码点70使用户模块64能够直接将数据包传送到网络接口61B,用于出站传输。作为一个示例,用户模块64可以操作,来将套接口72和套接口74都打开为AF_XDP套接口,使得用户模块64能够直接从网络接口61A访问入口数据的数据包,并且将出口数据的数据包直接传输到网络接口61B。
在一些示例中,用户模块64可以利用额外模块来支持/增强数据包处理操作。用户模块64可以调用额外数据包处理库,例如,数据平面开发工具包(DPDK)和矢量数据包处理(VPP),来支持套接口72和套接口74。例如,用户模块64可以调用数据包缓冲区分配器,该分配器跟踪哪些数据包缓冲区域正在运行,哪些数据包缓冲区域是空闲的。用户模块64可以调用用户模块64可以用来促进路由和转发的助手功能库(例如,libbpf)。内核程序68可以为用户模块64生成接口,以调用内核空间62B中的助手功能。例如,助手功能可被配置为通过为每个套接口注册数据包将位于其中的数据包缓冲区(例如,在存储区域中)并将每个套接口创建/绑定到不同的网络接口61,来将套接口72和套接口74初始化为AF_XDP套接口。数据包缓冲区可以包括内核空间62B和用户空间62A之间的共享存储区域。作为替代,套接口72可以绑定到与套接口74相同的网络接口61。
向用户模块64提供额外功能以用于增强的数据包处理的应用程序的示例包括用于支持网络第7层防火墙(IDS/IPS)的在线深度数据包检查(DPI)、签名和协议异常检查、处理应用级网关支持,例如,用于文件传输协议(FTP)和会话发起协议(SIP)等。通过在用户空间62A中执行这些数据包处理操作,显著降低了内核健康的风险,并且避免了将支持代码放入内核代码库的大量工作。双数据路径实施方式还避免了例如关于转发性能(例如,对于最常见的转发情况)的内核数据路径的降级。
在一些示例中,装置60可以通过使网络驱动程序配置内核程序64来指定内核数据路径(例如,eBPF XDP数据路径)中的流量(例如,永久地或暂时地)总是穿过要转发/过滤的用户数据路径(例如,AF_XDP套接口数据路径),从而经由双数据路径实施方式来处理输入/输出数据包。这可以有选择地进行,包括以迭代方式随时间采样每个流量和/或检查一些初始数据包。假设用户空间61A是任何应用程序都可以在其上运行的计算环境,通过遵循用户数据路径,这些流量可以受到增强的处理。
在图4A所示的示例中,内核程序68可以绑定到作为一个集合的网络接口61A-61B,这些接口一起具有网络接口驱动程序,以管理这些接口中的任何一个上的数据包传输和数据包接收。在一些示例中,装置60中的额外网络接口可以绑定到内核程序68或存在于内核空间62B中的另一个内核程序实例。基于许多因素,内核程序68可以基于该程序接收和/或发送其数据包而将其自身绑定到网络接口61A和/或网络接口61B。
在一些示例中,在内核空间62B中运行的驱动程序可以将内核程序68附接到网络接口61A的入口接口(例如,端口)。在挂钩点66处执行内核程序68,可以使得用户模块64将套接口72绑定到内核空间62B中的(共享)存储区域,最终将用户模块64连接到用于入站通信(例如,数据包接收)的驱动程序的入口接口。对于出站通信(例如,数据包传输),驱动程序可以将内核空间62B中的软件代码附接到网络接口61B的出口接口。附接的软件代码可以是内核程序68、另一个内核程序或驱动程序本身中预先存在的功能。执行用户模块64可以将套接口74绑定到相同的共享存储区域或内核空间62B中的另一个存储区域,最终将用户模块64连接到驱动程序的出口接口,以实现来自用户空间62A的(例如,数据包)转发。
网络接口61A可以接收输入数据包,并且网络接口驱动程序的入口接口可以将这些数据包放置(例如,在内核数据路径上)在内核空间62B内,例如,在内核程序68将与用户模块64共享的存储区域中。通过挂钩点66和套接口72,内核程序68可以经由用户空间62A和内核空间62B之间的共享存储空间将输入数据包传送到用户模块64(例如,和用户数据路径)。例如,驱动程序可以将上述存储区域指定为共享存储空间,创建新的共享存储空间,和/或将输入数据包存储在现有的共享存储空间中。访问共享存储器空间中的输入数据包后,用户模块64从用户空间62A和内核空间62B中的一个或两个调用各种功能。以这种方式,用户模块64可以控制用户数据路径上的数据包处理操作的性能,并且根据哪个操作系统实施方式包含驱动程序,用户模块64能够绕过内核空间62B中的网络栈或者作为内核数据路径的一部分的等价程序集。
图4A还示出了双数据路径实施方式应用于包括同一流量的一个或多个数据包的入口数据的示例。在操作76,在套接口72的注册数据包区域中接收来自网络接口61A的入口数据,在操作78,提示挂钩点66经由内核程序68将入口数据传送到用户模块64。在操作80,用户模块64对入口数据执行适当的数据包处理操作。在用户模块64将网络装置识别为用于将入口数据作为出口数据转发的下一跳之后,发生操作82,其中,用户模块64经由套接口74将出口数据的数据包传送到代码点70的注册数据包区域。在操作84,假定代码点70被绑定到网络接口61B,可以由网络接口61B传输发送到该数据包区域的出口数据的数据包。根据哪个操作系统提供内核空间62B,存在供套接口74使用的代码点70的其他示例。以这种方式,套接口72和套接口74是用户模块64和内核空间62B之间的接口,并且可以允许任何给定流量的输入数据包绕过内核空间62B中的网络栈,而是依赖于用户模块64进行路由和转发决策。
图4B是示出根据本文描述的技术的图4A的示例性双数据路径实施方式的示例性架构的框图。
如本文所述,eBPF XDP程序86是指被配置为在内核空间62B和用户空间62A之间的快速数据路径(XDP)挂钩点处的虚拟机中运行的扩展的伯克利数据包过滤器(eBPF)软件代码。用于eBPF的虚拟机可以运行注入到/来自用户空间62A的其他程序,并且可以耦接到内核空间62B中的其他挂钩(例如,流量控制或连接跟踪)。总体上,eBPF XDP程序86可以被配置为在网络接口卡(NIC)将数据包卸载到内核空间62B中的驱动程序之后不久(例如,在路由/转发决策之前),分类、转发和/或过滤相同流量的数据包。
在一些示例中,当入口数据到达XDP挂钩点时,执行eBPF XDP程序86,并将其加载到用户空间62A中。控制程序88加载执行的eBPF XDP程序86,并允许该程序执行一个或多个数据包处理操作。控制程序88可以被配置为启用eBPF XDP程序86的额外功能。在一些示例中,eBPF XDP程序86代表控制程序88向内核空间62B发送请求。
控制程序88可以使用eBPF XDP程序86将用户空间62A中的逻辑组件(例如,套接口)绑定到网络接口(例如,软件中的虚拟网络接口或硬件中的物理网络接口)。以这种方式,控制程序88中的特定代码段可以将输出数据包注入适当网络接口的适当存储缓冲区域。输出数据包的报头包括引导将其传输到由控制程序88确定的下一跳的信息。
控制程序88可以使用由eBPF XDP程序86启用的功能,来与内核空间62B中的程序发送和接收数据。控制程序88可以使用eBPF XDP程序86来为eBPF创建、配置和/或读取虚拟机中的映射条目。这些映射条目可被配置为保持控制程序88或另一用户空间62A程序调用eBPF程序86的当前状态。映射92是指用于将映射条目存储为键/值对的存储区域,并且能够在eBPF程序86和用户空间62A或内核空间62B中的程序之间共享数据。映射条目对应于共享存储区域,其中,数据包缓冲器允许在用户空间62A和内核空间62B之间传输数据包数据。
控制程序88和内核空间62B中的程序经由eBPF XDP程序86进行通信,并依靠映射92来维护这些通信的状态。这包括与助手程序90通信,助手程序是与eBPF XDP程序86交互的应用编程接口(API)。在一些示例中,eBPF XDP程序86可以限于那些API,而在其他示例中,eBPF XDP程序86可以访问除了那些API之外的程序。在一些示例中,eBPF XDP程序86可以访问不是eBPF虚拟机的一部分的程序。
控制程序88可以接收从eBPF XDP程序86接收的入口数据(例如,经由AF_ADP套接口),并且还对入口数据执行一个或多个数据包处理操作。这些操作可以构成双数据路径实施方式的用户数据路径。另一条数据路径是内核数据路径,由指向网络栈的数据包执行。一些数据包处理操作包括路由和转发决策,例如,确定入口数据(例如,其数据包)的下一跳。在一些示例中,控制程序88可以执行数据包过滤操作,例如,以确定入口数据是否是安全风险。在用户数据路径的末端,控制程序88可以通过用更新的报头信息封装入口数据的数据包,将入口数据转换成出口数据。更新的报头信息可以包括下一跳的数据(例如,目的地址)。
控制程序88可以通过经由网络接口将出口数据传送到下一跳来结束用户数据路径。控制程序88可以调用eBPF XDP程序86和/或助手程序90上的功能,以便于将出口数据传送到网络接口的存储缓冲区域,并在映射92中记录适当的映射条目。套接口(例如,AF_ADP套接口)可以促进调用eBPF XDP程序86和/或助手程序90。
默认情况下,装置60的操作系统可以将装置名称“ens33”和“veth”分配给网络接口。网络接口“ens33”可以指装置60中的(例如,第一)物理网络接口卡(例如,以太网卡),类似于图5的装置名称“eth0”。网络接口“ens33”可以将装置60连接到物理网络的网络装置。
相反,网络接口“veth”可以指虚拟网络接口、虚拟NIC(例如,虚拟以太网装置),构建在物理NIC上,用于将数据包放在线路上。在一些示例中,网络接口“veth”是装置60中的虚拟机之间的本地以太网隧道。网络接口“veth”可以操作网络命名空间之间的隧道,以创建到另一个命名空间(例如,同一主机装置或不同主机装置中的另一个虚拟机)中的网络装置(例如,物理网络装置或虚拟网络装置)的桥。为了使虚拟网络接口“veth”工作,隧道的一端必须与另一个网络接口桥接。在其他示例中,网络接口“veth”可以用作独立的网络装置。
可以将经由“veth”接口接收的入口数据数据包引导到装置60或另一网络装置中的目的地虚拟机。这些数据包可以包括装置60中的网络驱动程序的虚拟网络标识符,用于识别适当的虚拟网络。虚拟网络标识符可以包括例如MPLS标签,每个标签与不同的覆盖网络相关联。
在一些示例中,经由“veth”接口引导到虚拟网络上的目的地的任何数据包绕过内核空间62B中的操作系统网络栈,并且沿着用户数据路径前进,或者重定向,以经由物理网络接口向外传输。在其他示例中,经由“veth”接口引导到虚拟网络上的目的地的任何数据包沿着内核数据路径前进到操作系统网络栈,用于封装到输出数据包中或者供应用程序和/或虚拟机消耗。
在一些示例中,装置60可以在基于veth的数据路径模式下操作,这允许更大的灵活性,因为在主机网络命名空间之外管理所有eBPF程序,使得容器可以被授予对其命名空间的特权,而不影响安全性,因为主机中的eBPF实施点对于容器是不可到达的。
适当的网络驱动程序将eBPF XDP程序86加载到内核空间62B中,然后将该程序绑定到至少一个网络接口。在一些示例中,网络接口“ens33”和“veth-01”可以作为一个集合绑定到存在于内核空间62B中的一个内核程序,而另一个内核程序绑定到一组不同的网络接口。用于整个集合的网络驱动程序将内核程序加载到内核空间62B中,然后将该程序绑定到至少一个网络接口“ens33”或“veth-01”。因此,eBPF XDP程序86可以绑定到veth_101和ens33。作为替代,eBPF XDP程序86可以绑定到veth_101,而不是ens33,反之亦然。作为一种选择,另一个内核程序可以绑定到没有绑定到eBPF XDP程序86的任何一个网络接口。在一些示例中,装置60中的额外网络接口可以绑定到eBPF XDP程序86。
下面描述分别从内核空间62B和用户空间62A协同操作的多个数据路径的示例。当流量的输入数据包到达网络接口“ens33”时,操作系统的网络驱动程序可以将输入数据包放置在内核数据路径上,然后执行eBPF XDP程序86,以将输入数据包引导到用户数据路径或者恢复内核数据路径。对于eBPF XDP(内核)程序86,操作系统可以采用多种机制中的任何一种来将存储在内核空间62B的存储区域中的数据包数据传送到用户空间62A。一种示例性机制通过共享对内核空间62B中的存储区域(即,共享内核存储区域)的访问来实现eBPFXDP(内核)程序86的数据包数据传输。eBPF XDP程序86可以通过生成逻辑元素(虚拟容器)来传输对数据包数据的访问,该逻辑元素具有对应于内核空间62B中的共享存储区域中的存储位置的存储器映射地址空间。控制程序88可以使用映射92从共享内核存储区域中检索数据包数据的特定属性。例如,操作系统内核可以生成存储器映射,控制程序88可以使用该存储器映射将虚拟容器的存储位置转化成内核空间62B中的对应存储位置。对于数据包数据传输,存在多种替代机制,例如,将数据包副本存储在用户空间62A的存储区域中,例如,AF_XDP套接口接口的数据包缓冲器。
在一个示例中,eBPF XDP(内核)程序86解析输入数据包,直到到达网络层4(L4),然后将数据包数据传送到控制程序88,其中,在用户空间62A中进一步解析数据包。对于网络第3层(L3)和/或网络第2层(L2),控制程序88可以访问路由和/或转发信息,以确定输入数据包的下一目的地。虽然在一些示例中不是必需的,但是根据其他示例,控制程序88可以为任何路由或转发决策调用助手功能90。
输入数据包可以是被路由到装置60的数据包流(即,流量)的第一数据包,对于该装置,用户数据路径处理第一数据包,但是可能不处理后续数据包。为了改进后续数据包的数据包处理,内核数据路径可以被配置为例如通过将输入的后续数据包修改为输出数据包,然后将输出数据包输出到第一数据包的下一目的地,来重复第一数据包的转发决策。以这种方式,eBPF XDP程序86可以将后续数据包转移到用于数据包传输的内核数据路径,并且远离不必要地重复数据包处理操作的用户数据路径。例如,控制程序88可以返回识别下一目的地的转发信息,并且eBPF XDP程序86可以依次将识别下一目的地的转发信息存储在共享内核存储区域中。eBPF XDP程序86可以重新使用转发信息来减少后续数据包在数据包接收和数据包发送之间的总时间量(例如,数据包处理的时间量)。例如,eBPF XDP程序86可以将下一个目的地编程到内核数据路径(例如,内核数据路径的逻辑)中,导致每个后续数据包的自动数据包传输。
在控制程序88解析了该流量的第一输入数据包之后,eBPF XDP程序86和/或控制程序88可以使用转发信息来生成指示该流量的后续数据包的下一个目的地的上下文。控制程序88可以将流量上下文编程到包括eBPF XDP程序86的存储器中。除了下一个目的地之外,控制程序88可以将各种其他数据编程到eBPF XDP程序86的软件代码中,其示例包括要传递给控制程序88用于转发后续数据包的额外上下文数据。要传递给控制程序88的额外(流量)上下文数据的示例可以包括一个或多个标签。控制程序88可以生成用于缩小用户空间62A中所需的数据包处理类型的标签,例如,组合L3和L4上下文,用于特定的转发处理和/或验证下一个L7状态是预期的和/或用于数据包的特定服务质量(QoS)处理。内核程序86可以将编程的标签连同内核空间62B之间共享的数据包一起传送到用户空间62A。
控制程序88可以调用AF_XDP套接口接口的功能,来返回转发信息,以存储在共享内核存储区域中。例如,eBPF XDP程序86可以配置第二AF_XDP套接口接口,以作为相同流量的输出数据包的出口,然后,指定共享内核存储区域,作为第一AF_XDP套接口接口和第二AF_XDP套接口接口的数据包缓冲器,例如,修改后续数据包,以封装数据包报头中的下一目的地,并且沿着连续的存储器块排列修改后的数据包。这样做,eBPF XDP程序86可以利用数据包缓冲器来加速数据包处理。除了流量上下文之外,控制程序88可以向eBPF XDP程序86返回策略信息,该策略信息包括改变关于流量的特定策略的指令。控制程序88可以将策略变化编程到eBPF XDP程序86的存储器中。
图5是示出根据本文描述的技术执行示例性网络装置的计算装置100的框图。计算装置100是物理计算机,其(部分地)作为一种示例性网络装置来运行,并且包括用于用户空间111或用户空间111和内核空间112中的数据包处理的至少一个内部数据路径的基于软件的实施方式。用户数据路径118(示例性内部数据路径)包括用户模块128,作为在用户空间111中运行的合适的控制程序,用于执行数据路径中的其他软件程序。图5的用户模块128是图4A-图4B的用户模块64的示例。图5的内核程序124具有多个示例,其中包括在Linux内核下的XDP子-子系统(例如,虚拟机)中运行的一个或多个eBPF程序。计算装置100可以表示图1-图2的任何服务器12或其他装置,例如,任何TOR交换机16。
在图5的示例性方法中,计算装置100包括耦接计算装置100硬件环境的硬件组件的系统总线142。系统总线142耦接存储器144、网络接口卡(NIC)106A-106B(统称为“NIC106”)、存储盘104和具有多个处理核心108A-108J(统称为“处理核心108”)的多核计算环境102。网络接口卡106包括被配置为使用底层物理网络的链路来交换数据包的网络接口。多核计算环境102可以包括任意数量的处理器和任意数量的硬件核,例如,从四个到几千个。每个处理核心108均包括独立的执行单元,以执行符合该核心的指令集架构的指令。每个处理核心108可以被实现为单独的集成电路(IC),或者可以组合在一个或多个多核处理器(或“众核”处理器)内,每个多核处理器都使用单个IC(即,芯片多处理器)来实现。
存储盘104表示计算机可读存储介质,该介质包括以任何方法或技术实现的易失性和/或非易失性、可移动和/或不可移动介质,用于存储诸如处理器可读指令、数据结构、程序模块或其他数据等信息。计算机可读存储介质包括但不限于随机存取存储器(RAM)、只读存储器(ROM)、EEPROM、闪存、CD-ROM、数字多功能光盘(DVD)或其他光存储装置、磁卡带、磁带、磁盘存储装置或其他磁存储装置或者可用于存储所需信息并可由核心108访问的任何其他介质。
存储器144包括一个或多个计算机可读存储介质,该介质可以包括随机存取存储器(RAM),例如,各种形式的动态RAM(DRAM),例如,DDR2/DDR3 SDRAM或静态RAM(SRAM)、闪存或任何其他形式的固定或可移动存储介质,该介质可以用于以指令或数据结构的形式携带或存储期望的程序代码和程序数据,并且可以由计算机访问。存储器144提供由可寻址存储位置组成的物理地址空间。
在一些示例中,存储器144可以向多核计算环境102呈现非统一存储器访问(NUMA)架构。也就是说,核心108对构成存储器144的各种存储介质可能不具有相等的存储器访问时间。在某些情况下,核心108可以被配置为使用存储器144中为内核提供最低存储延迟的部分,以减少总的存储延迟。
在一些情况下,计算机可读存储介质的物理地址空间可以在一个或多个核心108之间共享(即,共享存储器)。例如,核心108A、108B可以经由存储器总线(未示出)连接到呈现可由核心108A、108B访问的物理地址空间的一个或多个DRAM封装、模块和/或芯片(也未示出)。虽然该物理地址空间可以向存储器144的任何部分的核心108A、108B提供最低的存储器访问时间,但是存储器144的至少一些剩余部分可以由核心108A、108B直接访问。一个或多个核心108还可以包括L1/L2/L3高速缓存或其组合。核心108的相应高速缓存为核心108提供任何存储介质中最低延迟的存储器访问。
存储器144、网络接口卡(NIC)106A-106B(统称为“NIC 106”)、存储盘104和多核计算环境102为软件栈提供操作环境,该软件栈执行(例如,网络装置的)双数据路径实施方式和一个或多个虚拟机110A-110K(统称为“虚拟机110”),该虚拟机通过抽头接口146A-146K(统称为“抽头接口146”)连接到在双数据路径实施方式的用户数据路径118和内核数据路径120之间共享的路由实例122。
虚拟机110可以表示图2的任何虚拟机36的示例实例。计算装置100由存储盘104在虚拟存储器的情况下将由主存储器144提供的虚拟和/或物理地址空间划分为用户空间111和内核空间112,用户空间被分配用于运行用户进程,内核空间112受到保护并且通常不可由用户进程访问。存储器144、网络接口卡(NIC)106A-106B(统称为“NIC 106”)、存储盘104和多核计算环境102也可以为在内核空间112中执行的操作系统内核提供操作环境。操作系统内核可以包括例如可从微软公司获得的Linux、伯克利软件分发(BSD)、另一个Unix变体内核或Windows服务器操作系统内核。操作系统内核可以将用于增强的数据包处理操作的软件代码安排到用户数据路径118的堆栈中。本公开将“增强的”数据包处理定义为超越可从内核空间112获得的传统数据包处理操作的任何数据包数据操作。如图5所示,可以从控制库126中选择堆栈的至少一部分软件代码。对于内核数据路径120,操作系统内核可以将用于网络功能或服务的内核程序安排到图5中表示为内核空间112中的网络栈123的堆栈中。虽然网络栈123能够解析路由/转发决策,但是网络栈123中的内核程序都没有被配置为执行增强的数据包处理,例如,深度数据包检查。
操作系统内核可以将驱动程序116配置为用于连接容器(例如,物理装置或虚拟容器)以交换数据的网络装置驱动程序。在一个示例性方法中,驱动程序116被配置为在eth0114A、第一网络接口(例如,图4B的ens33)和主机OS网络栈123之间传输数据。
在另一示例性方法中,驱动程序116被配置为在eth0 114A、第一网络接口(例如,图4B的ens33)和用户模块128之间传输数据,用户模块可以运行单独的网络软件栈。这种方法的一个示例性技术优点在于,由于在一些示例性方法中,内核程序124在内核空间112中执行,并且由同一装置的用户模块128加载到用户空间111中,因此数据包可以作为指向用于存储正在传输的数据包的共享地址空间的简单指示器来发送。
例如,如进一步描述的,操作系统(OS)网络栈123可以表示在内核空间112中为内核数据路径120执行的软件网络栈,而用户模块128可以实现其自己的相应软件网络栈,其中,每个网络栈实现网络层(例如,OSI模型的第1-3层)的相应功能。在一些示例中,驱动程序116的挂钩点可以被配置为唯一地利用内核程序124来向作为用户模块128在用户空间111内操作的软件栈传送数据包(例如,与其共享数据包)。在一些示例中,代码点将用户模块128绑定到网络接口卡的驱动程序116的出口,例如,网络接口卡106A的eth0 114A,以(直接)传输来自用户数据路径118的输出数据包。否则,操作系统网络栈123处理计算装置100的内核空间112内的数据包传输。
在一个示例性方法中,从物理网络接收的入口数据的数据包首先通过驱动程序116。如果检测到某些报头类型(例如,MPLS报头),则数据包被钩住(例如,被用户模块128钩住),并在用户数据路径118中沿网络栈向上路由。否则,数据包沿着内核数据路径120的(例如,主机)OS网络栈123向上发送,或者被传送到目的地VM 110。在另一示例性方法中,驱动程序116可以通过OS网络栈123向上传递从物理网络地址接收到的并且引导至虚拟网络地址的任何数据包。
用户数据路径118和作为选项的内核数据路径120包括对应虚拟网络的多个路由实例122。每个路由实例122包括转发信息库(FIB)和流表。各个流表的条目可由虚拟网络标识符(例如,诸如VxLAN标签或MPLS标签等VRF标识符)来识别。FIB可以包括将目的地址映射到目的地下一跳的查找表。目的地址可以包括第3层网络前缀或第2层MAC地址。流表可以允许将转发策略应用于流量。每个流表包括流表条目,每个流表条目与可能穿过用户数据路径118的一个或多个流量匹配,并且包括应用于匹配流量的转发策略。例如,在一个示例性方法中,用户数据路径118试图将路由实例122处理的数据包与相应流表的一个流表条目匹配。在这个示例中,如果对于流表中的给定数据包存在匹配的流表条目,则用户数据路径118将策略中指定的流动作应用于该数据包。这可以被称为“快速路径”数据包处理。如果在相应的流表中对于该数据包不存在匹配的流表条目,则该数据包可以表示新数据包流量的初始数据包,并且用户数据路径118可以请求控制库126经由链路140在新数据包流量的流表中安装流表条目。这可以被称为数据包流量的初始数据包的“慢路径”数据包处理。
与其他实施方式相比,用户数据路径118可以被认为是虚拟路由器,其中,用户模块128执行“转发平面”或数据包转发功能,而控制库126执行“控制平面”功能。作为选择,内核空间112中的内核程序124可以为某些流量的数据包执行“转发平面”或数据包转发功能。控制库126还可以为内核程序124提供“控制平面”功能。以这种方式,内核数据路径120包括用于路由实例122的一部分的独立路由器。控制库126可以作为每个数据路径(例如,路由器)的代理操作,并且表示图2的任何VN代理35的示例性实例。
在一个示例性方法中,控制库126是由计算装置100执行的用户空间111进程。控制库126包括配置数据134、虚拟路由和转发实例配置136(“VRF 36”)和策略表138(“策略138”)。控制库126与一个或多个虚拟网络控制器(例如,图1-2的VNC 22)交换控制信息。控制信息可以包括虚拟网络路由、低级配置状态,例如,用于安装到配置数据134、VRF 136和策略138的路由实例和转发策略。控制库126还可以生成关于各种分析(例如,装置状态)的报告,将转发状态安装到用户数据路径118的FIB,发现VM 110及其属性。如上所述,控制库126还对穿过转发平面128的每个新流量的第一(初始)数据包应用慢路径数据包处理,并且将相应的流条目安装到新流量的流表中,以便用户数据路径118对该流量的后续数据包进行快速路径处理。
计算装置100在某些情况下可以执行管理程序,来管理虚拟机110(图3中未示出)。图2中示出了示例性管理程序31。示例性管理程序包括用于Linux内核的基于内核的虚拟机(KVM)、Xen、可从VMware获得的ESXi、可从微软获得的Windows Hyper-V以及其他开源和专有管理程序。在一些示例中,用路由信息编程的专用硬件(例如,FIB 124)可以执行用户数据路径118和/或内核数据路径120。
Eth0 114A和Eth1 114B表示根据软件装置模型的装置,并提供装置驱动程序软件例程,用于处理由相应NIC 106接收/传输的数据包。NIC 106从虚拟网络的底层物理网络结构接收的数据包可以包括外部报头,以允许物理网络结构将有效载荷或“内部数据包”隧道传输到一个NIC 106的物理网络地址。外部报头不仅可以包括物理网络地址,还可以包括虚拟网络标识符,例如,识别一个虚拟网络以及对应的路由实例122的VxLAN标签或多协议标签交换(MPLS)标签。内部数据包包括具有目的网络地址的内部报头,该目的网络地址符合由虚拟网络标识符识别的虚拟网络的虚拟网络寻址空间。
例如,用户模块128可以通过Eth1 114B从NIC 106接收具有外部报头的数据包,该外部报头包括用户数据路径118与路由实例122相关联的VxLAN。该数据包可以具有内部报头,该内部报头具有目的网络地址,该目的网络地址是经由抽头接口146A接入路由实例122的VM 110A的目的地址。或者,内核数据路径120可以将VxLAN与路由实例122相关联。
图6是示出了根据本文描述的技术的用于在用户数据路径中接收入口数据和处理出口数据的计算装置的示例性操作模式250的流程图。
本公开将用户数据路径描述为基于软件和/或硬件。举例来说,用户数据路径的基于硬件的实施方式可以包括具有转发硬件(例如,转发或数据平面)和控制硬件(例如,控制平面)的硬件单元。在上述硬件单元中,“硬件”是指用用于一个或多个功能的逻辑编程的各个ASIC,但是可由处理电路(例如,逻辑电路)执行的任何形式的逻辑都可以用于转发硬件和/或控制硬件。
示例性操作模式250可以参考图5的计算装置100来描述,特别是用户数据路径118,即网络装置的用户数据路径的示例基于软件的实施方式。应当注意,任何类型的网络装置都可以根据图6所示的示例进行操作。示例性操作模式250针对图5的计算装置100的操作系统及其多个组件,用于在用户数据路径118中实现用户空间数据包处理(例如,路由和转发),这与图5的驱动程序116或另一网络驱动程序是一个示例的内核数据路径相反。
驱动程序116为第一网络接口配置挂钩点,并为第二网络接口配置代码点(252)。第一网络接口和第二网络接口可以分别称为入口网络接口和出口网络接口。驱动程序116配置内核程序124,用于在挂钩点处执行,如本文所述。挂钩点(例如,图4A的挂钩点66)可以是预路由挂钩,其可执行代码耦接到驱动程序116的软件代码内的位置。挂钩点可以将内核程序124耦接到第一网络接口,使得输入数据包启动内核数据路径120,进行数据包处理。被编程到内核空间中以表示内核数据路径120的数据可以被组织成指示多个计算机程序的执行顺序的逻辑结构。假设至少部分逻辑结构对应于网络模型(例如,7层网络模型),内核数据路径的执行顺序遵循模型中网络层的顺序。例如,配置有足够的硬件/软件来执行链路层和数据层的功能的(例如,虚拟/物理)网络接口卡(NIC)可以生成第一网络接口,作为入口网络接口。第一网络接口可以表示NIC到内核数据路径120的物理或虚拟端口。
在一些示例中,驱动程序116可以配置内核程序124,以便例如在第一网络接口接收到数据包之后执行。驱动程序116可以将内核程序加载到用户空间111中,并启动用户数据路径118的软件程序的顺序。内核程序124可以包括eBPF程序,该程序加载到容器(例如,虚拟机)中并被执行,以实现与用户空间111的交互。内核程序124可以使用驱动程序116来配置用户空间和内核空间中的数据包缓冲器之间的一对入口和出口接口,例如,指向为用户数据路径118分配的(例如,共享的)内核空间存储区域的一对AF_XDP套接口接口,其中,第一套接口接口耦接到驱动程序116中的代码点,用于从第一网络接口接收数据包,第二套接口接口耦接到驱动程序116中的代码点,用于向第二网络接口传输数据包。
上述套接口接口中的一个或两个使得用户模块128能够从内核空间存储区域读取数据/向内核空间存储区域写入数据,可能与内核程序124、驱动程序116或另一个内核程序通信。在接收到数据包时,驱动程序116经由第一套接口接口将来自第一网络接口中的存储缓冲器的输入数据数据包传送到内核程序124和用户模块128之间的共享内核空间存储区域。在数据包传输时,驱动程序116经由第二套接口接口将出口数据的输出数据包从共享内核空间存储区域传送到第二网络接口中的存储缓冲器。
在一些示例中,当数据包经由第一网络接口到达时,至少一个数据包在挂钩点处被钩到内核程序124,以供处理。驱动程序116可以将经由第一网络接口接收的数据包数据传送到内核空间存储区域中,使得数据包数据到达上述挂钩点,并且执行内核程序124,并且可能执行用于数据包处理的用户模块128。驱动程序116可以在挂钩点处执行内核程序124,以将数据包数据传送到用户空间存储区域,以供用户模块124处理。实际上,内核程序124经由挂钩点将第一网络接口与第一套接口接口耦接到用户数据路径118的用户模块128。在一个示例性方法中,提供用户数据路径时定义的策略可以控制是否在用户空间111中处理从网络装置接收的给定数据包。例如,驱动程序116可能已经被配置为当目的地址与某些预定义的IP地址匹配时绕过OS网络栈。
驱动程序116经由第一网络接口接收多个(输入)数据包中的入口数据(254)。入口数据的输入数据包可以对应于同一流量。驱动程序116可以在用户数据路径118或内核数据路径120之间进行选择,以处理入口数据的数据包(256)。驱动程序116可以为入口数据的数据包选择用户数据路径118,并继续绕过内核数据路径120,以支持用户模块128(256的是)。绕过内核数据路径120可以包括绕过操作系统(OS)网络栈123。驱动程序116在与挂钩点相关联的虚拟机中执行内核程序124,这导致执行用户数据路径118的用户模块128。经由第一套接口接口,用户模块128响应于触发挂钩点的入口数据,从内核程序124接收入口数据。
如本文所述,沿着用户数据路径118前进,使得用户模块128在用户空间111中执行增强的数据包处理操作。数据包处理至少包括路径确定操作,例如,(例如,同一流量的)数据包的路由和转发决策。驱动程序116可以咨询管理沿着用户数据路径118处理哪些数据包以及沿着内核数据路径120处理哪些数据包的策略。用户模块128将下一跳确定为入口数据的目的地,然后将入口数据的数据包修改为相同流量的出口数据的数据包(258)。出口数据包括这些数据包的新报头信息。用户模块128将第二套接口接口与代码点(例如,出口网络驱动程序的代码点)绑定,以使得能够将出口数据传输到第二网络接口。第二网络接口用于将出口数据传输到对应于下一跳的目的地网络装置。
在经由第二网络接口传输数据包之前,用户模块128可以调用用于执行一个或多个增强的数据包处理操作的功能(例如,软件程序的功能)(260)。如本文为执行用户数据路径118所描述的,用户模块128可以利用为增强的数据包处理而配置的各种应用程序,如下描述其中的一些示例。被配置用于增强数据包处理的一个示例性应用程序可以实现在线深度数据包检查(DPI)相关的功能。在提供L7防火墙(IDS/IPS)支持的应用程序中使用在线DPI可能会有好处。用于增强数据包处理的另一示例性应用程序可以是被配置为对同一流量的一个或多个数据包执行签名和协议异常检查的安全应用程序。第三示例性应用程序可以被配置为处理应用级网关支持,例如,FTP或SIP;例如,当需要更复杂的检查时,其他协议可能会受益。将数据包处理操作卸载到用户空间,提供了额外的好处和优势,例如,显著降低内核健康的风险,并避免由于移入内核空间内的代码库、用于增强数据包处理的用户应用软件代码而导致的资源和时间的显著成本。对于最常见的转发情况,这种方法还避免了内核转发性能的下降。
驱动程序116可以在用户数据路径118上选择内核数据路径120,并且根据该选择,通过将入口数据的数据包传送到网络栈或目的地虚拟机(256的否)来沿着该数据路径前进。如果驱动程序116选择内核数据路径120,则驱动程序116可以确定是否应用定制网络栈(262)。在一些示例中,内核程序124实现用于数据包处理的定制网络栈,而不是由操作系统为计算装置100提供的标准网络栈。当数据包沿着内核数据路径120前进时,内核程序124可以通过递增地解析每一层来应用该层的相应软件代码,从而沿着定制网络栈向上/向下运行数据包。定制网络栈可以使用来自内核空间112的内核助手功能。内核程序124可以构建定制网络栈,以包括与标准操作系统网络栈的相应程序相似(例如,或完全不同)的软件程序。作为替代,内核数据路径120可以包括标准网络栈,使得内核程序124调用相应网络层的传统路由/转发功能,而不是使用定制网络栈。
基于应用定制网络栈的确定(262的是),内核程序124可以调用定制网络栈的适当层来封装出口数据的数据包(264),随后调用定制网络栈的下一层,来将出口数据的数据包传输到与下一目的地匹配的网络装置(266)。封装可以通过软件程序来实现,用于修改入口数据的数据包,以指示下一个目的地。如本文所述,内核程序124可以将入口数据的数据包解析到与任何网络栈的网络层相对应的层中。因此,定制网络栈的适当层与解析的数据包的顶层匹配,并且对应于前述用于执行封装的软件程序。
内核程序128可以提示定制网络栈的下一层的相应软件程序经由第二网络接口或者可替换地经由第三网络接口将出口数据的数据包转发到物理网络或虚拟网络(266)。作为某些虚拟网络的选项,目的地虚拟机可以具有单独的虚拟网络接口。例如,驱动程序116可以决定应用OS网络栈123来生成用于传输到虚拟网络的隧道数据包。
计算装置可以根据本公开中描述的技术来处理隧道数据包。“外部”或“隧道”数据包包括外部报头和内部或“封装”数据包。外部报头可以包括协议或服务类型(TOS)字段以及源IP地址字段和目的IP地址字段形式的公共(即,对于与内部数据包相关联的虚拟网络,可由基础物理网络切换)IP地址信息。该示例中的协议字段指示隧道数据包使用GRE隧道封装,但是在其他情况下可以使用其他形式的隧道封装,例如包括IPinIP、NVGRE、VxLAN和MPLS上MPLS。
在一个示例性方法中,驱动程序116从虚拟网络接收封装的数据包。封装的数据包包括源地址和目的地址。目的地址与在计算装置100上执行的虚拟机相关联。驱动程序116检查该数据包,确定该数据包是ESP数据包,并将该数据包转发给主机OS网络栈123。在一个示例性方法中,驱动程序116仅沿用户模块128的网络栈向上转发特定类型的数据包。包括封装的数据包在内的所有其他数据包被传送到主机OS网络栈123,进行处理。驱动程序116从内核空间112中的共享存储区域检索数据包,并将数据包转发给与数据包目的地址相关联的虚拟机。
驱动程序116可确定将入口数据引导到作为端点的计算装置100中的目的地虚拟机,并且至少出于该原因,将不应用定制网络栈(262的否)。代替定制网络栈,驱动程序116可以使用网络栈123、内核程序124和/或另一个内核程序124单独地将入口数据处理成出口数据。驱动程序116然后可以继续将出口数据转发给目标虚拟机(268)。作为替代,驱动程序116可以包括用于入口数据的流量的下一目的地的编程(例如,上下文)。驱动程序116可以有利地使用该编程,例如,当相同流量的后续数据包到达第一网络接口时;驱动程序116可以将后续数据包重定向到第二网络接口。
本文描述的技术(包括前面任何一个部分)可以用硬件、软件、固件或其任意组合来实现。被描述为模块、单元或组件的各种特征可以在集成逻辑装置中一起实现,或者作为分立但可互操作的逻辑装置或其他硬件装置单独实现。在一些情况下,电子电路的各种特征可以被实现为一个或多个集成电路装置,例如,集成电路芯片或芯片组。
如果以硬件实现,则本公开可以涉及一种设备,例如,处理器或集成电路装置,例如,集成电路芯片或芯片组。替代地或另外,如果以软件或固件实现,则该技术可以至少部分地由包括指令的计算机可读数据存储介质来实现,这些指令在被执行时使处理器执行一种或多种上述方法。例如,计算机可读数据存储介质可以存储由处理器执行的这种指令。
计算机可读介质可以形成计算机程序产品的一部分,该计算机程序产品可以包括包装材料。计算机可读介质可以包括计算机数据存储介质,例如,随机存取存储器(RAM)、只读存储器(ROM)、非易失性随机存取存储器(NVRAM)、电可擦除可编程只读存储器(EEPROM)、闪存、磁或光数据存储介质等。在一些示例中,制品可以包括一个或多个计算机可读存储介质。
在一些示例中,计算机可读存储介质可以包括非暂时性介质。术语“非暂时性”可以表示存储介质不包含在载波或传播信号中。在某些示例中,非暂时性存储介质可以存储可以随时间改变的数据(例如,在RAM或高速缓存中)。
代码或指令可以是由处理电路执行的软件和/或固件,该处理电路包括一个或多个处理器,例如,一个或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其他等效的集成或分立逻辑电路。因此,本文使用的术语“处理器”可以指任何前述结构或者适合于实现本文描述的技术的任何其他结构。此外,在一些方面,可以在软件模块或硬件模块中提供本公开中描述的功能。
已经描述了各种实施例。这些和其他实施例在以下示例的范围内。

Claims (21)

1.一种用于包括与至少两个网络装置通信耦接的至少两个网络接口的计算装置的方法,包括:
在所述计算装置的内核空间中,配置用于从第一网络接口来的入口的挂钩点,其中,所述挂钩点将内核程序与能够由用户模块访问的第一套接口耦接,所述用户模块被配置为在所述计算装置的用户空间中运行,其中,所述第一网络接口将第一网络装置与所述计算装置通信地耦接;
在所述计算装置的内核空间中,配置用于到第二网络接口的出口的代码点,其中,所述代码点将所述内核程序与能够由所述用户模块访问的第二套接口耦接,其中,所述第二网络接口将第二网络装置与所述计算装置通信地耦接;
响应于从所述第一网络装置接收流量的入口数据,基于所述挂钩点执行所述内核程序,以经由所述第一套接口将所述入口数据传送到所述用户模块;以及
响应于所述用户模块将所述第二网络装置确定为所述流量的下一目的地,经由所述第二套接口将所述流量的出口数据传送到所述第二网络接口的所述代码点,其中,所述第二网络接口能操作以向所述第二网络装置输出所述出口数据。
2.根据权利要求1所述的方法,其中,配置所述挂钩点还包括配置扩展的伯克利数据包过滤器eBPF程序,以作为所述挂钩点处的所述内核程序运行。
3.根据权利要求1所述的方法,其中,配置所述挂钩点还包括配置扩展的伯克利数据包过滤器eBPF程序,以作为快速数据路径XDP的挂钩点处的内核程序运行。
4.根据权利要求1所述的方法,其中,配置所述挂钩点还包括配置扩展的伯克利数据包过滤器eBPF程序,以作为网络接口卡NIC的快速数据路径XDP处的内核程序运行。
5.根据权利要求1所述的方法,其中,配置所述挂钩点还包括为扩展的伯克利数据包过滤器eBPF程序配置第一地址族快速数据路径AF_XDP套接口,作为第一套接口,以及配置第二AF_XDP套接口,作为第二套接口。
6.根据权利要求1所述的方法,其中,配置所述挂钩点还包括配置控制程序,以作为所述用户模块在用户空间中运行,并加载扩展的伯克利数据包过滤器eBPF程序,以生成第一地址族快速数据路径AF_XDP套接口,作为所述第一套接口,以及生成第二AF_XDP套接口,作为所述第二套接口。
7.根据权利要求1所述的方法,其中,配置所述挂钩点还包括配置控制程序,以在用户空间中运行,用于在内核空间中运行的扩展的伯克利数据包过滤器eBPF程序,其中,所述控制程序被配置为使用所述eBPF程序经由第一AF_XDP套接口接收来自所述第一网络装置的输入数据包数据,并经由第二AF_XDP套接口将输出数据包数据传输到所述第二网络装置的所述第二网络接口。
8.根据权利要求1所述的方法,其中,配置所述挂钩点还包括:
为在内核空间中运行的扩展的伯克利数据包过滤器eBPF程序配置第一地址族快速数据路径AF_XDP套接口,作为第一套接口,以及配置第二AF_XDP套接口,作为第二套接口,其中,所述第一AD_XDP套接口耦接到作为所述第一网络装置的物理网络装置,所述第二AD_XDP套接口耦接到作为所述第二网络装置的虚拟网络装置。
9.根据权利要求1-8中任一项所述的方法,其中,配置挂钩点还包括:
将所述内核程序配置为与所述用户模块共享用于存储所述入口数据的数据包的内核空间存储区域,其中,所述用户模块被配置为通过修改所述入口数据,来对所述入口数据的数据包执行数据包处理,以在共享的存储区域中为所述第二网络装置生成所述出口数据。
10.根据权利要求1-8中任一项所述的方法,还包括:
响应于将所述第二网络装置确定为所述流量的第一数据包的下一目的地,将所述流量的后续数据包从在快速数据路径XDP的挂钩点处的内核空间中运行的扩展的伯克利数据包过滤器eBPF程序传送到所述内核空间中的网络栈。
11.一种装置,包括:
第一网络接口,所述第一网络接口通信地耦接到第一网络装置;
第二网络接口,所述第二网络接口通信地耦接到第二网络装置;
存储器;以及
处理器,所述处理器连接到所述存储器和网络接口,其中,所述存储器包括指令,当由所述处理器执行时,所述指令使得所述处理器:
响应于经由所述第一网络接口从所述第一网络装置接收流量的入口数据,基于装置的内核空间中的挂钩点执行内核程序,以经由用户模块的第一套接口传送用于数据包处理的所述入口数据;
在所述内核空间中配置代码点,用于经由所述第二网络接口的数据传输,其中,所述用户模块被配置为将第二套接口与所述代码点耦接;以及
响应于将所述第二网络装置确定为所述流量的下一目的地,经由所述第二套接口将所述流量的出口数据传送到所述第二网络接口的所述代码点,其中,所述第二网络接口能操作以向所述第二网络装置输出所述出口数据。
12.根据权利要求11所述的装置,其中,为了执行所述内核程序,所述指令还使得所述处理器:
执行扩展的伯克利数据包过滤器eBPF程序,以作为所述挂钩点处的所述内核程序运行。
13.根据权利要求11所述的装置,其中,为了执行所述内核程序,所述指令还使得所述处理器:
配置扩展的伯克利数据包过滤器eBPF程序,以作为快速数据路径XDP的挂钩点处的内核程序运行。
14.根据权利要求11所述的装置,其中,为了执行所述内核程序,所述指令还使得所述处理器:
执行扩展的伯克利数据包过滤器eBPF程序,以作为所述第一网络接口的网络接口卡NIC的快速数据路径XDP处的内核程序运行。
15.根据权利要求11所述的装置,其中,为了执行所述内核程序,所述指令还使得所述处理器:
为在内核空间中运行的扩展的伯克利数据包过滤器eBPF程序配置第一地址族快速数据路径AF_XDP套接口,作为第一套接口,以及配置第二AF_XDP套接口,作为第二套接口。
16.根据权利要求11所述的装置,其中,为了执行所述内核程序,所述指令还使得所述处理器:
为在用户空间中运行的扩展的伯克利数据包过滤器eBPF程序配置第一地址族快速数据路径AF_XDP套接口,作为所述第一套接口,以及配置第二AF_XDP套接口,作为第二套接口,其中,所述第一AD_XDP套接口耦接到作为所述第一网络装置的物理网络装置,所述第二AD_XDP套接口耦接到作为所述第二网络装置的虚拟网络装置。
17.根据权利要求11所述的装置,其中,所述存储器还包括指令,当由所述处理器执行时,所述指令使得所述处理器:
响应于将所述第二网络装置确定为所述流量的第一数据包的下一目的地,将所述流量的后续数据包从在快速数据路径XDP的挂钩点处的内核空间中运行的扩展的伯克利数据包过滤器eBPF程序传送到所述内核空间中的网络栈。
18.根据权利要求11-17中任一项所述的装置,其中,所述存储器还包括指令,当由所述处理器执行时,所述指令使得所述处理器:
在所述内核空间中为所述第一网络接口配置所述挂钩点,其中,所述挂钩点被配置为将内核程序与在装置中运行的所述用户模块的所述第一套接口耦接。
19.一种网络系统,包括:
交换结构,包括多个交换机,所述多个交换机互连,以形成物理网络;
虚拟网络控制器装置,所述虚拟网络控制器装置被配置为配置和管理所述物理网络内的一个或多个虚拟网络;以及
多个服务器,所述多个服务器由所述交换结构互连,其中,所述服务器中的每个包括执行一个或多个虚拟机的操作环境,所述虚拟机经由虚拟路由实例与所述一个或多个虚拟网络通信,其中,每个服务器包括在服务器上的内核空间中执行的主机操作系统OS,其中,在连接到一个或多个虚拟网络的虚拟网络栈中的每个服务器上,内核程序在内核空间中执行,并且用户模块在用户空间中执行,其中,每对内核程序和用户模块被配置为将所述一个或多个虚拟网络扩展到所述虚拟机的操作环境,
其中,第一服务器被配置为:
在计算装置的内核空间中,配置用于第一网络接口的挂钩点,其中,所述内核程序被配置为将所述挂钩点与所述计算装置的用户模块的第一套接口耦接,其中,所述第一网络接口将第一网络装置与所述计算装置通信地耦接;
在所述计算装置的内核空间中,配置用于第二网络接口的代码点,其中,所述用户模块被配置为将所述代码点与所述用户模块的第二套接口耦接,其中,所述第二网络接口将第二网络装置与所述计算装置通信地耦接;
响应于从所述第一网络装置接收流量的入口数据,基于所述挂钩点执行所述内核程序,以经由所述第一套接口将所述入口数据传送到所述用户模块;以及
响应于将所述第二网络装置确定为所述入口数据的下一跳,基于所述代码点,经由所述第二套接口将所述流量的出口数据传送到所述第二网络接口,其中,所述第二网络接口能操作以向所述第二网络装置输出所述出口数据。
20.根据权利要求19所述的网络系统,还包括网络装置,所述网络装置包括:
硬件单元,用于转发数据包数据,包括:
第一网络接口卡,所述第一网络接口卡被配置用于数据包接收;
第二网络接口卡,所述第二网络接口卡被配置用于数据包传输;
至少一个数据包处理器,所述数据包处理器能操作地耦接到存储器,能由处理电路执行,并且被配置为在用户空间中运行;
内部数据路径,包括在内核空间中运行的逻辑,用于将输入数据包从所述第一网络接口卡传送到所述至少一个数据包处理器,其中,所述至少一个数据包处理器用于确定所述输入数据包的下一目的地,并且还包括在用户空间中运行的逻辑,用于将输出数据包从所述至少一个数据包处理器传送到所述第二网络接口卡,其中,所述内部数据路径的至少一部分被存储到所述存储器中并且能由处理电路执行。
21.一种计算机可读介质,所述计算机可读介质编码有指令用于使得一个或多个可编程处理器执行根据权利要求1-10中任一项所述的方法。
CN202211019732.6A 2021-08-26 2022-08-24 用于数据包处理操作的双用户空间-内核空间数据路径 Pending CN115733782A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/446,145 2021-08-26
US17/446,145 US12003429B2 (en) 2021-08-26 Dual user space-kernel space datapaths for packet processing operations

Publications (1)

Publication Number Publication Date
CN115733782A true CN115733782A (zh) 2023-03-03

Family

ID=83319078

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211019732.6A Pending CN115733782A (zh) 2021-08-26 2022-08-24 用于数据包处理操作的双用户空间-内核空间数据路径

Country Status (2)

Country Link
EP (1) EP4141666A1 (zh)
CN (1) CN115733782A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116599892A (zh) * 2023-07-17 2023-08-15 浪潮电子信息产业股份有限公司 一种服务器系统、路由方法、装置及电子设备和存储介质
CN116996602A (zh) * 2023-09-25 2023-11-03 苏州元脑智能科技有限公司 数据包的处理方法及装置、存储介质、电子设备

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230247002A1 (en) * 2022-01-31 2023-08-03 Bank Of America Corporation Enhanced kernel security in cloud environment

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10530711B2 (en) * 2017-11-09 2020-01-07 Nicira, Inc. Extensible virtual switch datapath

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116599892A (zh) * 2023-07-17 2023-08-15 浪潮电子信息产业股份有限公司 一种服务器系统、路由方法、装置及电子设备和存储介质
CN116599892B (zh) * 2023-07-17 2023-10-03 浪潮电子信息产业股份有限公司 一种服务器系统、路由方法、装置及电子设备和存储介质
CN116996602A (zh) * 2023-09-25 2023-11-03 苏州元脑智能科技有限公司 数据包的处理方法及装置、存储介质、电子设备
CN116996602B (zh) * 2023-09-25 2024-01-26 苏州元脑智能科技有限公司 数据包的处理方法及装置、存储介质、电子设备

Also Published As

Publication number Publication date
EP4141666A1 (en) 2023-03-01
US20230066013A1 (en) 2023-03-02

Similar Documents

Publication Publication Date Title
US11329918B2 (en) Facilitating flow symmetry for service chains in a computer network
CN110838975B (zh) 虚拟网络中租户工作负载的安全转发
CN110875848B (zh) 控制器和用于配置虚拟执行元件的虚拟网络接口的方法
US11792126B2 (en) Configuring service load balancers with specified backend virtual networks
US9942148B1 (en) Tunneled packet aggregation for virtual networks
US10728145B2 (en) Multiple virtual network interface support for virtual execution elements
US20220334864A1 (en) Plurality of smart network interface cards on a single compute node
CN110838992B (zh) 在不同网络堆栈中的内核模块间传送分组的系统和方法
US11991077B2 (en) Data interfaces with isolation for containers deployed to compute nodes
EP4141666A1 (en) Dual user space-kernel space datapaths for packet processing operations
US11165703B2 (en) Prefix-based fat flows
US11336570B1 (en) Layer three multi-homing for virtual networks
EP4163787A1 (en) Automatic policy configuration for packet flows
US12003429B2 (en) Dual user space-kernel space datapaths for packet processing operations
US11929987B1 (en) Preserving packet flow information across bump-in-the-wire firewalls
EP4075757A1 (en) A plurality of smart network interface cards on a single compute node
CN117255019A (zh) 用于虚拟化计算基础设施的系统、方法及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication