一种报文处理系统及网络设备的制作方法

文档序号:16899904发布日期:2019-02-19 17:52阅读:154来源:国知局
一种报文处理系统及网络设备的制作方法
本发明涉及通信
技术领域
,尤其是涉及一种报文处理系统及网络设备。
背景技术
:随着容器技术的流行,可以在网络设备(如交换机、路由器等)部署容器,并将nos(networkoperationsystem,网络操作系统)部署在容器中,在容器中运行nos。nos是对网络资源进行管理和控制的操作系统,是用户与网络资源之间的接口,nos是建立在linux内核之上,为用户提供网络资源的桥梁。目前,网络设备的物理接口在接收到报文后,是直接将该报文发送给nos,由nos利用该报文进行处理,该报文对于linux内核不可见,即linux内核无法感知到该报文。在这种情况下,若在网络设备的容器中部署第三方应用,则由于linux内核无法感知到该报文,也就无法将该报文发送给第三方应用,导致第三方应用无法正常接收该报文,继而导致第三方应用无法正常运行。技术实现要素:本申请提供一种报文处理系统及网络设备,nos可以将报文发送给三层协议应用,三层协议应用能够正常接收报文,即三层协议应用能够正常运行。第一方面,本申请提供一种报文处理系统,所述报文处理系统包括:第一容器、第二容器和操作系统内核,所述第一容器用于部署网络操作系统nos,所述第二容器用于部署三层协议应用;其中,所述nos包括用户态协议栈,所述操作系统内核包括第一内核模块和内核三层协议栈;所述用户态协议栈获取第一报文,将第一报文发送给所述第一内核模块;所述第一内核模块在接收到所述第一报文后,将所述第一报文发送给内核三层协议栈;所述内核三层协议栈在接收到所述第一报文后,将所述第一报文发送给所述三层协议应用,以使所述三层协议应用根据所述第一报文进行业务处理结合第一方面,在第一种可能的实现方式中,所述用户态协议栈获取第一报文,将第一报文发送给所述第一内核模块之前,所述方法还包括:所述nos在所述操作系统内核中创建每个物理接口对应的虚拟口,并将物理接口与虚拟口的对应关系通知给所述用户态协议栈;所述用户态协议栈将所述第一报文发送给所述第一内核模块,包括:所述用户态协议栈确定所述第一报文的入物理接口,并通过所述对应关系查询与所述入物理接口对应的虚拟口;所述用户态协议栈将所述第一报文和所述虚拟口的接口标识封装到内核通信消息,并将所述内核通信消息发送给所述第一内核模块。结合第一方面和第一种可能的实现方式,在第二种可能的实现方式中,所述操作系统内核包括第一转发模块;所述第一内核模块将所述第一报文发送给内核三层协议栈,包括:所述第一内核模块将所述第一报文发送给所述第一转发模块;所述第一转发模块在接收到所述第一报文后,若本地路由表中存在与所述第一报文的目的ip地址匹配的本机路由,且所述本机路由指示的本机地址与所述虚拟口的ip地址相同,则将所述第一报文发送给所述内核三层协议栈。结合第一方面,在第三种可能的实现方式中,所述内核三层协议栈将所述第一报文发送给所述三层协议应用之后,所述方法还包括:所述内核三层协议栈接收所述三层协议应用针对所述第一报文返回的第二报文,并将所述第二报文发送给所述第一内核模块;所述第一内核模块在接收到所述第二报文后,将所述第二报文封装到内核通信消息,将所述内核通信消息发送给所述用户态协议栈。结合第一方面,在第四种可能的实现方式中,所述报文处理系统还包括第三容器,所述第三容器用于部署二层协议应用;所述nos还包括以太网模块,所述操作系统内核还包括内核二层协议栈;所述以太网模块获取第三报文,将所述第三报文和消息类型封装到内核通信消息,并将所述内核通信消息发送给第一内核模块;其中,所述消息类型为用于表示所述第三报文是需要发送给二层协议应用的特定标识;所述第一内核模块在接收到所述内核通信消息后,若所述内核通信消息包括的消息类型为特定标识,则将所述第三报文发送给所述内核二层协议栈;所述内核二层协议栈在接收到所述第三报文后,将所述第三报文发送给所述二层协议应用,以使所述二层协议应用根据所述第三报文进行业务处理。结合第一方面,在第五种可能的实现方式中,所述报文处理系统还包括第三容器,所述第三容器用于部署二层协议应用;所述nos还包括以太网模块,所述操作系统内核还包括内核二层协议栈和第二内核模块;所述以太网模块获取第三报文,将所述第三报文发送给所述第二内核模块;所述第二内核模块在接收到所述第三报文后,将所述第三报文发送给所述内核二层协议栈;所述内核二层协议栈在接收到所述第三报文后,将所述第三报文发送给所述二层协议应用,以使所述二层协议应用根据所述第三报文进行业务处理。结合第一方面、第四种可能的实现方式和第五种可能的实现方式,在第六种可能的实现方式中,所述nos还包括用户虚拟口模块;所述内核二层协议栈将所述第三报文发送给所述二层协议应用之后,所述方法还包括:所述内核二层协议栈接收所述二层协议应用针对所述第三报文返回的第四报文,并将所述第四报文发送给所述用户虚拟口模块;所述用户虚拟口模块在接收到所述第四报文后,将所述第四报文发送给所述以太网模块,以使所述以太网模块向外部设备转发所述第四报文。第二方面,本申请提供一种网络设备,所述网络设备包括:第一容器、第二容器和操作系统内核,所述第一容器用于部署网络操作系统nos,所述第二容器用于部署三层协议应用;其中,所述nos包括用户态协议栈,所述操作系统内核包括第一内核模块和内核三层协议栈;所述用户态协议栈,用于获取第一报文,并将所述第一报文发送给所述第一内核模块;所述第一内核模块,用于在接收到所述第一报文后,将所述第一报文发送给内核三层协议栈;所述内核三层协议栈,用于在接收到所述第一报文后,将所述第一报文发送给三层协议应用,以使所述三层协议应用根据所述第一报文进行业务处理。结合第二方面,在第一种可能的实现方式中,所述nos,用于在所述操作系统内核中创建每个物理接口对应的虚拟口,并将物理接口与虚拟口的对应关系通知给所述用户态协议栈;所述用户态协议栈将所述第一报文发送给所述第一内核模块时具体用于:确定所述第一报文的入物理接口,并通过所述对应关系查询与所述入物理接口对应的虚拟口;将所述第一报文和所述虚拟口的接口标识封装到内核通信消息,并将所述内核通信消息发送给所述第一内核模块。结合第二方面和第一种可能的实现方式,在第二种可能的实现方式中,所述操作系统内核包括第一转发模块;所述第一内核模块将所述第一报文发送给内核三层协议栈时具体用于:将所述第一报文发送给所述第一转发模块;所述第一转发模块,用于在接收到所述第一报文后,若本地路由表中存在与所述第一报文的目的ip地址匹配的本机路由,且所述本机路由指示的本机地址与所述虚拟口的ip地址相同,则将所述第一报文发送给所述内核三层协议栈。结合第二方面,在第三种可能的实现方式中,所述内核三层协议栈,还用于接收所述三层协议应用针对所述第一报文返回的第二报文,并将所述第二报文发送给所述第一内核模块;所述第一内核模块,还用于在接收到所述第二报文后,将所述第二报文封装到内核通信消息,并将所述内核通信消息发送给所述用户态协议栈。结合第二方面,在第四种可能的实现方式中,所述网络设备还包括第三容器,所述第三容器用于部署二层协议应用;所述nos还包括以太网模块,所述操作系统内核还包括内核二层协议栈;所述以太网模块,用于获取第三报文,将所述第三报文和消息类型封装到内核通信消息,并将所述内核通信消息发送给第一内核模块;其中,所述消息类型为用于表示所述第三报文是需要发送给二层协议应用的特定标识;所述第一内核模块,用于在接收到所述内核通信消息后,若所述内核通信消息包括的消息类型为特定标识,将所述第三报文发送给所述内核二层协议栈;所述内核二层协议栈,用于在接收到所述第三报文后,将所述第三报文发送给二层协议应用,以使所述二层协议应用根据所述第三报文进行业务处理。结合第二方面,在第五种可能的实现方式中,所述网络设备还包括第三容器,所述第三容器用于部署二层协议应用;所述nos还包括以太网模块,所述操作系统内核还包括内核二层协议栈和第二内核模块;所述以太网模块,用于获取第三报文,并将所述第三报文发送给所述第二内核模块;所述第二内核模块,用于在接收到所述第三报文后,将所述第三报文发送给所述内核二层协议栈;所述内核二层协议栈,用于在接收到所述第三报文后,将所述第三报文发送给二层协议应用,以使所述二层协议应用根据所述第三报文进行业务处理。结合第二方面、第四种可能的实现方式和第五种可能的实现方式,在第六种可能的实现方式中,所述nos还包括用户虚拟口模块;所述内核二层协议栈,还用于接收所述二层协议应用针对所述第三报文返回的第四报文,并将所述第四报文发送给所述用户虚拟口模块;所述用户虚拟口模块,用于在接收到所述第四报文后,将所述第四报文发送给所述以太网模块,以使所述以太网模块向外部设备转发所述第四报文。基于上述技术方案,本申请实施例中,nos可以将报文发送给三层协议应用,使得三层协议应用能够正常接收该报文,并使得三层协议应用能够正常运行,在保证安全性的基础上,三层协议应用可以根据报文进行业务处理。而且,三层协议应用可以基于内核三层协议栈实现,避免为适配用户态协议栈而对三层协议应用进行修改,能够充分利用内核三层协议栈以及内核的其它功能,实现用户态协议栈对内核三层协议栈的支持,能够更好的部署三层协议应用。附图说明为了更加清楚地说明本申请实施例或者现有技术中的技术方案,下面将对本申请实施例或者现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本申请实施例的这些附图获得其他的附图。图1a是本申请一种实施方式中的报文处理系统的结构示意图;图1b是本申请一种实施方式中的创建虚拟口的示意图;图2a是本申请一种实施方式中的第一报文的流向示意图;图2b是本申请一种实施方式中的第一报文的报文传输过程示意图;图3a是本申请一种实施方式中的第二报文的流向示意图;图3b是本申请一种实施方式中的第二报文的报文传输过程示意图;图4a和图4b是本申请另一种实施方式中的报文处理系统的结构示意图;图5a是本申请一种实施方式中的第三报文的流向示意图;图5b是本申请一种实施方式中的第三报文的报文传输过程示意图;图5c是本申请另一种实施方式中的第三报文的流向示意图;图5d是本申请另一种实施方式中的第三报文的报文传输过程示意图;图6a是本申请一种实施方式中的第四报文的流向示意图;图6b是本申请一种实施方式中的第四报文的报文传输过程示意图;图7a和图7b是本申请另一种实施方式中的报文处理系统的结构示意图。具体实施方式在本申请实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本申请。本申请和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息可以被称为第二信息,类似地,第二信息可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”,或“当……时”,或“响应于确定”。实施例1:本申请实施例中提出一种报文处理系统,可以应用于网络设备(如服务器、路由器、交换机等),该报文处理系统可以包括第一容器、第二容器和操作系统内核(如linux内核)。该第一容器用于部署nos,即在该第一容器中运行nos,该第二容器用于部署三层协议应用,即在该第二容器中运行三层协议应用。此外,nos建立在操作系统内核之上,且三层协议应用也建立在操作系统内核之上,也就是说,可以由操作系统内核支持nos和三层协议应用的运行。在一个例子中,在第二容器内部署三层协议应用时,可以选择是否与nos共享网络空间(netnamespace),若三层协议应用与nos共享网络空间,则三层协议应用与nos使用相同的转发表、协议栈、接口等信息,三层协议应用与nos相当于部署在一个设备,只是两个不同的功能实体;若三层协议应用与nos未共享网络空间,则三层协议应用与nos不使用相同的转发表、协议栈、接口等信息,三层协议应用与nos完全隔离,三层协议应用与nos相当于部署在两个独立设备。本申请实施例中,以三层协议应用与nos共享网络空间为例。在一个例子中,所述三层协议应用可以包括基于ip协议的第三方应用,该三层协议应用可以基于操作系统内核的内核三层协议栈(例如,内核inetstack)实现。其中,该三层协议应用可以包括但不限于:ssh(secureshell,安全外壳协议)、telnet(远程登录)、ping(网络测试工具)等应用,此外,该内核三层协议栈可以支持tcp(transmissioncontrolprotocol,传输控制协议)、udp(userdatagramprotocol,用户数据报协议)、rawip(原始ip)等协议。参见图1a所示,为报文处理系统的结构示意图,在第一容器内部署有nos,在第二容器内部署有三层协议应用,nos和三层协议应用均建立在操作系统内核之上。其中,操作系统内核可以包括但不限于:第一内核模块(如ko模块)、第一转发模块(如ipforwarding)、内核三层协议栈(如内核inetstack),当然,上述只是操作系统内核的几个模块示例,对此不做限制。nos包括但不限于:用户态协议栈(如userinetstack)、以太网模块(如ethernet)、第二转发模块(如ipforwarding),当然,上述只是nos的几个模块示例,对此不做限制。在一个例子中,网络设备可以包括多个物理接口(即网络设备与外部设备连接的接口,是真正存在的接口),网络设备通过物理接口向外部设备发送报文,网络设备通过物理接口接收外部设备发送的报文。物理接口在接收到报文后,将报文发送给以太网模块,该报文对于操作系统内核不可见,即操作系统内核无法感知该报文,也就是说,操作系统内核无法感知到实际的物理接口。针对上述发现,参见图1b所示,nos可以在操作系统内核中创建每个物理接口对应的虚拟口(如tap口),且操作系统内核能够感知到虚拟口。例如,nos为物理接口1创建虚拟口a,为物理接口2创建虚拟口b,以此类推,nos可以记录物理接口与虚拟口的对应关系,并将物理接口与虚拟口的对应关系通知给用户态协议栈。基于此,针对从物理接口1接收到的报文,nos获知是从物理接口1接收到报文,而操作系统内核获知是从虚拟口a接收到报文。在实际应用中,nos还可能为具体业务创建逻辑接口,例如vlan(virtuallocalareanetwork,虚拟局域网)接口、聚合接口、子接口等,如为聚合业务创建聚合接口,因此,可以为每个逻辑接口创建对应的虚拟口,且操作系统内核能够感知到虚拟口。例如,nos为逻辑接口3创建虚拟口c,以此类推。在为物理接口/逻辑接口创建虚拟口之后,还可以将物理接口/逻辑接口的ip地址配置到该虚拟口,并将路由表下发到操作系统内核。例如,物理接口1具有ip地址1.1.1.1,则nos可以将ip地址1.1.1.1配置到虚拟口a,这样,操作系统内核获知虚拟口a的ip地址是ip地址1.1.1.1。此外,nos记录有表1所示的路由表,则nos可以将表2所示的路由表下发到操作系统内核。表1目的ip地址下一跳出接口1.1.1.1环回接口20.20.20.2010.10.10.10物理接口1表2目的ip地址下一跳出接口1.1.1.1环回接口20.20.20.2010.10.10.10虚拟口a在表1和表2中,第一条路由表项是本机路由(也可以称为本地路由),当报文命中本机路由时,则表示由本机处理这个报文。第二条路由表项是外部路由,当报文命中外部路由时,则本机需要利用下一跳和出接口转发报文;针对第二条路由表项,表1是nos的路由表项,出接口是真正的物理接口,而表2是操作系统内核的路由表项,出接口是物理接口对应的虚拟口。在上述应用场景下,本申请实施例中的报文传输过程可以包括如下情况:情况一、当外部设备向本网络设备发送报文(为了方便描述,后续称为第一报文)时,参见图2a所示,为第一报文的流向示意图,从物理接口接收到第一报文后,第一报文被发送给nos的以太网模块,然后依次经过nos的第二转发模块、nos的用户态协议栈、操作系统内核的第一内核模块、操作系统内核的第一转发模块、操作系统内核的内核三层协议栈,最终到达三层协议应用。以下结合图2b所示的流程图,对第一报文的报文传输过程进行说明。步骤201,用户态协议栈获取第一报文,将第一报文发送给第一内核模块。网络设备的物理接口在接收到第一报文后,可以将第一报文发送给以太网模块,以太网模块在接收到第一报文后,可以对第一报文进行验证操作,如验证第一报文的目的mac地址是否为本设备的mac地址,如果不是,则丢弃第一报文;验证第一报文的源mac地址是否为非法mac地址,如果是,则丢弃第一报文;当然,上述只是验证操作的示例,对此不做限制。在所有验证操作完成后,若第一报文未被丢弃,则以太网模块将第一报文发送给第二转发模块。第二转发模块在接收到第一报文后,可以通过第一报文的目的ip地址查询本地路由表,参见表1所示。若第一报文的目的ip地址命中本机路由,则表示由本机处理第一报文,第二转发模块将第一报文发送给用户态协议栈。若第一报文的目的ip地址命中外部路由,则第二转发模块利用该外部路由转发第一报文,不再将第一报文发送给用户态协议栈,对此转发过程不再赘述。用户态协议栈在接收到第一报文后,确定第一报文对应的目的应用。若目的应用是nos内部署的应用,则将第一报文提供给该应用,由该应用根据第一报文进行业务处理,对此不再赘述。若目的应用不是nos内部署的应用,则说明第一报文不由nos处理,用户态协议栈可以将第一报文发送给第一内核模块。其中,针对nos内部署的应用,可以在用户态协议栈内配置与该应用有关的特征信息(如源ip地址、源端口、目的ip地址、目的端口等);基于此,用户态协议栈在接收到第一报文后,若第一报文的报文特征(如源ip地址、源端口、目的ip地址、目的端口等)与本地配置的特征信息匹配,则确定第一报文对应的目的应用是nos内部署的应用;若第一报文的报文特征与本地配置的特征信息不匹配,则确定第一报文对应的目的应用不是nos内部署的应用。在一个例子中,用户态协议栈将第一报文发送给第一内核模块的过程,可以包括:用户态协议栈确定第一报文的入物理接口(即网络设备接收到第一报文的物理接口,也可以称为入接口),并查询与所述入物理接口对应的虚拟口。然后,可以将第一报文和该虚拟口的接口标识封装到内核通信消息(如netlink消息),并将该内核通信消息发送给第一内核模块。例如,针对物理接口1接收到的第一报文,用户态协议栈可以确定第一报文的入物理接口是物理接口1,并确定物理接口1对应的虚拟口是虚拟口a,因此,用户态协议栈可以将第一报文和虚拟口a的接口标识封装到内核通信消息。步骤202,第一内核模块在接收到第一报文后,将第一报文发送给内核三层协议栈。例如,直接将第一报文发送给内核三层协议栈,或者,将第一报文发送给第一转发模块,由第一转发模块将第一报文发送给内核三层协议栈。在一个例子中,将第一报文发送给内核三层协议栈,可以包括:第一内核模块在接收到内核通信消息后,从该内核通信消息中获取第一报文和虚拟口a的接口标识,并将第一报文和虚拟口a的接口标识发送给内核三层协议栈。在另一个例子中,将第一报文发送给内核三层协议栈,可以包括:第一内核模块在接收到内核通信消息后,从该内核通信消息中获取第一报文和虚拟口a的接口标识,并将第一报文和虚拟口a的接口标识发送给第一转发模块。第一转发模块在接收到第一报文和虚拟口a的接口标识后,通过第一报文的目的ip地址查询本地路由表,参见表2所示。若本地路由表中存在与该目的ip地址匹配的本机路由,且本机路由指示的本机地址(如第一条路由表项中的ip地址1.1.1.1)与虚拟口a的ip地址相同,则第一转发模块将第一报文和虚拟口a的接口标识发送给内核三层协议栈。若本地路由表中不存在与该目的ip地址匹配的本机路由,或者,存在与该目的ip地址匹配的本机路由、但是本机路由指示的本机地址与虚拟口a的ip地址不同,则丢弃第一报文和虚拟口a的接口标识。步骤203,内核三层协议栈在接收到第一报文后,将第一报文发送给三层协议应用,以使三层协议应用根据第一报文进行业务处理,至此完成报文的传输。具体的,内核三层协议栈在接收到第一报文和虚拟口a的接口标识后,可以将第一报文和虚拟口a的接口标识发送给三层协议应用。例如,可以在内核三层协议栈配置特征信息(如源ip地址、源端口、目的ip地址、目的端口等)与三层协议应用的对应关系,内核三层协议栈在接收到第一报文和虚拟口a的接口标识后,获取该第一报文的报文特征(如源ip地址、源端口、目的ip地址、目的端口等),并基于所述对应关系确定与该报文特征对应的三层协议应用,并将第一报文和虚拟口a的接口标识发送给该三层协议应用。三层协议应用在接收到第一报文和虚拟口a的接口标识后,基于虚拟口a的接口标识,三层协议应用可以确定第一报文来源于虚拟口a。三层协议应用可以根据第一报文进行业务处理,这个业务处理过程与三层协议应用的功能有关,对此不做限制。例如,三层协议应用提供ftp(filetransferprotocol,文件传输协议)下载功能,则第一报文可以是ftp下载请求,且三层协议应用根据该第一报文进行业务处理时,是向外部设备传输与该ftp下载请求对应的文件。经过上述处理,可以实现报文传输过程,最终将报文发送给三层协议应用。情况二、当本网络设备的三层协议应用向外部设备发送报文(为了方便描述,后续称为第二报文)时,参见图3a所示,为第二报文的流向示意图,三层协议应用将第二报文发送给操作系统内核的内核三层协议栈,然后依次经过操作系统内核的第一转发模块、操作系统内核的第一内核模块、nos的用户态协议栈、nos的第二转发模块、nos的以太网模块,最终通过物理接口发送出去。以下结合图3b所示的流程图,对第二报文的报文传输过程进行说明。步骤301,内核三层协议栈接收三层协议应用针对第一报文返回的第二报文。其中,第二报文可以是三层协议应用针对第一报文返回的响应报文。具体的,三层协议应用根据第一报文进行业务处理后,可以得到与该第一报文对应的第二报文,并将该第二报文发送给操作系统内核的内核三层协议栈,这样,内核三层协议栈可以接收到三层协议应用发送的第二报文。步骤302,内核三层协议栈将第二报文发送给第一内核模块。具体的,内核三层协议栈在接收到第二报文后,可以将第二报文发送给第一转发模块。第一转发模块在接收到第二报文后,可以将第二报文发送给第一内核模块。例如,第一转发模块可以配置hook(钩子)功能,hook功能用于将来自内核三层协议栈的报文发送给第一内核模块,基于此,第一转发模块每次接收到内核三层协议栈发送的第二报文,就将第二报文发送给第一内核模块。步骤303,第一内核模块在接收到第二报文后,将第二报文发送给用户态协议栈。具体的,第一内核模块在接收到第二报文后,可以将第二报文封装到内核通信消息(如netlink消息),并将内核通信消息发送给用户态协议栈。进一步的,用户态协议栈在接收到内核通信消息后,可以从内核通信消息中获取第二报文,并将第二报文发送给第二转发模块,而第二转发模块在接收到第二报文后,可以通过第二报文的目的ip地址查询本地路由表,参见表1所示。若第二报文的目的ip地址命中外部路由,则第二转发模块利用外部路由确定第二报文的出接口,即某个物理接口,然后,将第二报文发送给以太网模块,由以太网模块通过该物理接口将第二报文发送出去,对此发送过程不再赘述。经过上述处理,可以实现报文传输过程,最终将报文发送给外部设备。基于上述技术方案,本申请实施例中,nos可以将报文发送给三层协议应用,使得三层协议应用能够正常接收该报文,并使得三层协议应用能够正常运行,在保证安全性的基础上,三层协议应用可以根据报文进行业务处理。三层协议应用,也可以将报文发送给nos,使得nos将报文发送给外部设备。而且,三层协议应用可以基于内核三层协议栈实现,避免为适配用户态协议栈而对三层协议应用进行修改,能够充分利用内核三层协议栈以及内核的其它功能,实现用户态协议栈对内核三层协议栈的支持,能够更好的部署三层协议应用。实施例2:本申请实施例提出另一种报文处理系统,可以应用于网络设备(如服务器、路由器、交换机等),该报文处理系统可以包括第一容器、第三容器和操作系统内核(如linux内核)。该第一容器用于部署nos,即在该第一容器中运行nos,该第三容器用于部署二层协议应用,即在该第三容器中运行二层协议应用。此外,nos建立在操作系统内核之上,且二层协议应用也建立在操作系统内核之上,也就是说,可以由操作系统内核支持nos和二层协议应用的运行。在一个例子中,在第三容器内部署二层协议应用时,可以选择是否与nos共享网络空间(netnamespace),若二层协议应用与nos共享网络空间,则二层协议应用与nos使用相同的转发表、协议栈、接口等信息,二层协议应用与nos相当于部署在一个设备,只是两个不同的功能实体;若二层协议应用与nos未共享网络空间,则二层协议应用与nos不使用相同的转发表、协议栈、接口等信息,二层协议应用与nos完全隔离,二层协议应用与nos相当于部署在两个独立设备。本申请实施例中,以二层协议应用与nos共享网络空间为例。在一个例子中,二层协议应用可以包括基于二层协议或者报文分析工具的第三方应用,该二层协议应用可以基于操作系统内核的内核二层协议栈(例如,linuxpacketsocket)实现。其中,二层协议应用可以包括但不限于:lldp(linklayerdiscoveryprotocol,链路层发现协议)、stp(spanningtreeprotocol,生成树协议)、tcpdump(transmissioncontrolprotocoldump,传输控制协议备份)等应用,此外,该内核二层协议栈可以支持lldp、stp等协议。在一个例子中,参见图4a所示,为报文处理系统的结构示意图,在第一容器内部署有nos,在第三容器内部署有二层协议应用,nos和二层协议应用均建立在操作系统内核之上。其中,操作系统内核可以包括但不限于:第一内核模块(如ko模块,与图1a中的第一内核模块可以是同一个)、内核二层协议栈(如linuxpacketsocket),当然,上述只是操作系统内核的几个模块示例,对此不做限制。nos可以包括但不限于:以太网模块(如ethernet)、用户虚拟口模块(如usertap),当然,上述只是nos的几个模块示例,对此不做限制。在另一个例子中,参见图4b所示,为报文处理系统的结构示意图,图4b的结构与图4a类似,不同之处在于:图4b中是第二内核模块(如ko模块,与图1a中的第一内核模块不是同一个),而不是第一内核模块,在此不再赘述。在一个例子中,网络设备可以包括多个物理接口/逻辑接口,可以为每个物理接口/逻辑接口创建对应的虚拟口(如tap口),在为物理接口/逻辑接口创建虚拟口之后,还可以将物理接口/逻辑接口的ip地址配置到该虚拟口,并将路由表下发到操作系统内核,具体实现过程可以参见上述实施例,在此不再赘述。在上述应用场景下,本申请实施例中的报文传输过程可以包括如下情况:情况一、当外部设备向本网络设备发送报文(为了方便描述,后续称为第三报文)时,参见图5a所示,为第三报文的流向示意图,从物理接口接收到第三报文后,第三报文被发送给nos的以太网模块,然后依次经过操作系统内核的第一内核模块、操作系统内核的内核二层协议栈,最终到达二层协议应用。以下结合图5b所示的流程图,对第三报文的报文传输过程进行说明。步骤501,以太网模块获取第三报文,将第三报文发送给第一内核模块。具体的,以太网模块可以将第三报文和消息类型封装到内核通信消息,并将该内核通信消息发送给第一内核模块,其中,该消息类型可以为用于表示第三报文是需要发送给二层协议应用的特定标识(可以根据经验配置)。在一个例子中,网络设备的物理接口在接收到第三报文后,可以将第三报文发送给以太网模块,以太网模块在接收到第三报文后,若以太网模块配置有侦听功能(侦听功能表示需要将所有报文发送给第一内核模块),则可以确定第三报文的入物理接口,并查询与所述入物理接口对应的虚拟口,并确定消息类型为特定标识,然后,可以将第三报文、该虚拟口的接口标识、该消息类型封装到内核通信消息,并将该内核通信消息发送给第一内核模块。例如,针对物理接口1接收到的第三报文,以太网模块确定第三报文的入物理接口是物理接口1,确定物理接口1对应的虚拟口是虚拟口a,因此,以太网模块可以将第三报文、虚拟口a的接口标识、消息类型封装到内核通信消息。步骤502,第一内核模块将第三报文发送给内核二层协议栈。具体的,第一内核模块在接收到内核通信消息后,可以从该内核通信消息中获取第三报文、虚拟口a的接口标识、消息类型;然后,若该消息类型为特定标识,则可以将第三报文和虚拟口a的接口标识发送给内核二层协议栈。在一个例子中,以太网模块向第一内核模块发送的内核通信消息中,可以携带消息类型,且该消息类型是特定标识(如aa等),因此,第一内核模块从该内核通信消息中获取到消息类型后,若该消息类型为特定标识,则确定内核通信消息中的报文是第三报文,需要将第三报文发送给内核二层协议栈。在另一个例子中,针对上述步骤201-步骤202,用户态协议栈在向第一内核模块发送内核通信消息时,可以不携带消息类型,或者,携带消息类型、但该消息类型不是特定标识,基于此,第一内核模块接收到内核通信消息后,若内核通信消息未携带消息类型,或者,携带的消息类型不是特定标识,则确定内核通信消息中的报文是第一报文,需要将第一报文发送给内核三层协议栈。步骤503,内核二层协议栈在接收到第三报文后,将第三报文发送给二层协议应用,以使二层协议应用根据第三报文进行业务处理,至此完成报文的传输。具体的,内核二层协议栈在接收到第三报文和虚拟口a的接口标识后,可以将第三报文和虚拟口a的接口标识发送给二层协议应用。例如,可以在内核二层协议栈配置特征信息(如报文类型,如lldp、stp等)与二层协议应用的对应关系,内核二层协议栈在接收到第三报文和虚拟口a的接口标识后,获取第三报文的报文特征(如报文类型),并基于所述对应关系确定该报文特征对应的二层协议应用,将第三报文和虚拟口a的接口标识发送给该二层协议应用。二层协议应用在接收到第三报文和虚拟口a的接口标识后,基于虚拟口a的接口标识,二层协议应用可以确定第三报文来源于虚拟口a。二层协议应用可以根据该第三报文进行业务处理,这个业务处理过程与二层协议应用的功能有关,对此不做限制。例如,二层协议应用是tcpdump应用时,tcpdump应用利用第三报文分析nos的报文的来源,分析nos的报文的传输速率等。经过上述处理,可以实现报文传输过程,最终将报文发送给二层协议应用。情况二、当外部设备向本网络设备发送报文(为了方便描述,后续称为第三报文)时,参见图5c所示,为第三报文的流向示意图,从物理接口接收到第三报文后,第三报文被发送给nos的以太网模块,然后依次经过操作系统内核的第二内核模块、操作系统内核的内核二层协议栈,最终到达二层协议应用。以下结合图5d所示的流程图,对第三报文的报文传输过程进行说明。步骤511,以太网模块获取第三报文,将第三报文发送给第二内核模块。具体的,网络设备的物理接口在接收到第三报文后,可以将第三报文发送给以太网模块,以太网模块在接收到第三报文后,若以太网模块配置有侦听功能(侦听功能表示需要将所有报文发送给第二内核模块),则确定第三报文的入物理接口,并查询与所述入物理接口对应的虚拟口,然后,可以将第三报文和该虚拟口的接口标识封装到内核通信消息(如netlink消息),并将内核通信消息发送给第二内核模块。例如,针对物理接口1接收到的第三报文,以太网模块可以确定第三报文的入物理接口是物理接口1,并确定物理接口1对应的虚拟口是虚拟口a,因此将第三报文和虚拟口a的接口标识封装到内核通信消息。步骤512,第二内核模块在接收到第三报文后,可以将该第三报文发送给内核二层协议栈。具体的,第二内核模块在接收到内核通信消息后,可以从该内核通信消息中获取第三报文和虚拟口a的接口标识,然后,第二内核模块可以将该第三报文和虚拟口a的接口标识发送给内核二层协议栈。步骤513,内核二层协议栈在接收到第三报文后,将第三报文发送给二层协议应用,以使二层协议应用根据第三报文进行业务处理,至此完成报文的传输。其中,步骤513的处理过程与步骤503类似,在此不再重复赘述。经过上述处理,可以实现报文传输过程,最终将报文发送给二层协议应用。情况三、当本网络设备的二层协议应用向外部设备发送报文(为了方便描述,后续称为第四报文)时,参见图6a所示,为第四报文的流向示意图,二层协议应用将第四报文发送给操作系统内核的内核二层协议栈,然后依次经过nos的用户虚拟口模块、nos的以太网模块,最终通过物理接口发送出去。以下结合图6b所示的流程图,对第四报文的报文传输过程进行说明。步骤601,内核二层协议栈接收二层协议应用针对第三报文返回的第四报文。其中,第四报文可以是二层协议应用针对第三报文返回的响应报文。具体的,二层协议应用根据第三报文进行业务处理后,可以得到与该第三报文对应的第四报文,并将该第四报文发送给操作系统内核的内核二层协议栈,这样,内核二层协议栈可以接收到二层协议应用发送的第四报文。此外,二层协议应用向内核二层协议栈发送第四报文时,还可以指定第四报文的出接口,该出接口可以是操作系统内核的虚拟口,如虚拟口a等。然后,二层协议应用还可以将虚拟口a的标识信息发送给内核二层协议栈。步骤602,内核二层协议栈将第四报文发送给用户虚拟口模块。具体的,内核二层协议栈在接收到第四报文和虚拟口a的标识信息后,则内核二层协议栈可以通过虚拟口a将第四报文发送给用户虚拟口模块。步骤603,用户虚拟口模块在接收到第四报文后,将第四报文发送给以太网模块,以使以太网模块向外部设备转发第四报文,至此,完成第四报文的传输。具体的,用户虚拟口模块通过虚拟口a接收到第四报文后,可以确定与虚拟口a对应的物理接口,如物理接口1,然后,将第四报文发送给以太网模块,由以太网模块通过该物理接口1将第四报文发送出去,对此发送过程不再赘述。经过上述处理,可以实现报文传输过程,最终将报文发送给外部设备。基于上述技术方案,本申请实施例中,nos可以将报文发送给二层协议应用,使得二层协议应用能够正常接收该报文,并使得二层协议应用能够正常运行,在保证安全性的基础上,二层协议应用可以根据报文进行业务处理。二层协议应用,也可以将报文发送给nos,使得nos将报文发送给外部设备。而且,二层协议应用可以基于内核二层协议栈实现,避免为适配用户态协议栈而对二层协议应用进行修改,能够充分利用内核二层协议栈以及内核的其它功能,实现用户态协议栈对内核二层协议栈的支持,能够更好的部署二层协议应用。实施例3:本申请实施例提出另一种报文处理系统,可以应用于网络设备(如服务器、路由器、交换机等),该报文处理系统可以包括第一容器、第二容器、第三容器和操作系统内核(如linux内核)。第一容器用于部署nos,即在第一容器中运行nos;第二容器用于部署三层协议应用,即在第二容器中运行三层协议应用;第三容器用于部署二层协议应用,即在第三容器中运行二层协议应用。在一个例子中,参见图7a所示,为报文处理系统的结构示意图,在第一容器内部署有nos,在第二容器内部署有三层协议应用,在第三容器内部署有二层协议应用。其中,操作系统内核可以包括但不限于:第一内核模块(如ko模块)、第一转发模块(如ipforwarding)、内核三层协议栈(如内核inetstack)、内核二层协议栈(如linuxpacketsocket),当然,上述只是操作系统内核的几个模块示例,对此不做限制。nos可以包括但不限于:用户态协议栈(如userinetstack)、以太网模块(如ethernet)、第二转发模块(如ipforwarding)、用户虚拟口模块(如usertap),当然上述只是nos的几个模块示例,对此不做限制。在另一个例子中,参见图7b所示,为报文处理系统的结构示意图,图7b的结构与图7a类似,不同之处在于:图7b多了一个第二内核模块(如ko模块)。在上述应用场景下,网络设备的物理接口在接收到报文(如上述第一报文或者第三报文)后,这个报文可以按照实施例2所示的流程进行传输,以及,这个报文可以按照实施例1所示的流程进行传输,在此不再重复赘述。实施例4:基于与上述报文处理系统同样的申请构思,本申请实施例中还提出一种网络设备,所述网络设备包括:第一容器、第二容器和操作系统内核,所述第一容器用于部署nos,所述第二容器用于部署三层协议应用;所述nos包括用户态协议栈,所述操作系统内核包括第一内核模块和内核三层协议栈;所述用户态协议栈,用于获取第一报文,并将所述第一报文发送给所述第一内核模块;所述第一内核模块,用于在接收到所述第一报文后,将所述第一报文发送给内核三层协议栈;所述内核三层协议栈,用于在接收到所述第一报文后,将所述第一报文发送给三层协议应用,以使所述三层协议应用根据所述第一报文进行业务处理。在一个例子中,所述nos,用于在所述操作系统内核中创建每个物理接口对应的虚拟口,并将物理接口与虚拟口的对应关系通知给所述用户态协议栈;所述用户态协议栈将所述第一报文发送给所述第一内核模块时具体用于:确定所述第一报文的入物理接口,并通过所述对应关系查询与所述入物理接口对应的虚拟口;将所述第一报文和所述虚拟口的接口标识封装到内核通信消息,并将所述内核通信消息发送给所述第一内核模块。在一个例子中,所述操作系统内核包括第一转发模块;所述第一内核模块将所述第一报文发送给内核三层协议栈时具体用于:将所述第一报文发送给所述第一转发模块;所述第一转发模块,用于在接收到所述第一报文后,若本地路由表中存在与所述第一报文的目的ip地址匹配的本机路由,且所述本机路由指示的本机地址与所述虚拟口的ip地址相同,则将所述第一报文发送给所述内核三层协议栈。在一个例子中,所述内核三层协议栈,还用于接收所述三层协议应用针对所述第一报文返回的第二报文,并将所述第二报文发送给所述第一内核模块;所述第一内核模块,还用于在接收到所述第二报文后,将所述第二报文封装到内核通信消息,并将所述内核通信消息发送给所述用户态协议栈。在一个例子中,所述网络设备包括第三容器,第三容器用于部署二层协议应用;所述nos还包括以太网模块,所述操作系统内核还包括内核二层协议栈;所述以太网模块,用于获取第三报文,将所述第三报文和消息类型封装到内核通信消息,并将所述内核通信消息发送给第一内核模块;其中,所述消息类型为用于表示所述第三报文是需要发送给二层协议应用的特定标识;所述第一内核模块,用于在接收到所述内核通信消息后,若所述内核通信消息包括的消息类型为特定标识,将所述第三报文发送给所述内核二层协议栈;所述内核二层协议栈,用于在接收到所述第三报文后,将所述第三报文发送给二层协议应用,以使所述二层协议应用根据所述第三报文进行业务处理。在一个例子中,所述网络设备还包括第三容器,所述第三容器用于部署二层协议应用;所述nos还包括以太网模块,所述操作系统内核还包括内核二层协议栈和第二内核模块;所述以太网模块,用于获取第三报文,并将所述第三报文发送给所述第二内核模块;所述第二内核模块,用于在接收到所述第三报文后,将所述第三报文发送给所述内核二层协议栈;所述内核二层协议栈,用于在接收到所述第三报文后,将所述第三报文发送给二层协议应用,以使所述二层协议应用根据所述第三报文进行业务处理。在一个例子中,所述nos还包括用户虚拟口模块;所述内核二层协议栈,还用于接收所述二层协议应用针对所述第三报文返回的第四报文,并将所述第四报文发送给所述用户虚拟口模块;所述用户虚拟口模块,用于在接收到所述第四报文后,将所述第四报文发送给所述以太网模块,以使所述以太网模块向外部设备转发所述第四报文。上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1