一种报文转发方法及网络设备技术

技术编号:21184015 阅读:32 留言:0更新日期:2019-05-22 14:52
本申请公开了一种报文转发方法及网络设备;上述报文转发方法包括:从内存块地址池取出其中存放的内存块信息,将输入输出硬件接收到的报文存放到内存块信息指示的内存块,得到报文的描述信息,将报文的描述信息放入第一收包队列;通过收包线程从第一收包队列读取描述信息;通过收包线程将第二收包队列内存放的一个标记为空闲状态的内存块信息存放到内存块地址池,并将从第一收包队列读取的描述信息放入第二收包队列;通过与第二收包队列对应的应用进程从第二收包队列读取描述信息,根据从第二收包队列读取的描述信息获取报文,并将第二收包队列中用于指示所获取的报文所在内存块的内存块信息标记为空闲状态。

A Message Forwarding Method and Network Equipment

This application discloses a message forwarding method and network equipment. The method of message forwarding includes: extracting the memory block information stored in the memory block address pool, storing the message received by the input and output hardware into the memory block indicated by the memory block information, obtaining the description information of the message, and putting the description information of the message into the first receiving queue through the receiving thread; Packet queue reads description information; a memory block information marked as idle state in the second receiving queue is stored in the memory block address pool by the receiving thread, and description information read from the first receiving queue is put into the second receiving queue; description information is read from the second receiving queue by the application process corresponding to the second receiving queue, according to the second receiving queue. The read description information retrieves the message and marks the memory block information in the second packet receiving queue to indicate the memory block in which the message is retrieved as idle.

【技术实现步骤摘要】
一种报文转发方法及网络设备
本申请实施例涉及但不限于通信
,尤指一种报文转发方法及网络设备。
技术介绍
随着第五代移动通信技术(5G,Fifth-generation)时代的到来,对通信网络的传输速率、性能提出了更高的需求,这就要求在网络数据传输过程中,网络节点处理报文的速率要越来越快,反映到路由器或交换机等设备上,就要求报文能够快速地在设备内部网络中传输、处理。
技术实现思路
本申请实施例提供了一种报文转发方法及网络设备,可以提高网络设备内部报文的传输速率。一方面,本申请实施例提供一种报文转发方法,包括:从内存块地址池取出其中存放的内存块信息,将输入输出硬件接收到的报文存放到所述内存块信息指示的内存块,得到所述报文的描述信息,将所述报文的描述信息放入第一收包队列;通过收包线程从所述第一收包队列读取描述信息;通过所述收包线程将第二收包队列内存放的一个标记为空闲状态的内存块信息存放到所述内存块地址池,并将从所述第一收包队列读取的描述信息放入所述第二收包队列;通过与所述第二收包队列对应的应用进程从所述第二收包队列读取描述信息,根据从所述第二收包队列读取的描述信息获取报文,并将所述第二收包队列中用于指示所获取的报文所在内存块的内存块信息标记为空闲状态;其中,所述内存块地址池内存放的内存块信息与所述第二收包队列中存放的内存块信息不重复。另一方面,本申请实施例提供一种网络设备,包括:输入输出硬件、处理器以及存储器;所述输入输出硬件适于接收或发送报文;所述存储器适于存储报文转发程序,所述报文转发程序被所述处理器执行时实现上述报文转发方法的步骤。另一方面,本申请实施例提供一种计算机可读介质,存储有报文转发程序,所述报文转发程序被执行时实现上述报文转发方法的步骤。本申请实施例中,通过收包线程在内存块地址池和第二收包队列之间采用内存地址置换方式实现报文的零拷贝传递,整个报文传递过程中没有增加拷贝,从而提高了网络设备内部的报文传输速率。本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。附图说明附图用来提供对本申请技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本申请的技术方案,并不构成对本申请技术方案的限制。图1为Linux内核Socket收包技术的示意图;图2为一种零拷贝收包技术的示意图;图3为本申请实施例提供的报文转发方法的流程图;图4为本申请实施例提供的报文转发方法的一种示例示意图;图5为本申请实施例提供的报文转发方法的另一种示例示意图;图6为本申请实施例提供的报文转发方法的另一种示例示意图;图7为本申请实施例提供的报文转发方法的另一种示例示意图;图8为本申请实施例提供的报文转发方法的另一种示例示意图;图9为本申请实施例提供的报文转发方法的另一种示例示意图;图10为本申请实施例提供的报文转发方法的另一种示例示意图;图11为本申请实施例提供的报文转发方法的另一种示例示意图;图12为本申请实施例提供的报文转发装置的示意图;图13为本申请实施例提供的报文转发装置的另一示意图;图14为本申请实施例提供的网络设备的示意图。具体实施方式下面将结合附图对本申请的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。图1为Linux内核Socket收包技术的示意图。如图1所示,Linux内核Socket收包过程可以包括:报文从网卡进入网卡驱动;网卡驱动通过中断通知内核线程在网络协议栈中处理报文,该流程需要经过IP(InternetProtocol,网络协议)层和TCP(TransmissionControlProtocol,传输控制协议)/UDP(UserDatagramProtocol,用户数据报协议)层;网络协议栈处理完报文后通知应用层(比如,应用进程P1、Pn)收包。图1所示的Socket收包技术虽然通用性较好,可以很好地支持多进程收包并且不受限制,但是存在以下缺点:从内核到应用层要经过IP层和TCP/UDP层,这就增加了报文拷贝,增加报文拷贝会严重影响收包性能;当容器中的应用进程需要收包时,受限于命名空间(NameSpace)等限制,报文的传输要依赖于容器网络,也会增加报文拷贝。由此可见,Linux内核协议栈中的报文拷贝是影响报文传输速率的重要因素。图2为一种零拷贝收包技术的示意图。如图2所示,零拷贝收包过程可以包括:报文从网卡上来,并送到帧管理;帧管理会对报文进行解析、分类或哈希(Hash)处理,然后送到特定的队列;队列管理负责分配队列给应用进程使用(比如,给应用进程P1分配队列1,给应用进程Pn分配队列n),其中,每个应用进程至少需要分配一个队列才可以解决并发问题;应用进程从指定的队列中接收报文并处理。图2所示的报文零拷贝技术可以直接将网卡驱动映射到应用进程中,这样应用进程就可以直接访问报文队列,从而实现报文的零拷贝。其中,网卡驱动可以放在内核中也可以直接放在应用进程中,应用进程直接与驱动队列进行交互,交互时需要确定本应用进程使用的队列编号、Pool(池)编号、优先级调度策略等一系列问题。如果有多个应用进程都要实现收包,那么每个应用进程都要映射管理网卡驱动、确定队列编号、Pool编号以及优先级调度策略,由于一般不同的应用进程可能由不同用户维护,上述方式无疑增加了工作量、浪费了人力。而且,本方案在有多个应用进程或容器收发报文的场景下存在一些问题,比如,在应用进程较多的情况下,网卡的硬件资源不够用,这样应用进程的个数就会受到限制;有些网卡不支持优先级调度或者调度不够灵活;容器中的进程收包时受限于命名空间(NameSpace)等限制,报文的传输要依赖于容器网络,导致增加报文拷贝;每个应用进程都要直接操作用户态驱动,会带来不必要的工作量等。本申请实施例提供一种报文转发方法及网络设备,通过收包线程在内存块地址池、第一收包队列及第二收包队列传递内存地址的方式来实现报文零拷贝,网络设备内的报文传递过程没有增加拷贝,从而提高了网络设备内部的报文传输速率。而且,本申请实施例可以实现多应用进程收包时专注于应用而不必考虑底层硬件驱动细节,在不影响性能的同时提升了通用性、工作效率,并且减少了维护成本。通过不同的第二收包队列来对应不同的应用进程,通过增加第二收包队列和内存即可增加应用进程收包,从而克服应用进程的个数受限问题;而且,通过增加第二收包队列可以区分优先级,从而实现报文的优先级调度。通过增加收包线程并设置亲和性、排他性快速收包可以解决硬件资源受限以及硬件不支持优先级调度或者调度不够灵活所导致的无差别丢包等问题。图3为本申请实施例提供的报文转发方法的流程图。如图3所示,本实施例提供的报文转发方法应用于网络设备,用于实现在网络设备内部从网络设备的输入输出硬件(比如,网卡)到应用进程的报文传输。本实施例提供的报文转发方法可以应用于对多进程或本文档来自技高网...

【技术保护点】
1.一种报文转发方法,包括:从内存块地址池取出其中存放的内存块信息,将输入输出硬件接收到的报文存放到所述内存块信息指示的内存块,得到所述报文的描述信息,将所述报文的描述信息放入第一收包队列;通过收包线程从所述第一收包队列读取描述信息;通过所述收包线程将第二收包队列内存放的一个标记为空闲状态的内存块信息存放到所述内存块地址池,并将从所述第一收包队列读取的描述信息放入所述第二收包队列;通过与所述第二收包队列对应的应用进程从所述第二收包队列读取描述信息,根据从所述第二收包队列读取的描述信息获取报文,并将所述第二收包队列中用于指示所获取的报文所在内存块的内存块信息标记为空闲状态;其中,所述内存块地址池内存放的内存块信息与所述第二收包队列中存放的内存块信息不重复。

【技术特征摘要】
1.一种报文转发方法,包括:从内存块地址池取出其中存放的内存块信息,将输入输出硬件接收到的报文存放到所述内存块信息指示的内存块,得到所述报文的描述信息,将所述报文的描述信息放入第一收包队列;通过收包线程从所述第一收包队列读取描述信息;通过所述收包线程将第二收包队列内存放的一个标记为空闲状态的内存块信息存放到所述内存块地址池,并将从所述第一收包队列读取的描述信息放入所述第二收包队列;通过与所述第二收包队列对应的应用进程从所述第二收包队列读取描述信息,根据从所述第二收包队列读取的描述信息获取报文,并将所述第二收包队列中用于指示所获取的报文所在内存块的内存块信息标记为空闲状态;其中,所述内存块地址池内存放的内存块信息与所述第二收包队列中存放的内存块信息不重复。2.根据权利要求1所述的方法,其特征在于,所述内存块信息包括内存块首地址或者内存块标识;所述内存块为一段地址连续的物理内存,用于缓存所述输入输出硬件接收到的报文。3.根据权利要求2所述的方法,其特征在于,所述从内存块地址池取出其中存放的内存块信息之前,所述方法还包括:接收到所述应用进程的收包请求后,给所述应用进程分配至少一个物理地址连续的内存片,从所述内存片切割出多个内存块,将所述多个内存块对应的内存块信息分别存放到所述内存块地址池和所述第二收包队列,并标记存放到所述第二收包队列的内存块信息为空闲状态;或者,预留至少一个物理地址连续的内存片,接收到所述应用进程的收包请求后,从所述内存片切割出多个内存块,将所述多个内存块对应的内存块信息分别存放到所述内存块地址池和所述第二收包队列,并标记存放到所述第二收包队列的内存块信息为空闲状态。4.根据权利要求1所述的方法,其特征在于,所述报文的描述信息包括:缓存所述报文的内存块的内存块首地址、所述报文的长度以及所述报文基于所述内存块首地址的偏移信息。5.根据权利要求1所述的方法,其特征在于,所述通过收包线程从所述第一收包队列读取描述信息之后,所述方法还包括:当所述第二收包队列中没有标记为空闲状态的内存块信息,则通过所述收包线程将所述描述信息所对应的内存块信息放回所述内存块地址池。6.根据权利要求1所述的方法,其特征在于,所述通过收包线程从所述第一收包队列读取描述信息之后,所述方法还包括:通过所述收包线程根据从所述第一收包队列读取的描述信息,读取在所述描述信息指示的物理地址缓存的报文,通过解析读取到的报文,确定所述读取到的报文对应的第二收包队列;其中,所述通过所述收包线程将第二收包队列内存储的一个标记为空闲状态的内存块信息存放到所述内存块地址池,并将从所述第一收包队列读取的描述信息放入所述第二收包队列,包括:通过所述收包线程将所述读取到的报文对应的第二收包队列内存放的一个标记为空闲状态的内存块信息存放到所述内存块地址池,并将从所述第一收包队列读取的描述信息放入所述第二收包队列。7.根据权利要求6所述的方法,其特征在于,所述通过所述收包线程根据从所述第一收包队列读取的描述信息,读取在所述描述信息指示的物理地址缓存的报文,通过解析读取到的报文,确定所述读取到的报文对应的第二收包队列,包括:通过将从所述第一收包队列读取的描述信息映射到虚拟地址,读取并解析报文,得到所述报文的特征信息;根据解析出的报文的特征信息,确定接收所述报文的应用进程以及所述报文所属的优先级;根据接收所述报文的应用进程、所述报文所属的优先级、以及所述应用进程对应的第二收包队列与优先级的对应关系,确定所述报文对应的第二收包队列。8.根据权利要求1所述的方法,其特征在于,所述从内存块地址池取出其中存放的内存块信息之前,所述方...

【专利技术属性】
技术研发人员:冯仰忠
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1