报文转发方法、报文转发装置、存储介质及电子设备与流程

专利2022-06-29  80


本发明的实施方式涉及通信与计算机技术领域,更具体地,本发明的实施方式涉及一种报文转发方法、报文转发装置、计算机可读存储介质及电子设备。



背景技术:

本部分旨在为权利要求中陈述的本发明的实施方式提供背景或上下文,此处的描述不因为包括在本部分中就承认是现有技术。

容器是一种基于操作系统的隔离技术,可以将app(application,应用程序)及其依赖的资源进行打包,创建app运行的轻量级环境,实现app层面的隔离。容器之间的网络通信一直是业界关注的焦点问题。现有技术中,大多采用内核态的容器网络转发方案,以kubernetes(简称k8s,是一种开源的容器集群管理系统)为例,在k8s的容器网络中,通过内核态进行容器的报文转发,使用kube-proxy(k8s的代理组件)进行路由,完成ip地址(internetprotocoladdress,网络协议地址)与端口的映射,从而实现对内、对外报文的转发。



技术实现要素:

然而,现有技术中,由于kube-proxy等代理组件与用户态不兼容的问题,转发容器报文时需要在内核态与用户态之间进行频繁切换。一般的,容器发出的报文进入用户态,为了调用代理组件,将报文送入内核态,进行路由后再回到用户态进行转发,从而导致转发路径较长,系统开销较高。

为此,非常需要一种改进的报文转发方法,可以降低转发容器报文时的系统开销。

在本上下文中,本发明的实施方式期望提供一种报文转发方法、报文转发装置、计算机可读存储介质及电子设备。

根据本发明实施方式的第一方面,提供一种报文转发方法,包括:从源容器组获取待处理报文;当确定所述待处理报文为第一类报文时,在内核态中对所述待处理报文进行地址转换,并根据转换后的地址,在用户态中将所述待处理报文转发至目的容器组;当确定所述待处理报文为第二类报文时,在用户态中将所述待处理报文转发至目的容器组。

在一种可选的实施方式中,在从源容器组获取待处理报文后,通过以下方式确定所述待处理报文为第一类报文或第二类报文:解析所述待处理报文的目的地址;如果所述目的地址为服务地址,则确定所述待处理报文为第一类报文;如果所述目的地址为容器组地址,则确定所述待处理报文为第二类报文。

在一种可选的实施方式中,在解析所述待处理报文的目的地址时,如果所述目的地址为预设地址或处于预设地址段以内,则确定所述目的地址为服务地址。

在一种可选的实施方式中,所述在内核态中对所述待处理报文进行地址转换,包括:将所述待处理报文的目的地址由服务地址转换为容器组地址。

在一种可选的实施方式中,所述将所述待处理报文的目的地址由服务地址转换为容器组地址,包括:获取所述待处理报文的目的地址所对应的至少一个容器组;从所述至少一个容器组中确定目的容器组;将所述目的地址转换为所述目的容器组的地址。

在一种可选的实施方式中,所述在内核态中对所述待处理报文进行地址转换,还包括:将所述待处理报文的源地址转换为所述内核态中的虚拟网卡的地址。

在一种可选的实施方式中,在对所述源地址和所述目的地址进行转换后,所述方法还包括:在所述内核态中记录地址转换信息,以在接收到所述待处理报文的回复报文时,根据所述地址转换信息对所述回复报文的地址进行逆转换。

在一种可选的实施方式中,所述在用户态中将所述待处理报文转发至目的容器组,包括:在所述用户态中,采用基于数据平面开发工具集的快速数据路径,将所述待处理报文转发至所述目的容器组。

在一种可选的实施方式中,在从源容器组获取待处理报文后,所述方法还包括:采用预先配置的黑名单和/或白名单,对所述待处理报文的源地址、目的地址、协议类型中的至少一种信息进行匹配,以对所述待处理报文进行过滤。

在一种可选的实施方式中,在从源容器组获取待处理报文后,所述方法还包括:采用预先配置的网络控制策略对所述待处理报文进行过滤。

根据本发明实施方式的第二方面,提供一种报文转发装置,包括:报文获取模块,用于从源容器组获取待处理报文;第一转发模块,用于当确定所述待处理报文为第一类报文时,在内核态中对所述待处理报文进行地址转换,并根据转换后的地址,在用户态中将所述待处理报文转发至目的容器组;第二转发模块,用于当确定所述待处理报文为第二类报文时,在用户态中将所述待处理报文转发至目的容器组。

在一种可选的实施方式中,所述装置还包括:报文分类模块,其通过以下方式对所述待处理报文进行分类:解析所述待处理报文的目的地址;如果所述目的地址为服务地址,则确定所述待处理报文为第一类报文;如果所述目的地址为容器组地址,则确定所述待处理报文为第二类报文。

在一种可选的实施方式中,所述报文分类模块,还用于在解析所述待处理报文的目的地址时,如果所述目的地址为预设地址或处于预设地址段以内,则确定所述目的地址为服务地址。

在一种可选的实施方式中,所述第一转发模块,还用于在对所述待处理报文进行地址转换时,将所述待处理报文的目的地址由服务地址转换为容器组地址。

在一种可选的实施方式中,所述第一转发模块,通过以下方式对所述待处理报文进行地址转换:获取所述待处理报文的目的地址所对应的至少一个容器组;从所述至少一个容器组中确定目的容器组;将所述目的地址转换为所述目的容器组的地址。

在一种可选的实施方式中,所述第一转发模块,还用于在对所述待处理报文进行地址转换时,将所述待处理报文的源地址转换为所述内核态中的虚拟网卡的地址。

在一种可选的实施方式中,所述第一转发模块,还用于在对所述源地址和所述目的地址进行转换后,在所述内核态中记录地址转换信息,以在接收到所述待处理报文的回复报文时,根据所述地址转换信息对所述回复报文的地址进行逆转换。

在一种可选的实施方式中,所述第一转发模块,还用于通过以下方式转发所述待处理报文:在所述用户态中,采用基于数据平面开发工具集的快速数据路径,将所述待处理报文转发至所述目的容器组。

在一种可选的实施方式中,所述第二转发模块,还用于通过以下方式转发所述待处理报文:在所述用户态中,采用基于数据平面开发工具集的快速数据路径,将所述待处理报文转发至所述目的容器组。

在一种可选的实施方式中,所述装置还包括:报文过滤模块,用于在所述报文获取模块在从源容器组获取待处理报文后,采用预先配置的黑名单和/或白名单,对所述待处理报文的源地址、目的地址、协议类型中的至少一种信息进行匹配,以对所述待处理报文进行过滤。

在一种可选的实施方式中,所述装置还包括:报文过滤模块,用于在所述报文获取模块在从源容器组获取待处理报文后,采用预先配置的网络控制策略对所述待处理报文进行过滤。

根据本发明实施方式的第三方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一种报文转发方法。

根据本发明实施方式的第四方面,提供一种电子设备,包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行上述任意一种报文转发方法。

根据本发明实施方式的报文转发方法、报文转发装置、计算机可读存储介质及电子设备,从源容器组获取待处理报文后,若待处理报文为第一类报文,则在内核态中进行地址转换,并在用户态中根据转换后的地址进行报文转发,若待处理报文为第二类报文,则在用户态中直接进行转发。一方面,本发明提出了一种兼容两类报文的转发方案,对不同类的报文通过不同的途径进行转发,具有较强的针对性:第一类报文经过内核态中的地址转换,发挥了代理组件的路由功能,实现了准确的转发;第二类报文直接通过用户态转发,缩短了转发路径,提高了转发效率;从整体上来说,无需对每条报文进行内核态与用户态的频繁切换,因而降低了系统开销。另一方面,本发明实现了容器报文转发的分流,能够改善大量报文在代理组件的节点堆积,所导致的系统性能瓶颈问题,特别对于并发请求的场景具有较好的适用性。

附图说明

通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:

图1示出了根据本发明实施方式的一种报文转发方法的流程图;

图2示出了根据本发明实施方式的报文转发示意图;

图3示出了根据本发明实施方式的一种报文转发方法的子流程图;

图4示出了根据本发明实施方式的k8s中报文转发示意图;

图5示出了根据本发明实施方式的一种报文转发装置的结构方框图;

图6示出了根据本发明实施方式的存储介质的示意图;以及

图7示出了根据本发明实施方式的电子设备的结构方框图。

在附图中,相同或对应的标号表示相同或对应的部分。

具体实施方式

下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本发明更加透彻和完整,并且能够将本发明的范围完整地传达给本领域的技术人员。

本领域技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本发明可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。

根据本发明的实施方式,提供一种报文转发方法、报文转发装置、计算机可读存储介质及电子设备。

在本文中,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。

下面参考本发明的若干代表性实施方式,详细阐述本发明的原理和精神。

发明概述

本发明人发现,在现有的容器网络中,由于kube-proxy等代理组件与用户态不兼容的问题,转发容器报文时需要在内核态与用户态之间进行频繁切换。一般的,容器发出的报文进入用户态,为了调用代理组件,将报文送入内核态,进行路由后再回到用户态进行转发,从而导致转发路径较长,系统开销较高。

鉴于上述内容,本发明的基本思想在于:提供一种报文转发方法、报文转发装置、计算机可读存储介质及电子设备,从源容器组获取待处理报文后,若待处理报文为第一类报文,则在内核态中进行地址转换,并在用户态中根据转换后的地址进行报文转发,若待处理报文为第二类报文,则在用户态中直接进行转发。一方面,本发明提出了一种兼容两类报文的转发方案,对不同类的报文通过不同的途径进行转发,具有较强的针对性:第一类报文经过内核态中的地址转换,发挥了代理组件的路由功能,实现了准确的转发;第二类报文直接通过用户态转发,缩短了转发路径,提高了转发效率;从整体上来说,无需对每条报文进行内核态与用户态的频繁切换,因而降低了系统开销。另一方面,本发明实现了容器报文转发的分流,能够改善大量报文在代理组件的节点堆积,所导致的系统性能瓶颈问题,特别对于并发请求的场景具有较好的适用性。

在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。

应用场景总览

需要注意的是,下述应用场景仅是为了便于理解本发明的精神和原理而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。

本发明可以应用于容器通信的所有场景,例如:容器与容器之间通信时,将报文从一容器转发至另一容器;容易与主机之间通信时,将报文从容器转发至主机。

示例性方法

本发明的示例性实施方式首先提供一种报文转发方法,如图1所示,该方法可以包括以下步骤s110至s130:

步骤s110,从源容器组获取待处理报文。

其中,容器组是实现业务功能的基本单元,例如可以是k8s中的pod。容器组代表了独立的应用程序运行实例,由一个或多个容器组成,同一容器组中的容器共享存储资源、网络资源(如使用同一ip地址)、命名空间(namespace)以及运行规则,并被统一安排与调度。本示例性实施方式中,为了实现跨容器组的通信,需要将报文从容器组转发至容器组外的其他地址,所需转发的报文即上述待处理报文,发出待处理报文的容器组即上述源容器组。

本示例性实施方式中,在获取待处理报文后,可以对其进行分流。概括来说,如果待处理报文需要调用代理组件进行路由,称其为第一类报文,可以通过第一种途径转发;如果待处理报文无需调用代理组件进行路由,称其为第二类报文,可以通过第二种途径转发。在步骤s110之后,可以通过解析待处理报文,对其进行分类。

在一种可选的实施方式中,可以通过以下方式实现待处理报文的分类:

解析待处理报文的目的地址;

如果目的地址为服务地址,则确定待处理报文为第一类报文;

如果目的地址为容器组地址,则确定待处理报文为第二类报文。

其中,服务(service)是对一个或多个容器组的抽象表示,其可以动态地绑定后端的容器组。一般的,容器组的地址可能发生变化,而每个服务都具有一个固定的虚拟地址(一般称为clusterip),当访问服务地址时,服务会向后端的容器组做转发,同时还能起到负载均衡(loadbalance)功能。

在解析待处理报文的目的地址时,如果目的地址为预设地址或处于预设地址段以内,则确定目的地址为服务地址。举例来说,系统可以记录每个服务的地址列表(即预设地址的列表),在解析出待处理报文的目的地址后,在列表中查找目的地址,如果查找到,说明目的地址为服务地址,否则为容器组地址;或者系统可以设置关于服务地址的规则,例如指定10.96.0.0/12为k8s中的clusterip地址段(即预设地址段),如果目的地址处于该ip地址段内,则确定其为服务地址,否则为容器组地址。

如果待处理报文的目的地址是服务地址,则需要对目的地址进行路由,以确定具体转发到哪个容器组,因此将待处理报文确定为第一类报文;如果待处理报文的目的地址是容器组地址,则可以直接进行转发,因此将待处理报文确定为第二类报文。

参考图2所示,可以在容器网络系统中设置分流组件,其可以包含实现待处理报文分类的代码以及相应的资源。源容器组发送待处理报文后,首先进入分流组件,由分流组件执行上述分类的方法过程,以确定待处理报文是第一类报文还是第二类报文,随后采取不同的途径进行处理。

步骤s120,当确定待处理报文为第一类报文时,在内核态中对待处理报文进行地址转换,并根据转换后的地址,在用户态中将待处理报文转发至目的容器组。

参考上述图2所示,对于第一类报文,分流组件可以将其传输至内核态中的代理组件,利用代理组件实现地址映射。在转换地址后,将待处理报文放到用户态中进行转发,可以实现高速转发。

若通过解析待处理报文的目的地址实现分类,则其目的地址应当为服务地址。基于此,在一种可选的实施方式中,在进行地址转换时,可以将待处理报文的目的地址由服务地址转换为容器组地址。如前所述,服务具有固定地址,便于对其后端的容器组进行访问,因而,访问服务时,最终仍然是为了访问服务后端的容器组。具体来说,若待处理报文需要访问服务地址,可以将目的地址由服务地址转换为服务地址后端的容器组地址,从而实现路由。

进一步的,参考图3所示,将待处理报文的目的地址由服务地址转换为容器组地址,具体可以包括以下步骤s301至s303:

步骤s301,获取待处理报文的目的地址所对应的至少一个容器组;

步骤s302,从上述至少一个容器组中确定目的容器组;

步骤s303,将目的地址转换为目的容器组的地址。

其中,待处理报文的目的地址为服务地址,其所对应的容器组即该服务后端的容器组。一般的,在解析目的地址后,查找该目的地址所在的服务实例,获取该服务的相关信息,可以确定该服务对应于哪些容器组;然后在这些容器组中,可以根据负载均衡确定目的容器组;再将待处理报文的目的地址转换为目的容器组的地址,从而完成了目的地址的路由。

在待处理报文中,源地址通常是源容器组内部的虚拟网卡的地址,在内核态中进行路由时,为了便于后续通过用户态进行转发,待处理报文的发送方可以由源容器组转换为内核态。因此,在进行地址转换时,可以将待处理报文的源地址转换为内核态中的虚拟网卡的地址。

在一种可选的实施方式中,在对源地址和目的地址进行转换后,还可以在内核态中记录地址转换信息,例如待处理报文初始的地址信息为源地址1(源容器组的地址)->目的地址1(目的容器组所在的服务地址),在转换地址后,可以记录源地址1转换为源地址2(内核态中的虚拟网卡的地址),目的地址1转换为目的地址2(目的容器组的地址);后续在接收到待处理报文的回复报文时,可以根据地址转换信息对回复报文的地址进行逆转换,例如回复报文初始的地址信息为目的地址2->源地址2,根据上述地址转换信息,将其还原为目的地址1->源地址1,从而将回复报文转发回源容器组所在的源地址1。

下面结合图4,通过k8s中的一个具体实例对第一类报文的转发过程做进一步说明。poda(172.10.0.2)访问podb(172.10.0.3)所在的k8sservice(10.96.0.100:8080),其报文转发过程如下:

1)源容器组poda发出待处理报文,源地址为172.10.0.2:随机端口,目的地址为10.96.0.100:8080;

2)通过veth-pair虚拟网卡将待处理报文发送到xdp(expressdatapath,快速数据路径)形式的网桥,解析出目的地址属于k8sclusterip段,确定待处理报文为podtoservice形式的报文,即第一类报文;

3)将待处理报文送入内核态中的代理组件kube-proxy;

4)kube-proxy实现dnat(destinationnetworkaddresstranslation,目的地址转换)功能,将k8sclusterip:port转换成podip:port,即10.96.0.100:8080转换为172.10.0.3:80;

5)实现snat(sourcenetworkaddresstranslation,源地址转换)功能,将源地址更改为用户态转发面端口1对应的内核虚拟网卡(如veth)上的ip,即172.10.0.2:随机端口转换为172.10.0.1:随机端口;

此时内核态中可以记录地址转换信息表:

source,172.10.0.2:随机端口to172.10.0.1:随机端口;

destination,10.96.0.100:8080to172.10.0.3:80;

6)将待处理报文送入用户态转发,可以通过端口1(例如可以是虚拟网卡hnic0)访问podb,通过将待处理报文转发到podbveth后端。

回复报文的过程如下:

1)podb接受待处理报文:172.10.0.1:随机端口->172.10.0.3:80,相应的回复报文为:172.10.0.3:80->172.10.0.1:随机端口

2)将回复报文送入内核态中ip为172.10.0.1:随机端口的虚拟网卡上;

3)内核态查找地址转换信息表,匹配到对应记录,并转换地址信息为:10.96.0.100:8080->172.10.0.2:随机端口;

4)将回复报文转发到172.10.0.2:随机端口,poda收到回包。

步骤s130,当确定待处理报文为第二类报文时,在用户态中将待处理报文转发至目的容器组。

参考上述图2所示,对于第二类报文,可以不经过内核态中的地址转换,直接送入用户态中进行转发。

在一种实施方式中,在用户态中,可以采用基于dpkp(dataplanedevelopmentkit,数据平面开发工具集)的xdp,将待处理报文转发至目的容器组。具体来说,dpkp提供在用户态中直接操作物理网卡的库函数,可以通过dpkp将xdp连接到用户态,例如采用af_xdp(地址族-快速数据路径),调用socket(套接字),产生文件描述符,在用户态的内存中创建用于记录文件描述符索引的数组,这样通过操作数组,可以实现文件、报文的快速转发。

在另一种实施方式中,也可以采用vhost-user(虚拟主机与用户)以及tap(一种虚拟网卡)的架构,用户态采用tap,并通过vhost-user的设置,在用户态中直接接管物理网卡的驱动,实现高速的报文转发。

下面结合上述图4,通过k8s中的一个具体实例对第二类报文的转发过程做进一步说明。poda(172.10.0.2)访问podb(172.10.0.3),其报文转发过程如下:

1)源容器组poda发出待处理报文:172.10.0.2:随机端口->172.10.0.3:80;

2)通过veth-pair将待处理报文发送到xdp网桥,解析出目的地址属于容器组地址,确定待处理报文为podtopod形式的报文,即第二类报文;

3)将待处理报文送入内核态中的端口2,例如可以是af_xdp形式的端口;

4)用户态将待处理报文转发至podbveth后端。

回复报文的过程如下:

1)podb接受待处理报文:172.10.0.2:随机端口->172.10.0.3:80,相应的回复报文为:172.10.0.3:80->172.10.0.2:随机端口;

2)引流组件判断为第二类报文,无需进入内核态,直接送入用户态转发;

3)将回复报文转发到172.10.0.2:随机端口,poda收到回包。

在一种可选的实施方式中,从源容器组获取待处理报文后,根据实际需求,可以对待处理报文进行一定的过滤,以滤除不合法、不合规等报文。具体来说,可以通过以下两种方案实现:

方案一、从信息安全的角度出发,可以采用预先配置的黑名单和/或白名单,对待处理报文的源地址、目的地址、协议类型中的至少一种信息进行匹配,以对待处理报文进行过滤。例如,预先对目的地址的黑名单进行配置,以禁止访问部分可疑地址,或者对源地址的白名单进行配置,仅允许白名单中的地址所发出的报文得到转发,或者指定允许的报文类型,如tcp(transmissioncontrolprotocol,传输控制协议)、udp(userdatagramprotocol,用户数据报协议)等,仅允许这些类型的报文得到转发;可以对上述各种规则进行任意组合,本发明对此不做限定。

方案二、可以采用预先配置的网络控制策略对待处理报文进行过滤。网络控制策略包括但不限于:权限控制策略,例如对一些源容器组的报文允许跨机转发,对另一些源容器组的报文不允许跨机转发,或者某些源容器组有权限访问特定的服务等;性能控制策略,例如当内核态中堆积了较多的报文需要转发时,可以在一段时间内禁止新的第一类报文转发,以缓解系统压力,或者某个服务的访问压力较大时,可以在一段时间内禁止其他报文向该服务转发,等等。

