报文处理方法及装置与流程

文档序号:12623724阅读:501来源:国知局
报文处理方法及装置与流程

本发明涉及通信领域,具体而言,涉及一种报文处理方法及装置。



背景技术:

Linux作为免费开源的操作系统,其强大的网络处理能力和稳定性,深受通信设备制造商们的欢迎,现在绝大多数网络设备都是基于Linux操作系统开发。

传输控制协议(TCP)/因特网协议(IP)体系是当前互联网的通信协议标准,在Linux网络内核中得到完整的实现,该体系分为四个层次:应用层,传输层,网络层,网络介质层。Linux网络内核参照网络协议体系实现了网络互联功能,包括以下部分:

1.套接字接口,网络内核最顶层支持应用程序开发的接口,套接字接口是一系列标准函数。套接字支持多种不同类型的协议族:UNIX域协议族、TCP/IP协议族、互联网数据包交换(IPX)协议族,其中TCP/IP协议族应用最为广泛;

2.传输层和网络层,传输层包括标准的TCP和用户数据报(UDP)协议模块,而网络层包括标准的IP协议模块;

3.数据链路层,对于需要逻辑链路的网络,数据链路层提供独立的逻辑链路协议模块,比如点对点协议(PPP)、串行线路网际协议(SLIP)等。对于以太网,该层比较简单,主要的以太网协议实现被集成到底层网卡驱动中;

4.网络设备驱动,由于物理特性的差异,不同的网络设备采用不同的设备驱动。

本发明的发明人在研究过程中发现,用户态应用程序读取数据报文,需要先打开网络设备并绑定套接字。数据报文经过网络设备驱动到内核网络协议栈,然后到用户态应用程序,处理流程复杂,同时内核态到用户态空间还需要经过一次内存拷贝,不适合对性能要求高的场合。

针对相关技术通过套接字接口和网络协议栈无法快速进行报文处理的问题,目前尚未提出有效的解决方案。



技术实现要素:

本发明提供了一种报文处理方法及装置,以至少解决相关技术中通过套接字接口和网络协议栈无法快速进行报文处理的问题。

根据本发明的一个方面,提供了一种报文处理方法,包括:在用户态应用程序与网 络设备驱动之间创建快速通道缓冲区;判断待传输报文是否属于预设报文类型;在判断到所述待传输报文属于所述预设报文类型的情况下,通过所述快速通道缓冲区,在用户态应用程序与网络设备驱动之间传输所述待传输报文。

优选地,在用户态应用程序与网络设备驱动之间创建所述快速通道缓冲区包括:创建并注册快速通道字符节点;通过所述快速通道字符节点,用户态应用程序通过系统调用创建共享队列,得到所述快速通道缓冲区;通过所述快速通道字符节点,用户态应用程序设置所述预设报文类型。

优选地,在判断到所述待传输报文属于所述预设报文类型的情况下,在通过所述快速通道缓冲区,在用户态应用程序与网络设备驱动之间传输所述待传输报文之前,所述方法还包括:判断所述快速通道缓冲区是否已满;其中,在判断到所述快速通道缓冲区未满的情况下,通过所述快速通道缓冲区,在用户态应用程序与网络设备驱动之间传输所述待传输报文。

优选地,在判断到所述快速通道缓冲区已满的情况下,所述方法还包括:丢弃所述待传输报文。

优选地,在判断到所述待传输报文不属于所述预设报文类型的情况下,所述方法还包括:通过网络协议栈在用户态应用程序与网络设备驱动之间传输所述待传输报文。

优选地,通过所述网络协议栈在用户态应用程序与网络设备驱动之间传输所述待传输报文包括:将所述待传输报文存储到所述网络协议栈;通过套接字接口从所述网络协议栈读取所述待传输报文。

根据本发明的另一个方面,还提供了一种报文处理装置,包括:创建模块,用于在用户态应用程序与网络设备驱动之间创建快速通道缓冲区;第一判断模块,用于判断待传输报文是否属于预设报文类型;第一传输模块,用于在判断到所述待传输报文属于所述预设报文类型的情况下,通过所述快速通道缓冲区,在用户态应用程序与网络设备驱动之间传输所述待传输报文。

优选地,所述装置还包括:第二判断模块,用于判断所述快速通道缓冲区是否已满;其中,在判断到所述快速通道缓冲区未满的情况下,通过所述快速通道缓冲区,在用户态应用程序与网络设备驱动之间传输所述待传输报文。

