基于用户态协议栈的报文分流方法、装置及系统
技术领域
本说明书实施例涉及计算机领域,尤其涉及一种基于用户态协议栈的报文分流方法、装置及系统。
背景技术
用户态是操作系统的一种运行级别,它与内核态相对应。用户态是普通的用户进程运行的特权级,大部分用户直接面对的应用程序都是运行在用户态。TCP/IP协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了终端如何连入因特网,以及数据如何在它们之间进行传输。用户态协议栈,是指运行于用户态的TCP/IP协议栈。如何基于用户态协议栈对报文进行高效处理,是需要考虑的一个技术问题。
发明内容
本说明书实施例提供及一种基于用户态协议栈的报文分流方法、装置、系统、服务器及存储介质。
第一方面,本说明书实施例提供一种基于用户态协议栈的报文分流方法,所述方法包括:从报文收发器接收应用服务数据报文;从多个用户态协议栈中,确定所述应用服务数据报文对应的用户态协议栈,从而将所述应用服务数据报文发送到确定的所述用户态协议栈的实例上,其中,每个用户态协议栈对应一个实例;所述用户态协议栈的实例对接收到的应用服务数据报文进行处理,并将处理后的报文发送给所述用户态协议栈对应的应用服务。
第二方面,本说明书实施例提供一种基于用户态协议栈的报文分流装置,所述装置包括:报文接收单元,用于从报文收发器接收应用服务数据报文;报文分流控制单元,用于从多个用户态协议栈中,确定所述应用服务数据报文对应的用户态协议栈,从而将所述应用服务数据报文发送到确定的所述用户态协议栈的实例上,其中,每个用户态协议栈对应一个实例。
第三方面,本说明书实施例提供一种基于用户态协议栈的报文分流系统,所述系统包括:报文收发器、报文分流处理器、多个用户态协议栈以及一个或多个应用服务,其中,每个用户态协议栈对应一个实例;所述报文分流处理器,用于从报文收发器接收应用服务数据报文;并从多个用户态协议栈中,确定所述应用服务数据报文对应的用户态协议栈,从而将所述应用服务数据报文发送到确定的所述用户态协议栈的实例上;所述用户态协议栈的实例,对接收到的应用服务数据报文进行处理,并将处理后的报文发送给所述用户态协议栈对应的应用服务。
第四方面,本说明书实施例提供一种服务器,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行上述任一项所述方法的步骤。
第五方面,本说明书实施例提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一项所述方法的步骤。
本说明书实施例有益效果如下:
由于在本说明书实施例中,每个实例对应一个用户态协议栈,从而当实例进行报文处理时,可基于不同用户态协议栈的资源进行报文处理,因此避免多个实例同属一个用户态协议栈而导致的资源互斥问题,异构能力得到增强,而且,由于各个实例分属于不同的用户态协议栈,因此支持应用服务选择与其相适应的用户态协议栈,从而提升应用服务的性能。
附图说明
图1为本说明书实施例用户态协议栈与实例对应关系示意图;
图2本说明书实施例第一方面提供的基于用户态协议栈的报文分流方法流程图;
图3本说明书实施例第二方面提供的基于用户态协议栈的报文分流实例系统示意图;
图4本说明书实施例第三方面提供的基于用户态协议栈的报文分流装置结构示意图;
图5本说明书实施例第四方面提供的基于用户态协议栈的报文分流的服务器结构示意图。
具体实施方式
为了更好的理解上述技术方案,下面通过附图以及具体实施例对本说明书实施例的技术方案做详细的说明,应当理解本说明书实施例以及实施例中的具体特征是对本说明书实施例技术方案的详细的说明,而不是对本说明书技术方案的限定,在不冲突的情况下,本说明书实施例以及实施例中的技术特征可以相互组合。
首先对本说明书实施例涉及的技术术语解释如下。
用户态协议栈:协议栈是操作系统的网络处理部分通常都包含的模块,当与网络处理部分相关的进程/线程在用户空间运行时,cpu堆栈指针寄存器指向的协议栈即为用户态协议栈。本说明书实施例中,用户态协议栈可以理解为运行于用户态的TCP/IP协议栈。
实例:在计算机领域中,“类”在实例化之后叫做一个“实例”,“类”是静态的,不占进程内存,而“实例”拥有动态内存。本说明书实施例中,实例是指运行于用户态协议栈的线程或进程。
异构能力:异构计算技术是一种使计算任务的并行性类型(代码类型)与机器能有效支持的计算类型(即机器能力)最相匹配、最能充分利用各种计算资源的并行和分布计算技术。本说明书实施例中,异构能力是指实例之间运行不同用户态协议栈的能力。
报文分流处理器:是指对报文进行分类并根据其类型做相应处理的软件单元,本说明书实施例中,报文分流处理器对报文进行分流(分类),以确定出适应该报文类型的用户态协议栈,从而实现将各类报文分流到对应的用户态协议栈的实例,其中,所谓的报文类型是依据各个应用服务进行划分的,即各类报文与各个应用服务相对应。
在上述技术术语含义明确的基础上,对说明书实施例进行详细介绍。
本领域技术人员理解,基于用户态协议栈的应用服务(APP),如果多实例共同属于一个协议栈,就会引入资源互斥问题,导致应用服务性能受限,使得异构能力不足。因此,在本说明书实施例中,设置各个实例分属于不同的用户态协议栈,请参见图1,为本说明书实施例用户态协议栈与实例对应关系示意图。在该示意图中,每个用户态协议栈与一个实例相对应,图1中,用户态协议栈A与实例1对应,用户态协议栈B与实例2对应,……,用户态协议栈X与实例n对应。可见,用户态协议栈与实例一一对应,从而支持应用服务选择与其相适应的用户态协议栈(而不会多个实例共同属于一个用户态协议栈),由于各个用户态协议栈的实例之间不存在资源互斥问题,由此提升应用服务的性能。
第一方面,本说明书实施例提供一种基于用户态协议栈的报文分流方法,请参考图2,该基于用户态协议栈的报文分流的方法包括步骤S201-S203。
S201:从报文收发器接收应用服务数据报文。
报文收发器是接收和发送网络报文的硬件单元。报文收发器在报文接收方向,接收来自客户端等设备的报文,然后将报文交由报文分流处理器进行处理。
在步骤S201中,是指报文分流处理器从报文收发器接收到报文。在实际场景中,报文分流处理器会从报文收发器接收到各种类型的报文,例如,包括但不限于应用服务数据报文和协议数据报文。其中,应用服务数据报文是指与应用服务相关的数据报文,又进一步可包含应用服务需要处理的数据报文和对应连接的协议报文;协议数据报文是指所有的非应用服务数据报文。
在本说明书实施例中,如前分析的,为了提升应用服务的提供服务的性能,采取的方式是支持应用服务选择与其相适应的用户态协议栈。为了实现这个目的,就要将应用服务对应的应用服务数据报文映射给该应用服务对应的用户态协议栈,由该用户态协议栈的实例进行处理。
报文分流处理器从报文收发器接收到各类型报文后,根据报文内容(例如,根据报文类型字段)将报文细分为应用服务数据报文和协议数据报文。其中,针对应用服务数据报文,执行后续的步骤,从而将其分流(分类)到应用服务对应的用户态协议栈。
S202:从多个用户态协议栈中,确定应用服务数据报文对应的用户态协议栈,从而将应用服务数据报文发送到确定的用户态协议栈的实例上,其中,每个用户态协议栈对应一个实例。
报文分流处理器从报文收发器接收到各类型报文后,根据报文内容提取出应用服务数据报文,并针对应用服务数据报文进行选择适应的用户态协议栈。
在一种可选方式中,确定应用服务数据报文对应的用户态协议栈的步骤可以包括:(1)确定应用服务数据报文对应的应用服务;(2)根据预置的应用服务与用户态协议栈的对应关系;(3)根据应用服务数据报文与应用服务的对应关系、应用服务与用户态协议栈的对应关系,从而确定应用服务数据报文对应的用户态协议栈。
首先,需要确定应用服务数据报文对应的应用服务。
本领域技术人员理解,报文是网络传输的单位,传输过程中会不断的封装成分组、包、帧来传输,封装的方式就是添加一些信息段(字段),这些字段就是报文头以一定格式组织起来的数据。比如里面有报文类型,报文版本,报文长度,报文实体等等信息。报文分流处理器对应用服务数据报文进行解析,根据报文头中的各个字段,可确定该报文对应的应用服务。例如,通过报文类型及报文目的地址等字段,确定该应用服务数据对应的应用服务。
然后,得到预置的应用服务与用户态协议栈的对应关系。
如前分析的,为了提升应用服务的提供服务的性能,采取的方式是支持应用服务选择与其相适应的用户态协议栈,也就是,各个应用服务与一个或多个用户态协议栈存在对应关系。在报文分流处理器上,为了实现将应用服务数据报文分流到应用服务对应的用户态协议栈上,需要获知应用服务与用户态协议栈的对应关系。具体的,可以在报文分流处理器上的一个模块中保存并更新应用服务与用户态协议栈的对应关系信息,或者,在一个服务器上保存并更新应用服务与用户态协议栈的对应关系信息,报文分流处理器从该服务器上获取对应关系信息。保存的对应关系信息需要与实际对应关系同步,以确保其准确性。
最后,由于已知应用服务数据报文对应的应用服务以及应用服务与用户态协议栈的对应关系,即可确定出应用服务数据报文对应哪一个或哪一些用户态协议栈。
举例说明,假设报文分流处理器当前接收到应用服务数据报文,通过解析当前接收到的应用服务数据报文,确定出该应用服务数据报文对应的应用服务为应用服务i,同时,通过查找应用服务与用户态协议栈的对应关系信息,确定出应用服务i对应的用户态协议栈为用户态协议栈j,那么,确定当前应用服务数据报文对应用户态协议栈j。
在具体实现中,应用服务与用户态协议栈的对应关系可以是一一对应关系,即一个应用服务与一个用户态协议栈对应,还可以是一对多的对应关系,即,一个应用服务与多个用户态协议栈对应。
在应用服务与用户态协议栈一一对应关系的情况下,即设置与应用服务数量相等的用户态协议栈,例如,应用服务1对应用户态协议栈1,应用服务2对应用户态协议栈2,……,应用服务n对应用户态协议栈n。由于每个用户态协议栈都对应一个实例,因此可以理解,每个应用服务对应一个用户态协议栈的实例,这样,就可以通过分属于不同用户态协议栈的实例进行报文处理,从而避免资源互斥问题,提升应用服务性能。
在应用服务与用户态协议栈一对多对应关系的情况下,即每个应用服务可对应多个用户态协议栈(当然,上述描述是从应用服务角度出发,实际上,多个不同的应用服务可对应一个用户态协议栈),例如,应用服务1对应用户态协议栈1、用户态协议栈3、用户态协议栈5。由于每个用户态协议栈都对应一个实例,因此可以理解,每个应用服务对应多个用户态协议栈的多个实例,这样,就可以通过分属于不同用户态协议栈的各个实例进行报文处理,从而避免资源互斥问题,提升应用服务性能。
S203:用户态协议栈的实例对接收到的应用服务数据报文进行处理,并将处理后的报文发送给用户态协议栈对应的应用服务。
如前描述的,用户态协议栈的实例是指运行用户态协议栈的线程或进程。以线程为例,它是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。当报文分流处理器将应用服务数据报文提交给用户态协议栈的实例后,该实例针对报文进行处理。用户态协议栈的实例对报文进行处理后,将报文发送给用户态协议栈对应的应用服务。
可见,由于在本说明书实施例中,每个实例对应一个用户态协议栈,从而当实例进行报文处理时,可基于不同用户态协议栈的资源进行报文处理,因此避免多个实例同属一个用户态协议栈而导致的资源互斥问题,异构能力得到增强,而且,由于各个实例分属于不同的用户态协议栈,因此支持应用服务选择与其相适应的用户态协议栈,从而提升应用服务的性能。
第二方面,请参考图3,为本说明书实施例提供的一种基于用户态协议栈的报文分流系统实例示意图。所述系统包括报文收发器、报文分流处理器、多个用户态协议栈以及一个或多个应用服务,其中,每个用户态协议栈对应一个实例。
报文收发器,用于接收和发送报文。
报文分流处理器,对报文进行分类,以确定出适应该报文类型的用户态协议栈,从而实现将各类报文分流到对应的用户态协议栈的实例。
用户态协议栈,具体包括多个用户态协议栈A、用户态协议栈B、……、用户态协议栈X,每个用户态协议栈与一个实例对应,各个实例表示为实例1、实例2、……、实例n。
应用服务,包括一个或多个应用服务,表示为应用服务i、应用服务j、……、应用服务k。每个应用服务对应一个或多个用户态协议栈,图3中,示例性示出了每个应用服务与多个用户态协议栈相对应的对应关系。在一种最简单的对应关系中,可以设置每一个应用服务与一个用户态协议栈相对应。
下面从报文收发器接收和发送报文两个方向,对本说明书实施例进行介绍。
1、报文接收方向
1.1报文收发器把收到的报文交给报文分流处理器。
1.2报文分流处理器会根据报文内容字段把其细分为应用服务数据报文和协议数据报文。其中,应用服务数据报文,即包含应用服务需要处理的数据的报文和对应连接的协议报文,而协议数据报文则指所有非应用服务数据报文。
1.3对于应用服务数据报文,报文分流处理器确定其对应的用户态协议栈。具体的,报文分流处理器用于从报文收发器接收应用服务数据报文,并从多个用户态协议栈中,确定应用服务数据报文对应的用户态协议栈,从而将应用服务数据报文发送到确定的用户态协议栈的实例上。
在一种实现方式中,通过如下步骤确定应用服务数据报文对应的用户态协议栈:对应用服务数据报文中的特定字段进行散列求值,并利用散列值得到用户态协议栈对应的映射号,确定出映射号对应的用户态协议栈。其中,映射号是预先设置的与具体某个应用服务对应的用户态协议栈的编号,由于通过解析应用服务数据报文的字段可获知其对应的特定应用服务,因此,通过上述方式确定出该特定应用服务对应的用户态协议栈的映射号,即可匹配出该应用服务数据报文对应于哪个用户态协议栈了。
其中,当预置的应用服务与用户态协议栈的对应关系为一一对应关系时,首先对应用服务数据报文中的IP五元组进行散列求值,然后利用该散列值得到与应用服务一一对应的用户态协议栈的映射号,最后确定出映射号对应的用户态协议栈。例如,首先会根据用户态协议栈数据报文中的IP五元组进行散列求值,然后用该散列值对用户态协议栈的实例个数取模以得到与协议栈的实例一一对应的映射号,最后根据映射号把应用服务数据报文交付给对应用户态协议栈的实例进行后续处理。
其中,当预置的应用服务与用户态协议栈的对应关系为一对多的对应关系时,首先对应用服务数据报文中的端口号(或其他字段)进行散列求值,然后利用该散列值得到与应用服务对应的多个用户态协议栈的多个映射号,最后确定出多个映射号对应的多个用户态协议栈。
需要说明的是,本说明书实施例对基于何种字段确定报文对应的用户态协议栈的映射号的方式不作限制,上述IP五元组及端口号的方式仅作示例给出,并不限于此两种方式。
1.4对于协议数据报文,为维持协议栈实例可运行的最小要求,报文分流处理器仅需处理ARP(Address Resolution Protocol,地址解析协议)报文,即对于ARP请求报文,随机交给一个用户态协议栈的实例进行后续处理;对于ARP应答和免费ARP报文,则为每个用户态协议栈的实例复制一份该报文且修改复制报文的目的链路地址为广播地址,然后把这些复制报文逐个交给对应用户态协议栈的实例进行后续处理。
1.5用户态协议栈的实例无论收到何种报文分流处理器递交的报文,按其正常流程处理即可。例如,当接收到应用服务数据报文,用户态协议栈的实例对应用服务数据报文进行处理,并将处理后的报文发送给用户态协议栈对应的应用服务。
2.报文发送方向
2.1无论是应用服务通过用户态协议栈的实例发送的应用服务数据报文,还是用户态协议栈的实例自身产生的协议数据报文(如ARP报文),用户态协议栈的实例按其正常流程处理即可,并最终交给报文分流处理器。
2.2报文分流处理器收到来自用户态协议栈的实例的报文后,直接将其交给报文收发器即可。
2.3报文收发器收到来自报文分流处理器的报文后,进行报文发送。
第三方面,基于同一发明构思,本说明书实施例提供一种基于用户态协议栈的报文分流装置(可对应前述报文分流处理器或对应前述报文分流处理器的一部分),请参考图4,该装置包括:
报文接收单元401,用于从报文收发器接收应用服务数据报文;
报文分流控制单元402,用于从多个用户态协议栈中,确定所述应用服务数据报文对应的用户态协议栈,从而将所述应用服务数据报文发送到确定的所述用户态协议栈的实例上,其中,每个用户态协议栈对应一个实例。
在一种可选方式中,所述报文分流控制单元402具体用于:确定所述应用服务数据报文对应的应用服务,并根据预置的应用服务与用户态协议栈的对应关系,得到所述应用服务数据报文对应的用户态协议栈。
在一种可选方式中,所述报文分流控制单元402包括:
散列求值子单元4021,用于对所述应用服务数据报文中的特定字段进行散列求值;
映射号确定子单元4022,用于利用所述散列值得到用户态协议栈对应的映射号;
用户态协议栈确定子单元4023,用于确定出所述映射号对应的用户态协议栈。
在一种可选方式中,所述预置的应用服务与用户态协议栈的对应关系为一一对应关系;所述散列求值子单元4021,用于对所述应用服务数据报文中的特定字段进行散列求值。
在一种可选方式中,所述预置的应用服务与用户态协议栈的对应关系为一对多的对应关系;所述散列求值子单元4021,用于对所述应用服务数据报文中的端口号进行散列求值;所述映射号确定子单元4022,用于利用该散列值得到与应用服务对应的多个用户态协议栈的多个映射号;所述用户态协议栈确定子单元4023,用于确定出所述多个映射号对应的多个用户态协议栈。
在一种可选方式中,
所述报文接收单元401还用于:从报文收发器接收到ARP协议数据报文;
所述报文分流控制单元402还用于:将所述ARP请求报文随机提交给任一个用户态协议栈的实例进行处理;以及,针对ARP应答报文或免费ARP报文,为每个用户态协议栈的实例复制一份所述ARP应答报文或免费ARP报文,并将所复制报文的目的链路地址修改为广播地址。
第四方面,基于与前述实施例中基于用户态协议栈的报文分流方法同样的发明构思,本说明书实施例还提供一种服务器,如图5所示,包括存储器504、处理器502及存储在存储器504上并可在处理器502上运行的计算机程序,所述处理器502执行所述程序时实现前文所述基于用户态协议栈的报文分流方法的任一方法的步骤。
其中,在图5中,总线架构(用总线500来代表),总线500可以包括任意数量的互联的总线和桥,总线500将包括由处理器502代表的一个或多个处理器和存储器504代表的存储器的各种电路链接在一起。总线500还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口506在总线500和接收器501和发送器503之间提供接口。接收器501和发送器503可以是同一个元件,即收发机,提供用于在传输介质上与各种其他装置通信的单元。处理器502负责管理总线500和通常的处理,而存储器504可以被用于存储处理器502在执行操作时所使用的数据。
第五方面,基于与前述实施例中基于用户态协议栈的报文分流方法的发明构思,本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前文所述基于用户态协议栈的报文分流方法的任一方法的步骤。
本说明书是参照根据本说明书实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的设备。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令设备的制造品,该指令设备实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本说明书的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本说明书范围的所有变更和修改。
显然,本领域的技术人员可以对本说明书进行各种改动和变型而不脱离本说明书的精神和范围。这样,倘若本说明书的这些修改和变型属于本说明书权利要求及其等同技术的范围之内,则本说明书也意图包含这些改动和变型在内。