需要说明的是,实际应用中,可以单独采用上述方案一与方案二,也可以结合使用两种方案,以实现安全、高效的报文转发处理。

示例性装置

在介绍了本发明示例性实施方式的报文转发方法之后,接下来,参考图5对本发明示例性实施方式的报文转发装置进行说明。

如图5所示,报文转发装置500可以包括:

报文获取模块510,用于从源容器组获取待处理报文;

第一转发模块540,用于当确定待处理报文为第一类报文时,在内核态中对待处理报文进行地址转换,并根据转换后的地址,在用户态中将待处理报文转发至目的容器组;

第二转发模块550,用于当确定待处理报文为第二类报文时,在用户态中将待处理报文转发至目的容器组。

在一种可选的实施方式中,装置500还可以包括:报文分类模块530,其通过以下方式对待处理报文进行分类:

解析待处理报文的目的地址;

如果目的地址为服务地址,则确定待处理报文为第一类报文;

如果目的地址为容器组地址,则确定待处理报文为第二类报文。

在一种可选的实施方式中,报文分类模块530,还用于在解析待处理报文的目的地址时,如果目的地址为预设地址或处于预设地址段以内,则确定目的地址为服务地址。

在一种可选的实施方式中,第一转发模块540,还用于在对待处理报文进行地址转换时,将待处理报文的目的地址由服务地址转换为容器组地址。

在一种可选的实施方式中,第一转发模块540,通过以下方式对待处理报文进行地址转换:

获取待处理报文的目的地址所对应的至少一个容器组;

从上述至少一个容器组中确定目的容器组;

将目的地址转换为目的容器组的地址。

在一种可选的实施方式中,第一转发模块540,还用于在对待处理报文进行地址转换时,将待处理报文的源地址转换为内核态中的虚拟网卡的地址。

在一种可选的实施方式中,第一转发模块540,还用于在对源地址和目的地址进行转换后,在内核态中记录地址转换信息,以在接收到待处理报文的回复报文时,根据地址转换信息对回复报文的地址进行逆转换。

在一种可选的实施方式中,第一转发模块540,还用于通过以下方式转发待处理报文:在用户态中,采用基于数据平面开发工具集的快速数据路径,将待处理报文转发至目的容器组。

在一种可选的实施方式中,第二转发模块550,还用于通过以下方式转发待处理报文:在用户态中,采用基于数据平面开发工具集的快速数据路径,将待处理报文转发至目的容器组。

在一种可选的实施方式中,装置500还可以包括:报文过滤模块520,用于在报文获取模块在从源容器组获取待处理报文后,采用预先配置的黑名单和/或白名单,对待处理报文的源地址、目的地址、协议类型中的至少一种信息进行匹配,以对待处理报文进行过滤。

在一种可选的实施方式中,装置500还可以包括:报文过滤模块520,用于在报文获取模块在从源容器组获取待处理报文后,采用预先配置的网络控制策略对待处理报文进行过滤。

此外,本发明实施方式的其他具体细节在上述方法的发明实施方式中已经详细说明,在此不再赘述。

示例性存储介质

参考图6对本发明示例性实施方式的存储介质进行说明。

如图6所示,描述了根据本发明的实施方式的用于实现上述方法的程序产品600,其可以采用便携式紧凑盘只读存储器(cd-rom)并包括程序代码,并可以在设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

该程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。

计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、re等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,程序设计语言包括面向对象的程序设计语言-诸如java、c 等,还包括常规的过程式程序设计语言-诸如"c"语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(fan)或广域网(wan),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。

示例性电子设备

参考图7对本发明示例性实施方式的电子设备进行说明。

图7显示的电子设备700仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图7所示,电子设备700以通用计算设备的形式表现。电子设备700的组件可以包括但不限于:至少一个处理单元710、至少一个存储单元720、连接不同系统组件(包括存储单元720和处理单元710)的总线730、显示单元740。

其中,存储单元存储有程序代码,程序代码可以被处理单元710执行,使得处理单元710执行本说明书上述"示例性方法"部分中描述的根据本发明各种示例性实施方式的步骤。例如,处理单元710可以执行如图1或图3所示的方法步骤等。

存储单元720可以包括易失性存储单元,例如随机存取存储单元(ram)721和/或高速缓存存储单元722,还可以进一步包括只读存储单元(rom)723。

存储单元720还可以包括具有一组(至少一个)程序模块725的程序/实用工具724,这样的程序模块725包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。

总线730可以包括数据总线、地址总线和控制总线。

电子设备700也可以与一个或多个外部设备800(例如键盘、指向设备、蓝牙设备等)通信,这种通信可以通过输入/输出(i/o)接口750进行。电子设备700还包括显示单元740,其连接到输入/输出(i/o)接口750,用于进行显示。并且,电子设备700还可以通过网络适配器760与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器760通过总线730与电子设备700的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备700使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。

应当注意,尽管在上文详细描述中提及了装置的若干模块或子模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。

此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。

虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。


技术特征:

1.一种报文转发方法,其特征在于,包括:

从源容器组获取待处理报文;

当确定所述待处理报文为第一类报文时,在内核态中对所述待处理报文进行地址转换,并根据转换后的地址,在用户态中将所述待处理报文转发至目的容器组;

当确定所述待处理报文为第二类报文时,在用户态中将所述待处理报文转发至目的容器组。

2.根据权利要求1所述的方法,其特征在于,在从源容器组获取待处理报文后,通过以下方式确定所述待处理报文为第一类报文或第二类报文:

解析所述待处理报文的目的地址;

如果所述目的地址为服务地址,则确定所述待处理报文为第一类报文;

如果所述目的地址为容器组地址,则确定所述待处理报文为第二类报文。

3.根据权利要求2所述的方法,其特征在于,在解析所述待处理报文的目的地址时,如果所述目的地址为预设地址或处于预设地址段以内,则确定所述目的地址为服务地址。

4.根据权利要求1所述的方法,其特征在于,所述在内核态中对所述待处理报文进行地址转换,包括:

将所述待处理报文的目的地址由服务地址转换为容器组地址。

5.根据权利要求4所述的方法,其特征在于,所述将所述待处理报文的目的地址由服务地址转换为容器组地址,包括:

获取所述待处理报文的目的地址所对应的至少一个容器组;

从所述至少一个容器组中确定目的容器组;

将所述目的地址转换为所述目的容器组的地址。

6.根据权利要求4所述的方法,其特征在于,所述在内核态中对所述待处理报文进行地址转换,还包括:

将所述待处理报文的源地址转换为所述内核态中的虚拟网卡的地址。

7.根据权利要求6所述的方法,其特征在于,在对所述源地址和所述目的地址进行转换后,所述方法还包括:

在所述内核态中记录地址转换信息,以在接收到所述待处理报文的回复报文时,根据所述地址转换信息对所述回复报文的地址进行逆转换。

8.一种报文转发装置,其特征在于,包括:

报文获取模块,用于从源容器组获取待处理报文;

第一转发模块,用于当确定所述待处理报文为第一类报文时,在内核态中对所述待处理报文进行地址转换,并根据转换后的地址,在用户态中将所述待处理报文转发至目的容器组;

第二转发模块,用于当确定所述待处理报文为第二类报文时,在用户态中将所述待处理报文转发至目的容器组。

9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1~7任一项所述的方法。

10.一种电子设备,其特征在于,包括:

处理器;以及

存储器,用于存储所述处理器的可执行指令;

其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1~7任一项所述的方法。

技术总结
本发明实施方式涉及一种报文转发方法、报文转发装置、存储介质与电子设备,涉及通信与计算机技术领域。该报文转发方法包括:从源容器组获取待处理报文;当确定所述待处理报文为第一类报文时,在内核态中对所述待处理报文进行地址转换,并根据转换后的地址,在用户态中将所述待处理报文转发至目的容器组;当确定所述待处理报文为第二类报文时,在用户态中将所述待处理报文转发至目的容器组。本发明提供了兼容两类报文的转发方案,无需对每条报文进行内核态与用户态的频繁切换,因而降低了系统开销,且能够改善大量并发请求所导致的系统性能瓶颈问题。

技术研发人员:陈启钧;李阳;刘继江;张晓龙
受保护的技术使用者:杭州朗和科技有限公司
技术研发日:2020.01.13
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-20025.html

最新回复(0)