优选地,所述装置还包括:丢弃模块,用于在判断到所述快速通道缓冲区已满的情况下,丢弃所述待传输报文。

优选地,所述装置还包括:第二传输模块,用于在判断到所述待传输报文不属于所述预设报文类型的情况下,通过网络协议栈在用户态应用程序与网络设备驱动之间传输所述待传输报文。

通过本发明,采用用户态应用程序与网络设备驱动之间创建快速通道缓冲区;判断 待传输报文是否属于预设报文类型;在判断到待传输报文属于预设报文类型的情况下,通过快速通道缓冲区,在用户态应用程序与网络设备驱动之间传输待传输报文的方式,解决了通过套接字接口和网络协议栈无法快速进行报文处理的问题,进而达到了快速进行报文处理的效果。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是根据本发明实施例的报文处理方法的流程图;

图2是根据本发明实施例的报文处理装置的结构框图;

图3是根据本发明实施例的报文处理装置的优选结构框图一;

图4是根据本发明实施例的报文处理装置的优选结构框图二;

图5是根据本发明实施例的报文处理装置的优选结构框图三;

图6是根据本发明优选实施例的快速报文处理装置的结构框图;

图7是根据本发明优选实施例的快速通道初始化流程图;

图8是根据本发明优选实施例的内核和用户态共享队列数据交互结构框图;

图9是根据本发明优选实施例的快速报文处理方法流程图。

具体实施方式

下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。

在本实施例中提供了一种报文处理方法,图1是根据本发明实施例的报文处理方法的流程图,如图1所示,该流程包括如下步骤:

步骤S102,在用户态应用程序与网络设备驱动之间创建快速通道缓冲区;

步骤S104,判断待传输报文是否属于预设报文类型;

步骤S106,在判断到待传输报文属于预设报文类型的情况下,通过快速通道缓冲区,在用户态应用程序与网络设备驱动之间传输待传输报文。

通过上述步骤,根据待传输报文的报文类型,对于属于预设报文类型的待传输报文, 通过创建的快速通道缓冲区对报文进行传输,使得属于预设报文类型的待传输报文不必经过网络协议栈以及套接字接口的复杂处理,可以根据需要实现预设类型报文的快速传输。可见,采用上述步骤,解决了通过套接字接口和网络协议栈无法快速进行报文处理的问题,进而达到了快速进行报文处理的效果。

优选地,预设报文类型可以是分片重组报文。

优选地,在步骤S102中,可以通过创建并注册快速通道字符节点;通过快速通道字符节点,用户态应用程序通过系统调用创建共享队列,得到快速通道缓冲区;通过快速通道字符节点,用户态应用程序设置预设报文类型,在用户态应用程序与网络设备驱动之间创建快速通道缓冲区。

优选地,快速通道缓冲区可以是环形缓冲区,该环形缓冲区可以反复使用固定大小的内存空间,写入与读出需要进行信息的协调与同步。

优选地,网络设备驱动可以将数据报文的接收函数挂接快速通道报文处理的回调函数,通过回调函数判断预设报文类型;用户态应用程序打开快速通道设备节点,创建共享队列。用户态应用程序设置要处理的快速报文类型,通过系统调用获取队列的物理地址,映射到用户态地址空间用户态应用程序。

优选地,在判断到待传输报文属于预设报文类型的情况下,在步骤S104之前,还可以判断快速通道缓冲区是否已满;其中,在判断到快速通道缓冲区未满的情况下,通过快速通道缓冲区,在用户态应用程序与网络设备驱动之间传输待传输报文。

优选地,在判断到快速通道缓冲区已满的情况下,可以丢弃待传输报文。

优选地,在判断到快速通道缓冲区已满的情况下,也可以将待传输报文发送到网络协议栈,由网络协议栈对报文进行处理。

优选地,在判断到待传输报文不属于预设报文类型的情况下,则可以通过网络协议栈在用户态应用程序与网络设备驱动之间传输待传输报文,例如,通过网络协议栈在用户态应用程序与网络设备驱动之间传输待传输报文的情况下:可以将由网络设备驱动发送至用户态应用程序的待传输报文存储到网络协议栈,用户态应用程序再通过网络设备驱动绑定的套接字接口从网络协议栈读取待传输报文;相应的,由用户态应用程序发送至网络设备驱动的待传输报文也经过套接字接口和网络协议栈传输。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

在本实施例中还提供了一种报文处理装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

图2是根据本发明实施例的报文处理装置的结构框图,如图2所示,该装置包括;创建模块22、第一判断模块24、第一传输模块26,其中,创建模块22,用于在用户态应用程序与网络设备驱动之间创建快速通道缓冲区;第一判断模块24,耦合至创建模块22,用于判断待传输报文是否属于预设报文类型;第一传输模块26,耦合至第一判断模块24,用于在判断到待传输报文属于预设报文类型的情况下,通过快速通道缓冲区,在用户态应用程序与网络设备驱动之间传输待传输报文。

优选地,上述创建模块22用于创建并注册快速通道字符节点;通过快速通道字符节点,用户态应用程序通过系统调用创建共享队列,得到快速通道缓冲区;通过快速通道字符节点,用户态应用程序设置预设报文类型。

图3是根据本发明实施例的报文处理装置的优选结构框图一,如图3所示,该装置还包括:第二判断模块32,耦合至第一判断模块24和第一传输模块26之间,用于判断快速通道缓冲区是否已满;其中,在判断到快速通道缓冲区未满的情况下,通过快速通道缓冲区,在用户态应用程序与网络设备驱动之间传输待传输报文。

图4是根据本发明实施例的报文处理装置的优选结构框图二,如图4所示,该装置还包括:丢弃模块42,耦合至第二判断模块32,用于丢弃待传输报文。

图5是根据本发明实施例的报文处理装置的优选结构框图三,如图5所示,该装置还包括:第二传输模块52,耦合至第一判断模块24,用于通过网络协议栈在用户态应用程序与网络设备驱动之间传输待传输报文。

优选地,第二传输模块52可以用于将待传输报文存储到网络协议栈;通过套接字接口从网络协议栈读取待传输报文。

需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述模块分别位于多个处理器中。

本发明的实施例还提供了一种软件,该软件用于执行上述实施例及优选实施方式中描述的技术方案。

本发明的实施例还提供了一种存储介质。在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的程序代码:

S20,在用户态应用程序与网络设备驱动之间创建快速通道缓冲区;

S40,判断待传输报文是否属于预设报文类型;

S60,在判断到待传输报文属于预设报文类型的情况下,通过快速通道缓冲区,在用户态应用程序与网络设备驱动之间传输待传输报文。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:

S22,创建并注册快速通道字符节点;

S24,通过快速通道字符节点,用户态应用程序通过系统调用创建共享队列,得到快速通道缓冲区;

S26,通过快速通道字符节点,用户态应用程序设置预设报文类型。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:

S62,判断快速通道缓冲区是否已满。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:

S622,在判断到快速通道缓冲区未满的情况下,丢弃待传输报文。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:

S50,在判断到待传输报文不属于预设报文类型的情况下,通过网络协议栈在用户态应用程序与网络设备驱动之间传输待传输报文。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:

S52,将待传输报文存储到网络协议栈;

S54,通过套接字接口从网络协议栈读取待传输报文。

可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

为了使本发明实施例的描述更加清楚,下面结合优选实施例进行描述和说明。

本发明优选实施例提供了一种基于Linux操作系统的快速报文处理方法,以解决Linux内核协议栈无法高效处理网卡性能要求高的报文的问题,同时充分发挥Linux协议栈的功能。

本发明优选实施例提供的一种基于Linux操作系统的快速报文处理方案,包括如下模块:

网络设备驱动模块,用于网络设备的探测,数据包的接收和发送。

Linux网络协议栈,Linux提供的标准模块,用于网络报文处理。

快速通道模块,用于共享队列(相当于上述快速通道缓冲区)的创建,快速通道注册,报文的接收处理。

用户态接收模块,用于打开共享队列,将共享队列映射到用户态空间,以及报文的接收处理。

本发明优选实施例提供的一种基于Linux的快速报文处理方法,包括如下步骤:

步骤一,网络设备驱动在探测时注册快速报文处理模块;

步骤二,网络设备驱动,数据报文接收函数挂接快速通道报文处理的回调函数;

步骤三,用户态应用程序,打开快速通道设备节点,创建共享队列,设置待处理的快速报文类型(相当于上述预设报文类型),通过系统调用获取队列的物理地址,映射到用户态地址空间;

步骤四,按照上述步骤初始化以后,网络设备驱动模块接收的数据报文,可以进行正常处理,根据设置的报文类型,确定后续处理方式;

步骤五,对于快速报文,直接存储到快速通道模块的共享队列,应用程序通过映射共享内存的方式,获取数据报文;对于没有匹配的报文,全部上送到Linux网络协议栈,应用程序需要通过套接字接口读取报文。

下面结合附图对本发明优选实施例进行说明。

为了解决Linux网络协议栈处理高速报文性能低的问题,本发明优选实施例提供了一种快速处理报文的方法,同时对于普通报文可以使用Linux网络协议栈。

图6是根据本发明优选实施例的快速报文处理装置的结构框图,如图6所示,该装置包括:在Linux内核态创建的快速通道模块,耦合至应用程序和网络设备驱动模块之间,用于高速报文的处理,应用程序快速报文通过映射共享内存的方式,访问快速通道模块的报文;套接字接口,耦合至应用程序和Linux网络协议栈,用于普通报文通过网络套接字的方式访问Linux网络协议栈;Linux网络协议栈,耦合至套接字接口和网络设备驱动模块之间,用于存储与处理普通报文。

本发明优选实施例中,需要处理的快速报文可以为分片重组报文,普通报文可以为除了分片重组报文以外的其他报文,例如地址解析协议(ARP)请求报文,因特网协议版本4(IPv4)报文。

本发明优选实施例中,快速通道模块用于提供创建共享队列接口,获取共享内存地址,报文接收处理,共享队列的管理。

图7是根据本发明优选实施例的快速通道初始化流程图,如图7所示,该流程包括 以下步骤:

步骤S702,网络设备驱动探测,驱动加载;

步骤S704,创建快速通道字符设备,注册设备节点,提供系统调用接口,包括创建共享队列,获取映射关系,设置快速报文类型;

步骤S706,网络设备驱动的报文接收处理函数,挂接快速通道报文的接收函数;

步骤S708,Linux内核启动,加载快速通道模块;

步骤S710,用户程序通过系统调用,创建快速通道缓冲区,设置快速通道的报文类型(相当于上述预设报文类型)。

优选地,上述共享队列是一个先进先出的环形队列,图8是根据本发明优选实施例的内核和用户态共享队列数据交互结构框图,如图8所示,环形队列不需要进行动态的内存释放和分配,可以反复使用固定大小的内存空间;快速通道模块作为写入模块将报文插入队列;用户程序作为读出模块将报文弹出队列;写入模块和读出模块需要进行信息的协调和同步;对于多线程和多进程的写入或读出模块,写入模块间以及读出模块间需要进行临界区处理。

在实际的队列插入和弹出操作中,是不断交叉进行的,当插入(push)操作时,队列头(head)会增加;而弹出(pop)操作时,队列尾(tail)会增加。push的速度快的时候,会追上tail,这个时候说明队列已满,不能再进行push的操作了,需要等待pop操作腾出队列的空间。当pop的操作快,使得tail追上head,这个时候说明队列已空,不能再进行pop操作,需要等待push进来数据。

图9是根据本发明优选实施例的快速报文处理方法流程图,如图9所示,该流程包括以下步骤:

步骤S902,网卡设备驱动从硬件设备获取数据报文;

步骤S904,对数据报文的二层头进行分析,如果匹配快速通道的关键字(即判断是否属于预设报文类型),则执行步骤S906,进入快速通道处理流程,否则,转到步骤S914,报文进入Linux网络协议栈处理;

步骤S906,判断队列的管理节点的读写指针。若环形队列首尾相接,队列已满,则执行步骤S908,否则执行步骤S910;

步骤S908,处理队列满的报文,直接丢掉报文;

步骤S910,将报文存储到环形队列;

步骤S912,调整环形队列的写指针,执行下一空闲的缓冲区;

步骤S914,处理普通报文,对于高性能没有要求,数据报文被送到Linux网络协议栈处理。

综上所述,通过本发明的上述实施例和优选实施例,新增了一种报文处理模式,利用快速通道缓冲区,可以有选择的绕过Linux网络协议栈,简化报文的接收流程,减少中央处理器(Central Processing Unit,简称为CPU)资源的损耗,使接收性能大幅提升,可以满足万兆以太网对性能的要求,同时兼顾了网络协议栈的强大功能,使普通报文可以直接通过Linux网络协议栈处理。

显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1