CN116996602A - 数据包的处理方法及装置、存储介质、电子设备 - Google Patents
数据包的处理方法及装置、存储介质、电子设备 Download PDFInfo
- Publication number
- CN116996602A CN116996602A CN202311242769.XA CN202311242769A CN116996602A CN 116996602 A CN116996602 A CN 116996602A CN 202311242769 A CN202311242769 A CN 202311242769A CN 116996602 A CN116996602 A CN 116996602A
- Authority
- CN
- China
- Prior art keywords
- data packet
- target
- program
- address
- target 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.)
- Granted
Links
- 238000003672 processing method Methods 0.000 title abstract description 5
- 238000000034 method Methods 0.000 claims abstract description 113
- 238000012545 processing Methods 0.000 claims abstract description 87
- 230000008569 process Effects 0.000 claims abstract description 50
- 230000002159 abnormal effect Effects 0.000 claims description 30
- 238000001914 filtration Methods 0.000 claims description 28
- 238000004590 computer program Methods 0.000 claims description 16
- 230000005540 biological transmission Effects 0.000 claims description 15
- 238000006243 chemical reaction Methods 0.000 claims description 12
- 230000001133 acceleration Effects 0.000 abstract description 12
- 230000000694 effects Effects 0.000 abstract description 9
- 230000006870 function Effects 0.000 description 15
- 239000011800 void material Substances 0.000 description 10
- 238000010586 diagram Methods 0.000 description 8
- 238000009434 installation Methods 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 4
- 238000009448 modified atmosphere packaging Methods 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 235000008694 Humulus lupulus Nutrition 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000012550 audit Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 235000019837 monoammonium phosphate Nutrition 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请实施例提供了一种数据包的处理方法及装置、存储介质、电子设备,其中,该方法包括:在第一服务器的网卡接收到第一数据包的情况下,通过运行在所述网卡上的目标程序确定对所述第一数据包进行操作的目标操作标识;在所述目标操作标识用于指示不将所述第一数据包传输到所述内核进程进行处理、且对所述第一数据包进行转发的情况下,通过所述目标程序获取用于转发所述第一数据包的目标IP地址;通过所述目标程序将所述第一数据包转发至所述目标IP地址。采用上述技术方案,解决了将进行数据包处理的目标程序部署在服务器上,导致使用目标程序进行网络加速的效果较差的问题。
Description
技术领域
本申请实施例涉及信息传输领域,具体而言,涉及一种数据包的处理方法及装置、存储介质、电子设备。
背景技术
目前,传统的内核网络处理数据包时存在比较大的延迟和开销,成为高速网络的瓶颈。而当前加速数据包处理的常见方法是绕过内核网络协议栈直接处理系统用户态的数据包,如数据平面开发工具包(Data Plane Development Kit,简称为DPDK)。虽然这些方法可以显著提高性能,但它们无法与现有系统的以一个相较简单轻松的方式进行集成,还意味着由内核实现的许多网络功能需要在其他地方重新设计,增大改动成本、降低系统兼容性。因而,快速数据路径(eXpress Data Path,简称为 XDP)应运而生,它支持高性能的数据包处理的同时保留内核堆栈。具体地说,XDP连接在网卡驱动程序的接收器(Receiver,简称为RX)路径上。网卡接收到的数据包首先在XDP程序中进行处理,然后程序决定是否将数据包传递到协议栈中,还是直接转发或丢弃,实现栈前数据包处理加速。然而,传统的软件XDP仍是部署在物理服务器上,这意味着服务器上的中央处理器(Central Processing Unit,简称为CPU)仍然必须参与数据包处理,XDP软件的网络加速能力仍然有限。
针对相关技术中,将进行数据包处理的目标程序部署在服务器上,导致使用目标程序进行网络加速的效果较差的问题,目前尚未提出有效的解决方案。
因此,有必要对相关技术予以改良以克服相关技术中的所述缺陷。
发明内容
本申请实施例提供了一种数据包的处理方法及装置、存储介质、电子设备,以至少解决将进行数据包处理的目标程序部署在服务器上,导致使用目标程序进行网络加速的效果较差的问题。
根据本申请的一个实施例,提供了一种数据包的处理方法,包括:在第一服务器的网卡接收到第一数据包的情况下,通过运行在所述网卡上的目标程序确定对所述第一数据包进行操作的目标操作标识;在所述目标操作标识用于指示不将所述第一数据包传输到内核进程进行处理、且对所述第一数据包进行转发的情况下,通过所述目标程序获取用于转发所述第一数据包的目标IP地址;通过所述目标程序将所述第一数据包转发至所述目标IP地址。
在一个示例性的实施例中,所述在第一服务器的网卡接收到第一数据包的情况下,通过运行在所述网卡上的目标程序确定对所述第一数据包进行操作的目标操作标识,包括:在所述第一服务器的网卡接收到第一数据包的情况下,通过预设的钩子程序触发运行所述目标程序,并通过所述目标程序确定对所述第一数据包进行操作的目标操作标识。
在一个示例性的实施例中,所述通过运行在所述网卡上的目标程序确定对所述第一数据包进行操作的目标操作标识,包括:通过所述目标程序判断所述第一数据包是否为合法数据包;在判断出所述第一数据包是合法数据包的情况下,通过所述目标程序获取所述第一数据包中的预定字段的取值;通过所述目标程序根据所述预定字段的取值确定对所述第一数据包进行操作的目标操作标识。
在一个示例性的实施例中,所述通过所述目标程序判断所述第一数据包是否为合法数据包,包括:通过所述目标程序中的过滤模块获取所述第一数据包的包头;通过所述过滤模块根据所述包头判断所述第一数据包是否为合法数据包。
在一个示例性的实施例中,所述通过所述过滤模块根据所述包头判断所述第一数据包是否为合法数据包,包括: 通过所述过滤模块判断所述包头中的第一字段的取值是否预设的异常取值或位于预设的异常取值范围内;在所述第一字段的取值是所述异常取值或位于所述异常取值范围内的情况下,判断出所述第一数据包不是合法数据包;在所述第一字段的取值不是所述异常取值或不位于所述异常取值范围内的情况下,判断出所述第一数据包是合法数据包。
在一个示例性的实施例中,所述通过所述目标程序根据所述预定字段的取值确定对所述第一数据包进行操作的目标操作标识,包括:通过所述目标程序中的过滤模块以所述预定字段的取值为查询条件查询元数据表格,得到第一查询结果,其中,所述元数据表格中记录了多组具有对应关系的所述预定字段的不同取值和不同操作标识;在所述第一查询结果包括查询到的与所述预定字段的取值具有对应关系的第一操作标识的情况下,确定所述目标操作标识为所述第一操作标识,其中,所述第一操作标识用于指示将所述第一数据包传输到所述内核进程进行处理、或者用于指示对所述第一数据包进行转发、或者用于指示丢弃所述第一数据包;在所述第一查询结果未包括查询到的与所述预定字段的取值具有对应关系的操作标识的情况下,确定所述目标操作标识为第二操作标识别,其中,所述第二操作标识用于指示将所述第一数据包传输到所述内核进程进行处理。
在一个示例性的实施例中,在通过所述目标程序判断是否将所述第一数据包是否为合法数据包之后,所述方法还包括:在判断出所述第一数据包不是合法数据包的情况下,丢弃所述第一数据包。
在一个示例性的实施例中,所述通过所述目标程序获取用于转发所述第一数据包的目标IP地址,包括:通过所述目标程序中的转发模块获取所述第一数据包的包头中的第一目的IP地址;通过所述目标程序中的转发模块以所述第一目的IP地址为查询条件查询元数据表格,得到第二查询结果,其中,所述元数据表格中记录了多组具有对应关系的地址转换前的IP地址和地址转换后的IP地址;在所述第二查询结果包括查询到的与所述第一目的IP地址具有对应关系的第二目的IP地址的情况下,通过所述目标程序中的所述转发模块获取所述第二目的IP地址,其中,用于转发所述第一数据包的所述目标IP地址为所述第二目的IP地址。
在一个示例性的实施例中,所述通过所述目标程序将所述第一数据包转发至所述目标IP地址,包括:通过所述目标程序中的所述转发模块获取所述第一数据包中携带的数据字段的取值;通过所述目标程序中的所述转发模块将所述数据字段的取值和所述第二目的IP地址封装成第二数据包;通过所述目标程序中的所述转发模块将所述第二数据包转发至所述第二目的IP地址。
在一个示例性的实施例中,通过所述目标程序中的转发模块以所述第一目的IP地址为查询条件查询元数据表格,得到第二查询结果之后,所述方法还包括: 在所述第二查询结果表示未查询到与所述第一目的IP地址具有对应关系的所述第二目的IP地址的情况下,丢弃所述第一数据包。
在一个示例性的实施例中,所述目标程序为快速数据路径XDP程序。
在一个示例性的实施例中,所述元数据表格存储在所述网卡的内存中。
在一个示例性的实施例中,所述目标程序被设置为允许访问所述内存中的所述元数据表格、且禁止访问所述第一服务器中与所述元数据表格在所述内存中的存储区域不同的其他存储区域。
在一个示例性的实施例中,所述内核进程中运行的程序被设置为禁止访问所述内存中的所述元数据表格。
在一个示例性的实施例中,所述方法还包括:在所述第一服务器的网卡在第一时刻接收到所述第一数据包、所述目标操作标识不用于指示丢弃所述第一数据包、且在从所述第一时刻开始的第一时长内未执行完所述目标操作标识所对应的操作的情况下,丢弃所述第一数据包。
在一个示例性的实施例中,所述方法还包括:在从所述第一时刻开始的第一时长内未执行完所述目标操作标识所对应的操作的情况下,生成错误提示信息,其中,所述错误提示信息用于提示所述第一数据包未被及时处理。
在一个示例性的实施例中,在第一服务器的网卡接收到第一数据包的情况下,通过运行在所述网卡上的目标程序确定对所述第一数据包进行操作的目标操作标识,包括:在第一服务器的网卡接收到第一数据包的情况下,通过所述目标程序判断所述第一数据包的类型是否是预定类型;在判断出所述第一数据包的类型是所述预定类型的情况下,通过所述目标程序确定对所述第一数据包进行操作的目标操作标识。
在一个示例性的实施例中,在通过所述目标程序判断所述第一数据包的类型是否是预定类型之后,所述方法还包括:在判断出所述第一数据包的类型不是所述预定类型的情况下,通过所述目标程序将所述第一数据包传输到所述第一服务器中的所述内核进程进行处理。
在一个示例性的实施例中,所述通过所述目标程序将所述第一数据包转发至所述目标IP地址,包括:在所述网卡从所述网卡的第一接口接收到所述第一数据包的情况下,通过所述目标程序从所述第一接口将所述第一数据包转发至所述目标IP地址;或者在所述网卡从所述网卡的第一接口接收到所述第一数据包的情况下,通过所述目标程序从所述网卡的第二接口将所述第一数据包转发至所述目标IP地址,其中,所述第二接口与所述第一接口不同。
根据本申请的另一个实施例,提供了一种数据包的处理装置,包括:判断模块,用于在第一服务器的网卡接收到第一数据包的情况下,通过运行在所述网卡上的目标程序确定对所述第一数据包进行操作的目标操作标识;获取模块,用于在所述目标操作标识用于指示不将所述第一数据包传输到内核进程进行处理、且对所述第一数据包进行转发的情况下,通过所述目标程序获取用于转发所述第一数据包的目标IP地址;转发模块,用于通过所述目标程序将所述第一数据包转发至所述目标IP地址。
根据本申请的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种电子设备,包括存储器和内核进程,所述存储器中存储有计算机程序,所述内核进程被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本申请,在服务器的网卡接收到数据包的情况下,通过运行在网卡上的目标程序判断确定对数据包进行操作的目标操作标识;并在目标操作标识用于指示不将第一数据包传输到内核进程进行处理、且对第一数据包进行转发的情况下,通过目标程序获取用于转发数据包的目标IP地址,并通过目标程序将数据包转发至目标IP地址。本申请将目标程序部署在网卡上,进而不需要服务器上的内核进程参与数据包的转发处理,避免了占用服务器的资源,提高了使用目标程序进行网络加速的效果,解决了将进行数据包处理的目标程序部署在服务器上,导致使用目标程序进行网络加速的效果较差的问题。
附图说明
图1是本申请实施例的一种数据包的处理方法的移动终端的硬件结构框图;
图2是根据本申请实施例的一种数据包的处理方法的流程图;
图3是根据本申请实施例的一种eBPF的工作机制的示意图;
图4是根据本申请实施例的一种BPF程序卸载到普通网卡上的工作原理的示意图;
图5是根据本申请实施例的一种XDP卸载安装的示意图;
图6是根据本申请实施例的一种数据包的处理装置的结构框图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本申请的实施例。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本申请实施例中所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在移动终端上为例,图1是本申请实施例的一种数据包的处理方法的移动终端的硬件结构框图。如图2所示,移动终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,其中,上述移动终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述移动终端的结构造成限定。例如,移动终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本申请实施例中的数据包的处理方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输设备106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中提供了一种运行于上述移动终端的方法,图2是根据本申请实施例的一种数据包的处理方法的流程图,如图2所示,该流程包括如下步骤:
步骤S202,在第一服务器的网卡接收到第一数据包的情况下,通过运行在所述网卡上的目标程序确定对所述第一数据包进行操作的目标操作标识;
作为一种可选的示例,第一数据包可以为用户(例如终端设备)访问第一服务器所发送的数据包。
在一个示例性的实施例中,上述目标程序为XDP程序, XDP是Linux内核中的一种高效、低延迟的数据包处理技术,它可以在数据包进入内核网络协议栈之前进行处理,从而避免了协议栈带来的性能开销。XDP主要用于数据包的过滤、转发、负载均衡等场景,可以在数据包处理过程中进行各种自定义操作,如修改数据包头、丢弃数据包等。
需要说明的是,XDP程序在网络堆栈之前被注入到网卡的RX路径上。RX路径上的每个数据包都可以触发XDP程序,进而XDP程序对其进行处理。
在一个示例性的实施例中,上述步骤S202包括:在所述第一服务器的网卡接收到第一数据包的情况下,通过预设的钩子程序触发运行所述目标程序,并通过所述目标程序确定对所述第一数据包进行操作的目标操作标识。
也就是说,在本实施例中,在第一数据包到达网卡之后,会触发处于内核挂钩处的目标程序。
在一个示例性的实施例中,上述通过运行在所述网卡上的目标程序确定对所述第一数据包进行操作的目标操作标识,包括以下步骤S11-S13:
步骤S11:通过所述目标程序判断所述第一数据包是否为合法数据包;
在一个示例性的实施例中,可以通过以下方式判断第一数据包是否为合法数据包:通过所述目标程序中的过滤模块获取所述第一数据包的包头;通过所述过滤模块根据所述包头判断所述第一数据包是否为合法数据包。
作为一种可选的示例,可以通过目标程序中的过滤模块对第一数据包进行反序列化以获得包头,进而根据包头判断第一数据包是否为合法数据包。
在一个示例性的实施例中,通过所述过滤模块根据所述包头判断所述第一数据包是否为合法数据包可以通过以下步骤S111-S113实现:
步骤S111:通过所述过滤模块判断所述包头中的第一字段的取值是否预设的异常取值或位于预设的异常取值范围内;
步骤S112:在所述第一字段的取值是所述异常取值或位于所述异常取值范围内的情况下,判断出所述第一数据包不是合法数据包;
步骤S113:在所述第一字段的取值不是所述异常取值或不位于所述异常取值范围内的情况下,判断出所述第一数据包是合法数据包。
作为一种可选的示例,假设第一字段为TTL,则如果包头中的TTL字段的取值为零,则表明第一数据包不是合法数据包。
在一个示例性的实施例中,还可以通过以下方式判断第一数据包是否为合法数据包:通过所述目标程序中的过滤模块获取所述第一数据包中预设的第二字段的取值,在第二字段的取值是对应的异常取值或位于对应的异常取值范围内的情况下,判断出第一数据包不是合法数据包;在第二字段的取值不是对应的异常取值或不位于对应的异常取值范围内的情况下,判断出第一数据包是合法数据包。其中,所述第二字段的取值位于所述第一数据包的数据部分(即第一数据包的载荷部分)。
步骤S12:在判断出所述第一数据包是合法数据包的情况下,通过所述目标程序获取所述第一数据包中的预定字段的取值;
作为一种可选的示例,在判断出所述第一数据包不是合法数据包的情况下,丢弃所述第一数据包。
在本实施例中,目标程序通过丢弃第一数据包可以释放网卡的相关资源。
步骤S13:通过所述目标程序根据所述预定字段的取值判断是否将所述第一数据包传输到所述第一服务器中的所述内核进程进行处理。
在一个示例性的实施例中,上述步骤S13可以通过以下步骤S131-S133实现:
步骤S131:通过所述目标程序中的过滤模块以所述预定字段的取值为查询条件查询元数据表格,得到第一查询结果,其中,所述元数据表格中记录了多组具有对应关系的所述预定字段的不同取值和不同操作标识;
步骤S132:在所述第一查询结果包括查询到的与所述预定字段的取值具有对应关系的第一操作标识的情况下,确定所述目标操作标识为所述第一操作标识,其中,所述第一操作标识用于指示将所述第一数据包传输到所述内核进程进行处理、或者用于指示对所述第一数据包进行转发、或者用于指示丢弃所述第一数据包;
需要说明的是,在第一操作标识用于指示对第一数据包进行转发、或者用于指示丢弃第一数据包时,即表明不需要将第一数据包传输到内核进程进行处理。
需要说明的是,第一操作标识还用于指示将第一数据包从其进入的接口进行转发,或者将第一数据包从其他接口进行转发。
步骤S133:在所述第一查询结果未包括查询到的与所述预定字段的取值具有对应关系的操作标识的情况下,确定所述目标操作标识为第二操作标识别,其中,所述第二操作标识用于指示将所述第一数据包传输到所述内核进程进行处理。
需要说明的是,如果在元数据表格中未查找到与预定字段的取值具有对应关系的操作标识,则表明目标程序无法判断出应当如何对第一数据包进行操作,进而需要将第一数据包传输到第一服务器的内核进程,由内核进程来确定应当如何对第一数据包进行处理。
也就是说,在本实施例中,目标程序中的过滤模块可以解析第一数据包,确定第一数据包中预定字段的取值,进而根据元数据表格中存储的给定的规则对第一数据包进行过滤,判断是否将第一数据包传输到第一服务器中的内核进程进行处理。
也就是说,在本实施例中,通过上述步骤S11-S13,目标程序在获取第一数据包以后,需要先判断第一数据包是否是合法数据包,如果第一数据包不是合法数据包,则直接丢弃,如果第一数据包是合法数据包,则目标程序需要根据第一数据包中的预定字段的取值判断是否将第一数据包传输到第一服务器中的内核进程进行处理。
在一个示例性的实施例中,上述步骤S202还包括:以下步骤S21-S22:
步骤S21:在第一服务器的网卡接收到第一数据包的情况下,通过所述目标程序判断所述第一数据包的类型是否是预定类型;
步骤S22:在判断出所述第一数据包的类型是所述预定类型的情况下,通过所述目标程序确定对所述第一数据包进行操作的目标操作标识。
作为一种可选的示例,上述预定类型可以为第一数据包所使用的网络协议,包括但不限于UDP、TCP。
作为一种可选的示例,上述步骤S22中的通过所述目标程序确定对所述第一数据包进行操作的目标操作标识的实现方式可以为上述步骤S11-S13。
在一个示例性的实施例中,在上述步骤S21之后,在判断出所述第一数据包的类型不是所述预定类型的情况下,通过所述目标程序将所述第一数据包传输到所述第一服务器中的所述内核进程进行处理。
也就是说,在本实施例中,由于不同的数据包具有不同的数据路径,因此需要针对不同的数据包对象以及转发规则进行分析,确认其最优转发方案,并在目标程序中对接收到的数据包进行分类,确定数据包的类型。一些无法由目标程序加速的数据包直接跳过交由系统处理,而一些性能增益显著的数据包则直接由目标程序负责控制。进而通过上述方式目标程序可以最大限度地提高网络性能。
步骤S204,在所述目标操作标识用于指示不将所述第一数据包传输到所述内核进程进行处理、且对所述第一数据包进行转发的情况下,通过所述目标程序判断是否对所述第一数据包进行转发;
在一个示例性的实施例中,上述步骤S204可以通过以下步骤S31-S33实现:
步骤S31:通过所述目标程序中的转发模块获取所述第一数据包的包头中的第一目的IP地址;
步骤S32:通过所述目标程序中的转发模块以所述第一目的IP地址为查询条件查询元数据表格,得到第二查询结果,其中,所述元数据表格中还记录了多组具有对应关系的地址转换前的IP地址和地址转换后的IP地址;
作为一种可选的示例,元数据表格中记录的多组具有对应关系的地址转换前的IP地址和地址转换后的IP地址为预先设置的。
步骤S33:在所述第二查询结果包括查询到的与所述第一目的IP地址具有对应关系的第二目的IP地址的情况下,通过所述目标程序中的所述转发模块获取所述第二目的IP地址,其中,用于转发所述第一数据包的所述目标IP地址为所述第二目的IP地址。
需要说明的是,上述第一目的IP地址可以为内网地址,上述第二目的IP地址为公网地址。即在本实施例中,可以通过查询元数据表格来进行数据包的地址转换。
在一个示例性的实施例中,在上述步骤S32之后,在所述第二查询结果表示未查询到与所述第一目的IP地址具有对应关系的所述第二目的IP地址的情况下,丢弃所述第一数据包。
也就是说,如果第二查询结果表示未查询到与第一目的IP地址具有对应关系的第二目的IP地址,则表明目标程序无法对第一数据包进行转发,进而为了释放网卡的相关资源,则丢弃第一数据包。
需要说明的是, 上述步骤S31-S33,通过目标程序的转发模块对不需要传输到内核进程进行处理的第一数据包进行进一步解析处理,具体的,解析第一数据包的包头的IP地址,然后根据该IP地址在元数据表格中搜索与之对应的IP地址,如果查询成功,表明第一数据包需要转发,否则,不需要转发第一数据包,直接丢弃第一数据包。
步骤S206,通过所述目标程序将所述第一数据包转发至所述目标IP地址。
在一个示例性的实施例中,上述步骤S206通过以下步骤S41-S43:
步骤S41:通过所述目标程序中的所述转发模块获取所述第一数据包中携带的数据字段的取值;
需要说明的是,第一数据包中携带的数据字段的取值即为第一数据包的载荷部分,即第一数据包具体想要传递的数据。
步骤S42:通过所述目标程序中的所述转发模块将所述数据字段的取值和所述第二目的IP地址封装成第二数据包;
步骤S43:通过所述目标程序中的所述转发模块将所述第二数据包转发至所述第二目的IP地址。
在本实施例中,通过上述方式可以简单高效的实现数据包的转发。
在一个示例性的实施例中,上述步骤S206还包括以下步骤S51或者步骤S52:
步骤S51:在所述网卡从所述网卡的第一接口接收到所述第一数据包的情况下,通过所述目标程序从所述第一接口将所述第一数据包转发至所述目标IP地址;
步骤S52:在所述网卡从所述网卡的第一接口接收到所述第一数据包的情况下,通过所述目标程序从所述网卡的第二接口将所述第一数据包转发至所述目标IP地址,其中,所述第二接口与所述第一接口不同。
在一个示例性的实施例中,如果目标操作标识在指示对第一数据包进行转发的时候,还会指示了使用何种接口进行转发,则使用目标操作标识指示的接口进行数据包的转发。
作为一种可选的示例,如果目标操作标识未指示对第一数据包进行转发所使用的接口,则可以通过目标程序通过查询元数据表格,确定使用何种接口转发第一数据包,其中,元数据表格中还具有不同的目标IP地址对应的接口标识。
作为一种可选的示例,还可以根据网卡的每个接口负载,从网卡的多个接口中选择一个负载最低的接口转发第一数据包。
通过上述步骤S202-S208,将目标程序部署在网卡上,进而不需要服务器上的内核进程参与数据包的转发处理,避免了占用服务器的资源,提高了使用目标程序进行网络加速的效果,解决了将进行数据包处理的目标程序部署在服务器上,导致使用目标程序进行网络加速的效果较差的问题。
在一个示例性的实施例中,上述元数据表格存储在所述网卡的内存中,且所述目标程序被设置为允许访问所述内存中的所述元数据表格、且禁止访问所述第一服务器中与所述元数据表格在所述内存中的存储区域不同的其他存储区域。
需要说明的是,假设网卡的内存中有两个存储区域,存储区域A存储元数据表格,存储区域B存储其余数据,则目标程序设置为禁止访问存储区域B。
此外,假设第一服务器的内存分为网卡的内存和第一服务器自身的内存,则目标程序设置为禁止访问第一服务器自身的内存。
在本实施例中,通过上述方式限制目标程序访问数据的权限可以保障第一服务器中与元数据表格在所述内存中的存储区域不同的其他存储区域的数据的安全。
在一个示例性的实施例中,第一服务器的内核进程中运行的程序被设置为禁止访问所述内存中的所述元数据表格。
在本实施例中,通过上述方式可以确保网卡的内存中的元数据表格的数据的安全。
在一个示例性的实施例中,网卡在运行目标程序所使用的内存对外界是透明的,即网卡或者服务器的其他应用程序需要申请占用网卡的内存的时候,其是无法申请使用目标程序在网卡中所占用的内存,即目标程序所使用的内存资源不会被其他应用程序抢占,进而确保了目标程序可以在网卡上稳定的运行。
在一个示例性的实施例中,上述方法还包括以下步骤:在所述第一服务器的网卡在第一时刻接收到所述第一数据包、所述目标操作标识不用于指示丢弃所述第一数据包、且在从所述第一时刻开始的第一时长内未执行完所述目标操作标识所对应的操作的情况下,丢弃所述第一数据包。
也就是说,如果目标操作标识用于指示转发第一数据包,但从第一时刻开始的第一时长内未成功转发第一数据包,则应当丢弃第一数据包。
如果目标操作标识用于指示将第一数据包传输到内核进程进行处理,但从第一时刻开始的第一时长内未成功将第一数据包传输到内核进程进行处理或者在将第一数据包传输到内核进程进行处理之后,未接收到内核进程发送的处理结果的情况下,则也丢弃第一数据包。
需要说明的是,网卡在通过目标程序在丢弃第一数据包以后,可以停止执行目标程序,进而释放因为运行目标程序而占用的相关资源。
需要说明的是,由于XDP程序最终是在数据路径上执行,这意味着内核可能会受到程序影响,造成不可预知的后果。因此,需要在智能网卡上严格限制XDP程序的完成时间,这样的话,程序便无法包含比较耗时的复杂操作。若不这样,一旦智能网卡接收队列中的数据包无法及时处理,系统的数据传输将出现异常。
在一个示例性的实施例中,上述方法还包括以下步骤:在所述第一服务器的网卡在第一时刻接收到所述第一数据包、所述目标操作标识不用于指示丢弃所述第一数据包、且在从所述第一时刻开始的第一时长内未执行完所述目标操作标识所对应的操作的情况下,丢弃所述第一数据包。
需要说明的是,在本实施例中,通过生成错误提示信息并显示错误提示信息可以使得目标对象及时的分析目标程序存在的问题,进而及时的进行。
显然,上述所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。为了更好的理解上述方法,以下结合实施例对上述过程进行说明,但不用于限定本发明实施例的技术方案,具体地:
为了更好的理解,以下对本申请所涉及的技术方案进行相应的原理性说明:扩展的伯克利包过滤器(Extended Berkeley Packet Filter,简称为eBPF)是Linux上的一个内核内解释器,eBPF允许程序从用户空间注入到内核的特定位置,并通过特定的事件来触发程序执行。eBPF程序使用受限制的C语言编写,编译成目标程序,然后目标程序通过clang/llvm编译器注入内核。值得一提的是。这些程序并不能直接访问内核内存,而是通过称为eBPF map的K-V(键-值)方式与其他程序通信。而XDP是一种特殊的eBPF程序,可以进行快速的分组处理。XDP程序在网络堆栈之前被注入到网卡的RX路径上。RX路径上的每个数据包都可以触发XDP程序,并根据程序对其进行处理。
eBPF使编程代码能够在更安全和受限的环境中在内核空间中执行,这意味着需要修改内核源代码或自定义内核模块的工具。eBPF在Linux内核中采用了一种灵活高效的虚拟机(VM),以安全地在多个挂钩点执行字节码。这些程序在受限的环境中运行,只能访问有限的一组功能。
图3示意出了eBPF的工作机制,其中,扩展的伯克利包过滤器为eBPF,高速串行计算机扩展总线标准为PCI-E,网络处理器为NFP,快速数据路径程序为XDP程序,网络协议栈为Networking Stack,Maps、Map Hooks是eBPF中的两个重要概念,Mark、Redirect、Drop、stats为Linux系统中的一种命令,包为packet,描述符号为Descriptor,元数据为metadate;TC是Traffic Control,是一种网络流量控制、流量压缩和服务质量(Quality ofService,简称为QoS)保证机制,TC在Linux内核中相当于一个独立的子系统,它管理着Linux内核中的网络设备和队列,可以实现对不同类型的流(如HTTP、FTP、SSH等)的流量限制、限流、分类和优化等。
XDP和eBPF的区别:
XDP是一种专门用于网络数据包处理的技术。它主要用于在数据包到达网络接口时执行自定义的数据包处理程序,例如包过滤、路由、重定向等。eBPF是一种通用的内核扩展技术,不仅适用于网络数据包处理,还适用于系统监控、性能分析、安全审计等多种用途。它具有更广泛的应用范围。
NFP (Netronome Flow Processor)是一种基于网络数据包处理的网络处理器,它由Netronome公司研发。这种处理器采用了可编程的数据路径,以并行方式处理数据流,而不需要将数据包传输到操作系统内核进行处理。这种设计使得它能够在高性能网络应用中表现出色,如网络加速、深度包检测、机器学习和数据中心网络等。
挂钩(hook):hooks是eBPF程序的事件驱动机制,用于在内核或应用程序的特定点执行eBPF程序。例如,当系统调用发生时,可以在该系统调用之前或之后执行特定的eBPF程序。hooks为开发者提供了一种灵活而强大的方式,用于在内核或应用程序的关键位置执行自定义逻辑。
eBPF使用了许多挂钩来连接程序,包括那些与数据路径下端有关的程序。从Linux4.8开始,XDP添加了新的挂钩,这是一种新的可编程高性能网络数据路径,与Linux堆栈协同工作,并依赖eBPF进行非常快速的数据包处理。XDP挂钩允许执行程序在数据包到达Linux网络堆栈之前的早期阶段处理数据包。连接到XDP挂钩的有效eBPF程序必须返回一个XDP_action,在bpf.h中定义的可用值如下所示:
XDP_ABORTED 发生错误,丢弃数据包。
XDP_DROP 丢弃数据包。
XDP_PASS 允许内核堆栈进行进一步处理。
XDP_TX 把报文从其进入的接口转发。
XDP_REDIRECT 把报文转发至其他接口(除去报文进入接口)。
eBPF map:
eBPF使用映射(maps)作为通用的键/值数据结构,用于内核/硬件和用户空间之间的数据传输。maps使用文件描述符进行管理,并通过BPF系统调用从用户空间进行访问。每种类型的map都有不同的功能,其中一些是全局使用的,另一些供特定的应用程序访问。linux在/usr/include/linux/bpf.h中的bpf_map_type记录了所有map类型,一些常用的如下:
BPF_MAP_TYPE_HASH 哈希索引的map。
BPF_MAP_TYPE_ARRAY数字索引的map。
BPF_MAP_TYPE_PROG_ARAY包含对其他eBPF程序的引用的map。
BPF_MAP_TYPE_SOCKMAP包含套接字引用的map。
一些智能网卡已经将这种受良好约束的VM映射到轻量级网络处理单元(NetworkProcessing Unit,简称为NPU)通用内核,而本申请利用这些功能使内核在网络接口上而不是在主机CPU上执行eBPF程序。智能网卡上的环境比物理服务器上的环境更严格。因此,在将XDP安装到智能网卡存在安全性、资源利用以及透明性方面存在更加严格的限制。
图4示意出了BPF程序卸载到普通网卡上的工作原理,其中,
Bpf_prog.c是网络数据包到达网络接口时执行自定义的数据包处理逻辑的源程序;
LLVM是一种通用的编译器框架,支持多种编程语言和目标架构。在XDP程序的上下文中,LLVM通常用于将高级语言编写的BPF程序编译成可在内核中执行的BPF字节码;
Bpf_prog.elf是一个经过编译的BPF程序的可执行二进制文件。BPF程序通常以.elf 格式存储,以便加载到Linux内核中执行。这种文件包含了BPF程序的字节码以及一些元数据,使操作系统能够正确地加载和执行这个程序;
Bpf syscall是一系列bpf系统调用,主要作用有:加载bpf程序;获取bpf程序句柄;调整bpf程序的运行参数;
Verifier.c通常指BPF程序验证器,是Linux内核中的一个关键组件,它用于确保加载到内核中的BPF程序是安全且符合规范的;
JIT:在XDP和BPF的上下文中,JIT(Just-In-Time Compiler)编译器通常与LLVM一起使用,将高级BPF程序编译成BPF字节码,并在内核中执行。这种编译方式允许XDP程序在运行时实现高性能的数据包处理;
Nfp_bpf_jit.c:已经通过BPF验证器验证并获得了内核的批准的BPF程序,最终下放到NFP执行;
图4中的网络处理器为NFP。
关于安全性,由于XDP程序最终是在数据路径上执行,这意味着内核可能会受到程序影响,造成不可预知的后果。因此,需要在智能网卡上严格限制XDP程序的完成时间,这样的话,程序便无法包含比较耗时的复杂操作。若不这样,一旦智能网卡接收队列中的数据包无法及时处理,系统的数据传输将出现异常。
关于资源利用:智能网卡需对XDP程序和eBPF map的大小有严格的限制。智能网卡上的内存资源毕竟还是远小于物理服务器。根据测试,智能网卡上程序中的最大指令数仅为2000-3000条,而物理服务器上的软件一般最多可支持一百万条指令。此外,在智能网卡中只允许卸载一个XDP程序,但物理服务器上允许使用多个。除了XDP程序段的大小外,eBPFmap的大小也受到限制。硬件的每个键+值的最大限制为64字节,并且map上的条目数量同样需要有一个最大限制,一般情况下其数量不超过300万条。
关于透明性:XDP硬件卸载可能会影响共享此网络接口的其他应用或者服务,这些服务可能会受到影响。
也就是说,将XDP安装到智能网卡首先要确保满足以下三个条件:
1)安全可靠的安装:XDP程序必须在不损害系统安全的情况下执行。对于触发XDP程序的每个数据包,智能网卡必须及时完成数据包的处理流程。此外,XDP程序只能访问eBPF map的存储区域,以保护数据传输的安全。
采取方案:严格控制XDP逻辑代码对于实际资源的访问规则,避免使用一切非必要资源,这要求在代码中明确物理资源的使用范围,并严格控制程序的执行时间,一旦超时,即刻反错并释放资源。
2)固定可利用资源下最大限度上的性能优化:由于智能网卡上的资源同样是有限且紧张的,因而在智能网卡上安装XDP必须充分利用其资源,最大限度地提高网络性能。
采取方案:通过不同协议的网络报文卸载到智能网卡,提高性能也有所差异。例如,用户数据报协议(User Datagram Protocol,简称为UDP)的卸载性能要优于传输控制协议(Transmission Control Protocol,简称为 TCP),因为UDP是无状态的,而TCP数据包需要频繁地获取上下文信息,如果将这些报文统统卸载,便是一种典型的资源浪费。由于不同的数据包具有不同的数据路径,需要针对不同的数据包对象以及转发规则进行分析,确认其最优转发方案,并在XDP程序中对接收到的数据包进行分类。一些无法由该方法加速的数据包直接跳过交由系统处理,而一些性能增益显著的数据流量直接由XDP程序负责控制。
3)透明的使用一些共享硬件资源:为了更好的满足兼容性,XDP对物理资源的应用应该对智能网卡或者物理服务器上的其他服务透明,防止资源抢占,在利用智能网卡加速虚拟网络处理时,其他服务不应受到影响。
采取方案: XDP程序根据特定字段过滤网络设备接收到的所有报文,以防止其他服务流量控制程序的误操作。过滤处理是轻量级的,对应用层是透明的。
在保证满足上述条件的情况下,开始设计XDP程序,主要可分为三部分:数据包过滤器(即上述过滤程序)、转发器(即上述转发程序)以及元数据存储(上述元数据表格)。
首先,元数据存储是eBPF map实现的键值结构,它存储各种数据和策略,即针对不同的报文应当进行何种处理。当XDP在智能网卡上安装时,这种查询几乎没有成本。元数据存储可以在运行时根据反馈进行动态更新。此外,当系统部署发生变化时,用户空间中的代理应用程序可以更新元数据,这是在控制平面上的工作。
需要说明的是,到达网络接口的报文首先被传递到过滤器。在对数据包进行反序列化以获得包头之后,过滤器执行数据包检查和过滤,判断报文是否非法,错误报文(例如TTL为零)将被丢弃。然后,过滤器解析报文并分析字段内容,根据元数据存储中给定的规则对其进行过滤。
需要说明的是,通过过滤器的报文将在转发器中进一步解析,并根据指定的规则进行处理,主要关注的是内部分组中的数据,例如,解析内部包头的目的IP地址,然后根据该IP地址在元数据存储器中搜索目的IP地址的完整信息。如果查询成功,转发器将获得主机IP地址和有关目标的信息并将报文进行转发。否则,进程将终止,并丢弃报文。
需要说明的是,下面就在网卡上安装XDP进行详细说明:
Maps安装:将maps完全位于智能网卡内存中;
主机上运行的eBPF程序无法访问安装到智能网卡中的maps,反之亦然(因为主机无法直接有效的访问智能网卡内存);
物理服务器端的用户态接口保持不变,相关示意图如图5所示,其中,左侧为内核中的数据结构,右边为将XDP程序卸载安装至网卡后内核的数据结构,图5中的以太网为Ethernet,网络处理器为NFP,高速串行计算机扩展总线标准为PCle,快速数据路径程序为XDP程序。
需要说明的是,内核中的每个maps都有一组相关联的ops,相关代码如下所示:
/*map is generic key/value storage optionally accessible by eBPFprograms */
struct bpf_map_ops{
/*func callable from userspace (via syscall ) */
Int (*map_alloc_check)(union bpf_attr *attr );
struct bpf_map * (*map_alloc) (union bpf_attr *attr);
void (*map_release)( struct bpf_map *map, struct file *map_file);
void (*map_free) ( struct bpf_map *map);
int(*map_get_next_key)( struct bpf_map *map, void *key, void *next_key);
/*func callable from userspace and from eBPF programs */
void *(map_lookup_elem)(struct bpf_map *map, void *key);
void *(map_update_elem) (struct bpf_map *map, void *key, void *value,u64 flags);
int (*map_delete_elem) (struct bpf_map *map,void *key);
};
每个映射类型(数组、哈希、LRU、LPM等)都有自己对应的一组ops,这些ops具体的实现特定于maps的逻辑;
如果设置了map_ifindex参数,则无论类型如何,ops都指向一个“卸载ops”的空组(bpf_soffload_prog_ops),此时这些相关接口只允许来自用户态系统程序的调用。
XDP程序安装:内核中的verifier(验证器)为物理服务器上的相关系统结构提供执行验证和一些常见的JIT步骤,当程序卸载到智能网卡时,这些步骤可能会导致上下文信息丢失,出现一些兼容性问题。程序卸载后,设备转换器按原样访问加载的程序。例如结构体、maps、以及各种函数。
为了更好的理解,以下举例一种实际应用场景:在云平台上,大多数物理服务器只起到转发作用而并不是真正的收发报文,例如,在软件定义网络(Software-DefinedNetworking Controller,简称为SDN)控制器的作用下,某台主机可能只是承载了一个起到地址转换作用的网关端口,从其他物理服务器转发而来的报文抵达该主机之后只是进行了相关处理就立刻转发至其他地方,这便完全没有任何必要去占用主机端的CPU、内存资源,因为将数据包转发到远程主机本身就比将它们重定向到本地内核更简单。因此,可以将此功能移出主机,并通过XDP将其卸载到智能网卡。进而使用网卡上的eBPF map更新转发策略即可完成转发。报文实际流程如下:
步骤一:报文抵达网络端口,触发处于内核挂钩处的XDP程序。
步骤二:XDP程序中的过滤器判断该报文为合法数据包,且无须上送物理服务器进行处理,报文流转至转发器。
步骤三:转发器取得报文中的源IP以及目的IP等信息,判断出该报文需要做地址转换,然后通过相关函数进行操作,完成之后直接从硬件端口转发至目的地。
需要说明的是,本申请提出了一种XDP卸载框架来加速数据包处理。在智能网卡上可靠地实现降低延迟并提高转发效率,同时CPU利用率为零。不会影响主机上的其他服务。本申请设计了一个在智能网卡上卸载XDP的原型demo。由于智能网卡的限制,将数据包处理功能分为两部分,将影响性能的关键的功能部署在智能网卡中,根据严谨的代码逻辑进行过滤转发,而其他没必要卸载功能可以在主机上的软件中运行。
需要说明的是,本申请涉及软件定义的数据中心领域,主要针对虚拟化平台的网络性能的相关痛点,通过使用XDP,根据约束条件划分分组处理函数,并分析卸载函数的可靠性,然后最大限度地利用智能网卡的资源,优化选择卸载到智能网卡的部分处理功能。在保证系统安全的前提下,在云平台上提供高性能的数据包处理,同时不影响物理服务器上的其他服务。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
在本实施例中还提供了一种数据包的处理装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图6是根据本申请实施例的一种数据包的处理装置的结构框图,如图6所示,该装置包括:
判断模块62,用于在第一服务器的网卡接收到第一数据包的情况下,通过运行在所述网卡上的目标程序确定对所述第一数据包进行操作的目标操作标识;
获取模块64,用于在所述目标操作标识用于指示不将所述第一数据包传输到所述内核进程进行处理、且对所述第一数据包进行转发的情况下,通过所述目标程序获取用于转发所述第一数据包的目标IP地址;
转发模块66,用于通过所述目标程序将所述第一数据包转发至所述目标IP地址。
上述装置,将目标程序部署在网卡上,进而不需要服务器上的内核进程参与数据包的转发处理,避免了占用服务器的资源,提高了使用目标程序进行网络加速的效果,解决了将进行数据包处理的目标程序部署在服务器上,导致使用目标程序进行网络加速的效果较差的问题。
在一个示例性的实施例中,判断模块62,还用于在所述第一服务器的网卡接收到第一数据包的情况下,通过预设的钩子程序触发运行所述目标程序,并通过所述目标程序确定对所述第一数据包进行操作的目标操作标识。
在一个示例性的实施例中,判断模块62,还用于通过所述目标程序判断所述第一数据包是否为合法数据包;在判断出所述第一数据包是合法数据包的情况下,通过所述目标程序获取所述第一数据包中的预定字段的取值;通过所述目标程序根据所述预定字段的取值确定对所述第一数据包进行操作的目标操作标识。
在一个示例性的实施例中,判断模块62,还用于通过所述目标程序中的过滤模块获取所述第一数据包的包头;通过所述过滤模块根据所述包头判断所述第一数据包是否为合法数据包。
在一个示例性的实施例中,判断模块62,还用于通过所述过滤模块判断所述包头中的第一字段的取值是否预设的异常取值或位于预设的异常取值范围内;在所述第一字段的取值是所述异常取值或位于所述异常取值范围内的情况下,判断出所述第一数据包不是合法数据包;在所述第一字段的取值不是所述异常取值或不位于所述异常取值范围内的情况下,判断出所述第一数据包是合法数据包。
在一个示例性的实施例中,判断模块62,还用于通过所述目标程序中的过滤模块以所述预定字段的取值为查询条件查询元数据表格,得到第一查询结果,其中,所述元数据表格中记录了多组具有对应关系的所述预定字段的不同取值和不同操作标识;在所述第一查询结果包括查询到的与所述预定字段的取值具有对应关系的第一操作标识的情况下,确定所述目标操作标识为所述第一操作标识,其中,所述第一操作标识用于指示将所述第一数据包传输到所述内核进程进行处理、或者用于指示对所述第一数据包进行转发、或者用于指示丢弃所述第一数据包;在所述第一查询结果未包括查询到的与所述预定字段的取值具有对应关系的操作标识的情况下,确定所述目标操作标识为第二操作标识别,其中,所述第二操作标识用于指示将所述第一数据包传输到所述内核进程进行处理。
在一个示例性的实施例中,上述装置,还包括:处理模块,用于在通过所述目标程序判断是否将所述第一数据包是否为合法数据包之后,在判断出所述第一数据包不是合法数据包的情况下,丢弃所述第一数据包。
在一个示例性的实施例中,获取模块64,还用于通过所述目标程序中的转发模块获取所述第一数据包的包头中的第一目的IP地址;通过所述目标程序中的转发模块以所述第一目的IP地址为查询条件查询元数据表格,得到第二查询结果,其中,所述元数据表格中记录了多组具有对应关系的地址转换前的IP地址和地址转换后的IP地址;在所述第二查询结果包括查询到的与所述第一目的IP地址具有对应关系的第二目的IP地址的情况下,通过所述目标程序中的所述转发模块获取所述第二目的IP地址,其中,用于转发所述第一数据包的所述目标IP地址为所述第二目的IP地址。
在一个示例性的实施例中,转发模块66,还用于通过所述目标程序中的所述转发模块获取所述第一数据包中携带的数据字段的取值;通过所述目标程序中的所述转发模块将所述数据字段的取值和所述第二目的IP地址封装成第二数据包;通过所述目标程序中的所述转发模块将所述第二数据包转发至所述第二目的IP地址。
在一个示例性的实施例中,处理模块,还用于在通过所述目标程序中的转发模块以所述第一目的IP地址为查询条件查询元数据表格,得到第二查询结果之后,在所述第二查询结果表示未查询到与所述第一目的IP地址具有对应关系的所述第二目的IP地址的情况下,丢弃所述第一数据包。
在一个示例性的实施例中,所述目标程序为快速数据路径XDP程序。
在一个示例性的实施例中,所述元数据表格存储在所述网卡的内存中。
在一个示例性的实施例中,所述目标程序被设置为允许访问所述内存中的所述元数据表格、且禁止访问所述第一服务器中与所述元数据表格在所述内存中的存储区域不同的其他存储区域。
在一个示例性的实施例中,所述内核进程中运行的程序被设置为禁止访问所述内存中的所述元数据表格。
在一个示例性的实施例中,处理模块,还用于在所述第一服务器的网卡在第一时刻接收到所述第一数据包、所述目标操作标识不用于指示丢弃所述第一数据包、且在从所述第一时刻开始的第一时长内未执行完所述目标操作标识所对应的操作的情况下,丢弃所述第一数据包。
在一个示例性的实施例中,处理模块,还用于在从所述第一时刻开始的第一时长内未执行完所述目标操作标识所对应的操作的情况下,生成错误提示信息,其中,所述错误提示信息用于提示所述第一数据包未被及时处理。
在一个示例性的实施例中,判断模块62,还用于在第一服务器的网卡接收到第一数据包的情况下,通过所述目标程序判断所述第一数据包的类型是否是预定类型;在判断出所述第一数据包的类型是所述预定类型的情况下,通过所述目标程序确定对所述第一数据包进行操作的目标操作标识。
在一个示例性的实施例中,处理模块,还用于在通过所述目标程序判断所述第一数据包的类型是否是预定类型之后,在判断出所述第一数据包的类型不是所述预定类型的情况下,通过所述目标程序将所述第一数据包传输到所述第一服务器中的所述内核进程进行处理。
在一个示例性的实施例中,转发模块66,还用于在所述网卡从所述网卡的第一接口接收到所述第一数据包的情况下,通过所述目标程序从所述第一接口将所述第一数据包转发至所述目标IP地址;或者在所述网卡从所述网卡的第一接口接收到所述第一数据包的情况下,通过所述目标程序从所述网卡的第二接口将所述第一数据包转发至所述目标IP地址,其中,所述第二接口与所述第一接口不同。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
本申请的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本申请的实施例还提供了一种电子设备,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述电子设备还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (22)
1.一种数据包的处理方法,其特征在于,包括:
在第一服务器的网卡接收到第一数据包的情况下,通过运行在所述网卡上的目标程序确定对所述第一数据包进行操作的目标操作标识;
在所述目标操作标识用于指示不将所述第一数据包传输到内核进程进行处理、且对所述第一数据包进行转发的情况下,通过所述目标程序获取用于转发所述第一数据包的目标IP地址;
通过所述目标程序将所述第一数据包转发至所述目标IP地址。
2.根据权利要求1所述的方法,其特征在于,所述在第一服务器的网卡接收到第一数据包的情况下,通过运行在所述网卡上的目标程序确定对所述第一数据包进行操作的目标操作标识,包括:
在所述第一服务器的网卡接收到第一数据包的情况下,通过预设的钩子程序触发运行所述目标程序,并通过所述目标程序确定对所述第一数据包进行操作的目标操作标识。
3.根据权利要求1所述的方法,其特征在于,所述通过运行在所述网卡上的目标程序确定对所述第一数据包进行操作的目标操作标识,包括:
通过所述目标程序判断所述第一数据包是否为合法数据包;
在判断出所述第一数据包是合法数据包的情况下,通过所述目标程序获取所述第一数据包中的预定字段的取值;
通过所述目标程序根据所述预定字段的取值确定对所述第一数据包进行操作的目标操作标识。
4.根据权利要求3所述的方法,其特征在于,所述通过所述目标程序判断所述第一数据包是否为合法数据包,包括:
通过所述目标程序中的过滤模块获取所述第一数据包的包头;
通过所述过滤模块根据所述包头判断所述第一数据包是否为合法数据包。
5.根据权利要求4所述的方法,其特征在于,所述通过所述过滤模块根据所述包头判断所述第一数据包是否为合法数据包,包括:
通过所述过滤模块判断所述包头中的第一字段的取值是否预设的异常取值或位于预设的异常取值范围内;
在所述第一字段的取值是所述异常取值或位于所述异常取值范围内的情况下,判断出所述第一数据包不是合法数据包;
在所述第一字段的取值不是所述异常取值或不位于所述异常取值范围内的情况下,判断出所述第一数据包是合法数据包。
6.根据权利要求3所述的方法,其特征在于,所述通过所述目标程序根据所述预定字段的取值确定对所述第一数据包进行操作的目标操作标识,包括:
通过所述目标程序中的过滤模块以所述预定字段的取值为查询条件查询元数据表格,得到第一查询结果,其中,所述元数据表格中记录了多组具有对应关系的所述预定字段的不同取值和不同操作标识;
在所述第一查询结果包括查询到的与所述预定字段的取值具有对应关系的第一操作标识的情况下,确定所述目标操作标识为所述第一操作标识,其中,所述第一操作标识用于指示将所述第一数据包传输到所述内核进程进行处理、或者用于指示对所述第一数据包进行转发、或者用于指示丢弃所述第一数据包;
在所述第一查询结果未包括查询到的与所述预定字段的取值具有对应关系的操作标识的情况下,确定所述目标操作标识为第二操作标识别,其中,所述第二操作标识用于指示将所述第一数据包传输到所述内核进程进行处理。
7.根据权利要求3所述的方法,其特征在于,在通过所述目标程序判断是否将所述第一数据包是否为合法数据包之后,所述方法还包括:
在判断出所述第一数据包不是合法数据包的情况下,丢弃所述第一数据包。
8.根据权利要求1所述的方法,其特征在于,所述通过所述目标程序获取用于转发所述第一数据包的目标IP地址,包括:
通过所述目标程序中的转发模块获取所述第一数据包的包头中的第一目的IP地址;
通过所述目标程序中的转发模块以所述第一目的IP地址为查询条件查询元数据表格,得到第二查询结果,其中,所述元数据表格中记录了多组具有对应关系的地址转换前的IP地址和地址转换后的IP地址;
在所述第二查询结果包括查询到的与所述第一目的IP地址具有对应关系的第二目的IP地址的情况下,通过所述目标程序中的所述转发模块获取所述第二目的IP地址,其中,用于转发所述第一数据包的所述目标IP地址为所述第二目的IP地址。
9.根据权利要求8所述的方法,其特征在于,所述通过所述目标程序将所述第一数据包转发至所述目标IP地址,包括:
通过所述目标程序中的所述转发模块获取所述第一数据包中携带的数据字段的取值;
通过所述目标程序中的所述转发模块将所述数据字段的取值和所述第二目的IP地址封装成第二数据包;
通过所述目标程序中的所述转发模块将所述第二数据包转发至所述第二目的IP地址。
10.根据权利要求8所述的方法,其特征在于,通过所述目标程序中的转发模块以所述第一目的IP地址为查询条件查询元数据表格,得到第二查询结果之后,所述方法还包括:
在所述第二查询结果表示未查询到与所述第一目的IP地址具有对应关系的所述第二目的IP地址的情况下,丢弃所述第一数据包。
11.根据权利要求1所述的方法,其特征在于,所述目标程序为快速数据路径XDP程序。
12.根据权利要求6或8所述的方法,其特征在于,所述元数据表格存储在所述网卡的内存中。
13.根据权利要求12所述的方法,其特征在于,所述目标程序被设置为允许访问所述内存中的所述元数据表格、且禁止访问所述第一服务器中与所述元数据表格在所述内存中的存储区域不同的其他存储区域。
14.根据权利要求12所述的方法,其特征在于,所述内核进程中运行的程序被设置为禁止访问所述内存中的所述元数据表格。
15.根据权利要求1至11中任一项所述的方法,其特征在于,所述方法还包括:
在所述第一服务器的网卡在第一时刻接收到所述第一数据包、所述目标操作标识不用于指示丢弃所述第一数据包、且在从所述第一时刻开始的第一时长内未执行完所述目标操作标识所对应的操作的情况下,丢弃所述第一数据包。
16.根据权利要求15所述的方法,其特征在于,所述方法还包括:
在从所述第一时刻开始的第一时长内未执行完所述目标操作标识所对应的操作的情况下,生成错误提示信息,其中,所述错误提示信息用于提示所述第一数据包未被及时处理。
17.根据权利要求1至11中任一项所述的方法,其特征在于,在第一服务器的网卡接收到第一数据包的情况下,通过运行在所述网卡上的目标程序确定对所述第一数据包进行操作的目标操作标识,包括:
在第一服务器的网卡接收到第一数据包的情况下,通过所述目标程序判断所述第一数据包的类型是否是预定类型;
在判断出所述第一数据包的类型是所述预定类型的情况下,通过所述目标程序确定对所述第一数据包进行操作的目标操作标识。
18.根据权利要求17所述的方法,其特征在于,在通过所述目标程序判断所述第一数据包的类型是否是预定类型之后,所述方法还包括:
在判断出所述第一数据包的类型不是所述预定类型的情况下,通过所述目标程序将所述第一数据包传输到所述第一服务器中的所述内核进程进行处理。
19.根据权利要求1至11中任一项所述的方法,其特征在于,所述通过所述目标程序将所述第一数据包转发至所述目标IP地址,包括:
在所述网卡从所述网卡的第一接口接收到所述第一数据包的情况下,通过所述目标程序从所述第一接口将所述第一数据包转发至所述目标IP地址;或者
在所述网卡从所述网卡的第一接口接收到所述第一数据包的情况下,通过所述目标程序从所述网卡的第二接口将所述第一数据包转发至所述目标IP地址,其中,所述第二接口与所述第一接口不同。
20.一种数据包的处理装置,其特征在于,包括:
判断模块,用于在第一服务器的网卡接收到第一数据包的情况下,通过运行在所述网卡上的目标程序确定对所述第一数据包进行操作的目标操作标识;
获取模块,用于在所述目标操作标识用于指示不将所述第一数据包传输到内核进程进行处理、且对所述第一数据包进行转发的情况下,通过所述目标程序获取用于转发所述第一数据包的目标IP地址;
转发模块,用于通过所述目标程序将所述第一数据包转发至所述目标IP地址。
21.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现权利要求1至19任一项中所述的方法的步骤。
22.一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至19任一项中所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311242769.XA CN116996602B (zh) | 2023-09-25 | 2023-09-25 | 数据包的处理方法及装置、存储介质、电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311242769.XA CN116996602B (zh) | 2023-09-25 | 2023-09-25 | 数据包的处理方法及装置、存储介质、电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116996602A true CN116996602A (zh) | 2023-11-03 |
CN116996602B CN116996602B (zh) | 2024-01-26 |
Family
ID=88532447
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311242769.XA Active CN116996602B (zh) | 2023-09-25 | 2023-09-25 | 数据包的处理方法及装置、存储介质、电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116996602B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117896205A (zh) * | 2023-12-13 | 2024-04-16 | 重庆赛力斯新能源汽车设计院有限公司 | 一种内部通信方法、装置、电子设备及可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113296718A (zh) * | 2021-07-27 | 2021-08-24 | 阿里云计算有限公司 | 数据处理方法以及装置 |
CN115396528A (zh) * | 2022-08-17 | 2022-11-25 | 上海哔哩哔哩科技有限公司 | 基于协议族的quic数据传输方法及装置 |
CN115733782A (zh) * | 2021-08-26 | 2023-03-03 | 瞻博网络公司 | 用于数据包处理操作的双用户空间-内核空间数据路径 |
CN116244231A (zh) * | 2023-03-03 | 2023-06-09 | 阿里巴巴(中国)有限公司 | 一种数据传输方法、装置、系统、电子设备及存储介质 |
CN116545978A (zh) * | 2023-05-16 | 2023-08-04 | 深圳市石犀科技有限公司 | 数据处理方法、装置、系统、可读存储介质及进口网卡 |
-
2023
- 2023-09-25 CN CN202311242769.XA patent/CN116996602B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113296718A (zh) * | 2021-07-27 | 2021-08-24 | 阿里云计算有限公司 | 数据处理方法以及装置 |
CN115733782A (zh) * | 2021-08-26 | 2023-03-03 | 瞻博网络公司 | 用于数据包处理操作的双用户空间-内核空间数据路径 |
CN115396528A (zh) * | 2022-08-17 | 2022-11-25 | 上海哔哩哔哩科技有限公司 | 基于协议族的quic数据传输方法及装置 |
CN116244231A (zh) * | 2023-03-03 | 2023-06-09 | 阿里巴巴(中国)有限公司 | 一种数据传输方法、装置、系统、电子设备及存储介质 |
CN116545978A (zh) * | 2023-05-16 | 2023-08-04 | 深圳市石犀科技有限公司 | 数据处理方法、装置、系统、可读存储介质及进口网卡 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117896205A (zh) * | 2023-12-13 | 2024-04-16 | 重庆赛力斯新能源汽车设计院有限公司 | 一种内部通信方法、装置、电子设备及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116996602B (zh) | 2024-01-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11095758B2 (en) | Methods and apparatus for virtualized hardware optimizations for user space networking | |
US12095882B2 (en) | Accelerated network packet processing | |
Høiland-Jørgensen et al. | The express data path: Fast programmable packet processing in the operating system kernel | |
CN109547580B (zh) | 一种处理数据报文的方法和装置 | |
Li et al. | vNIDS: Towards elastic security with safe and efficient virtualization of network intrusion detection systems | |
US9397901B2 (en) | Methods, systems, and computer readable media for classifying application traffic received at a network traffic emulation device that emulates multiple application servers | |
US8176300B2 (en) | Method and apparatus for content based searching | |
CN116996602B (zh) | 数据包的处理方法及装置、存储介质、电子设备 | |
US11522773B1 (en) | Optimized batched packet processing for deep packet inspection | |
US9356844B2 (en) | Efficient application recognition in network traffic | |
US11936562B2 (en) | Virtual machine packet processing offload | |
CN114244560B (zh) | 流量处理方法及装置,电子设备,存储介质 | |
CN116545978B (zh) | 数据处理方法、装置、系统、可读存储介质及进口网卡 | |
US11347488B2 (en) | Compiling domain-specific language code to generate executable code targeting an appropriate type of processor of a network device | |
CN113709052B (zh) | 一种网络报文的处理方法、装置、电子设备和存储介质 | |
US20120140640A1 (en) | Apparatus and method for dynamically processing packets having various characteristics | |
CN109413001B (zh) | 对云计算系统内的交互数据进行安全保护的方法及装置 | |
CN110691139B (zh) | 一种数据传输方法、装置、设备及存储介质 | |
Freitas et al. | A survey on accelerating technologies for fast network packet processing in Linux environments | |
CN114710356B (zh) | 车载防火墙的数据处理方法、装置及车载防火墙设备 | |
CN113453278B (zh) | 一种基于5g upf下的tcp包分段组包方法及终端 | |
CN113422760B (zh) | 数据传输方法、装置、电子装置和存储介质 | |
Li et al. | Programming Network Stack for Physical Middleboxes and Virtualized Network Functions | |
Hlavatý | Network Interface Controller Offloading in Linux | |
CN117615009A (zh) | 一种报文的代理转发方法、装置及设备 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |