CN115714679A - 网络数据包处理方法、装置、电子设备及存储介质 - Google Patents
网络数据包处理方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115714679A CN115714679A CN202211410705.1A CN202211410705A CN115714679A CN 115714679 A CN115714679 A CN 115714679A CN 202211410705 A CN202211410705 A CN 202211410705A CN 115714679 A CN115714679 A CN 115714679A
- Authority
- CN
- China
- Prior art keywords
- data packet
- network
- type
- protocol stack
- kernel
- 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
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请提供一种网络数据包处理方法、网络数据包处理装置、电子设备以及计算机可读存储介质。方法包括:通过网卡接收网络数据包;通过数据包过滤器,将网络数据包分为第一类数据包和第二类数据包;将第一类数据包传递至用户空间,由用户态协议栈处理;将第二类数据包传递至内核空间,由内核态协议栈处理。根据本申请,能够提高网络数据包的处理速度,同时保证安全性。
Description
技术领域
本发明涉及计算机网络通信技术领域,具体涉及一种网络数据包处理方法、网络数据包处理装置、电子设备以及计算机可读存储介质。
背景技术
网络通信中,传统的网络数据包处理程序是所有数据包都进入内核空间,由内核态协议栈层层处理后再传递至用户空间,这样的处理方式对内核造成了很大的压力,降低了数据包的处理速度,影响了通信效率。一些现有技术、例如DPDK(Data PlaneDevelopment Kit,数据平面开发套件)技术能够实现允许数据包绕过内核,直接全部传递到用户空间。但是,这样的技术无法允许内核态协议栈和用户态协议栈同时工作,使得内核态协议栈提供的安全机制无法得到发挥,影响了数据包的处理效率和安全性。
发明内容
因此,本申请致力于提供一种网络数据包处理方法、网络数据包处理装置、电子设备以及计算机可读存储介质,其能够提高网络数据包的处理速度,同时保证安全性。
在一方面,本申请提供一种网络数据包处理方法,包括:通过网卡接收网络数据包;通过数据包过滤器,将网络数据包分为第一类数据包和第二类数据包;将第一类数据包传递至用户空间,由用户态协议栈处理;将第二类数据包传递至内核空间,由内核态协议栈处理。
根据本申请一特别实施例,数据包过滤器包括XDP过滤器。根据本实施例,XDP技术具有在过滤数据包的同时允许内核态协议栈和用户态协议栈共同工作的优点,从而避免传统的过滤技术在过滤时仅能允许用户态协议栈工作,内核态协议栈不能工作的缺点。
根据本申请一特别实施例,通过网卡接收网络数据包,包括:通过网卡接收网络数据包;通过XDP Hook点,将网络数据包传递XDP过滤器。根据本实施例,通过设置XDP Hook点,能够允许XDP程序尽早捕获数据包,从而实现快速过滤,加快数据包的处理速度。
根据本申请一特别实施例,将第一类数据包传递至用户空间,由用户态协议栈处理,包括:通过eBPF Map建立内核空间和用户空间之间的通道;将第一类数据包通过eBPFMap传递至用户态协议栈。根据本实施例,通过采用eBPF Map来将第一类数据包传递至用户态协议栈,能够减少第一类数据包的拷贝次数,避免多次拷贝数据包带来的计算开销。
根据本申请一特别实施例,将第一类数据包通过eBPF Map传递至用户态协议栈,包括:通过共享内存的方式,将第一类数据包从eBPF Map的接收进程传递到用户态协议栈的进程中。根据本实施例,通过采用共享内存的方式,使数据包的接收进程和用户态协议栈的进程所需要的数据能够共享,能够加快用户态协议栈的运行速度,减少数据包的拷贝。
根据本申请一特别实施例,将第一类数据包传递至用户空间,由用户态协议栈处理,包括:通过AF_XDP套接字控制第一类数据包的收发。根据本实施例,通过AF_XDP套接字控制数据包的收发,能够允许第一类数据包的高效收发,实现第一类数据包的重定向,从而加快数据包的处理进程。
根据本申请一特别实施例,网卡包括多个网卡,AF_XDP套接字包括多个AF_XDP套接字,多个AF_XDP套接字与多个网卡一一匹配。根据本实施例,多个网卡的设置有利于增大数据的流量,使得能够处理更大数量、更多类型的数据包。多个网卡与多个套接字一一匹配,使得每个套接字都能根据网卡的不同采取相应的控制方式,实现了分类控制,加快了数据包的流速。
在另一方面,本申请提供一种网络数据包处理装置,包括:接收模块,用于通过网卡接收网络数据包;过滤模块,用于通过数据包过滤器,将网络数据包分为第一类数据包和第二类数据包;第一传递模块,用于将第一类数据包传递至用户空间,由用户态协议栈处理;第二传递模块,用于将第二类数据包传递至内核空间,由内核态协议栈处理。
在另一方面,本申请提供一种电子设备,包括:处理器;存储器;应用程序,应用程序存储在存储器中,并配置成由处理器执行,应用程序包括用于执行上述的网络数据包处理方法的指令。
在另一方面,本申请提供一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序用于执行上述的网络数据包处理方法。
根据本申请的网络数据包处理方法、网络数据包处理装置、电子设备以及计算机可读存储介质,通过对网络数据包进行过滤和分类,将适合用户态协议栈处理的数据包直接重定向到用户空间,将适合内核态协议栈处理的数据包按原路传递至内核态协议栈,能够加快数据包的处理进程以及用户态协议栈的运行速度,同时避免其它技术方案中用户态协议栈和内核态协议栈不能同时工作的缺点。
附图说明
以下,结合附图详细描述本申请的具体实施方式,其中:
图1示出根据本申请一实施例的网络数据包处理方法的示意流程图;
图2示出根据本申请另一实施例的网络数据包处理方法的示意流程图;
图3示出根据本申请另一实施例的网络数据包处理方法的示意流程图;
图4示出根据本申请一实施例的网络数据包处理装置的示意结构图;
图5示出根据本申请另一实施例的网络数据包处理装置的示意结构图;
图6示出根本本申请一实施例的电子设备的示意结构图。
具体实施方式
为了使本领域技术人员更加清楚地理解本申请的概念和思想,以下结合具体实施例详细描述本申请。应理解,本文给出的实施例都只是本申请可能具有的所有实施例的一部分。本领域技术人员在阅读本申请的说明书以后,有能力对下述实施例的部分或整体作出改进、改造或替换,这些改进、改造或替换也都包含在本申请要求保护的范围内。
在本文中,术语“第一”、“第二”和其它类似词语并不意在暗示任何顺序、数量和重要性,而是仅仅用于对不同的元件进行区分。在本文中,术语“一”、“一个”和其它类似词语并不意在表示只存在一个所述事物,而是表示有关描述仅仅针对所述事物中的一个,所述事物可能具有一个或多个。在本文中,术语“包含”、“包括”和其它类似词语意在表示逻辑上的相互关系,而不能视作表示空间结构上的关系。例如,“A包括B”意在表示在逻辑上B属于A,而不表示在空间上B位于A的内部。另外,术语“包含”、“包括”和其它类似词语的含义应视为开放性的,而非封闭性的。例如,“A包括B”意在表示B属于A,但是B不一定构成A的全部,A还可能包括C、D、E等其它元素。
在本文中,术语“实施例”、“本实施例”、“一实施例”、“一个实施例”并不表示有关描述仅仅适用于一个特定的实施例,而是表示这些描述还可能适用于另外一个或多个实施例中。本领域技术人员应理解,在本文中,任何针对某一个实施例所做的描述都可以与另外一个或多个实施例中的有关描述进行替代、组合、或者以其它方式结合,所述替代、组合、或者以其它方式结合所产生的新实施例是本领域技术人员能够容易想到的,属于本申请的保护范围。
在一些本领域技术中,对于网络通信,数据包到达主机的网卡并驱动到内核,经由传统的内核网络协议栈层层处理后交给用户空间。随着网络宽带和流量的急剧增长,这种处理方式的瓶颈逐渐暴露。内核中断产生的上下文切换、内存拷贝和冗余的报文处理流程的开销对协议栈处理报文的影响越来越明显,在Linux内核协议栈中的操作耗时占了数据包整个处理流程的57.1%。因此,可自定义的用户态协议栈的优势逐渐凸显出来。为了缓解高频次的系统调用带来的CPU压力和内核的单点性能瓶颈,将内核中处理数据包的协议栈功能转移到用户空间中,既让内核避免了许多的复杂处理,又让协议栈功能能够使用更多的系统资源和开发便利。目前,用户态协议栈已应用于数据中心、无线自组织网络、安全认证、天地一体化网络等多种场景,也用于满足高性能、编程可扩展可移植、简化协议栈、自定义协议栈功能等多种需求。要想数据包由自定义的用户态协议栈处理,就需要一个在接收时让报文绕过内核直接传递到用户空间的方法。
针对以上问题,常用DPDK技术将网卡接收的所有数据包绕过内核协议栈直接驱动到用户空间。当数据包到达网卡时,DPDK利用PMD(Poll Mode Driver,基于用户态的轮询机制的驱动)主动轮询的方式直接从网卡收包,用UIO(Userspace I/O,运行在用户空间的I/O技术)拦截中断,重设中断回调行为。用户空间则通过映射方式直接获取报文,实现绕过内核对数据包的处理,提高了数据包处理的效率。但是,DPDK技术也具有其局限性:1、用户态协议栈与内核协议栈无法协同工作;由于DPDK通过PMD主动轮询的方式绕过内核,就会造成内核空转,因此在使用用户态协议栈时无法兼容内核协议栈;2、需要安装支持DPDK驱动程序的特殊硬件网卡;3、破坏了原有系统的由内核提供的安全性。
在一些本领域技术中,针对要用用户态协议栈处理数据包的场景,需要一种提前处理并重定向的方法,使数据包可以绕过内核协议栈的处理而直接送到用户空间。但是,这需要满足下列条件,来提高用户态协议栈处理数据包场景适用的广泛性:1、需要满足用户态协议栈与传统Linux内核TCP/IP协议栈共同工作,目的是当只需要将部分特殊的数据包采用用户空间协议栈处理时,不妨碍系统已有其它进程的运行和数据包的处理逻辑;2、需要满足该方法的易用性要求,即普通硬件网卡就可以支持驱动程序;3、需要实现多网卡收发,目的是能够实现大规模复杂网络中的路由转发;4、需要尽可能减少数据包在内核中的拷贝次数,目的是减轻CPU负担,降低系统延迟和抖动。
图1示出根据本申请一实施例的网络数据包处理方法的流程示意图。
根据本实施例,网络数据包处理方法100包括:
S110、通过网卡接收网络数据包。
网络数据包(Packet)可以是指在计算机网络(万维网、互联网、局域网、广域网、通信网等)中存在、流转、传递或收发的数据单元。数据包可以是指,在包交换网络里,单个消息被划分为多个数据块,这些数据块称为包,它包含发送者和接收者的地址信息,这些包然后沿着不同的路径在一个或多个网络中传输,并且在目的地重新组合。例如,数据包可以是指TCP/IP协议通信传输中的数据单位,TCP/IP协议是工作在OSI模型第三层(网络层)、第四层(传输层)上的,帧工作在第二层(数据链路层),上一层的内容由下一层的内容来传输,所以在局域网中“包”是包含在“帧”里的。
网卡(Network Interface Card,NIC)可以是指一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件,由于其拥有MAC地址,因此属于OSI模型的第1层和2层之间,它使用户可以通过电缆或无线相互连接,每个网卡都有一个被称为MAC地址的独一无二的48位串行号,串行号写在网卡上的一块ROM中。用于接收网络数据包的网卡可以有一个,也可以有多个。
S120、通过数据包过滤器,将网络数据包分为第一类数据包和第二类数据包。
数据包过滤,可以是指对数据包进行分拣或分类,将具有某种特性、特征或特点的数据包提取出来,与其它数据包进行区分。数据包过滤器可以是指任何能够对数据包进行过滤操作的装置、模块、程序或指令。
第一类数据包可以是指适于用户态协议栈处理的数据包,例如某种用户态协议栈专门设计成用于处理某种数据包,该数据包的部分字段或数据具有不同于普通数据包的格式或数据类型。第二类数据包可以是指适于内核态协议栈处理的数据包,例如需要通过内核态协议栈的安全机制进行控制和处理的数据包;也可以是指与第一类数据包不同的任何其它数据包,其中既包括适于内核态协议栈处理的数据包,也包括适于通过其它方式处理的数据包。
通过数据包过滤器,将网络数据包分为第一类数据包和第二类数据包,其具体操作可以是,通过数据包过滤器的过滤操作,根据网络数据包的数据、特性或特征值,将所有网络数据包分为两类,其中第一类数据包为适于用户态协议栈处理的数据包,第二类数据包为其它数据包,例如为适于内核态协议栈处理的数据包;也可以是,通过数据包过滤器的过滤操作,先将所有数据包分成第一和第二类,第二类数据包后续可以进一步分类,从而将所有数据包分成三类、四类乃至更多类。
S130、将第一类数据包传递至用户空间,由用户态协议栈处理。
S140、将第二类数据包传递至内核空间,由内核态协议栈处理。
用户空间(User Space)可以是指操作系统虚拟内存中的由用户直接操作的内存空间。内核空间(Kernel Space)可以是指操作系统虚拟内存中的不能由用户直接操作的内存空间。在操作系统中,虚拟内存通常会被分成用户空间与核心空间这两个区块。例如,Linux系统将自身划分为两部分,一部分为核心软件也称作内核空间,另一部分为普通应用程序,这部分称为用户空间。为了保证内核的安全,现在的操作系统一般都强制用户进程不能直接操作内核,具体的实现方式基本都是由操作系统将虚拟地址空间划分为两部分,一部分为内核空间,另一部分为用户空间。针对Linux操作系统而言,最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF)由内核使用,称为内核空间;而较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF)由各个进程使用,称为用户空间。
协议栈(Protocol Stack)可以是指计算机网络协议套件的一个具体的软件实现,又称协议堆叠。所有的网络数据都是通过一层层的堆叠起来的协议来传送的,像栈一样,所以叫协议栈。协议套件中的一个协议通常是只为一个目的而设计的,这样可以使得设计更容易。因为每个协议模块通常都要和上下两个其他协议模块通信,它们通常可以想象成是协议栈中的层。最低级的协议总是描述与硬件的物理交互。每个高级的层次增加更多的特性。用户应用程序只是处理最上层的协议。
用户态可以是指,当进程在执行用户自己的代码时,则称其处于用户运行态(用户态),即此时处理器在特权级最低的(3级)用户代码中运行。内核态可以是指,当一个任务(进程)执行系统调用而陷入内核代码中执行时,则称进程处于内核运行态(内核态),此时处理器处于特权级最高的(0级)内核代码中执行。
用户态协议栈(用户空间协议栈、用户态网络协议栈)可以是指在操作系统(如Linux、Unix、Windows等)用户态上实现的网络协议栈处理程序。内核态协议栈(内核空间协议栈、内核态网络协议栈)可以是指在操作系统内核态上实现的网络协议栈处理程序。
将第一类数据包传递至用户空间,由用户态协议栈处理,其具体操作可以是,根据数据包过滤器的过滤结果,将筛选出来的第一类数据包直接传递至用户空间,最终由用户态协议栈处理;也可以是,将筛选出来的第一类数据包传递至内核空间中、内核空间与用户空间之间的位置或者其它位置,再传递至用户空间,最终由用户态协议栈处理;还可以是,将筛选出来的第一类数据包传递至用户空间或内核空间中的其它程序或模块中,由其处理完毕以后再传递至用户态协议栈,由用户态协议栈处理。
将第二类数据包传递至内核空间,由内核态协议栈处理,其具体操作可以是,根据数据包过滤器的过滤结果,将筛选出来的第二类数据包直接传递至内核空间中的内核态协议栈中,由内核态协议栈处理;也可以是,将筛选出来的第二类数据包传递至其它位置,再传递至内核空间中,由内核态协议栈处理;还可以是,将筛选出来的第二类数据包保留在内核空间中,使其按照原路径传递或发送,最终由内核态协议栈处理。
以下参照图2描述本申请的另一实施例,本实施例是图1实施例的一个具体实例,可以包括上述所有实施例中的一个或多个实施例中的一个或多个特征。
根据本实施例,网络数据包处理方法200包括:
S210、通过网卡接收网络数据包。
S220、通过XDP Hook点,将网络数据包传递至XDP过滤器。
XDP(eXpress Data Path,快速数据路径)可以是指是操作系统(如Linux、Unix、Windows等)内核中提供高性能、可编程的网络数据包处理框架。例如,XDP可以是指操作系统内核网络栈的最底层,其允许在网络设备驱动内部网络堆栈中数据来源最早的地方进行数据包处理,在特定模式下可以在操作系统分配内存之前就已经完成处理。例如,XDP可以是指操作系统网络处理流程中的一个eBPF钩子,能够挂载eBPF程序,它能够在网络数据包到达网卡驱动层时对其进行处理。例如,XDP可以是指内核中提供的处理网络包的一个位置,用户可以在网络栈中的XDP的地方使用eBPF程序,对网络包进行一些较为简单的操作;网络栈中,内核收到网络包,最开始就会到达XDP的处理位置,之后才会进行其他处理。
Hook(挂钩、钩子,也称Hook点)可以是指,在系统没有调用某一函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递,简言之就是把系统的程序拉出来变成我们自己执行代码片段。例如,Hook可以是指操作系统(例如Windows)中提供的一种用以替换DOS下“中断”的系统机制,在对特定的系统事件进行Hook后,一旦发生已Hook事件,对该事件进行Hook的程序就会收到系统的通知,这时程序就能在第一时间对该事件做出响应。
XDP Hook点可以是指网卡驱动中用于XDP程序的一个hook函数,使XDP程序可以对数据包进行逐层解析、按规则进行过滤,或者对数据包进行封装或解封装、修改字段、对数据包进行转发等。
通过XDP Hook点,将网络数据包传递至XDP过滤器,可以是指,在网卡的驱动程序中挂载XDP Hook程序,当网卡接收到网络数据包时,XDP Hook触发事件,使得数据包被传递至XDP过滤器,即XDP过滤器通过XDP Hook点抓取到数据包。
S230、通过XDP过滤器,将网络数据包分为第一类数据包和第二类数据包。
XDP过滤器可以是指采用XDP技术的过滤器程序,用于对数据包进行过滤操作。
通过XDP过滤器,将网络数据包分为第一类数据包和第二类数据包,可以是指,通过XDP程序的过滤器对网络数据包进行过滤,从而将数据包分为可以由用户态协议栈处理的第一类数据包和可以由内核态协议栈处理的第二类数据包;也可以是指,通过XDP过滤器对数据包进行过滤,将数据包分为可以(全部或部分)由用户态协议栈处理的第一类数据包、可以(全部或部分)由内核态协议栈处理的第二类数据包以及其它数据包。
S240、通过eBPF Map建立内核空间和用户空间之间的通道。
eBPF(extended Berkeley Packet Filter,扩展的伯克利数据包过滤器)可以是指一个能够在内核运行沙箱程序的技术,提供了一种在内核事件和用户程序事件发生时安全注入代码的机制,使得非内核开发人员也可以对内核进行控制;随着内核的发展,eBPF逐步从最初的数据包过滤扩展到了网络、内核、安全、跟踪等,而且它的功能特性还在快速发展中,早期的BPF被称为经典BPF,简称cBPF(classic Berkeley Packet Filter),正是这种功能扩展,使得现在的BPF被称为扩展BPF,简称eBPF。例如,eBPF可以是指一种可以在操作系统(如Linux)内核中运行用户编写的程序,而不需要修改内核代码或加载内核模块的技术,即eBPF让操作系统内核变得可编程化。
Map可以是指一种容器,其中的元素以key-value(键值对)的形式存储,这个key-value键值对在Map接口中称Entry<k,v>实体。Map容器以key-value键值对形式存储数据,一个键值对作为一个Entry存在,这种数据结构成为映射,一般而言通过key-value去存储或获取value。Map有多种实现,主要实现类包括hashmap和treemap。
eBPF Map可以是指一种存储类型,其可以保存状态信息,从一个eBPF事件的处理函数传递给另一个,或者保存一些统计信息,从内核态传递给用户态程序。例如,eBPF Map可以是指驻留在内核空间中的高效Key/Value store,包含多种类型的Map,由内核实现其功能。eBPF Map的交互场景有:eBPF程序和用户态程序的交互,即eBPF程序运行完,得到的结果存储到map中,供用户态程序通过文件描述符访问;eBPF程序和内核态程序的交互,即和eBPF程序以外的内核程序交互,也可以使用map作为中介;eBPF程序间交互,即如果eBPF程序内部需要用全局变量来交互,但是由于安全原因eBPF程序不允许访问全局变量,可以使用map来充当全局变量。
通过eBPF Map建立内核空间和用户空间之间的通道,可以是指,通过eBPF Map建立的存储空间,允许内核空间的程序和用户空间的程序共享这个存储空间中的数据,从而实现内核空间和用户空间之间的数据共享和数据通道。
XDP+eBPF允许安全地在网卡和内核内部进行数据包处理。与DPDK相比,XDP具有可以在网卡和内核过滤数据包以实现传统内核协议栈与用户空间协议栈共同工作,以及不需要特定支持驱动程序的硬件网卡的优点。但是,XDP技术仍存在编程能力有限的局限性。eBPF在Linux内核中提供了指令集和执行环境,可以在不用改变内核源代码的基础下,改变对内核数据包的处理,补足了XDP在编程上的局限性。所以eBPF可以担任重定向内核数据包到用户空间的角色。
S250、通过共享内存的方式,将第一类数据包从eBPF Map的接收进程传递到用户态协议栈的进程中。
共享内存可以是指一种用于实现进程间通信的方法,不同进程通过访问同一块内存区域实现数据共享和交互,每个进程可以将自身的虚拟地址映射到物理内存中的特定区域,当不同进程将相同的物理内存区域与各自的虚拟地址空间关联时,这些进程就能实现通过共享内存来完成进程间通信,若某进程更改了共享内存区的内容,其它进程都会觉察到该区域的更改。例如,共享内存可以是指允许两个不相关的进程访问同一个逻辑内存,不同进程之间共享的内存通常为同一段物理内存,进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问共享内存中的地址。
通过共享内存的方式,将第一类数据包从eBPF Map的接收进程传递到用户态协议栈的进程中,可以是指,将eBPF Map的存储空间作为共享内存,该共享内存一方面作为XDP程序/eBPF程序的用于接收第一类数据包的内存,另一方面作为用户态协议栈的应用程序的内存,二者共同调用共享内存中的数据,从而避免数据包从内核空间到用户空间的一次复制。
S260、通过AF_XDP套接字控制第一类数据包的收发。
套接字(Socket)可以是指通信的两方的一种约定,用套接字中的相关函数来完成通信过程。例如,套接字可以是指一种通信机制,其屏蔽各个协议的通信细节,提供tcp/ip协议的抽象,对外提供一套接口,通过这个接口就可以统一方便地使用tcp/ip协议的功能,使得程序员无需关注协议本身,直接使用套接字提供的接口来进行互联的不同主机间的进程的通信,可以用套接字中的相关函数来完成通信过程。例如,套接字可以是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象,一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制;从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口。
AF_XDP可以是指一种协议族(Address family),可以指定套接字的通讯类型。例如,AF_XDP可以是指一种优化的地址族,用于高性能报文处理,AF_XDP可以利用bpf_redirect_map()函数,实现将报文重定向到用户态一块指定的内存中。
AF_XDP套接字可以是指,通过XDP程序的redirect,我们可以将报文重定向到一块指定的用户态可读写的内存队列(UMEM)中,用户态的应用程序可以直接使用AF_XDP套接字(XSK)去接收数据,直接访问这块内存的数据包。例如,AF_XDP套接字由基本的socket()系统调用创建,与XSK相关的环形缓冲区(ring)有两个,即RX ring和TX ring,Rx ring和TXring分别负责套接字数据包的接收和发送,每个套接字必须有至少一个缓冲区。
通过AF_XDP套接字控制第一类数据包的收发,可以是指,AF_XDP套接字面向内核提供接收和发送第一类数据包的接口,从而控制第一类数据包的收发。AF_XDP套接字结构具体包括以AF_XDP为协议族类型的套接字指针、接收队列Rx和发送队列Tx。
当网卡包括多个网卡时,AF_XDP套接字可以包括多个AF_XDP套接字,该多个AF_XDP套接字与该多个网卡一一匹配,从而使得每个AF_XDP套接字都可以控制相应网卡的数据包的收发,从而加速数据包的处理速度。
S270、将第二类数据包传递至内核空间,由内核态协议栈处理。
图3示出根据本申请一实施例的网络数据包处理方法的示意流程图,本实施例是图1实施例的一个具体实例,可以包括上述所有实施例中的一个或多个实施例中的一个或多个特征。
根据本实施例,网络数据包处理方法包括:
1、实时数据包到达任意网卡驱动的XDP Hook点,被XDP程序捕获;
2、在XDP Hook点进入自定义设计的过滤器实现分流,每块网卡对应的过滤器可以设置不同的过滤方法,目标数据包由eBPF重定向到用户空间,其他数据包进入内核协议栈处理;
3、目标数据包重定向,具体为,调用bpf_map_lookup_elem()函数在eBPF Map中根据网卡查找用户空间中的AF_XDP socket,作为重定向的目标套接字;用bpf_redirect_map()函数重定向数据包,eBPF Map作为连接内核和用户空间的通道,存储目标数据包;
4、每个网卡在用户空间匹配一个AF_XDP套接字,控制数据包的收发,AF_XDP套接字利用Rx和Tx控制收包队列和发包队列;
5、用共享内存的方式将目标数据包从XDP接收进程传递到用户态协议栈进程中。
根据本实施例,网络数据包处理方法能够实现:1、兼容TCP/IP协议栈,同时也兼容内核中强大的资源抽象管理和安全管理,能够将目标数据包过滤出来,但不干扰其他数据包的接收;不同于之前采用的DPDK技术将所有数据包从网卡直接驱动到用户空间,利用XDP技术结合eBPF的可编程性设计了一个用于用户态协议栈的数据包处理模块,不仅能够无差错地根据目标数据包的特征将其过滤出来,而且能让其他类型数据包依然由内核协议栈处理,不影响其他应用进程的使用;2、具有易用性,目前Linux主流的网卡驱动都支持XDP;3、支持多网卡收发,能够实现大规模网络的路由转发;4、重定向零拷贝减轻了CPU负担;相比于之前从网卡拷贝到内核,再由内核拷贝到用户空间的两次拷贝的模式,XDP采用了eBPFMap存储的方式,避免了在内核中的多次拷贝,降低了系统延迟和抖动。
以下描述根据本申请一实施例的网络数据包处理方法,本实施例是图1实施例的一个具体实例,可以包括上述所有实施例中的一个或多个实施例中的一个或多个特征。
根据本实施例,网络数据包处理方法包括下列步骤。
1、确定实时的新型结构数据包传输路径,确定接收网卡号,在数据包捕获点Hook上挂载XDP内核程序。
2、在XDP内核程序中,根据用户态协议栈特征和用途,自定义设计数据包的处理方式,实现在网卡分流实时到达的数据包;所述自定义设计数据包的处理方式具体为,根据以太网数据帧中的数据链路层、网络层、传输层、应用层等中各的参数值、选项值或特定内容,过滤出目标数据包。
3、初始化重定向数据包至用户空间所需要的数据结构和空间,包括BPF映射,UMEM结构和AF_XDP socket结构,具体包括:
(1)在内核中初始化BPF Maps,用于将网络设备的接收队列映射到用户空间的AF_XDP socket,类型设置为BPF_MAP_TYPE_XSKMAP;所述BPF Maps具体为,采用key值为接收队列的ID,value值为AF_XDP socket的文件描述符fd;采用在用户空间每新建一个AF_XDPsocket,并与网络设备的接收队列绑定后,将这一匹配信息传递给BPF Maps的更新方式;
(2)在用户空间内存中初始化UMEM结构,用于暂存从内核重定向到用户空间以及要从用户空间发出的数据包,所述UMEM结构具体包括UMEM存储空间,Fill Ring和CompleteRing两个队列;
(3)在用户空间中初始化AF_XDP socket结构,用于面向内核提供接收和发送新型结构数据包的接口,所述AF_XDP socket结构具体包括以AF_XDP为协议族类型的套接字指针,接收队列Rx和发送队列Tx。
4、初始化XDP接收进程和用户态协议栈处理进程之间数据传输所需要的内存池。
图4示出根据本申请一实施例的网络数据包处理装置的结构示意图。
根据本实施例,网络数据包处理装置400包括:
接收模块410,用于通过网卡接收网络数据包;
过滤模块420,用于通过数据包过滤器,将网络数据包分为第一类数据包和第二类数据包;
第一传递模块430,用于将第一类数据包传递至用户空间,由用户态协议栈处理;
第二传递模块440,用于将第二类数据包传递至内核空间,由内核态协议栈处理。
在一实施例中,网络数据包处理装置400的数据包过滤器包括XDP过滤器。
在一实施例中,接收模块410被进一步配置成:
通过网卡接收网络数据包;
通过XDP Hook点将网络数据包传递至XDP过滤器。
在一实施例中,第一传递模块430被进一步配置成:
通过eBPF程序,将第一类数据包重定向到用户空间,由用户态协议栈处理。
在一实施例中,第一传递模块430被进一步配置成:
在用户空间中,通过XDP数据包接收程序接收第一类数据包;
将第一类数据包传递至用户态协议栈。
在一实施例中,第一传递模块430被进一步配置成:通过共享内存,将第一类数据包从XDP数据包接收程序的进程传递到用户态协议栈的进程中。
在一实施例中,网络数据包处理装置400的网卡包括多个网卡,XDP数据包接收程序包括多个AF_XDP套接字,多个AF_XDP套接字与多个网卡一一匹配。
图5示出根据本申请另一实施例的网络数据包处理装置的示意结构图。
根据本实施例,网络数据包处理装置包括以下模块:
数据包过滤模块,用于自定义过滤实时捕获到的数据包;所述自定义过滤具体为,根据用户态协议栈的特征,用户空间加载自定义编写的XDP过滤数据包内核程序,将要用用户空间协议栈处理的目标数据包与其他数据包分流,目标数据包由eBPF重定向到用户空间,其他数据包则按照默认原轨迹拷贝到内核,由内核网络协议栈处理;
多网卡收发模块,用于将每个网卡与一个控制套接字绑定,以用于多路复用接收多个网卡到达的数据包,并能够从多网卡发送数据包,实现大规模网络中的路由转发;
进程间的数据传递模块,用于多网卡收发进程与用户态协议栈处理进程之间的数据传递,将控制套接字接收的数据包交由用户态协议栈进程处理。
以下结合图6描述根据本申请一实施例的电子设备。
如图6所示,电子设备600包括一个或多个处理器610和存储器620。
处理器610可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备600中的其他组件以执行期望的功能。
存储器620可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器610可以运行所述程序指令,以实现上文所述的本申请的各个实施例的网络数据包处理方法以及/或者其他期望的功能。
在一个示例中,电子设备600还可以包括:输入装置630和输出装置640,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。
例如,该输入装置630可以是麦克风或麦克风阵列,用于捕捉语音输入信号;可以是通信网络连接器,用于从云端或其它设备接收所采集的输入信号;还可以包括例如键盘、鼠标等等。
该输出装置640可以向外部输出各种信息,包括确定出的距离信息、方向信息等。该输出设备640可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
当然,为了简化,图6中仅示出了该电子设备600中与本申请有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备600还可以包括任何其他适当的组件。
本申请的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上文中描述的根据本申请各种实施例的网络数据包处理方法中的步骤。
所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
以上结合具体实施方式(包括实施例和实例)详细描述了本申请的概念、原理和思想。本领域技术人员应理解,本申请的实施方式不止上文给出的这几种形式,本领域技术人员在阅读本申请文件以后,可以对上述实施方式中的步骤、方法、装置、部件做出任何可能的改进、替换和等同形式,这些改进、替换和等同形式应视为落入在本申请的范围内。本申请的保护范围仅以权利要求书为准。
Claims (10)
1.一种网络数据包处理方法,包括:
通过网卡接收网络数据包;
通过数据包过滤器,将所述网络数据包分为第一类数据包和第二类数据包;
将所述第一类数据包传递至用户空间,由用户态协议栈处理;
将所述第二类数据包传递至内核空间,由内核态协议栈处理。
2.根据权利要求1所述的网络数据包处理方法,其中,所述数据包过滤器包括快速数据路径XDP过滤器。
3.根据权利要求2所述的网络数据包处理方法,其中,所述通过网卡接收网络数据包,包括:
通过所述网卡接收所述网络数据包;
通过XDP Hook点,将所述网络数据包传递至所述快速数据路径XDP过滤器。
4.根据权利要求1至3中任一项所述的网络数据包处理方法,其中,所述将所述第一类数据包传递至用户空间,由用户态协议栈处理,包括:
通过eBPF Map建立所述内核空间和所述用户空间之间的通道;
将所述第一类数据包通过所述eBPF Map传递至所述用户态协议栈。
5.根据权利要求4所述的网络数据包处理方法,其中,所述将所述第一类数据包通过所述eBPF Map传递至所述用户态协议栈,包括:
通过共享内存的方式,将所述第一类数据包从所述eBPF Map的接收进程传递到所述用户态协议栈的进程中。
6.根据权利要求1至3中任一项所述的网络数据包处理方法,其中,所述将所述第一类数据包传递至用户空间,由用户态协议栈处理,包括:
通过AF_XDP套接字控制所述第一类数据包的收发。
7.根据权利要求6所述的网络数据包处理方法,其中,所述网卡包括多个网卡,所述AF_XDP套接字包括多个AF_XDP套接字,所述多个AF_XDP套接字与所述多个网卡一一匹配。
8.一种网络数据包处理装置,包括:
接收模块,用于通过网卡接收网络数据包;
过滤模块,用于通过数据包过滤器,将所述网络数据包分为第一类数据包和第二类数据包;
第一传递模块,用于将所述第一类数据包传递至用户空间,由用户态协议栈处理;
第二传递模块,用于将所述第二类数据包传递至内核空间,由内核态协议栈处理。
9.一种电子设备,包括:
处理器;
存储器;
应用程序,所述应用程序存储在所述存储器中,并配置成由所述处理器执行,所述应用程序包括用于执行根据权利要求1至7中任一项所述的网络数据包处理方法的指令。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序用于执行根据权利要求1至7中任一项所述的网络数据包处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211410705.1A CN115714679A (zh) | 2022-11-11 | 2022-11-11 | 网络数据包处理方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211410705.1A CN115714679A (zh) | 2022-11-11 | 2022-11-11 | 网络数据包处理方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115714679A true CN115714679A (zh) | 2023-02-24 |
Family
ID=85232802
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211410705.1A Pending CN115714679A (zh) | 2022-11-11 | 2022-11-11 | 网络数据包处理方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115714679A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116545978A (zh) * | 2023-05-16 | 2023-08-04 | 深圳市石犀科技有限公司 | 数据处理方法、装置、系统、可读存储介质及进口网卡 |
-
2022
- 2022-11-11 CN CN202211410705.1A patent/CN115714679A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116545978A (zh) * | 2023-05-16 | 2023-08-04 | 深圳市石犀科技有限公司 | 数据处理方法、装置、系统、可读存储介质及进口网卡 |
CN116545978B (zh) * | 2023-05-16 | 2024-05-17 | 深圳市石犀科技有限公司 | 数据处理方法、装置、系统、可读存储介质及进口网卡 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10997106B1 (en) | Inter-smartNIC virtual-link for control and datapath connectivity | |
US8713202B2 (en) | Method and system for network configuration for virtual machines | |
EP3629162B1 (en) | Technologies for control plane separation at a network interface controller | |
JP6188093B2 (ja) | 通信トラフィック処理アーキテクチャおよび方法 | |
US8005022B2 (en) | Host operating system bypass for packets destined for a virtual machine | |
US7788411B2 (en) | Method and system for automatically reflecting hardware resource allocation modifications | |
EP3835957A1 (en) | Extending berkeley packet filter semantics for hardware offloads | |
CN117348976A (zh) | 用于流处理的数据处理单元 | |
EP3563534B1 (en) | Transferring packets between virtual machines via a direct memory access device | |
US20080086575A1 (en) | Network interface techniques | |
US8458366B2 (en) | Method and system for onloading network services | |
US10909067B2 (en) | Multi-node zero-copy mechanism for packet data processing | |
US11048535B2 (en) | Method and apparatus for transmitting data packet based on virtual machine | |
WO2021207231A1 (en) | Application aware tcp performance tuning on hardware accelerated tcp proxy services | |
Van Tu et al. | Accelerating virtual network functions with fast-slow path architecture using express data path | |
CN113067849B (zh) | 基于Glusterfs的网络通信优化方法及装置 | |
KR20240004315A (ko) | Smartnic들 내의 네트워크 연결형 mpi 프로세싱 아키텍처 | |
CN115714679A (zh) | 网络数据包处理方法、装置、电子设备及存储介质 | |
US11343176B2 (en) | Interconnect address based QoS regulation | |
Li et al. | The comparison and verification of some efficient packet capture and processing technologies | |
US20220217085A1 (en) | Server fabric adapter for i/o scaling of heterogeneous and accelerated compute systems | |
Freitas et al. | A survey on accelerating technologies for fast network packet processing in Linux environments | |
CN116723162B (zh) | 一种网络首包处理方法、系统、装置、介质及异构设备 | |
CN114697387A (zh) | 数据包传输方法、装置及存储介质 | |
Krishnan et al. | OpenPATH: Application aware high-performance software-defined switching framework |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |