CN115334156A - 报文的处理方法、装置、设备、存储介质 - Google Patents
报文的处理方法、装置、设备、存储介质 Download PDFInfo
- Publication number
- CN115334156A CN115334156A CN202110454595.8A CN202110454595A CN115334156A CN 115334156 A CN115334156 A CN 115334156A CN 202110454595 A CN202110454595 A CN 202110454595A CN 115334156 A CN115334156 A CN 115334156A
- Authority
- CN
- China
- Prior art keywords
- shared cache
- tcp
- message
- protocol stack
- function
- 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
Classifications
-
- 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]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请实施例公开了一种报文的处理方法、装置、设备和存储介质,方法包括:在内核态,获取接收报文;在所述内核态,通过TCP/IP协议栈的函数将所述接收报文缓存到对应应用的共享缓存区;所述共享缓存区能够在所述内核态和所述用户态下维护;在用户态,响应于所述TCP/IP协议栈的函数基于所述共享缓存区内所述接收报文的数量触发的收包事件,触发所述应用完成收包;通过内核态和用户态的切换,可以实现接收报文在内核态和用户态中运行至结束,并通过根据共享缓存区中接收报文的数量,对所述接收报文进行批量接收,从而可以在数据隔离场景下提高网络转发的吞吐量,并降低网络时延。
Description
技术领域
本申请涉及计算机技术,涉及但不限于一种报文的处理方法、装置、设备、存储介质。
背景技术
相关技术中,Linux操作系统作为面向用户的操作系统,拥有完善的数据隔离及资源管理机制。但Linux内核协议栈因为中断、socket缓冲区数据拷贝、上下文切换等机制问题,无法满足高吞吐低时延的性能要求。
发明内容
有鉴于此,本申请实施例提供一种报文的处理的方法、装置、设备、存储介质。
第一方面,本申请实施例提供一种报文的处理的方法,所述方法包括:在内核态,获取接收报文;在所述内核态,通过TCP/IP协议栈的函数将所述接收报文缓存到对应应用的共享缓存区;所述共享缓存区能够在所述内核态和用户态下维护;在所述用户态,响应于所述TCP/IP协议栈的函数基于所述共享缓存区内所述接收报文的数量触发的收包事件,触发所述应用完成收包。
第二方面,本申请实施例提供一种报文的处理的装置,包括:获取模块,用于在内核态,获取接收报文;缓存模块,用于在所述内核态,通过TCP/IP协议栈的函数将所述接收报文缓存到对应应用的共享缓存区;所述共享缓存区能够在所述内核态和用户态下维护;收包模块,用于在所述用户态,响应于所述TCP/IP协议栈的函数基于所述共享缓存区内所述接收报文的数量触发的收包事件,触发所述应用完成收包。
第三方面,本申请实施例提供一种计算机设备,包括存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,所述处理器执行所述程序时实现本申请实施例任一所述报文的处理方法中的步骤。
第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现本申请实施例任一所述报文的处理方法中的步骤。
本申请实施例中,通过内核态和用户态的切换,可以实现接收报文在内核态和用户态中运行至结束,并通过根据共享缓存区中接收报文的数量,对所述接收报文进行批量接收,从而可以在数据隔离场景下提高网络转发的吞吐量,并降低网络时延。
附图说明
图1为本申请实施例一种报文的处理方法的流程示意图;
图2为本申请实施例另一种报文的处理方法的流程示意图;
图3为本申请实施例一种报文的处理装置的组成结构示意图;
图4为本申请实施例计算机设备的一种硬件实体示意图。
具体实施方式
下面结合附图和实施例对本申请的技术方案进一步详细阐述。
图1为本申请实施例一种报文的处理方法的流程示意图,所述方法可以应用于网络设备,如图1所示,该方法包括:
步骤102:在内核态,获取接收报文;
其中,所述网络设备所使用的操作系统可以是Linux操作系统,Linux操作系统的体系架构可以分为用户层user和内核层kernel,在Linux操作系统的用户层中执行一个程序时,可以认为该程序的线程在用户态运行,在Linux操作系统的内核层中执行一个程序时,可以认为该程序的线程在内核态运行;内核态和用户态,是Linux操作系统为了有效实现CPU(central processing unit,中央处理器)的权限分级和数据隔离的目标而出现的。内核从本质上看是一种软件,用于控制计算机的硬件资源,并提供上层应用程序运行的环境;用户层即上层应用程序的活动空间,应用程序的执行需要依托内核提供的资源,所述资源可以是CPU资源、存储资源和I/O(Input/Output,输入/输出)资源等。
所述接收报文可以是其他网络设备发送的请求报文,网络设备的网卡(NIC,Network Interface Card)可以是用于在网络上进行通讯的计算机硬件,属于Linux操作系统的内核层,负责网络设备与网络介质间的电气连接、比特数据流的传输和网络地址确认等。网络设备的网卡在接收到其他网络设备发送的接收报文后,将所述接收报文放入自己的报文接收队列之中,线程在内核态轮询所述网卡的报文接收队列,如果在所述报文接收队列中有新接收到的接收报文,则将所述接收报文发送至Linux操作系统的内核层的TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议,网络之间互联的协议)协议栈。
步骤104:在所述内核态,通过TCP/IP协议栈的函数将所述接收报文缓存到对应应用的共享缓存区;所述共享缓存区能够在所述内核态和用户态下维护;
其中,所述应用可以是Linux操作系统的用户层上的应用程序,由于不同的接收报文需要发送给不同的应用,因此,线程在所述内核态,可以通过TCP/IP协议栈的函数对所述接收报文进行解析处理,并根据解析结果,将所述接收报文缓存至对应应用的共享缓存区。
步骤106:在所述用户态,响应于所述TCP/IP协议栈的函数基于所述共享缓存区内所述接收报文的数量触发的收包事件,触发所述应用完成收包。
其中,线程在所述内核态,可以通过TCP/IP协议栈的函数,对缓存至应用的共享缓存区的接收报文的数量进行统计,在所述数量满足特定的数量条件的情况下,可以触发收包事件;响应于所述收包事件,处于内核态的线程由所述内核态切换至所述用户态,以触发所述应用完成收包;所述应用在收到所述接收报文后,可以生成所述接收报文的待发送应答报文。
需要说明的是,在整个接收报文的处理过程中,可以采用RTC(Run ToCompletion)报文调度模型对所述接收报文进行处理。
本申请实施例中,通过内核态和用户态的切换,可以实现接收报文在内核态和用户态中运行至结束,并通过共享缓存区中接收报文的数量,对所述接收报文进行批量接收,从而可以在数据隔离场景下提高网络转发的吞吐量,并降低网络时延。
本申请实施例还提供一种报文的处理方法,所述方法包括:
步骤202:在内核态,获取接收报文;
步骤204:在所述内核态,通过TCP/IP协议栈的函数将所述接收报文缓存到对应应用的共享缓存区;所述共享缓存区能够在所述内核态和用户态下维护;
步骤206:在所述用户态,响应于所述TCP/IP协议栈的函数基于所述共享缓存区内所述接收报文的数量触发的收包事件,触发所述应用完成收包。
步骤208:在所述用户态,接收发包事件;所述发包事件是所述TCP/IP协议栈的函数基于所述共享缓存区内待发送报文的数量而触发;
其中,所述待发送报文可以是所述应用根据接收到的接收报文生成的待发送的应答报文,又可以称为待发送应答报文或者应答报文,可以通过TCP/IP协议栈的函数将所述待发送报文缓存至对应应用的共享缓存区;可以通过TCP/IP协议栈的函数,对缓存至应用的共享缓存区的待发送报文的数量进行统计,在所述数量满足特定的数量条件的情况下,可以触发发包事件;可以认为,发包事件是系统调用的一种,为了使Linux操作系统的用户层的上层应用能够访问到Linux操作系统的内核层的资源,内核必须为上层应用程序提供访问这些资源的接口,即系统调用,在触发发包事件后,所述线程由所述用户态切换至所述内核态。
需要说明的是,所述共享缓存区可以包括第一共享缓存区和第二共享缓存区,所述第一共享缓存区可以用于缓存所述接收报文,所述第二共享缓存区可以用于缓存所述待发送报文。
步骤210:在所述内核态,响应于接收到的发包事件,将所述共享缓存区内待发送报文通过发送接口发出。
其中,由于不同的待发送报文需要发送给不同的其他网络设备,因此,线程在所述内核态,响应于所述接收到的发包事件,可以通过TCP/IP协议栈的函数对所述待发送报文进行解析处理,并根据解析结果,将所述待发送报文通过对应的发送接口发送至对应的其他网络设备。
需要说明的是,在整个接收报文和待发送报文的处理过程中,可以采用RTC报文调度模型对所述接收报文和待发送报文进行处理。
本申请实施例中,通过内核态和用户态的切换,可以实现接收报文和待发送报文在内核态和用户态中运行至结束,并通过根据共享缓存区中接收报文和待发送报文的数量,对所述接收报文进行批量接收、对所述待发送报文进行批量发送,从而可以在数据隔离场景下提高网络转发的吞吐量,并降低网络时延。
本申请实施例还提供一种报文的处理方法,所述方法包括:
步骤302:在内核态,获取接收报文;
步骤304:在所述内核态,通过TCP/IP协议栈的函数将所述接收报文缓存到对应应用的共享缓存区;所述共享缓存区能够在所述内核态和用户态下维护;
步骤306:在所述用户态,响应于所述TCP/IP协议栈的函数基于所述共享缓存区内所述接收报文的数量触发的收包事件,触发所述应用完成收包。
步骤308:在所述用户态,接收发包事件;所述发包事件是所述TCP/IP协议栈的函数基于所述共享缓存区内待发送报文的数量而触发;
步骤310:在所述内核态,通过TCP/IP协议栈的函数,从所述待发送报文中解析出第一目的端口号;
其中,所述第一目的端口号是所述待发送报文的接收方(如某一其他网络设备)对应的端口号。
步骤312:在所述内核态,通过TCP/IP协议栈的函数,将所述待发送报文通过所述第一目的端口号对应的发送接口发出。
其中,所述发送接口可以是待发送报文的发送方(即所述网络设备)的端口,又可以称为源端口。
本申请实施例中,通过TCP/IP协议栈的函数,从待发送报文中解析出第一目的端口号,从而能够更准确地将待发送报文发送至目的网络设备。
本申请实施例还提供一种报文的处理方法,所述方法包括:
步骤402:在内核态,获取接收报文;
步骤404:在所述内核态,通过TCP/IP协议栈的函数将所述接收报文缓存到对应应用的共享缓存区;所述共享缓存区能够在所述内核态和用户态下维护;
步骤406:在所述用户态,响应于所述TCP/IP协议栈的函数基于所述共享缓存区内所述接收报文的数量触发的收包事件,触发所述应用完成收包。
步骤408:在所述用户态,响应于在所述共享缓存区内待发送报文的数量大于或等于第一数量阈值的情况下,通过所述TCP/IP协议栈的函数,在所述共享缓存区中写入第一标志位以触发发包事件;
其中,所述第一数量阈值可以是32,在所述共享缓存区内待发送报文的数量大于或等于32的情况下,可以通过所述TCP/IP协议栈的函数,在所述共享缓存区中写入一个第一标志位,用于提示线程通过系统调用将所述待发送报文发出。
步骤410:在所述用户态,通过轮询到所述第一标志位以接收所述发包事件;
其中,线程在所述用户态,通过在所述共享缓存区中轮询到所述第一标志位,可以获知共享缓存区内待发送报文的数量已经达到第一数量阈值,触发所述发包事件;接收到发包事件后,处于用户态的线程由所述用户态切换至所述内核态。在应用的此次收包过程中,对所述第一数量阈值的包进行批量发送。
步骤412:在所述内核态,响应于接收到的发包事件,将所述共享缓存区内待发送报文通过发送接口发出。
本申请实施例中,通过对所述待发送报文进行批量发送,并将单批次发送的报文的数量限制在第一数量阈值,从而一方面可以通过批量处理报文,提高网络转发的吞吐量,另一方面通过限制单次处理报文的数量,可以防止数据超出缓存容量,降低网络时延。通过写入第一标志位,在线程轮询共享缓存数组的情况下,可以通过查看共享缓存数组中是否存在第一标志位,更便捷地确定共享缓存数组中待发送报文的数量是否达到批量发送的要求。
本申请实施例还提供一种报文的处理方法,所述方法包括:
步骤502:在内核态,获取接收报文;
步骤504:在所述内核态,通过TCP/IP协议栈的函数将所述接收报文缓存到对应应用的共享缓存区;所述共享缓存区能够在所述内核态和用户态下维护;
步骤506:在所述用户态,响应于所述TCP/IP协议栈的函数基于所述共享缓存区内所述接收报文的数量触发的收包事件,触发所述应用完成收包。
步骤508:在所述用户态,接收发包事件;所述发包事件是所述TCP/IP协议栈的函数基于所述共享缓存区内待发送报文的数量而触发;
步骤510:在所述内核态,响应于接收到的发包事件,将所述共享缓存区内待发送报文通过发送接口发出。
步骤512:在所述内核态,通过TCP定时器,判断所述待发送报文是否发送成功;
步骤514:在所述待发送报文没有成功发送的情况下,重新发送或者放弃发送所述待发送报文。
其中,TCP定时器可以包括重传定时器和保活定时器,当TCP/IP协议栈需要发送应答报文时,就创建该应答报文的重传计时器。如果在重传计时器截止时间到(通常是60秒)之前收到了对此应答报文的确认,判断所述待发送报文发送成功,则撤销此重传计时器;如果在收到了对该应答报文的确认之前重传计时器截止期到,判断所述待发送报文发送失败,则重传该应答报文,并将重传计时器复位。
保活定时器用来判断两个TCP/IP协议栈之间的连接是否出现异常,当连接的空闲时间超过了设置的时间,且发送过探测报文,判断所述待发送报文发送失败,即连接异常,此时可放弃发送所述待发送报文;当发送保活探测包的次数达到了保活探测的最大次数时,判断所述待发送报文发送失败,即连接异常,此时可放弃发送所述待发送报文。
本申请实施例中,通过设置TCP定时器,从而监测待发送报文是否发生成功,并确定是否进行待发送报文的重传或放弃发送,从而可以提高报文的处理的效率。
本申请实施例还提供一种报文的处理方法,所述方法包括:
步骤602:在内核态,获取接收报文;
步骤604:在所述内核态,通过TCP/IP协议栈的函数将所述接收报文缓存到对应应用的共享缓存区;所述共享缓存区能够在所述内核态和用户态下维护;
步骤606:在所述用户态,响应于在所述共享缓存区内所述接收报文的数量大于或等于第二数量阈值的情况下,通过所述TCP/IP协议栈的函数,在所述共享缓存区中写入第二标志位以触发收包事件;
其中,所述第二数量阈值可以是40,在所述共享缓存区内所述接收报文的数量大于或等于40的情况下,可以通过所述TCP/IP协议栈的函数,在所述共享缓存区写入第二标志位,用于提示线程触发应用收包;所述第一标志位与所述第二标志位不同。
步骤608:在所述用户态,通过轮询所述第二标志位以触发所述应用完成收包。
其中,线程在所述用户态,通过在在所述共享缓存区中轮询到所述第二标志位的情况下,可以获知共享缓存区内接收报文的数量已经达到第二数量阈值,触发所述收包事件,以触发所述应用完成收包。在应用的此次收包过程中,对所述第二数量阈值的包进行批量接收。
步骤610:在所述用户态,接收发包事件;所述发包事件是所述TCP/IP协议栈的函数基于所述共享缓存区内待发送报文的数量而触发;
步骤612:在所述内核态,响应于接收到的发包事件,将所述共享缓存区内待发送报文通过发送接口发出。
本申请实施例中,通过对所述接收报文进行批量接收,并将单批次接收的报文的数量限制在第二数量阈值,从而一方面可以通过批量处理报文,提高网络转发的吞吐量,另一方面通过限制单次处理报文的数量,可以防止数据超出缓存容量,降低网络时延。通过写入第二标志位,在线程轮询共享缓存数组的情况下,可以通过查看共享缓存数组中是否存在第二标志位,更便捷地确定共享缓存数组中接收报文的数量是否达到批量接收的要求。
本申请实施例还提供一种报文的处理方法,所述方法包括:
步骤702:在内核态,获取接收报文;
步骤704:在所述内核态,通过TCP/IP协议栈的函数,从所述接收报文中解析出第二目的端口号;
其中,所述第二目的端口号是所述接收报文的接收方、如某一应用对应的端口号。
步骤706:在所述内核态,通过TCP/IP协议栈的函数,将所述接收报文缓存到所述第二目的端口号对应的应用的共享缓存区;所述共享缓存区能够在所述内核态和用户态下维护;
其中,可以根据从接收报文中解析出的第二目的端口号,将接收报文缓存至与第二目的端口号对应的应用的共享缓存区。
步骤708:在所述用户态,响应于所述TCP/IP协议栈的函数基于所述共享缓存区内所述接收报文的数量触发的收包事件,触发所述应用完成收包。
步骤710:在所述用户态,接收发包事件;所述发包事件是所述TCP/IP协议栈的函数基于所述共享缓存区内待发送报文的数量而触发;
步骤712:在所述内核态,响应于接收到的发包事件,将所述共享缓存区内待发送报文通过发送接口发出。
本申请实施例中,通过TCP/IP协议栈的函数,从接收报文中解析出第二目的端口号,从而能够更准确地将待发送报文发送至目的应用。
网络中间设备例如防火墙、路由器、负载均衡器等均采用RTC报文调度模型,只有当前批次报文的协议栈处理及应用处理均完成,才进行下一批次报文处理。在提升性能的同时,也导致了协议栈逻辑和应用逻辑存在一定耦合,即协议栈和应用程序中间的接口为自定义的非标准接口,网络中间设备的操作系统作为单目的的操作系统,即网络中间设备的操作系统仅用于网络中间设备,虽然能满足高吞吐低时延的要求,但并不适用直接面向用户场景,缺乏有效的数据隔离及资源管理机制,缺乏数据隔离会降低数据的安全性,缺乏资源管理机制可能会造成资源的滥用和失密等,从而降低CPU和内存之间的调度性能。
其中,RTC是一种报文调度模型,单个CPU(central processing unit,中央处理器)的线程都负责处理整个报文的生命周期,包含了报文的接收、处理和发送;CPU的核心又称CPU的内核,是CPU的重要组成部分,CPU的内核数是指在物理上,一个CPU芯片上集成了几个内核;CPU的线程数是指在逻辑上,一个CPU芯片上模拟出的CPU核心数;一般一个CPU的核心对应一个线程,然而对于英特尔公司的超线程技术,一个CPU的核心可以对应两个线程。
Linux操作系统作为面向用户的操作系统,拥有完善的数据隔离及资源管理机制。但Linux内核网络协议栈因为中断、socket套接字的缓冲区的数据拷贝、上下文切换等机制问题,无法满足高吞吐低时延的性能要求;其中,上下文切换指的是CPU的内核在CPU上对进程或者线程进行切换。
本申请实施例提出了一种将RTC调度模型用于Linux操作系统的TCP/IP协议栈数据面的报文的处理方法,可以实现报文在Linux操作系统内核态与用户态中运行至结束,满足数据隔离性,提高网络吞吐,降低网络时延。
其中,数据面又称路由器的数据层面,对数据报文的各种处理、转发过程都属于数据层面,数据层面主要占用的是硬件资源;路由器还包括控制层面,控制层面构建了路由表等数据报文发送的必要信息,数据层面依据这些必要信息来发送数据。
图2为本申请实施例另一种报文的处理方法的流程示意图,所述方法可以应用于网络设备,如图2所示,该方法包括:
步骤802:线程在内核态轮询网卡NIC的报文接收队列,在收到请求报文后交由TCP/IP协议栈的函数处理;
步骤804:线程在内核态通过TCP/IP协议栈的函数对所述报文接收队列中的请求报文进行批量解析,并触发收包事件;
其中,TCP/IP协议栈的函数通过在对报文接收队列中的请求报文进行解析处理,可以得到每一所述请求报文对应的第二目的端口号,从而可以根据所述第二目的端口号,将对应的请求报文缓存至所述第二目的端口号对应的应用程序的共享缓存区,所述收包事件的触发条件,即事件条件(event conditions)可以是所述共享缓存区中请求报文的数量大于第二数量阈值,在在所述共享缓存区中请求报文的数量大于第二数量阈值的情况下,通过TCP/IP协议栈的函数,将第二标志位写入对应的应用程序的共享缓存区中;触发收包事件。
步骤806:线程由内核态切换至用户态,查询收包事件和发包事件;
其中,在收包事件被触发后,线程由内核态切换至用户态,线程在用户态在应用程序的共享缓存数组中查询是否存在第二标志位,如果是,则触发应用程序完成收包,所述应用程序对所述请求报文进行处理后可以得到待发送应答报文;在所述共享缓存区中待发送应答报文的数量大于第一数量阈值的情况下,通过所述TCP/IP协议栈的函数,将第一标志位写入对应的应用程序的共享缓存数组中;触发发包事件;在发包事件被触发后,线程由用户态切换至内核态,即触发批量系统调用(batched Syscalls),由于需要将待发送报文发出,因此,触发的系统调用可以是发包系统调用(sys_send)。
其中,可以对批量系统调用的单次批量处理数进行限制,此时触发批量系统调用时为尽量减小对网络延迟的影响,避免批处理带来的时延增大;限制批量大小可以防止数据超出缓存容量,避免发送队列无法得到及时调度。拥塞控制时,批处理系统调用能够分摊系统调用开销、提高指令局部性、预取有效性和分支预测准确性,提高报文处理效率,有助于缓解拥塞状态。
步骤808:线程在内核态通过TCP/IP协议栈的函数,对所述待发送报文进行批量解析;
其中,线程在内核态,通过TCP/IP协议栈的函数,从所述待发送报文中解析出第一目的端口号。
步骤810:运行内核TCP定时器,保证TCP功能正确;
其中,所述内核TCP定时器又称TCP定时器,可以包括重传定时器和保活定时器,当TCP/IP协议栈需要发送应答报文时,就创建该应答报文的重传计时器。如果在重传计时器截止时间到(通常是60秒)之前收到了对此应答报文的确认,判断所述待发送报文发送成功,则撤销此重传计时器;如果在收到了对该应答报文的确认之前重传计时器截止期到,判断所述待发送报文发送失败,则重传该应答报文,并将重传计时器复位。
保活定时器用来判断两个TCP/IP协议栈之间的连接是否出现异常,当连接的空闲时间超过了设置的时间,且发送过探测报文,判断所述待发送报文发送失败,即连接异常,此时可放弃发送所述待发送报文;当发送保活探测包的次数达到了保活探测的最大次数时,判断所述待发送报文发送失败,即连接异常,此时可放弃发送所述待发送报文。
步骤812:线程在内核态,将待发送报文写入NIC网卡接收队列,调用驱动发送接口。
其中,线程在内核态,并通过TCP/IP协议栈的函数,将所述待发送报文写如NIC网卡接收队列,通过所述第一目的端口号对应的发送接口发送至与所述第一目的端口号对应的其他网络设备。
本申请实施例提供的报文的处理方法,在网络协议栈数据面中采用RTC调度模型,实现报文在内核态与用户态中运行至结束,可以在数据隔离场景下实现网络转发高吞吐,并降低网络时延。
基于前述的实施例,本申请实施例提供一种报文的处理装置,该装置包括所包括的各单元、以及各单元所包括的各模块,可以通过计算机设备中的处理器来实现;当然也可通过具体的逻辑电路实现;在实施的过程中,处理器可以为中央处理器(centralprocessing unit,CPU)、微处理器(Microprocessor Unit,MPU)、数字信号处理器(DigitalSignal Processing,DSP)或现场可编程门阵列(FPGA,Field Programmable Gate Array)等。
图3为本申请实施例一种报文的处理装置的组成结构示意图,如图3所示,所述装置300包括获取模块301、缓存模块302和收包模块303,其中:
获取模块301,用于在内核态,获取接收报文;
缓存模块302,用于在所述内核态,通过TCP/IP协议栈的函数将所述接收报文缓存到对应应用的共享缓存区;所述共享缓存区能够在所述内核态和所述用户态下维护;
收包模块303,用于在用户态,响应于所述TCP/IP协议栈的函数基于所述共享缓存区内所述接收报文的数量触发的收包事件,触发所述应用完成收包。
在一些实施例中,所述装置还包括:接收模块,用于在所述用户态,接收发包事件;所述发包事件是所述TCP/IP协议栈的函数基于所述共享缓存区内待发送报文的数量而触发;发送模块,用于在所述内核态,响应于接收到的发包事件,将所述共享缓存区内待发送报文通过发送接口发出。
在一个实施例中,所述发送模块包括:第一解析单元,用于在所述内核态,通过TCP/IP协议栈的函数,从所述待发送报文中解析出第一目的端口号;发送单元,用于在所述内核态,通过TCP/IP协议栈的函数,将所述待发送报文通过所述第一目的端口号对应的发送接口发出。
在一个实施例中,所述接收模块,包括:第一写入单元,用于在所述用户态,响应于在所述共享缓存区内待发送报文的数量大于或等于第一数量阈值的情况下,通过所述TCP/IP协议栈的函数,在所述共享缓存区中写入第一标志位以触发发包事件;接收单元,用于在所述用户态,通过轮询到所述第一标志位以接收所述发包事件。
在一个实施例中,所述收包模块303包括:第二写入单元,用于在所述用户态,响应于在所述共享缓存区内所述接收报文的数量大于或等于第二数量阈值的情况下,通过所述TCP/IP协议栈的函数,在所述共享缓存区中写入第二标志位以触发收包事件;收包单元,用于在所述用户态,通过轮询所述第二标志位以触发所述应用完成收包。
在一个实施例中,缓存模块302包括:第二解析单元,用于在所述内核态,通过TCP/IP协议栈的函数,从所述接收报文中解析出第二目的端口号;缓存单元,用于在所述内核态,通过TCP/IP协议栈的函数,将所述接收报文缓存到所述第二目的端口号对应的应用的共享缓存区。
以上装置实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请装置实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
需要说明的是,本申请实施例中,如果以软件功能模块的形式实现上述的报文的处理方法,并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得计算机设备(可以是手机、平板电脑、台式机、个人数字助理、导航仪、数字电话、视频电话、电视机、传感设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。这样,本申请实施例不限制于任何特定的硬件和软件结合。
对应地,本申请实施例提供一种计算机设备,图4为本申请实施例计算机设备的一种硬件实体示意图,如图4所示,该计算机设备400的硬件实体包括:包括存储器401和处理器402,所述存储器401存储有可在处理器402上运行的计算机程序,所述处理器402执行所述程序时实现上述实施例报文的处理方法中的步骤。
存储器401配置为存储由处理器402可执行的指令和应用,还可以缓存待处理器402以及计算机设备400中各模块待处理或已经处理的数据(例如,图像数据、音频数据、语音通信数据和视频通信数据),可以通过闪存(FLASH)或随机访问存储器(Random AccessMemory,RAM)实现。
对应地,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中提供的报文的处理方法中的步骤。
这里需要指出的是:以上存储介质和设备实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请存储介质和设备实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得计算机设备(可以是手机、平板电脑、台式机、个人数字助理、导航仪、数字电话、视频电话、电视机、传感设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
本申请所提供的几个方法实施例中所揭露的方法,在不冲突的情况下可以任意组合,得到新的方法实施例。本申请所提供的几个产品实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的产品实施例。本申请所提供的几个方法或设备实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的方法实施例或设备实施例。
以上所述,仅为本申请的实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种报文的处理方法,其特征在于,应用于网络设备,所述方法包括:
在内核态,获取接收报文;
在所述内核态,通过TCP/IP协议栈的函数将所述接收报文缓存到对应应用的共享缓存区;所述共享缓存区能够在所述内核态和用户态下维护;
在所述用户态,响应于所述TCP/IP协议栈的函数基于所述共享缓存区内所述接收报文的数量触发的收包事件,触发所述应用完成收包。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述用户态,接收发包事件;所述发包事件是所述TCP/IP协议栈的函数基于所述共享缓存区内待发送报文的数量而触发;
在所述内核态,响应于接收到的发包事件,将所述共享缓存区内待发送报文通过发送接口发出。
3.根据权利要求2所述的方法,其特征在于,所述在所述内核态,响应于接收到的发包事件,将所述共享缓存区内待发送报文通过发送接口发出,包括:
在所述内核态,通过TCP/IP协议栈的函数,从所述待发送报文中解析出第一目的端口号;
在所述内核态,通过TCP/IP协议栈的函数,将所述待发送报文通过所述第一目的端口号对应的发送接口发出。
4.根据权利要求2所述的方法,其特征在于,所述在所述用户态,接收发包事件;所述发包事件是所述TCP/IP协议栈的函数基于所述共享缓存区内待发送报文的数量而触发,包括:
在所述用户态,响应于在所述共享缓存区内待发送报文的数量大于或等于第一数量阈值的情况下,通过所述TCP/IP协议栈的函数,在所述共享缓存区中写入第一标志位以触发发包事件;
在所述用户态,通过轮询到所述第一标志位以接收所述发包事件。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述在所述用户态,响应于所述TCP/IP协议栈的函数基于所述共享缓存区内所述接收报文的数量触发的收包事件,触发所述应用完成收包,包括:
在所述用户态,响应于在所述共享缓存区内所述接收报文的数量大于或等于第二数量阈值的情况下,通过所述TCP/IP协议栈的函数,在所述共享缓存区中写入第二标志位以触发收包事件;
在所述用户态,通过轮询所述第二标志位以触发所述应用完成收包。
6.根据权利要求1至4中任一项所述的方法,其特征在于,所述在所述内核态,通过TCP/IP协议栈的函数将所述接收报文缓存到对应应用的共享缓存区,包括:
在所述内核态,通过TCP/IP协议栈的函数,从所述接收报文中解析出第二目的端口号;
在所述内核态,通过TCP/IP协议栈的函数,将所述接收报文缓存到所述第二目的端口号对应的应用的共享缓存区。
7.一种报文的处理装置,其特征在于,所述装置包括:
获取模块,用于在内核态,获取接收报文;
缓存模块,用于在所述内核态,通过TCP/IP协议栈的函数将所述接收报文缓存到对应应用的共享缓存区;所述共享缓存区能够在所述内核态和用户态下维护;
收包模块,用于在所述用户态,响应于所述TCP/IP协议栈的函数基于所述共享缓存区内所述接收报文的数量触发的收包事件,触发所述应用完成收包。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
接收模块,用于在所述用户态,接收发包事件;所述发包事件是所述TCP/IP协议栈的函数基于所述共享缓存区内待发送报文的数量而触发;
发送模块,用于在所述内核态,响应于接收到的发包事件,将所述共享缓存区内待发送报文通过发送接口发出。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至6任一项所述报文的处理方法中的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至6任一项所述报文的处理方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110454595.8A CN115334156A (zh) | 2021-04-26 | 2021-04-26 | 报文的处理方法、装置、设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110454595.8A CN115334156A (zh) | 2021-04-26 | 2021-04-26 | 报文的处理方法、装置、设备、存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115334156A true CN115334156A (zh) | 2022-11-11 |
Family
ID=83913018
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110454595.8A Pending CN115334156A (zh) | 2021-04-26 | 2021-04-26 | 报文的处理方法、装置、设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115334156A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116149864A (zh) * | 2023-03-14 | 2023-05-23 | 广州纳指数据智能科技有限公司 | 一种基于大数据的数据共享交换方法及其系统 |
CN117041379A (zh) * | 2023-07-10 | 2023-11-10 | 中科驭数(北京)科技有限公司 | 同时监听用户态协议栈和内核态协议栈新建连接的方法及装置 |
CN117376343A (zh) * | 2023-12-08 | 2024-01-09 | 湖南博匠信息科技有限公司 | 一种提升发送端设备吞吐量的网络文件传输方法及系统 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030081601A1 (en) * | 2001-10-30 | 2003-05-01 | Larry Morris | Network interface sharing methods and apparatuses that support kernel mode data traffic and user mode data traffic |
WO2017000593A1 (zh) * | 2015-06-30 | 2017-01-05 | 中兴通讯股份有限公司 | 报文处理方法及装置 |
WO2017067391A1 (zh) * | 2015-10-22 | 2017-04-27 | 中兴通讯股份有限公司 | 虚拟机的数据共享方法及装置 |
CN107046508A (zh) * | 2016-02-05 | 2017-08-15 | 华为技术有限公司 | 报文接收方法及网络设备 |
CN109587082A (zh) * | 2019-01-10 | 2019-04-05 | 烽火通信科技股份有限公司 | 一种基于Linux操作系统的报文异步转发系统及方法 |
CN109688058A (zh) * | 2018-12-19 | 2019-04-26 | 迈普通信技术股份有限公司 | 报文处理方法、装置及网络设备 |
WO2019154221A1 (zh) * | 2018-02-07 | 2019-08-15 | 华为技术有限公司 | 发送流数据的方法及数据发送设备 |
CN110535813A (zh) * | 2018-05-25 | 2019-12-03 | 网宿科技股份有限公司 | 内核态协议栈与用户态协议栈并存处理方法和装置 |
CN110602225A (zh) * | 2019-09-19 | 2019-12-20 | 北京天地和兴科技有限公司 | 一种适用于工控环境的linux系统高效收发包方法 |
CN111949422A (zh) * | 2020-08-26 | 2020-11-17 | 南京云灿信息科技有限公司 | 基于mq和异步io的数据多级缓存与高速传输记录方法 |
CN112422453A (zh) * | 2020-12-09 | 2021-02-26 | 新华三信息技术有限公司 | 一种报文处理的方法、装置、介质及设备 |
CN112532585A (zh) * | 2020-11-02 | 2021-03-19 | 杭州迪普科技股份有限公司 | 一种进程间报文传输的方法、设备及介质 |
-
2021
- 2021-04-26 CN CN202110454595.8A patent/CN115334156A/zh active Pending
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030081601A1 (en) * | 2001-10-30 | 2003-05-01 | Larry Morris | Network interface sharing methods and apparatuses that support kernel mode data traffic and user mode data traffic |
WO2017000593A1 (zh) * | 2015-06-30 | 2017-01-05 | 中兴通讯股份有限公司 | 报文处理方法及装置 |
WO2017067391A1 (zh) * | 2015-10-22 | 2017-04-27 | 中兴通讯股份有限公司 | 虚拟机的数据共享方法及装置 |
CN107046508A (zh) * | 2016-02-05 | 2017-08-15 | 华为技术有限公司 | 报文接收方法及网络设备 |
WO2019154221A1 (zh) * | 2018-02-07 | 2019-08-15 | 华为技术有限公司 | 发送流数据的方法及数据发送设备 |
CN110535813A (zh) * | 2018-05-25 | 2019-12-03 | 网宿科技股份有限公司 | 内核态协议栈与用户态协议栈并存处理方法和装置 |
CN109688058A (zh) * | 2018-12-19 | 2019-04-26 | 迈普通信技术股份有限公司 | 报文处理方法、装置及网络设备 |
CN109587082A (zh) * | 2019-01-10 | 2019-04-05 | 烽火通信科技股份有限公司 | 一种基于Linux操作系统的报文异步转发系统及方法 |
CN110602225A (zh) * | 2019-09-19 | 2019-12-20 | 北京天地和兴科技有限公司 | 一种适用于工控环境的linux系统高效收发包方法 |
CN111949422A (zh) * | 2020-08-26 | 2020-11-17 | 南京云灿信息科技有限公司 | 基于mq和异步io的数据多级缓存与高速传输记录方法 |
CN112532585A (zh) * | 2020-11-02 | 2021-03-19 | 杭州迪普科技股份有限公司 | 一种进程间报文传输的方法、设备及介质 |
CN112422453A (zh) * | 2020-12-09 | 2021-02-26 | 新华三信息技术有限公司 | 一种报文处理的方法、装置、介质及设备 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116149864A (zh) * | 2023-03-14 | 2023-05-23 | 广州纳指数据智能科技有限公司 | 一种基于大数据的数据共享交换方法及其系统 |
CN117041379A (zh) * | 2023-07-10 | 2023-11-10 | 中科驭数(北京)科技有限公司 | 同时监听用户态协议栈和内核态协议栈新建连接的方法及装置 |
CN117041379B (zh) * | 2023-07-10 | 2024-04-19 | 中科驭数(北京)科技有限公司 | 同时监听用户态协议栈和内核态协议栈新建连接的方法及装置 |
CN117376343A (zh) * | 2023-12-08 | 2024-01-09 | 湖南博匠信息科技有限公司 | 一种提升发送端设备吞吐量的网络文件传输方法及系统 |
CN117376343B (zh) * | 2023-12-08 | 2024-02-13 | 湖南博匠信息科技有限公司 | 一种提升发送端设备吞吐量的网络文件传输方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115334156A (zh) | 报文的处理方法、装置、设备、存储介质 | |
US8713158B2 (en) | System, method and computer program product for monitoring and controlling network connections from a supervisory operating system | |
KR101502808B1 (ko) | 단일 모뎀 보드 상의 개선된 멀티-셀 지원을 위한 방법 및 시스템 | |
CN108023829B (zh) | 报文处理方法及装置、存储介质、电子设备 | |
US7174449B2 (en) | Network interface sharing methods and apparatuses that support kernel mode data traffic and user mode data traffic | |
US7571247B2 (en) | Efficient send socket call handling by a transport layer | |
US9015822B2 (en) | Automatic invocation of DTN bundle protocol | |
EP3547627A1 (en) | Flow control method and switching device | |
US8665870B2 (en) | Method and apparatus for handling push messages | |
CN109547519B (zh) | 反向代理方法、装置及计算机可读存储介质 | |
US9350678B2 (en) | Controller based network resource management | |
CN117997802B (zh) | 一种网络抖动检测方法、装置、设备及介质 | |
CN114465742A (zh) | 网络安全防护方法以及防护设备 | |
CN114363351A (zh) | 一种代理连接抑制方法、网络架构及代理服务器 | |
US20110274118A1 (en) | Method and apparatus for reading data from a protocol stack of transmission control protocol/internet protocol | |
CN104811391B (zh) | 数据包的处理方法、装置及服务器 | |
JP2022545453A (ja) | メッセージ処理方法、装置およびコンピュータ記憶媒体 | |
CN112350988A (zh) | 一种安全策略的字节数与连接数统计方法与装置 | |
CN118555162B (zh) | 一种加速网络通信的方法及装置 | |
CN112449388B (zh) | 网络连接控制方法、装置、移动终端及存储介质 | |
CN115118473B (zh) | 数据处理方法、装置、设备及存储介质 | |
CN118555162A (zh) | 一种加速网络通信的方法及装置 | |
CN118433266A (zh) | 一种数据处理方法及相关设备 | |
CN115842873A (zh) | 一种报文处理方法、网卡及服务器 | |
CN118337665A (zh) | Tcp连接异常检测方法及装置 |
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 |