CN117692416A - 网络报文处理方法、装置、计算机设备和存储介质 - Google Patents
网络报文处理方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN117692416A CN117692416A CN202410157537.2A CN202410157537A CN117692416A CN 117692416 A CN117692416 A CN 117692416A CN 202410157537 A CN202410157537 A CN 202410157537A CN 117692416 A CN117692416 A CN 117692416A
- Authority
- CN
- China
- Prior art keywords
- message
- memory
- target
- network
- shared memory
- 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 claims abstract description 31
- 238000003860 storage Methods 0.000 title claims abstract description 16
- 230000015654 memory Effects 0.000 claims abstract description 609
- 238000012545 processing Methods 0.000 claims abstract description 102
- 238000000034 method Methods 0.000 claims abstract description 93
- 230000008569 process Effects 0.000 claims abstract description 57
- 238000004458 analytical method Methods 0.000 claims abstract description 31
- 230000004044 response Effects 0.000 claims description 73
- 238000004590 computer program Methods 0.000 claims description 47
- 230000006870 function Effects 0.000 claims description 32
- 238000013507 mapping Methods 0.000 claims description 10
- 238000010276 construction Methods 0.000 claims description 3
- 238000005516 engineering process Methods 0.000 description 14
- 238000005457 optimization Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 101150053844 APP1 gene Proteins 0.000 description 1
- 101100055496 Arabidopsis thaliana APP2 gene Proteins 0.000 description 1
- 101100189105 Homo sapiens PABPC4 gene Proteins 0.000 description 1
- 102100039424 Polyadenylate-binding protein 4 Human genes 0.000 description 1
- 101100016250 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) GYL1 gene Proteins 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000008094 contradictory effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 210000001503 joint Anatomy 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
-
- 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/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
- H04L69/162—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
-
- 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)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请涉及一种网络报文处理方法、装置、计算机设备和存储介质,所属领域为数据处理技术领域,所述方法包括:基于接收到的目标网络报文,从预构建的共享内存池中获取目标内存块,生成报文内存;基于网卡驱动,对目标网络报文进行第一标识化处理,得到目标网络报文描述符;基于所述目标网络报文描述符,对报文内存进行第二标识化处理,得到第一套接字缓存;通过网络协议栈对所述第一套接字缓存进行解析处理,根据解析处理结果,从报文内存对应的虚拟内存中读取网络报文数据,完成网络报文的处理。本申请基于构建的共享内存池,可在网络报文处理过程中,实现网络收包零拷贝,从而避免了因为报文的内存拷贝而带来的性能损失。
Description
技术领域
本申请涉及数据处理技术领域,特别是涉及一种网络报文处理方法、装置、计算机设备和存储介质。
背景技术
在现有收发包过程中,当报文量很大时,内存拷贝和上下文切换是性能损耗的主要原因,由此产生了很多避免报文拷贝的技术,业界把它们统称为零拷贝技术,现有网络零拷贝技术按其特征可以分成两大类,一是内核旁路技术,二是内核优化技术,其中,内核旁路技术因为绕开内核,需要使用用户态网络协议栈与它对接,而业界目前并没有成熟度和普适性能达到内核协议栈水平的软件,而且在保证性能收益的前提下,大量存量的APP(Application,应用程序)如何适配到用户态协议栈上也是一项重要的工作;内核优化技术只支持发包零拷贝,如果将它倒转用于收包零拷贝存在如下问题:在收包方向,因为报文内存的地址并没有映射到APP进程页表中,所以APP无法访问网卡驱动分配的内存,如果将网卡驱动分配的内存映射给APP,将导致APP可以读写内核的内存,当APP出现错误时可能导致整个操作系统崩溃,为了避免上述问题,可以控制APP读写内核内存的范围,只将网卡驱动分配的报文内存映射给APP,但这仍然存在安全性漏洞,恶意的APP可能监听或篡改其它APP的报文。
因此,亟需提出一种适合于通用场景的网络报文处理方法、装置、计算机设备和存储介质。
发明内容
基于此,有必要针对上述技术问题,提供一种适合于通用场景的网络报文处理方法、装置、计算机设备和存储介质。
一方面,提供一种网络报文处理方法,所述方法包括:
接收目标网络报文,并基于所述目标网络报文,从预构建的共享内存池中获取目标内存块,生成报文内存,所述共享内存池中的内存块与应用程序进程的虚拟内存一一映射;
响应于检测到所述报文内存生成成功时,基于网卡驱动,对所述目标网络报文进行第一标识化处理,得到目标网络报文描述符;
基于所述目标网络报文描述符,对所述报文内存进行第二标识化处理,得到第一套接字缓存;
通过网络协议栈对所述第一套接字缓存进行解析处理,根据解析处理结果,从所述报文内存对应的虚拟内存中读取网络报文数据,完成网络报文的处理。
可选的,所述共享内存池的构建方法包括:
基于第一系统调用,构建目标设备文件,所述目标设备文件存储于操作系统内核;
基于第二系统调用,设置所述目标设备文件对应的目标参数;
基于所述目标参数,生成所述共享内存池,所述共享内存池至少包括载荷数据单元和控制数据单元。
可选的,所述基于第二系统调用,设置所述目标设备文件对应的目标参数包括:
基于所述第二系统调用,设置所述共享内存池对应的属性标签、内存块尺寸、共享内存池使用方式和内存块数量;
定义一个内存页的尺寸为缺省的内存块尺寸。
可选的,在基于所述目标参数,生成所述共享内存池之后,所述方法还包括:
基于第三系统调用,将所述载荷数据单元对应的内存页映射入应用程序进程的虚拟内存,所述载荷数据单元至少包括一个由内存块组成的内存页。
可选的,在所述共享内存池构建完成后,所述方法还包括:
基于所述共享内存池,构建应用程序接口,所述应用程序接口至少包括申请内存块接口、释放内存块接口、网卡实例接口;
基于第二系统调用以及所述网卡实例接口,将所述共享内存池与网卡实例进行绑定,其中,一个共享内存池可以与多个网卡实例进行绑定;
基于所述申请内存块接口和所述释放内存块接口,将所述共享内存池与接口对应的其他模块进行绑定,所述其他模块至少包括网卡驱动模块、套接字模块。
可选的,所述控制数据单元至少包括一个无锁环形队列,在设置所述共享内存池对应的内存块数量时,所述方法还包括:
响应于检测到所述共享内存池对应的内存块数量设置指令时,通过共享内存池模块为共享内存池分配多个共享内存页;
基于所述共享内存页,划分得到目标数量的内存块,并将划分得到的内存块地址推入目标无锁环形队列,其中,一个内存块中的物理地址是连续的。
可选的,在通过共享内存池模块为共享内存池分配多个共享内存页之后,所述方法还包括:
对所述共享内存页进行锁定处理。
可选的,在基于所述目标网络报文,从预构建的共享内存池中获取目标内存块,生成报文内存之前,所述方法还包括:
基于第一应用程序构建套接字模块,并设置收包零拷贝选项,同时,第一应用程序和网络协议栈分别将其对应的事务ID变量初始化为目标值;
基于第二应用程序构建共享内存池,将所述共享内存池与至少一个网卡实例进行绑定;
其中,所述第一应用程序等同于或不等同于所述第二应用程序。
可选的,基于所述目标网络报文,从预构建的共享内存池中获取目标内存块,生成报文内存包括:
响应于接收到所述目标网络报文时,检测目标网卡实例是否与预构建的共享内存池进行绑定;
响应于检测到所述目标网卡实例与预构建的共享内存池进行绑定时,从所述共享内存池中获取目标内存块;
基于所述目标内存块,生成所述报文内存。
可选的,响应于检测到所述报文内存生成成功时,基于网卡驱动,对所述目标网络报文进行第一标识化处理,得到目标网络报文描述符包括:
基于所述目标网络报文,利用所述网卡驱动,构建私有报文描述符;
响应于检测到所述网卡驱动对应的网卡实例与共享内存池进行绑定时,在所述私有报文描述符上设置收包零拷贝标志,生成所述目标网络报文描述符。
可选的,在基于网卡驱动,对所述目标网络报文进行第一标识化处理,得到目标网络报文描述符之后,所述方法还包括:
将所述目标网络报文描述符排入网卡硬件的收包队列;
所述网卡硬件通过DMA操作将所述目标网络报文的相关数据复制到所述报文内存中,并向网卡驱动发送收包指令。
可选的,基于所述目标网络报文描述符,对所述报文内存进行第二标识化处理,得到第一套接字缓存包括:
响应于检测到收包指令时,基于网卡驱动,为所述报文内存构建初始套接字缓存;
响应于检测到所述目标网络报文描述符上设置有收包零拷贝标志时,在所述初始套接字缓存上设置共享内存指针,生成所述第一套接字缓存。
可选的,在基于所述目标网络报文描述符,对所述报文内存进行第二标识化处理,得到第一套接字缓存之后,所述方法还包括:
基于网络协议栈收包函数,将所述第一套接字缓存发送至所述网络协议栈。
可选的,通过网络协议栈对所述第一套接字缓存进行解析处理,根据解析处理结果,从所述报文内存对应的虚拟内存中读取网络报文数据包括:
响应于检测到所述第一套接字缓存时,利用所述网络协议栈对所述第一套接字缓存进行向上逐层解析处理;
将向上逐层解析处理后的第一套接字缓存排入相应的套接字模块收包队列中,并向应用程序发送收包指令;
基于所述收包指令,从所述报文内存对应的虚拟内存中读取网络报文数据。
可选的,基于所述收包指令,从所述报文内存对应的虚拟内存中读取网络报文数据包括:
响应于检测到所述收包指令时,基于第一系统调用函数,检测第一套接字缓存上是否设置有共享内存指针;
响应于检测到第一套接字缓存上设置有共享内存指针时,将所述共享内存指针对应的报文内存在应用程序进程中的虚拟内存地址赋值给结构数组参数中的目标字段,以读取所述网络报文数据。
可选的,在读取所述网络报文数据时,所述方法还包括:
在所述第一套接字缓存上记录事务ID当前值,并对所述事务ID做加1操作,得到第二套接字缓存;
将所述到第二套接字缓存传输至套接字模块中的套接字缓存待回收队列中。
可选的,在读取网络报文数据之后,所述方法还包括:
检测结构数组参数中的当前字段与所述目标字段是否一致;
响应于检测到所述当前字段与所述目标字段不一致时,记录事务ID当前值与报文内存的关联关系,并对事务ID做加1操作。
可选的,所述方法还包括:
对所述网络报文数据进行解析处理;
响应于检测到解析处理完成时,基于第二系统调用函数将所述报文内存对应的事务ID排入套接字模块的事件队列;
基于所述事务ID,从套接字缓存待回收队列中确定第二套接字缓存;
基于所述第二套接字缓存,释放其对应的第一套接字缓存,以及所述第一套接字缓存对应的内存块。
另一方面,提供了一种网络报文处理装置,所述装置包括:
报文内存生成模块,用于接收目标网络报文,并基于所述目标网络报文,从预构建的共享内存池中获取目标内存块,生成报文内存,所述共享内存池中的内存块与应用程序进程的虚拟内存一一映射;
第一标识化处理模块,用于在检测到所述报文内存生成成功时,基于网卡驱动,对所述目标网络报文进行第一标识化处理,得到目标网络报文描述符;
第二标识化处理模块,用于基于所述目标网络报文描述符,对所述报文内存进行第二标识化处理,得到第一套接字缓存;
读取模块,用于通过网络协议栈对所述第一套接字缓存进行解析处理,根据解析处理结果,从所述报文内存对应的虚拟内存中读取网络报文数据,完成网络报文的处理。
再一方面,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
接收目标网络报文,并基于所述目标网络报文,从预构建的共享内存池中获取目标内存块,生成报文内存,所述共享内存池中的内存块与应用程序进程的虚拟内存一一映射;
响应于检测到所述报文内存生成成功时,基于网卡驱动,对所述目标网络报文进行第一标识化处理,得到目标网络报文描述符;
基于所述目标网络报文描述符,对所述报文内存进行第二标识化处理,得到第一套接字缓存;
通过网络协议栈对所述第一套接字缓存进行解析处理,根据解析处理结果,从所述报文内存对应的虚拟内存中读取网络报文数据,完成网络报文的处理。
又一方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
接收目标网络报文,并基于所述目标网络报文,从预构建的共享内存池中获取目标内存块,生成报文内存,所述共享内存池中的内存块与应用程序进程的虚拟内存一一映射;
响应于检测到所述报文内存生成成功时,基于网卡驱动,对所述目标网络报文进行第一标识化处理,得到目标网络报文描述符;
基于所述目标网络报文描述符,对所述报文内存进行第二标识化处理,得到第一套接字缓存;
通过网络协议栈对所述第一套接字缓存进行解析处理,根据解析处理结果,从所述报文内存对应的虚拟内存中读取网络报文数据,完成网络报文的处理。
上述网络报文处理方法、装置、计算机设备和存储介质,所述方法包括:接收目标网络报文,并基于所述目标网络报文,从预构建的共享内存池中获取目标内存块,生成报文内存,所述共享内存池中的内存块与应用程序进程的虚拟内存一一映射;响应于检测到所述报文内存生成成功时,基于网卡驱动,对所述目标网络报文进行第一标识化处理,得到目标网络报文描述符;基于所述目标网络报文描述符,对所述报文内存进行第二标识化处理,得到第一套接字缓存;通过网络协议栈对所述第一套接字缓存进行解析处理,根据解析处理结果,从所述报文内存对应的虚拟内存中读取网络报文数据,完成网络报文的处理,本申请基于构建的共享内存池,可在网络报文处理过程中,实现网络收包零拷贝,从而避免了因为报文的内存拷贝而带来的性能损失。
附图说明
图1为现有技术中网络报文处理方法的流程示意图;
图2为一个实施例中网络报文处理方法的应用环境示意图;
图3为一个实施例中网络报文处理方法的流程示意图;
图4为一个实施例中网络报文处理方法的另一个流程示意图;
图5为一个实施例中网络报文处理方法的共享内存池整体结构示意图;
图6为一个实施例中网络报文处理装置的结构示意图;
图7为一个实施例中计算机设备的内部结构图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应当理解,在本申请的描述中,除非上下文明确要求,否则整个说明书中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
还应当理解,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本申请的描述中,除非另有说明,“多个”的含义是两个或两个以上。
需要注意的是,术语“S1”、“S2”等仅用于步骤的描述目的,并非特别指称次序或顺位的意思,亦非用以限定本申请,其仅仅是为了方便描述本申请的方法,而不能理解为指示步骤的先后顺序。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
根据背景技术可知,随着类Unix操作系统(分时操作系统)在绝大部分生产环境中的部署,内核集成的网络协议栈也取得了广泛的应用,在一些对网络性能要求较高的场景中,内核协议栈的性能成为人们关注的热点,如图1所示,现有技术在发包方向,报文从APP到网卡硬件的流程如下:APP调用sendmsg(计算机函数,在套接字处于连接状态时方可使用)等API(Application Programming Interface,应用程序编程接口)进入内核协议栈,socket(套接字)分配skb(socket buffer,Linux内核中网络报文的通用描述符)和报文内存,将待发送的数据从APP内存拷贝到skb报文内存中,然后协议栈经过向下的逐层处理后,将skb交到网卡驱动;网卡驱动将skb和报文内存的IO(输入输出)地址关联到一个私有的报文描述符上,然后将报文描述符推入发包队列,再通知网卡硬件发包;网卡硬件收到通知后,通过DMA(Direct Memory Access,成组数据传送)操作将报文内存中的数据复制到自己的硬件寄存器或线路上,通知网卡驱动该报文描述符已经使用完毕;网卡驱动调用该报文描述符关联的skb的回调函数,释放skb及报文内存。现有技术在收包方向,报文从网卡硬件到APP的流程如下:网卡驱动为私有的报文描述符分配报文内存,将它推入收包队列,供网卡硬件将来使用;网卡硬件通过DMA操作将报文数据复制到报文内存中,然后通知网卡驱动收包;网卡驱动为该报文内存创建skb,调用网络协议栈收包函数,将skb送入协议栈;协议栈经过向上的逐层处理后,将skb挂在相应的socket收包队列中,然后通知APP收包;APP调用recvmsg(系统调用函数)等API进入内核,socket将报文内存中的数据拷贝到APP内存中,然后释放skb及报文内存。在上述两个过程中,当报文量很大时,内存拷贝和上下文切换是性能损耗的主要原因,由此产生了很多避免报文拷贝的技术,业界把它们统称为零拷贝技术。
其中,网络零拷贝技术按其特征可以分成两大类:(1)内核旁路技术:这类技术的思路是全部或部分绕开内核协议栈,使APP和网卡驱动之间直接交互报文,典型代表就是DPDK(Data Plane Development Kit,是intel提供的数据平面开发套件),它是intel(英特尔)推动的开源项目,它利用内核的UIO(Userspace I/O,是运行在用户空间的I/O技术)框架,从网卡驱动开始就完全绕开了内核,实现了网卡驱动和APP之间的报文零拷贝,这类技术虽然实现了零拷贝,提升了性能,但因为绕开内核,缺点也同样明显,就是需要使用用户态网络协议栈与它对接,而业界目前并没有成熟度和普适性能达到内核协议栈水平的软件,而且在保证性能收益的前提下,大量存量的APP如何适配到用户态协议栈上也是一项重要的工作。(2)内核优化技术:这类技术是在内核中对特定流程的优化,例如sendfile(网络文件传输函数)功能,它是解决“将文件内容通过网络发送到远端”的特定场景而产生的优化技术,它虽然只是减少了拷贝次数,并没有完全实现零拷贝,但它避免了内核和APP之间的数据拷贝,也避免了内核和APP之间频繁的上下文切换,从而提高了性能,不过因为这个功能是为特定场景而开发的,所以没有普适性,并不能帮助提升其它场景的性能,在内核优化技术中,一个很重要的、普适性很高的技术是从Linux4.14版本开始支持的TX ZERO COPY(发包零拷贝),但是,它只支持发包方向的零拷贝,而不支持收包方向的零拷贝,其中,TXZERO COPY的原理如下:前置流程:APP创建socket(套接字)时,设置TX ZERO COPY选项,APP和网络协议栈分别将各自的“事务ID”初始化为0,其中,事务ID以socket为载体,是APP和内核之间一次成功零拷贝调用的唯一标识,内核使用它来通知APP自己不再使用相应的APP内存;APP发包时先记录事务ID当前值和APP内存的关联关系,然后调用sendmsg(系统调用函数)进入内核协议栈,socket分配skb,将APP内存直接作为skb报文内存(原来非零拷贝时的行为:分配skb报文内存,将APP内存中的数据拷贝到skb报文内存中),在skb中记录事务ID当前值,再对事务ID做加1操作,最后协议栈经过向下的逐层处理后,将skb交到网卡驱动;当APP调用sendmsg返回成功后,对事务ID做加1操作;网卡驱动将skb和报文内存的IO地址关联到一个私有的报文描述符上,然后将该描述符推入硬件发包队列,再通知网卡硬件发包;网卡硬件通过DMA操作将报文内存中的数据复制到自己的硬件寄存器或线路上,完成发包处理后通知网卡驱动该报文描述符已经使用完毕;网卡驱动回收该报文描述符,调用skb的回调函数,释放skb,将该skb的事务ID推入到socket的事件队列中;APP读取socket的事件队列,从中取出事务ID值,释放包括该事务ID值在内及之前的APP内存,至此,在发包方向,从APP到网卡驱动实现了报文零拷贝。
上述方法只支持发包零拷贝,如果将它倒转用于收包零拷贝存在如下三点问题:
(1)可行性:在发包方向,经过地址转换后,DMA可以访问APP内存,但在收包方向,因为报文内存的地址并没有映射到APP进程页表中,所以APP无法访问网卡驱动分配的内存。
(2)健壮性:在收包方向,为了解决可行性问题,如果将网卡驱动分配的内存映射给APP,将导致APP可以读写内核的内存,当APP出现错误时可能导致整个操作系统崩溃。
(3)安全性:为了避免健壮性问题,可以控制APP读写内核内存的范围,只将网卡驱动分配的报文内存映射给APP,但这仍然存在安全性漏洞,恶意的APP可能监听或篡改其它APP的报文。
因此,根据背景技术可知,在基于内核协议栈的收包零拷贝方面,还没有一个适合于通用场景的可用技术。
为解决上述技术问题,本申请提供了网络报文处理方法、装置、计算机设备和存储介质,基于构建的共享内存池,可在网络报文处理过程中,实现网络收包零拷贝,从而避免了因为报文的内存拷贝而带来的性能损失。
本申请提供的网络报文处理方法,可以应用于如图2所示的应用环境中。其中,终端102通过网络与设置于服务器104上的数据处理平台进行通信,其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个实施例中,如图3-图5所示,提供了一种网络报文处理方法,以该方法应用于图2中的终端为例进行说明,包括以下步骤:
S1:接收目标网络报文,并基于所述目标网络报文,从预构建的共享内存池中获取目标内存块,生成报文内存,所述共享内存池中的内存块与应用程序进程的虚拟内存一一映射。
需要说明的是,目标网络报文是从网卡硬件发送至应用程序APP(即收包方向)的网络报文,另外,如图5所示,共享内存池由应用程序APP中的共享内存池模块构建、配置以及分配和释放内存块,共享内存池模块是运行在操作系统内核中的模块,它以设备文件的方式为APP提供使用接口,设备文件所在目录为/dev/shmempool/,共享内存池包括载荷数据单元、控制数据单元,其中,载荷数据单元部分包括多个内存块,用于存储网络报文数据,控制数据单元部分包括至少一个无锁环形队列,在内存块划分成功时,其内存块地址会被推入一个无锁环形队列中,使用者申请时从无锁环形队列中出队,释放时入队。
在一些具体实施方式中,所述共享内存池的构建方法包括:
基于第一系统调用,构建目标设备文件,所述目标设备文件存储于操作系统内核,其中,第一系统调用可以是open系统调用(open是多种语言、环境的一种函数),在LINUX系统中open系统调用用于打开和创建文件,目标设备文件可以是为/dev/shmempool/x;
基于第二系统调用,设置所述目标设备文件对应的目标参数,其中,第二系统调用可以是ioctl(input/output control,一个专用于设备输入输出操作的系统调用)系统调用,所述目标参数至少包括共享内存池对应的属性标签、内存块尺寸、共享内存池使用方式和内存块数量,其中,属性标签即为上述的x,定义缺省的内存块尺寸为一个内存页的尺寸,优选为4KB,共享内存池的使用方式可以为单生产者单消费者、单生产者多消费者、多生产者单消费者、多生产者多消费者等方式,缺省为多生产者多消费者,定义设置共享内存池x中内存块数量的ioctl系统调用位于其它ioctl系统调用的最后;
基于所述目标参数,生成所述共享内存池,所述共享内存池至少包括载荷数据单元和控制数据单元,其中,载荷数据单元和控制数据单元已在上文中说明,在此不再赘述。
在一些具体实施方式中,在基于所述目标参数,生成所述共享内存池之后,所述方法还包括:
基于第三系统调用,将所述载荷数据单元对应的内存页映射入应用程序进程的虚拟内存,所述载荷数据单元至少包括一个由内存块组成的内存页,其中,第三系统调用可以是mmap系统调用,用于将一个文件或者其它对象映射进内存,即应用程序利用mmap系统调用将载荷数据单元对应的内存页映射到自己进程的虚拟内存中,以用于后续读取网络报文时实现零拷贝。
在一些具体实施方式中,在所述共享内存池构建完成后,所述方法还包括:
基于所述共享内存池,构建应用程序接口,所述应用程序接口至少包括申请内存块接口、释放内存块接口、网卡实例接口,其中,网卡实例接口为网络设备为应用程序APP新增的API,用于绑定共享内存池和网卡实例,申请内存块接口和释放内存块接口为共享内存池为内核中其他模块提供的API,申请内存块接口的使用者可以包括网卡驱动模块,释放内存块接口的使用者可以包括socket(套接字模块)和网卡驱动模块;
基于第二系统调用以及所述网卡实例接口,将所述共享内存池与网卡实例进行绑定,其中,一个共享内存池可以与多个网卡实例进行绑定,即APP使用ioctl系统调用将共享内存池绑定到网卡实例上,一个共享内存池可以被多个网卡实例使用;
基于所述申请内存块接口和所述释放内存块接口,将所述共享内存池与接口对应的其他模块进行绑定,所述其他模块至少包括网卡驱动模块、套接字模块。
在一些具体实施方式中,所述控制数据单元至少包括一个无锁环形队列,在设置所述共享内存池对应的内存块数量时,所述方法还包括:
响应于检测到所述共享内存池对应的内存块数量设置指令时,通过共享内存池模块为共享内存池分配多个共享内存页;
基于所述共享内存页,划分得到目标数量的内存块,并将划分得到的内存块地址推入目标无锁环形队列,其中,一个内存块中的物理地址是连续的。
在一些具体实施方式中,在通过共享内存池模块为共享内存池分配多个共享内存页之后,所述方法还包括:
对所述共享内存页进行锁定处理。
具体的,当APP使用ioctl系统调用来设置共享内存池x中内存块的数量n时,触发共享内存池模块为共享内存池x分配若干共享内存页,然后将这些内存页划分为n个内存块,并将划分完的内存块地址推入一个无锁环形队列中,使用者申请时从无锁环形队列中出队,释放时入队。另外为了使DMA操作(Direct Memory Access,成组数据传送操作或直接内存操作)能够正确地使用这些内存块,在划分内存块时保证一个内存块内部的物理地址都是连续的,也就是说,一个内存块不会同时包含两个物理地址不连续的内存页中的内存,此外,还要锁住共享内存池x申请的共享内存页,以防止这些内存页被交换出物理内存。
在上述实施方式中,通过构建的共享内存池获取报文内存,提前将收包时报文内存的虚拟地址映射到APP进程页表中,使得APP进程、内核和硬件在整个流程中都可以操作同一物理内存,将其作为收包内存,以解决收包零拷贝的可行性问题,从而避免因为报文的内存拷贝而带来的性能损失,另外,共享内存池以设备文件的方式为APP提供接口,可以基于操作系统的操作权限设置,只要恶意APP无法拿到相应的权限,它就无法监听或篡改其它APP的报文,以提高后续报文传输的安全性。
S2:响应于检测到所述报文内存生成成功时,基于网卡驱动,对所述目标网络报文进行第一标识化处理,得到目标网络报文描述符。
需要说明的是,第一标识化处理为在构建的私有报文描述符上设置收包零拷贝标志,即可得到目标网络报文描述符,其中,收包零拷贝标志为RX ZERO COPY标志。
在一些具体实施方式中,在基于所述目标网络报文,从预构建的共享内存池中获取目标内存块,生成报文内存之前,所述方法还包括:
基于第一应用程序构建套接字模块,并设置收包零拷贝选项,同时,第一应用程序和网络协议栈分别将其对应的事务ID变量初始化为目标值;
基于第二应用程序构建共享内存池,将所述共享内存池与至少一个网卡实例进行绑定;
其中,所述第一应用程序等同于或不等同于所述第二应用程序,第一应用程序和第二应用程序分别为APP1和APP2。
具体的,在进行收包流程之前,第二应用程序通过步骤S1的方法构建共享内存池,并将它绑定到对应的网卡实例上,第一应用程序创建套接字模块,即为socket,在创建套接字模块时,设置RX ZERO COPY选项,第一应用程序和网络协议栈分别将各自的“事务ID”变量初始化为0,其中,在前置流程中,第一应用程序和第二应用程序可以是相同的,也可以是不相同的,第二应用程序在创建共享内存池时需要root权限,第二应用程序可以在不需要root权限的情况下进行构建套接字模块等流程。
在上述实施方式中,在对网络报文进行处理之前,还包括两个前置流程,在前置流程2中,即基于第二应用程序构建共享内存池并绑定网卡实例,需要root权限,从而保证恶意APP无法拿到相应的权限,从而无法监听或篡改其它APP的报文,以提高后续报文传输的安全性;在前置流程1中,即创建套接字模块并设置相应的RX ZERO COPY选项,以及将事务ID初始化为0,以用于后续确定网络报文是否为零拷贝报文,以及对确定最终需释放的skb。
在一些具体实施方式中,基于所述目标网络报文,从预构建的共享内存池中获取目标内存块,生成报文内存包括:
响应于接收到所述目标网络报文时,检测目标网卡实例是否与预构建的共享内存池进行绑定;
响应于检测到所述目标网卡实例与预构建的共享内存池进行绑定时,从所述共享内存池中获取目标内存块;
基于所述目标内存块,生成所述报文内存。
在一些具体实施方式中,响应于检测到所述报文内存生成成功时,基于网卡驱动,对所述目标网络报文进行第一标识化处理,得到目标网络报文描述符包括:
基于所述目标网络报文,利用所述网卡驱动,构建私有报文描述符;
响应于检测到所述网卡驱动对应的网卡实例与共享内存池进行绑定时,在所述私有报文描述符上设置收包零拷贝标志,生成所述目标网络报文描述符。
在一些具体实施方式中,在基于网卡驱动,对所述目标网络报文进行第一标识化处理,得到目标网络报文描述符之后,所述方法还包括:
将所述目标网络报文描述符排入网卡硬件的收包队列;
所述网卡硬件通过DMA操作将所述目标网络报文的相关数据复制到所述报文内存中,并向网卡驱动发送收包指令。
具体的,当检测到目标网络报文时,需要分配报文内存,如果需构建私有报文描述符的网卡驱动对应的网卡实例绑定了共享内存池,那么从该共享内存池中获取内存块,基于该内存块生成报文内存,同时,在私有报文描述符上设置RX ZERO COPY标志,将设置了RX ZERO COPY标志的私有报文描述符(即目标网络报文描述符)放入硬件收包队列,供网卡硬件将来使用,然后网卡硬件通过DMA操作将网络报文数据复制到报文内存中,并通知网卡驱动收包,如果无法从共享内存池中获取内存块,则采用现有申请报文内存的方式,也无需设置RX ZERO COPY标志。
在上述实施方式中,通过构建目标网络报文描述符,使得后续在创建skb时,确定是否需要对skb进行标识,以实现网络报文零拷贝。
S3:基于所述目标网络报文描述符,对所述报文内存进行第二标识化处理,得到第一套接字缓存。
需要说明的是,第二标识化处理即为在基于网卡驱动创建的skb中设置共享内存指针,从而得到第一套接字缓存,以标识该网络报文内存来自共享内存池。
在一些具体实施方式中,基于所述目标网络报文描述符,对所述报文内存进行第二标识化处理,得到第一套接字缓存包括:
响应于检测到收包指令时,基于网卡驱动,为所述报文内存构建初始套接字缓存,其中,初始套接字缓存即为初始skb;
响应于检测到所述目标网络报文描述符上设置有收包零拷贝标志时,在所述初始套接字缓存上设置共享内存指针,生成所述第一套接字缓存。
在一些具体实施方式中,在基于所述目标网络报文描述符,对所述报文内存进行第二标识化处理,得到第一套接字缓存之后,所述方法还包括:
基于网络协议栈收包函数,将所述第一套接字缓存发送至所述网络协议栈。
具体的,网卡驱动为上述报文内存创建skb,如果私有的报文描述符中有RX ZEROCOPY标志,那么在skb中设置共享内存池指针,然后调用网络协议栈收包函数,将skb送入网络协议栈。
在上述实施方式中,基于目标网络报文描述符,在创建skb时,对skb进行标识,以确定skb对应的报文内存来自共享内存池,从而实现网络报文零拷贝。
S4:通过网络协议栈对所述第一套接字缓存进行解析处理,根据解析处理结果,从所述报文内存对应的虚拟内存中读取网络报文数据,完成网络报文的处理。
需要说明的是,如图4所示,网络协议栈包括网络层、传输层和socket模块。
在一些具体实施方式中,通过网络协议栈对所述第一套接字缓存进行解析处理,根据解析处理结果,从所述报文内存对应的虚拟内存中读取网络报文数据包括:
响应于检测到所述第一套接字缓存时,利用所述网络协议栈对所述第一套接字缓存进行向上逐层解析处理,其中,利用网络协议栈各个层对skb进行向上逐层解析处理的方法为常用方法,在此不再赘述;
将向上逐层解析处理后的第一套接字缓存排入相应的套接字模块收包队列中,并向应用程序发送收包指令,即将skb挂在相应的socket收包队列中,然后通知APP收包;
基于所述收包指令,从所述报文内存对应的虚拟内存中读取网络报文数据,具体包括:
响应于检测到所述收包指令时,基于第一系统调用函数,检测第一套接字缓存上是否设置有共享内存指针,其中,第一系统调用函数可以是recvmsg,在调用该函数之前,应用程序保存iov(结构数组,其每个元素指明存储器中的一个缓冲区)参数的值,将该参数值保存后,调用recvmsg进入系统内核;
响应于检测到第一套接字缓存上设置有共享内存指针时,将所述共享内存指针对应的报文内存在应用程序进程中的虚拟内存地址赋值给结构数组参数中的目标字段,以读取所述网络报文数据,即如果skb中设置有共享内存池指针,那么将其对应的报文内存在APP进程中的虚拟地址赋值给iov参数中的iov_base字段,以读取所述网络报文数据。
在一些具体实施方式中,在读取所述网络报文数据时,所述方法还包括:
在所述第一套接字缓存上记录事务ID当前值,并对所述事务ID做加1操作,得到第二套接字缓存;
将所述到第二套接字缓存传输至套接字模块中的套接字缓存待回收队列中。
具体为,在进行虚拟地址赋值之后,在skb上记录事务ID当前值,再对事务ID做加1操作,然后将该skb放入socket的skb待回收队列中,以用于后续释放skb。
进一步的,若skb中没有设置共享内存池指针,那么socket将报文内存中的数据拷贝到iov_base指向的APP内存中,然后释放skb;若在创建套接字模块时,应用程序APP没有设置RX ZERO COPY选项,但是该skb中设置了共享内存池指针,那么socket将报文内存中的数据拷贝到iov_base指向的APP内存中,然后释放skb。
在一些具体实施方式中,应用程序在读取网络报文数据之后,所述方法还包括:
检测结构数组参数中的当前字段与所述目标字段是否一致,即检测iov参数部分iov_base是否发生了变化;
响应于检测到所述当前字段与所述目标字段不一致时,记录事务ID当前值与报文内存的关联关系,并对事务ID做加1操作,即iov参数部分iov_base发生了变化时,表示本次调用获取到了零拷贝报文,那么记录事务ID当前值和报文内存的关联关系,再对事务ID做加1操作。
进一步的,在对事务ID做加1操作后,对所述网络报文数据进行解析处理,对报文数据的解析处理方法为常用手法,在此不再赘述;
响应于检测到解析处理完成时,基于第二系统调用函数将所述报文内存对应的事务ID排入套接字模块的事件队列,即socket的事件队列,其中,第二系统调用函数可以为sendmsg;
基于所述事务ID,从套接字缓存待回收队列中确定第二套接字缓存,即根据事件队列中的事务ID匹配套接字缓存待回收队列中的事务ID,从而使得socket在skb待回收队列中找到对应的skb,即第二套接字缓存;
基于所述第二套接字缓存,释放其对应的第一套接字缓存,以及所述第一套接字缓存对应的内存块,即释放所有的skb,以及在释放skb时释放共享内存块;
在一些具体实施方式中,如果APP按顺序处理网络报文,那么可以简化处理:不必记录事务ID当前值与报文内存的关联关系,只要在处理完网络报文数据,通知内核释放报文内存时将“事务ID当前值-1”推入socket的事件队列即可。
如果iov数组中的所有iov_base都没有发生变化,则说明本次调用读取到的为非零拷贝报文,那么与现有非零拷贝报文处理流程相同,在此不再赘述。
在上述实施方式中,基于映射在APP进程页表中的虚拟地址,读取对应的网络报文数据,并在APP处理完网络报文数据之后,通过相应的规则释放skb和共享内存块,从而避免了因为报文的内存拷贝而带来的性能损失。
上述网络报文处理方法中,所述方法包括:接收目标网络报文,并基于所述目标网络报文,从预构建的共享内存池中获取目标内存块,生成报文内存;响应于检测到所述报文内存生成成功时,基于网卡驱动,对所述目标网络报文进行第一标识化处理,得到目标网络报文描述符;基于所述目标网络报文描述符,对所述报文内存进行第二标识化处理,得到第一套接字缓存;通过网络协议栈对所述第一套接字缓存进行解析处理,根据解析处理结果,从所述报文内存对应的虚拟内存中读取网络报文数据,完成网络报文的处理,本申请基于构建的共享内存池,提前将收包时报文内存的虚拟地址映射到APP进程页表中,使得APP进程、内核和硬件都可以操作同一物理内存,将其作为收包内存,解决了收包零拷贝的可行性问题,从而避免了因为报文的内存拷贝而带来的性能损失,同时,在实现收包零拷贝时,APP和内核之间共享的仅仅是装载报文数据的内存,即使APP出现错误,也不会写坏内核的其它数据结构,避免操作系统出现异常,共享内存池功能是以设备文件的方式为APP提供接口,可以基于操作系统的操作权限设置,只要恶意的APP无法拿到相应的权限,它就无法监听或篡改其它APP的报文,提高了报文传输安全性。
应该理解的是,虽然图3-图5的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图3-图5中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图6所示,提供了一种网络报文处理装置,包括:报文内存生成模块、第一标识化处理模块、第二标识化处理模块和读取模块,其中:
报文内存生成模块,用于接收目标网络报文,并基于所述目标网络报文,从预构建的共享内存池中获取目标内存块,生成报文内存,所述共享内存池中的内存块与应用程序进程的虚拟内存一一映射;
第一标识化处理模块,用于在检测到所述报文内存生成成功时,基于网卡驱动,对所述目标网络报文进行第一标识化处理,得到目标网络报文描述符;
第二标识化处理模块,用于基于所述目标网络报文描述符,对所述报文内存进行第二标识化处理,得到第一套接字缓存;
读取模块,用于通过网络协议栈对所述第一套接字缓存进行解析处理,根据解析处理结果,从所述报文内存对应的虚拟内存中读取网络报文数据,完成网络报文的处理。
作为一种较优的实施方式,本发明实施例中,所述报文内存生成模块具体用于:
基于第一系统调用,构建目标设备文件,所述目标设备文件存储于操作系统内核;
基于第二系统调用,设置所述目标设备文件对应的目标参数;
基于所述目标参数,生成所述共享内存池,所述共享内存池至少包括载荷数据单元和控制数据单元。
作为一种较优的实施方式,本发明实施例中,所述报文内存生成模块具体还用于:
基于所述第二系统调用,设置所述共享内存池对应的属性标签、内存块尺寸、共享内存池使用方式和内存块数量;
定义一个内存页的尺寸为缺省的内存块尺寸。
作为一种较优的实施方式,本发明实施例中,所述装置还包括映射模块,所述映射模块具体用于:
基于第三系统调用,将所述载荷数据单元对应的内存页映射入应用程序进程的虚拟内存,所述载荷数据单元至少包括一个由内存块组成的内存页。
作为一种较优的实施方式,本发明实施例中,所述装置还包括接口构建模块,所述映射模块具体用于:
基于所述共享内存池,构建应用程序接口,所述应用程序接口至少包括申请内存块接口、释放内存块接口、网卡实例接口;
基于第二系统调用以及所述网卡实例接口,将所述共享内存池与网卡实例进行绑定,其中,一个共享内存池可以与多个网卡实例进行绑定;
基于所述申请内存块接口和所述释放内存块接口,将所述共享内存池与接口对应的其他模块进行绑定,所述其他模块至少包括网卡驱动模块、套接字模块。
作为一种较优的实施方式,本发明实施例中,所述报文内存生成模块具体还用于:
响应于检测到所述共享内存池对应的内存块数量设置指令时,通过共享内存池模块为共享内存池分配多个共享内存页;
基于所述共享内存页,划分得到目标数量的内存块,并将划分得到的内存块地址推入目标无锁环形队列,其中,一个内存块中的物理地址是连续的。
作为一种较优的实施方式,本发明实施例中,所述报文内存生成模块具体还用于:
对所述共享内存页进行锁定处理。
作为一种较优的实施方式,本发明实施例中,所述装置还包括前置条件构建模块,所述前置条件构建模块具体用于:
基于第一应用程序构建套接字模块,并设置收包零拷贝选项,同时,第一应用程序和网络协议栈分别将其对应的事务ID变量初始化为目标值;
基于第二应用程序构建共享内存池,将所述共享内存池与至少一个网卡实例进行绑定;
其中,所述第一应用程序等同于或不等同于所述第二应用程序。
作为一种较优的实施方式,本发明实施例中,所述报文内存生成模块具体还用于:
响应于接收到所述目标网络报文时,检测目标网卡实例是否与预构建的共享内存池进行绑定;
响应于检测到所述目标网卡实例与预构建的共享内存池进行绑定时,从所述共享内存池中获取目标内存块;
基于所述目标内存块,生成所述报文内存。
作为一种较优的实施方式,本发明实施例中,所述第一标识化处理模块具体用于:
基于所述目标网络报文,利用所述网卡驱动,构建私有报文描述符;
响应于检测到所述网卡驱动对应的网卡实例与共享内存池进行绑定时,在所述私有报文描述符上设置收包零拷贝标志,生成所述目标网络报文描述符。
作为一种较优的实施方式,本发明实施例中,所述装置还包括数据存储模块,所述数据存储模块具体用于:
将所述目标网络报文描述符排入网卡硬件的收包队列;
所述网卡硬件通过DMA操作将所述目标网络报文的相关数据复制到所述报文内存中,并向网卡驱动发送收包指令。
作为一种较优的实施方式,本发明实施例中,所述第二标识化处理模块具体用于:
响应于检测到收包指令时,基于网卡驱动,为所述报文内存构建初始套接字缓存;
响应于检测到所述目标网络报文描述符上设置有收包零拷贝标志时,在所述初始套接字缓存上设置共享内存指针,生成所述第一套接字缓存。
作为一种较优的实施方式,本发明实施例中,所述装置还包括数据存传输模块,所述数据传输模块具体用于:
基于网络协议栈收包函数,将所述第一套接字缓存发送至所述网络协议栈。
作为一种较优的实施方式,本发明实施例中,所述读取模块具体用于:
响应于检测到所述第一套接字缓存时,利用所述网络协议栈对所述第一套接字缓存进行向上逐层解析处理;
将向上逐层解析处理后的第一套接字缓存排入相应的套接字模块收包队列中,并向应用程序发送收包指令;
基于所述收包指令,从所述报文内存对应的虚拟内存中读取网络报文数据。
作为一种较优的实施方式,本发明实施例中,所述读取模块具体还用于:
响应于检测到所述收包指令时,基于第一系统调用函数,检测第一套接字缓存上是否设置有共享内存指针;
响应于检测到第一套接字缓存上设置有共享内存指针时,将所述共享内存指针对应的报文内存在应用程序进程中的虚拟内存地址赋值给结构数组参数中的目标字段,以读取所述网络报文数据。
作为一种较优的实施方式,本发明实施例中,所述读取模块具体还用于:
在所述第一套接字缓存上记录事务ID当前值,并对所述事务ID做加1操作,得到第二套接字缓存;
将所述到第二套接字缓存传输至套接字模块中的套接字缓存待回收队列中。
作为一种较优的实施方式,本发明实施例中,所述装置还包括检测模块,所述检测模块具体用于:
检测结构数组参数中的当前字段与所述目标字段是否一致;
响应于检测到所述当前字段与所述目标字段不一致时,记录事务ID当前值与报文内存的关联关系,并对事务ID做加1操作。
作为一种较优的实施方式,本发明实施例中,所述装置还包括释放模块,所述释放模块具体用于:
对所述网络报文数据进行解析处理;
响应于检测到解析处理完成时,基于第二系统调用函数将所述报文内存对应的事务ID排入套接字模块的事件队列;
基于所述事务ID,从套接字缓存待回收队列中确定第二套接字缓存;
基于所述第二套接字缓存,释放其对应的第一套接字缓存,以及所述第一套接字缓存对应的内存块。
关于网络报文处理装置的具体限定可以参见上文中对于网络报文处理方法的限定,在此不再赘述。上述网络报文处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图7所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种网络报文处理方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图7中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
S1:接收目标网络报文,并基于所述目标网络报文,从预构建的共享内存池中获取目标内存块,生成报文内存,所述共享内存池中的内存块与应用程序进程的虚拟内存一一映射;
S2:响应于检测到所述报文内存生成成功时,基于网卡驱动,对所述目标网络报文进行第一标识化处理,得到目标网络报文描述符;
S3:基于所述目标网络报文描述符,对所述报文内存进行第二标识化处理,得到第一套接字缓存;
S4:通过网络协议栈对所述第一套接字缓存进行解析处理,根据解析处理结果,从所述报文内存对应的虚拟内存中读取网络报文数据,完成网络报文的处理。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
基于第一系统调用,构建目标设备文件,所述目标设备文件存储于操作系统内核;
基于第二系统调用,设置所述目标设备文件对应的目标参数;
基于所述目标参数,生成所述共享内存池,所述共享内存池至少包括载荷数据单元和控制数据单元。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
基于所述第二系统调用,设置所述共享内存池对应的属性标签、内存块尺寸、共享内存池使用方式和内存块数量;
定义一个内存页的尺寸为缺省的内存块尺寸。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
基于第三系统调用,将所述载荷数据单元对应的内存页映射入应用程序进程的虚拟内存,所述载荷数据单元至少包括一个由内存块组成的内存页。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
基于所述共享内存池,构建应用程序接口,所述应用程序接口至少包括申请内存块接口、释放内存块接口、网卡实例接口;
基于第二系统调用以及所述网卡实例接口,将所述共享内存池与网卡实例进行绑定,其中,一个共享内存池可以与多个网卡实例进行绑定;
基于所述申请内存块接口和所述释放内存块接口,将所述共享内存池与接口对应的其他模块进行绑定,所述其他模块至少包括网卡驱动模块、套接字模块。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
响应于检测到所述共享内存池对应的内存块数量设置指令时,通过共享内存池模块为共享内存池分配多个共享内存页;
基于所述共享内存页,划分得到目标数量的内存块,并将划分得到的内存块地址推入目标无锁环形队列,其中,一个内存块中的物理地址是连续的。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
对所述共享内存页进行锁定处理。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
基于第一应用程序构建套接字模块,并设置收包零拷贝选项,同时,第一应用程序和网络协议栈分别将其对应的事务ID变量初始化为目标值;
基于第二应用程序构建共享内存池,将所述共享内存池与至少一个网卡实例进行绑定;
其中,所述第一应用程序等同于或不等同于所述第二应用程序。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
响应于接收到所述目标网络报文时,检测目标网卡实例是否与预构建的共享内存池进行绑定;
响应于检测到所述目标网卡实例与预构建的共享内存池进行绑定时,从所述共享内存池中获取目标内存块;
基于所述目标内存块,生成所述报文内存。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
基于所述目标网络报文,利用所述网卡驱动,构建私有报文描述符;
响应于检测到所述网卡驱动对应的网卡实例与共享内存池进行绑定时,在所述私有报文描述符上设置收包零拷贝标志,生成所述目标网络报文描述符。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
将所述目标网络报文描述符排入网卡硬件的收包队列;
所述网卡硬件通过DMA操作将所述目标网络报文的相关数据复制到所述报文内存中,并向网卡驱动发送收包指令。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
响应于检测到收包指令时,基于网卡驱动,为所述报文内存构建初始套接字缓存;
响应于检测到所述目标网络报文描述符上设置有收包零拷贝标志时,在所述初始套接字缓存上设置共享内存指针,生成所述第一套接字缓存。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
基于网络协议栈收包函数,将所述第一套接字缓存发送至所述网络协议栈。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
响应于检测到所述第一套接字缓存时,利用所述网络协议栈对所述第一套接字缓存进行向上逐层解析处理;
将向上逐层解析处理后的第一套接字缓存排入相应的套接字模块收包队列中,并向应用程序发送收包指令;
基于所述收包指令,从所述报文内存对应的虚拟内存中读取网络报文数据。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
响应于检测到所述收包指令时,基于第一系统调用函数,检测第一套接字缓存上是否设置有共享内存指针;
响应于检测到第一套接字缓存上设置有共享内存指针时,将所述共享内存指针对应的报文内存在应用程序进程中的虚拟内存地址赋值给结构数组参数中的目标字段,以读取所述网络报文数据。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
在所述第一套接字缓存上记录事务ID当前值,并对所述事务ID做加1操作,得到第二套接字缓存;
将所述到第二套接字缓存传输至套接字模块中的套接字缓存待回收队列中。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
检测结构数组参数中的当前字段与所述目标字段是否一致;
响应于检测到所述当前字段与所述目标字段不一致时,记录事务ID当前值与报文内存的关联关系,并对事务ID做加1操作。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
对所述网络报文数据进行解析处理;
响应于检测到解析处理完成时,基于第二系统调用函数将所述报文内存对应的事务ID排入套接字模块的事件队列;
基于所述事务ID,从套接字缓存待回收队列中确定第二套接字缓存;
基于所述第二套接字缓存,释放其对应的第一套接字缓存,以及所述第一套接字缓存对应的内存块。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
S1:接收目标网络报文,并基于所述目标网络报文,从预构建的共享内存池中获取目标内存块,生成报文内存,所述共享内存池中的内存块与应用程序进程的虚拟内存一一映射;
S2:响应于检测到所述报文内存生成成功时,基于网卡驱动,对所述目标网络报文进行第一标识化处理,得到目标网络报文描述符;
S3:基于所述目标网络报文描述符,对所述报文内存进行第二标识化处理,得到第一套接字缓存;
S4:通过网络协议栈对所述第一套接字缓存进行解析处理,根据解析处理结果,从所述报文内存对应的虚拟内存中读取网络报文数据,完成网络报文的处理。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
基于第一系统调用,构建目标设备文件,所述目标设备文件存储于操作系统内核;
基于第二系统调用,设置所述目标设备文件对应的目标参数;
基于所述目标参数,生成所述共享内存池,所述共享内存池至少包括载荷数据单元和控制数据单元。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
基于所述第二系统调用,设置所述共享内存池对应的属性标签、内存块尺寸、共享内存池使用方式和内存块数量;
定义一个内存页的尺寸为缺省的内存块尺寸。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
基于第三系统调用,将所述载荷数据单元对应的内存页映射入应用程序进程的虚拟内存,所述载荷数据单元至少包括一个由内存块组成的内存页。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
基于所述共享内存池,构建应用程序接口,所述应用程序接口至少包括申请内存块接口、释放内存块接口、网卡实例接口;
基于第二系统调用以及所述网卡实例接口,将所述共享内存池与网卡实例进行绑定,其中,一个共享内存池可以与多个网卡实例进行绑定;
基于所述申请内存块接口和所述释放内存块接口,将所述共享内存池与接口对应的其他模块进行绑定,所述其他模块至少包括网卡驱动模块、套接字模块。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
响应于检测到所述共享内存池对应的内存块数量设置指令时,通过共享内存池模块为共享内存池分配多个共享内存页;
基于所述共享内存页,划分得到目标数量的内存块,并将划分得到的内存块地址推入目标无锁环形队列,其中,一个内存块中的物理地址是连续的。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
对所述共享内存页进行锁定处理。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
基于第一应用程序构建套接字模块,并设置收包零拷贝选项,同时,第一应用程序和网络协议栈分别将其对应的事务ID变量初始化为目标值;
基于第二应用程序构建共享内存池,将所述共享内存池与至少一个网卡实例进行绑定;
其中,所述第一应用程序等同于或不等同于所述第二应用程序。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
响应于接收到所述目标网络报文时,检测目标网卡实例是否与预构建的共享内存池进行绑定;
响应于检测到所述目标网卡实例与预构建的共享内存池进行绑定时,从所述共享内存池中获取目标内存块;
基于所述目标内存块,生成所述报文内存。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
基于所述目标网络报文,利用所述网卡驱动,构建私有报文描述符;
响应于检测到所述网卡驱动对应的网卡实例与共享内存池进行绑定时,在所述私有报文描述符上设置收包零拷贝标志,生成所述目标网络报文描述符。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
将所述目标网络报文描述符排入网卡硬件的收包队列;
所述网卡硬件通过DMA操作将所述目标网络报文的相关数据复制到所述报文内存中,并向网卡驱动发送收包指令。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
响应于检测到收包指令时,基于网卡驱动,为所述报文内存构建初始套接字缓存;
响应于检测到所述目标网络报文描述符上设置有收包零拷贝标志时,在所述初始套接字缓存上设置共享内存指针,生成所述第一套接字缓存。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
基于网络协议栈收包函数,将所述第一套接字缓存发送至所述网络协议栈。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
响应于检测到所述第一套接字缓存时,利用所述网络协议栈对所述第一套接字缓存进行向上逐层解析处理;
将向上逐层解析处理后的第一套接字缓存排入相应的套接字模块收包队列中,并向应用程序发送收包指令;
基于所述收包指令,从所述报文内存对应的虚拟内存中读取网络报文数据。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
响应于检测到所述收包指令时,基于第一系统调用函数,检测第一套接字缓存上是否设置有共享内存指针;
响应于检测到第一套接字缓存上设置有共享内存指针时,将所述共享内存指针对应的报文内存在应用程序进程中的虚拟内存地址赋值给结构数组参数中的目标字段,以读取所述网络报文数据。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
在所述第一套接字缓存上记录事务ID当前值,并对所述事务ID做加1操作,得到第二套接字缓存;
将所述到第二套接字缓存传输至套接字模块中的套接字缓存待回收队列中。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
检测结构数组参数中的当前字段与所述目标字段是否一致;
响应于检测到所述当前字段与所述目标字段不一致时,记录事务ID当前值与报文内存的关联关系,并对事务ID做加1操作。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
对所述网络报文数据进行解析处理;
响应于检测到解析处理完成时,基于第二系统调用函数将所述报文内存对应的事务ID排入套接字模块的事件队列;
基于所述事务ID,从套接字缓存待回收队列中确定第二套接字缓存;
基于所述第二套接字缓存,释放其对应的第一套接字缓存,以及所述第一套接字缓存对应的内存块。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink) DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (21)
1.一种网络报文处理方法,其特征在于,所述方法包括:
接收目标网络报文,并基于所述目标网络报文,从预构建的共享内存池中获取目标内存块,生成报文内存,所述共享内存池中的内存块与应用程序进程的虚拟内存一一映射;
响应于检测到所述报文内存生成成功时,基于网卡驱动,对所述目标网络报文进行第一标识化处理,得到目标网络报文描述符;
基于所述目标网络报文描述符,对所述报文内存进行第二标识化处理,得到第一套接字缓存;
通过网络协议栈对所述第一套接字缓存进行解析处理,根据解析处理结果,从所述报文内存对应的虚拟内存中读取网络报文数据,完成网络报文的处理。
2.根据权利要求1所述的网络报文处理方法,其特征在于,所述共享内存池的构建方法包括:
基于第一系统调用,构建目标设备文件,所述目标设备文件存储于操作系统内核;
基于第二系统调用,设置所述目标设备文件对应的目标参数;
基于所述目标参数,生成所述共享内存池,所述共享内存池至少包括载荷数据单元和控制数据单元。
3.根据权利要求2所述的网络报文处理方法,其特征在于,所述基于第二系统调用,设置所述目标设备文件对应的目标参数包括:
基于所述第二系统调用,设置所述共享内存池对应的属性标签、内存块尺寸、共享内存池使用方式和内存块数量;
定义一个内存页的尺寸为缺省的内存块尺寸。
4.根据权利要求2所述的网络报文处理方法,其特征在于,在基于所述目标参数,生成所述共享内存池之后,所述方法还包括:
基于第三系统调用,将所述载荷数据单元对应的内存页映射入应用程序进程的虚拟内存,所述载荷数据单元至少包括一个由内存块组成的内存页。
5.根据权利要求1所述的网络报文处理方法,其特征在于,在所述共享内存池构建完成后,所述方法还包括:
基于所述共享内存池,构建应用程序接口,所述应用程序接口至少包括申请内存块接口、释放内存块接口、网卡实例接口;
基于第二系统调用以及所述网卡实例接口,将所述共享内存池与网卡实例进行绑定,其中,一个共享内存池可以与多个网卡实例进行绑定;
基于所述申请内存块接口和所述释放内存块接口,将所述共享内存池与接口对应的其他模块进行绑定,所述其他模块至少包括网卡驱动模块、套接字模块。
6.根据权利要求2所述的网络报文处理方法,其特征在于,所述控制数据单元至少包括一个无锁环形队列,在设置所述共享内存池对应的内存块数量时,所述方法还包括:
响应于检测到所述共享内存池对应的内存块数量设置指令时,通过共享内存池模块为共享内存池分配多个共享内存页;
基于所述共享内存页,划分得到目标数量的内存块,并将划分得到的内存块地址推入目标无锁环形队列,其中,一个内存块中的物理地址是连续的。
7.根据权利要求6所述的网络报文处理方法,其特征在于,在通过共享内存池模块为共享内存池分配多个共享内存页之后,所述方法还包括:
对所述共享内存页进行锁定处理。
8.根据权利要求3所述的网络报文处理方法,其特征在于,在基于所述目标网络报文,从预构建的共享内存池中获取目标内存块,生成报文内存之前,所述方法还包括:
基于第一应用程序构建套接字模块,并设置收包零拷贝选项,同时,第一应用程序和网络协议栈分别将其对应的事务ID变量初始化为目标值;
基于第二应用程序构建共享内存池,将所述共享内存池与至少一个网卡实例进行绑定;
其中,所述第一应用程序等同于或不等同于所述第二应用程序。
9.根据权利要求1所述的网络报文处理方法,其特征在于,基于所述目标网络报文,从预构建的共享内存池中获取目标内存块,生成报文内存包括:
响应于接收到所述目标网络报文时,检测目标网卡实例是否与预构建的共享内存池进行绑定;
响应于检测到所述目标网卡实例与预构建的共享内存池进行绑定时,从所述共享内存池中获取目标内存块;
基于所述目标内存块,生成所述报文内存。
10.根据权利要求1所述的网络报文处理方法,其特征在于,响应于检测到所述报文内存生成成功时,基于网卡驱动,对所述目标网络报文进行第一标识化处理,得到目标网络报文描述符包括:
基于所述目标网络报文,利用所述网卡驱动,构建私有报文描述符;
响应于检测到所述网卡驱动对应的网卡实例与共享内存池进行绑定时,在所述私有报文描述符上设置收包零拷贝标志,生成所述目标网络报文描述符。
11.根据权利要求10所述的网络报文处理方法,其特征在于,在基于网卡驱动,对所述目标网络报文进行第一标识化处理,得到目标网络报文描述符之后,所述方法还包括:
将所述目标网络报文描述符排入网卡硬件的收包队列;
所述网卡硬件通过DMA操作将所述目标网络报文的相关数据复制到所述报文内存中,并向网卡驱动发送收包指令。
12.根据权利要求1所述的网络报文处理方法,其特征在于,基于所述目标网络报文描述符,对所述报文内存进行第二标识化处理,得到第一套接字缓存包括:
响应于检测到收包指令时,基于网卡驱动,为所述报文内存构建初始套接字缓存;
响应于检测到所述目标网络报文描述符上设置有收包零拷贝标志时,在所述初始套接字缓存上设置共享内存指针,生成所述第一套接字缓存。
13.根据权利要求1所述的网络报文处理方法,其特征在于,在基于所述目标网络报文描述符,对所述报文内存进行第二标识化处理,得到第一套接字缓存之后,所述方法还包括:
基于网络协议栈收包函数,将所述第一套接字缓存发送至所述网络协议栈。
14.根据权利要求1所述的网络报文处理方法,其特征在于,通过网络协议栈对所述第一套接字缓存进行解析处理,根据解析处理结果,从所述报文内存对应的虚拟内存中读取网络报文数据包括:
响应于检测到所述第一套接字缓存时,利用所述网络协议栈对所述第一套接字缓存进行向上逐层解析处理;
将向上逐层解析处理后的第一套接字缓存排入相应的套接字模块收包队列中,并向应用程序发送收包指令;
基于所述收包指令,从所述报文内存对应的虚拟内存中读取网络报文数据。
15.根据权利要求14所述的网络报文处理方法,其特征在于,基于所述收包指令,从所述报文内存对应的虚拟内存中读取网络报文数据包括:
响应于检测到所述收包指令时,基于第一系统调用函数,检测第一套接字缓存上是否设置有共享内存指针;
响应于检测到第一套接字缓存上设置有共享内存指针时,将所述共享内存指针对应的报文内存在应用程序进程中的虚拟内存地址赋值给结构数组参数中的目标字段,以读取所述网络报文数据。
16.根据权利要求14所述的网络报文处理方法,其特征在于,在读取所述网络报文数据时,所述方法还包括:
在所述第一套接字缓存上记录事务ID当前值,并对所述事务ID做加1操作,得到第二套接字缓存;
将所述到第二套接字缓存传输至套接字模块中的套接字缓存待回收队列中。
17.根据权利要求15所述的网络报文处理方法,其特征在于,在读取网络报文数据之后,所述方法还包括:
检测结构数组参数中的当前字段与所述目标字段是否一致;
响应于检测到所述当前字段与所述目标字段不一致时,记录事务ID当前值与报文内存的关联关系,并对事务ID做加1操作。
18.根据权利要求1所述的网络报文处理方法,其特征在于,所述方法还包括:
对所述网络报文数据进行解析处理;
响应于检测到解析处理完成时,基于第二系统调用函数将所述报文内存对应的事务ID排入套接字模块的事件队列;
基于所述事务ID,从套接字缓存待回收队列中确定第二套接字缓存;
基于所述第二套接字缓存,释放其对应的第一套接字缓存,以及所述第一套接字缓存对应的内存块。
19.一种网络报文处理装置,其特征在于,所述装置包括:
报文内存生成模块,用于接收目标网络报文,并基于所述目标网络报文,从预构建的共享内存池中获取目标内存块,生成报文内存,所述共享内存池中的内存块与应用程序进程的虚拟内存一一映射;
第一标识化处理模块,用于在检测到所述报文内存生成成功时,基于网卡驱动,对所述目标网络报文进行第一标识化处理,得到目标网络报文描述符;
第二标识化处理模块,用于基于所述目标网络报文描述符,对所述报文内存进行第二标识化处理,得到第一套接字缓存;
读取模块,用于通过网络协议栈对所述第一套接字缓存进行解析处理,根据解析处理结果,从所述报文内存对应的虚拟内存中读取网络报文数据,完成网络报文的处理。
20.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至18中任一项所述的方法。
21.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至18中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410157537.2A CN117692416B (zh) | 2024-02-04 | 2024-02-04 | 网络报文处理方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410157537.2A CN117692416B (zh) | 2024-02-04 | 2024-02-04 | 网络报文处理方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117692416A true CN117692416A (zh) | 2024-03-12 |
CN117692416B CN117692416B (zh) | 2024-05-03 |
Family
ID=90130551
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410157537.2A Active CN117692416B (zh) | 2024-02-04 | 2024-02-04 | 网络报文处理方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117692416B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118488021A (zh) * | 2024-07-15 | 2024-08-13 | 浙江禾川科技股份有限公司 | 一种工业以太网报文传输优化方法、装置、设备及介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101540720A (zh) * | 2008-06-06 | 2009-09-23 | 曙光信息产业(北京)有限公司 | 一种支持多类型网卡链路聚合的零拷贝方法 |
CN108243118A (zh) * | 2016-12-27 | 2018-07-03 | 华为技术有限公司 | 转发报文的方法和物理主机 |
WO2019134403A1 (zh) * | 2018-01-05 | 2019-07-11 | 华为技术有限公司 | 发送数据包的方法、装置及计算机可读存储介质 |
CN110149262A (zh) * | 2019-04-02 | 2019-08-20 | 视联动力信息技术股份有限公司 | 一种信令报文的处理方法和装置、及存储介质 |
CN113326151A (zh) * | 2021-05-31 | 2021-08-31 | 派日科技(广州)有限公司 | 进程间通信方法、装置、设备、系统及存储介质 |
WO2021217529A1 (zh) * | 2020-04-29 | 2021-11-04 | 华为技术有限公司 | 一种进程间通信的方法及系统 |
WO2022105884A1 (zh) * | 2020-11-23 | 2022-05-27 | 中兴通讯股份有限公司 | 数据传输方法、装置、网络设备、存储介质 |
CN116567076A (zh) * | 2023-05-25 | 2023-08-08 | 南京星思半导体有限公司 | 一种数据报文处理方法及相关装置 |
-
2024
- 2024-02-04 CN CN202410157537.2A patent/CN117692416B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101540720A (zh) * | 2008-06-06 | 2009-09-23 | 曙光信息产业(北京)有限公司 | 一种支持多类型网卡链路聚合的零拷贝方法 |
CN108243118A (zh) * | 2016-12-27 | 2018-07-03 | 华为技术有限公司 | 转发报文的方法和物理主机 |
WO2019134403A1 (zh) * | 2018-01-05 | 2019-07-11 | 华为技术有限公司 | 发送数据包的方法、装置及计算机可读存储介质 |
CN110149262A (zh) * | 2019-04-02 | 2019-08-20 | 视联动力信息技术股份有限公司 | 一种信令报文的处理方法和装置、及存储介质 |
WO2021217529A1 (zh) * | 2020-04-29 | 2021-11-04 | 华为技术有限公司 | 一种进程间通信的方法及系统 |
WO2022105884A1 (zh) * | 2020-11-23 | 2022-05-27 | 中兴通讯股份有限公司 | 数据传输方法、装置、网络设备、存储介质 |
CN113326151A (zh) * | 2021-05-31 | 2021-08-31 | 派日科技(广州)有限公司 | 进程间通信方法、装置、设备、系统及存储介质 |
CN116567076A (zh) * | 2023-05-25 | 2023-08-08 | 南京星思半导体有限公司 | 一种数据报文处理方法及相关装置 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118488021A (zh) * | 2024-07-15 | 2024-08-13 | 浙江禾川科技股份有限公司 | 一种工业以太网报文传输优化方法、装置、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN117692416B (zh) | 2024-05-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101177971B1 (ko) | 보호 영역 경계들에서의 오브젝트 호출 방법, 시스템 및 장치 | |
CN117692416B (zh) | 网络报文处理方法、装置、计算机设备和存储介质 | |
CN114064302B (zh) | 一种进程间通信的方法及装置 | |
US20100082929A1 (en) | Memory protection method, information processing apparatus, and computer-readable storage medium that stores memory protection program | |
CN114625481B (zh) | 数据处理方法、装置、可读介质及电子设备 | |
CN112035272A (zh) | 进程间通信的方法、装置以及计算机设备 | |
CN108491278B (zh) | 一种处理业务数据的方法和网络设备 | |
US8280197B1 (en) | Managed background loading of image resources in resource-constrained devices | |
CN114327777B (zh) | 确定全局页目录的方法、装置、电子设备及存储介质 | |
CN112256460B (zh) | 进程间通信方法、装置、电子设备及计算机可读存储介质 | |
CN112532585A (zh) | 一种进程间报文传输的方法、设备及介质 | |
CN112330229B (zh) | 资源调度方法、装置、电子设备及计算机可读存储介质 | |
CN113010265A (zh) | Pod的调度方法、调度器、存储插件及系统 | |
US20240126567A1 (en) | Data processing system, method, and apparatus | |
CN109753347A (zh) | 一种实现驱动的系统及方法 | |
CN115470156A (zh) | 基于rdma的内存使用方法、系统、电子设备和存储介质 | |
CN113220469B (zh) | 进程间通信方法、装置和计算机设备和计算机可读介质 | |
JP2005209206A (ja) | マルチプロセッサシステムにおけるデータ転送方法、マルチプロセッサシステム、及び、この方法を実施するプロセッサ | |
JP7056870B2 (ja) | 情報処理装置、情報処理方法及びプログラム | |
US11429412B2 (en) | Guest protection from application code execution in kernel mode | |
CN115617537A (zh) | 一种数据传输方法及装置、存储介质 | |
KR20150048028A (ko) | 데이터 전송 관리 방법 | |
CN118519860B (zh) | 接口调用的控制方法、装置、存储介质和电子设备 | |
JP2008210038A (ja) | ユーザスレッドの実装方法 | |
CN118034958B (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 |