CN109302349A - 一种报文转发方法及路由设备 - Google Patents
一种报文转发方法及路由设备 Download PDFInfo
- Publication number
- CN109302349A CN109302349A CN201811150923.XA CN201811150923A CN109302349A CN 109302349 A CN109302349 A CN 109302349A CN 201811150923 A CN201811150923 A CN 201811150923A CN 109302349 A CN109302349 A CN 109302349A
- Authority
- CN
- China
- Prior art keywords
- message
- multicast
- routing device
- layers
- head
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/32—Flow control; Congestion control by discarding or delaying data units, e.g. packets or frames
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/742—Route cache; Operation thereof
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请实施例提供了一种报文转发方法及路由设备,方法包括:路由设备接收组播报文,并将组播报文存储至相应的缓冲区,组播报文包含该组播报文所在的组播组的标识;路由设备获取组播组对应的多个组播成员;针对多个组播成员中的每个组播成员,路由设备根据组播成员的地址信息以及路由设备连接组播成员的接口的地址信息,构建该组播成员对应的报文二层头部;路由设备根据每个组播成员的报文二层头部与组播报文的数据部分获取发送给每个组播成员的报文,并将报文发送至每个组播成员。本发明可有效降低缓冲区间的内存拷贝次数和缓冲区资源的占用,提高缓冲区的使用效率,避免缓冲区被组播数据转发堆积占用导致出现的丢包现象。
Description
技术领域
本申请涉及通信技术领域,具体而言,涉及一种报文转发方法及路由设备。
背景技术
随着经济持续发展,人们的生活方式随之改变。目前网络已经成为日常生活必需的一部分,海量的网络数据对网络通信设备的数据吞吐量的要求愈加严格。路由器作为通信网络中的重要设备,其数据收发的性能直接决定了所在网络的数据通信的可靠性,路由器的数据收发性能对网络中所承载的业务的正常运行起到了支撑和限制的作用。
路由器使用缓冲区(简称buffer)来装载需要收发的报文,当buffer资源没有空闲时,报文就无法进入路由器进行转发,造成数据通信的丢包或者网络中断。因此buffer资源的可用性对于路由器设备的稳定、可靠运行具有至关重要的作用。
现有的路由设备作为转发设备转发组播报文时,会根据需要转发到的组播成员的数量,将组播报文拷贝成相应的份数,然后对拷贝生成的副本的二层头部进行对应修改,再将修改之后的副本发送至对应的组播成员,组播报文在buffer中进行拷贝花费的时间较长,buffer被堆积占用,当buffer被消耗完,后续报文会由于没有buffer可用而被丢弃,数据流会因此出现丢包。
申请内容
有鉴于此,本申请实施例提供了一种报文转发方法及路由设备。
第一方面,本申请实施例提供了一种报文转发方法,应用于路由设备,所述方法包括:路由设备接收组播报文,并将所述组播报文存储至缓冲区;所述路由设备获取所述组播报文所在组播组的每个组播成员的信息;所述路由设备根据每个组播成员的信息,构建对应发送给该组播成员的报文二层头部并进行缓存;所述路由设备根据每个组播成员对应的报文二层头部与所述组播报文的数据部分获取发送给该组播成员的报文,并发送至该组播成员。
路由设备接收到组播报文后,可以根据组播报文中的组播组标识获取组播组对应的全部组播成员,路由设备根据全部组播成员中每个组播成员的信息,构建每个组播成员的报文二层头部。然后路由设备可以将每个组播成员的报文二层头部与组播报文的数据部分拼接获取发送给该组播成员的报文,并将报文发给相应的组播成员。由于本实施例通过报文二层头部与原组播报文的数据部分组成即将发送的新报文,不需要根据组播成员的个数对原组播报文进行相同数量的拷贝,有效降低缓冲区间的内存拷贝次数和缓冲区资源的占用,提高了缓冲区的使用效率,避免缓冲区被堆积占用导致出现的丢包现象。
在一个可能的设计中,所述路由设备根据每个组播成员的信息,构建对应发送给该组播成员的报文二层头部并进行缓存,包括:所述路由设备根据每个组播成员所属的组播组的MAC地址、该组播成员对应的出接口的MAC地址,构成发送给该组播成员的报文的对应的二层头部,并进行缓存。
将组播报文发送给组播组中的组播成员,需要获知相应组播成员对应的出接口的MAC地址,因此对于组播组中的每个组播成员,均需要构建其对应的报文二层头部,通过组播成员所属的组播组的MAC地址、该组播成员对应的出接口的MAC地址构建报文二层头部。
在一个可能的设计中,所述路由设备根据每个组播成员对应的报文二层头部与所述组播报文的数据部分获取发送给该组播成员的报文,包括:所述路由设备根据每个组播成员的报文二层头部的起始地址以及长度、所述组播报文的数据部分的起始地址以及数据部分长度,读取报文二层头部与所述组播报文的数据部分,得到发送给该组播成员的报文。
由于组播成员的报文二层头部与组播报文的数据部分在缓冲区中的存储位置通常是不连续的,为了实现两者的拼接,需要获取报文二层头部的起始地址以及该报文二层头部的长度,组播报文的数据部分的起始地址以及数据部分的长度。获取上述数据后,可以通过将上述数据填写在预设格式的报文模板中,从而将两者拼接并封装为新的报文。
在一个可能的设计中,所述方法还包括:所述路由设备获取并记录所述组播组对应的组播成员的数量作为报文发送数量;每当所述路由设备将报文发送给一个组播成员,所述路由设备将所述报文发送数量减一。
对于组播报文来说,由于需要将该组播报文转发给同一组播组中的全部组播成员,因此,存储该组播报文的缓冲区需要在该组播报文被复用相应的次数后才能被释放,则对组播报文的复用次数的计数便显得较为重要。可以通过每复用一次,便更新还需要被复用多少次的方式来对复用次数进行计数,即通过记录还有多少组播成员需要接收该组播报文的方式进行计数,记录还需要接收该组播报文的组播成员的组播数量。
在一个可能的设计中,所述方法还包括:在所述路由设备根据每个组播成员的信息,构建对应发送给该组播成员的报文二层头部并进行缓存之后,在所述路由设备根据每个组播成员对应的报文二层头部与所述组播报文的数据部分获取发送给该组播成员的报文,并发送至该组播成员之前,所述方法还包括:所述路由设备将存储所述组播报文的缓冲区挂接在预设链表,并对挂接在所述预设链表的缓冲区个数进行计数;若挂接在所述预设链表的缓冲区个数超过预设阈值,遍历挂接在所述预设链表的缓冲区对应的组播报文的报文发送数量;释放报文发送数量为0的组播报文所在的缓冲区。
路由设备可以将正在进行转发的组播报文的缓冲区挂接在预设链表,从而实现对正在进行转发动作的缓冲区的计数,此时,挂接在链表上的每个缓冲区对应的组播报文均在各自记录各自对应的组播数量。当挂接在预设链表的缓冲区的数量超过预设阈值之后,再遍历所有挂接的缓冲区,判断每个缓冲区对应的组播报文的组播数量是否为0,并将组播数量为0的组播报文所在的缓冲区释放掉。通过这种方式可以一次性释放多个缓冲区,并且减少检测组播数量是否为0的次数,节省运算资源。
第二方面,本申请实施例提供了一种路由设备,所述路由设备包括:报文接收模块,用于接收组播报文,并将所述组播报文存储至相应的缓冲区;组播成员获取模块,用于获取所述组播报文所在组播组的每个组播成员的信息;二层头部构建模块,用于根据每个组播成员的信息,构建对应发送给该组播成员的报文二层头部并进行缓存;报文获取模块,用于根据每个组播成员对应的报文二层头部与所述组播报文的数据部分获取发送给该组播成员的报文,并发送至该组播成员。
路由设备接收到组播报文后,可以根据组播报文中的组播组标识获取组播组对应的全部组播成员,路由设备根据全部组播成员中每个组播成员的信息,构建每个组播成员的报文二层头部。然后路由设备可以将每个组播成员的报文二层头部与组播报文的数据部分拼接获取发送给该组播成员的报文,并将报文发给相应的组播成员。由于本实施例通过报文二层头部与原组播报文的数据部分组成即将发送的新报文,不需要根据组播成员的个数对原组播报文进行相同数量的拷贝,有效降低缓冲区间的内存拷贝次数和缓冲区资源的占用,提高了缓冲区的使用效率,避免缓冲区被堆积占用导致出现的丢包现象。
在一个可能的设计中,所述二层头部构建模块用于:根据每个组播成员所属的组播组的MAC地址、该组播成员对应的出接口的MAC地址,构成发送给该组播成员的报文的对应的二层头部,并进行缓存。
将组播报文发送给组播组中的组播成员,需要获知相应组播成员对应的出接口的MAC地址,因此对于组播组中的每个组播成员,均需要构建其对应的报文二层头部,通过组播成员所属的组播组的MAC地址、该组播成员对应的出接口的MAC地址构建报文二层头部。
在一个可能的设计中,所述报文获取模块用于根据每个组播成员的报文二层头部的起始地址以及长度、所述组播报文的数据部分的起始地址以及数据部分长度,读取报文二层头部与所述组播报文的数据部分,得到发送给该组播成员的报文。
由于组播成员的报文二层头部与组播报文的数据部分在缓冲区中的存储位置通常是不连续的,为了实现两者的拼接,需要获取报文二层头部的起始地址以及该报文二层头部的长度,组播报文的数据部分的起始地址以及数据部分的长度。获取上述数据后,可以通过将上述数据填写在预设格式的报文模板中,从而将两者拼接并封装为新的报文。
在一个可能的设计中,所述路由设备还包括:组播数量记录模块,用于获取并记录所述组播组对应的组播成员的数量作为报文发送数量;组播数量更新模块,用于每当所述路由设备将报文发送给一个组播成员,所述路由设备将所述报文发送数量减一。
对于组播报文来说,由于需要将该组播报文转发给同一组播组中的全部组播成员,因此,存储该组播报文的缓冲区需要在该组播报文被复用相应的次数后才能被释放,则对组播报文的复用次数的计数便显得较为重要。可以通过每复用一次,便更新还需要被复用多少次的方式来对复用次数进行计数,即通过记录还有多少组播成员需要接收该组播报文的方式进行计数,记录还需要接收该组播报文的组播成员的组播数量。
在一个可能的设计中,所述路由设备还包括:缓冲区挂接模块,用于将存储所述组播报文的缓冲区挂接在预设链表,并对挂接在所述预设链表的缓冲区个数进行计数;缓冲区遍历模块,用于若挂接在所述预设链表的缓冲区个数超过预设阈值,遍历挂接在所述预设链表的缓冲区对应的组播报文的报文发送数量;缓冲区释放模块,用于释放报文发送数量为0的组播报文所在的缓冲区。
路由设备可以将正在进行转发的组播报文的缓冲区挂接在预设链表,从而实现对正在进行转发动作的缓冲区的计数,此时,挂接在链表上的每个缓冲区对应的组播报文均在各自记录各自对应的组播数量。当挂接在预设链表的缓冲区的数量超过预设阈值之后,再遍历所有挂接的缓冲区,判断每个缓冲区对应的组播报文的组播数量是否为0,并将组播数量为0的组播报文所在的缓冲区释放掉。通过这种方式可以一次性释放多个缓冲区,并且减少检测组播数量是否为0的次数,节省运算资源。
第三方面,本申请提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当所述电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行第一方面或第一方面的任一可选的实现方式所述的方法。
第四方面,本申请提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行第一方面或第一方面的任一可选的实现方式所述的方法。
第五方面,本申请提供一种计算机程序产品,所述计算机程序产品在计算机上运行时,使得计算机执行第一方面或第一方面的任意可能的实现方式中的方法。
为使本申请实施例所要实现的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚的说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请提供的组播报文转发的示意图;
图2是本申请第一实施例提供的报文转发方法的步骤流程图;
图3是本申请第一实施例提供的报文转发方法的部分步骤流程图;
图4是本申请第一实施例提供的报文转发方法的部分步骤流程图;
图5是本申请第二实施例提供的路由设备的结构框图;
图6示出了缓冲区的结构示意图;
图7示出了报文格式的结构示意图;
图8示出了拼接并封装后的报文格式的结构示意图。
具体实施方式
路由设备作为转发设备,承载了网络中的各种业务流量,各种业务中包括组播业务,组播业务作为网络应用的一种重要场景,对组播报文的转发能力直接决定了网络服务的可靠性。组播报文的转发情况如图1所示。
路由设备接收到报文,在解析报文时发现此报文为组播报文,并根据该组播报文中的组播地址获得组播组的全部组播成员的信息。然后根据该组播组的全部组播成员的数量,将该组播报文拷贝成与组播成员的数量相同的份数,然后针对该组播组中的每个组播成员,修改拷贝获得的副本的二层头部。
具体地,请参见图1,路由设备100接收到组播报文后,发现该组播报文所在的组播组有三个组播成员:第一组播成员210、第二组播成员220、第三组播成员230,路由设备100则将组播报文拷贝成三份,并修改三份副本中每份的二层头部。以第一接口110对应的第一组播成员210为例,路由设备将该副本的二层头部的源MAC地址修改为第一接口110的MAC地址,将该副本的二层头部的目的MAC地址修改为第一组播成员210所属的组播组的MAC地址,然后将该报文发送出去。第二接口120对应的第二组播成员220以及第三接口130对应的第三组播成员230与上述过程类似,在此便不做赘述。
根据上述的原理描述可知,组播报文的转发涉及多次报文的复制拷贝,而报文的拷贝在buffer中进行,消耗处理器极多的时间。由于报文长度的不一致和组播成员个数不一,占用处理器的时间也是随机的。这便会导致原组播报文得不到及时处理,buffer被堆积占用,当buffer均被占用时,后续报文由于没有buffer可用而被丢弃。此时,数据来就会出现丢包。
由上述描述可知,现有的报文转发方式会导致组播报文业务的转发能力偏低,且大量的组播报文转发会占用过多的buffer,导致其他业务可能没有buffer可用而出现业务中断的情况。
现有技术中存在的上述缺陷,本申请人认为均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本发明实施例针对上述问题所提出的解决方案,都应该是发明人在本发明过程中对本发明做出的贡献。
为解决上述技术问题,本申请实施例提供了如下的报文转发方法及路由设备,下面将结合附图,对本申请实施例中的报文转发方法及路由设备进行详细介绍。
第一实施例
请参见图2,图2示出了本申请第一实施例提供的报文转发方法的流程示意图,具体包括如下步骤:
步骤S110,路由设备接收组播报文,并将所述组播报文存储至缓冲区。
路由设备具体可以接收报文,再对报文进行解析获得报文的类型,路由设备可能接收到单播报文、组播报文、广播报文,具体可以根据报文的标识信息来获得报文的类型。组播报文中可以包括该组播报文所在的组播组的标识。
路由设备将接收到的组播报文储存至对应申请的的缓冲区。缓冲区可以在初始化期间,通过创建缓冲区池的方式来实现,路由设备在接收到报文时,具体可以从缓冲区池中申请一个缓冲区装载接收的报文。一般缓冲区描述符中包括报文头部的起始地址,报文整体长度,报文数据部分的起始地址,报文数据部分长度。
用于承载报文的缓冲区的结构请参见图6,在本申请实施例中,报文头部具体可以用于承载二层头部,报文数据具体可以用于承载IP头部、TCP头部以及数据,预留空间用于根据业务需求使用;报文描述符用于跟踪当前缓冲区的使用信息和所承载报文的转发信息,转发信息可以包括该报文来自的接口信息、报文占用缓冲区的大小、数据起始位置的指针以及数据起始地址等。
二层头部的基础封装加上尾部的校验字段长度共长18字节,通常把二层头只算做14字节。二层头部包括目的地址和源地址,各为6字节,用于存放封装的目的MAC和源MAC;二层头部还包括类型type,2字节,用于标识二层之上协议的类型,如IP(0x0800)、ARP(0x0806)。
路由器使用的收发芯片对于报文收发的模式可包括内存描述符(bufferdescription,简称BD)环模式和硬件加速模式,BD环模式需要软件释放缓冲区和软件读写变量,硬件加速模式中,硬件可以支持缓冲区的释放和指定地址的变量的修改。硬件加速是指路由设备所使用的CPU芯片内部集成的硬件单元可以协助完成报文的收发流程。路由设备包括对缓冲区空间管理的硬件单元和对报文发送处理的硬件单元。对报文发送处理的硬件单元可以实现软件指定是否在报文发送完成之后将报文占用的缓冲区释放回缓冲区池、报文的分片发送以及指定地址内容进行更改的功能,本申请中以硬件加速模式为例进行说明。
步骤S120,所述路由设备获取所述组播报文所在组播组的每个组播成员的信息。
具体地,路由设备在获取组播报文的组播组之后,获取该组播组对应的全部组播成员。组播报文需要发送给对应的组播组内的全部组播成员。组播成员为路由设备对端的接收报文的设备,具体地,不同的组播成员可以有各自的成员接口,路由设备通过成员接口给对应的组播成员转发组播报文。路由设备可以通过不同的成员接口分别与每个组播成员连接,也可以由一个成员接口为多个组播成员中的两个或两个以上的组播成员发送组播报文。
路由设备接收到的报文的报文格式请参见图7,其中,报文地址指示了该报文的报文内容开始的内存地址。报文长度指定了有效报文内容的长度,具体可以基于上述两个参数完成报文内容的直接内存访问(Direct memory access,简称DMA)发送。FreeFlag指示报文发送完成后是否将该报文占用的缓冲区释放回缓冲区池,为1时表示释放。
FragMent指示报文是否分片发送,若为1,则认为当前报文格式表示的报文只是要发送报文的一部分,即完整报文尚未发送完成,将继续按照后续报文格式的内容进行报文发送,直至一个报文格式中的FragMent为0,表示一个完整报文的发送完成。Bufref可以表示组播报文所在的组播组的所有组播成员的数量。
步骤S130,所述路由设备根据每个组播成员的信息,构建对应发送给该组播成员的报文二层头部并进行缓存。
报文二层头部同样也是二层头部,其具有与二层头部相同的结构。组播成员的信息具体包括组播成员所属的组播组的MAC地址,即目的MAC地址,连接组播成员的接口地址信息,即源MAC地址;具体地,所述路由设备可以将组播成员所属的组播组的目的MAC地址、该组播成员对应的成员接口的源MAC地址填充进预先设置的缓冲区,构成该成员接口的报文二层头部。
具体地,构建报文二层头部时,需要在缓冲区的预留空间根据需求大小申请空间,并且把修改后的二层头部信息填充至申请的空间。对于需要申请的内存空间,可以通过在缓冲区中预留空间来实现,也可以专门建立缓冲区池来实现。预留空间的实现方式不应该理解为是对本申请的限制。
若需要构建的报文二层头部过多,当前预留空间不足以表示所有成员接口时,可以申请新的预留空间,并且需要对原组播报文进行一次拷贝,然后使用新申请的预留空间完成后续成员接口的报文封装以及发送。
步骤S140,所述路由设备根据每个组播成员对应的报文二层头部与所述组播报文的数据部分获取发送给该组播成员的报文,并发送至该组播成员。
组播报文可以分为原装二层头部以及数据部分,其中,IP头部、TCP头部以及具体数据均可以归于数据部分。原装二层头部具体为该组播报文发送至路由设备时的二层头部。
由于本实施例根据报文二层头部与原组播报文的数据部分可获得即将发送的新报文,具体将报文二层头部与原组播报文的数据部分拼接组成即将发送的新报文,不需要根据组播成员的个数对原组播报文进行相同数量的拷贝,有效降低缓冲区间的内存拷贝次数和缓冲区资源的占用,提高缓冲区的使用效率,避免缓冲区被组播数据转发堆积占用导致出现的丢包现象。
具体地,所述路由设备将每个组播成员的报文二层头部的起始地址以及长度与所述组播报文的数据部分的起始地址以及数据部分长度拼接并封装为该组播成员对应的报文。
请参见图8,图8示出了拼接并封装后的报文格式。ptrRsvdHead为报文二层头部所使用预留空间的起始位置,ptrRsvdHeadLen为报文二层头部的长度,FreeFlag为0表示不释放该报文二层头部占用的缓冲区,FragMent为1,表示当前报文格式表示的报文只是要发送报文的一部分,即完整报文尚未发送完成,pktDataPtr为原组播报文的报文数据区的起始地址,dataLen为数据区的长度;FragMent为0,表示一个完整报文的发送完成。通过图8示出的报文格式实现了组播成员的报文二层头部与原组播报文的数据部分的拼接和封装。
由于组播成员的报文二层头部与组播报文的数据部分在缓冲区中的存储位置通常是不连续的,为了实现两者的拼接,需要获取报文二层头部的起始地址以及该报文二层头部的长度,组播报文的数据部分的起始地址以及数据部分长度。获取上述数据后,可以通过将上述数据填写到预设格式的报文模板中,从而将两者拼接并封装为新的报文。
请参见图3,图3示出了本申请第一实施例提供的报文转发方法的部分步骤示意图,具体包括如下步骤:
步骤S150,所述路由设备获取并记录所述组播组对应的组播成员的数量作为报文发送数量。
对于组播报文来说,由于需要将该组播报文转发给同一组播组中的全部组播成员,因此,存储该组播报文的缓冲区需要在该组播报文被复用相应的次数后才能被释放,则对组播报文的复用次数的计数便显得较为重要。图7示出的bufref便可以用于记录组播数量。
步骤S160,每当所述路由设备将报文发送给一个组播成员,所述路由设备将所述报文发送数量减一。
每当拼接后的报文转发出去一次,意味着接收该组播报文的组播成员又减少了一个,故将报文发送数量减一后作为新的报文发送数量。可以通过每复用一次,便更新还需要被复用多少次的方式来对复用次数进行计数,即通过记录还有多少组播成员需要接收该组播报文的方式进行计数,记录还需要接收该组播报文的组播成员的组播数量。每当拼接后的报文转发出去后,可以对bufref的数字减1,从而获得新的bufref。
所述路由设备可以判断所述组播数量是否为0。组播数量为0,意味着当前组播组中的全部组播成员均接收到了相应的组播报文;组播数量不为0,意味着当前组播组中的还有未接收到该组播报文的组播成员。若全部组播成员均接收到了相应的组播报文,则可以释放存储所述组播报文的缓冲区。
可以释放存储该组播报文的缓冲区,从而提高了缓冲区的利用效率。
请参见图4,图4示出了报文转发方法的部分步骤示意图,具体包括如下步骤:
步骤S210,所述路由设备将存储所述组播报文的缓冲区挂接在预设链表,并对挂接在所述预设链表的缓冲区个数进行计数。
路由设备可以将正在进行转发的组播报文的缓冲区挂接在预设链表,从而实现对正在进行转发动作的缓冲区的计数。
步骤S220,若挂接在所述预设链表的缓冲区个数超过预设阈值,遍历挂接在所述预设链表的缓冲区对应的组播报文的报文发送数量。
挂接在链表上的每个缓冲区对应的组播报文均在各自记录各自对应的组播数量。当挂接在预设链表的缓冲区的数量超过预设阈值bufUsedLevel之后,再遍历所有挂接的缓冲区,判断每个buffer对应的组播报文的组播数量是否为0。
步骤S230,释放报文发送数量为0的组播报文所在的缓冲区。
通过这种方式可以一次性释放多个缓冲区,并且减少检测组播数量是否为0的次数,节省运算资源。
本申请第一实施例提供的报文转发方法中,可以通过对需要修改的报文头部信息进行缓冲区的申请和填充,即可完成组播报文的转发,提高组播业务的转发能力。
第二实施例
请参见图5,图5示出了本申请第二实施例提供的路由设备,该路由设备300包括:
报文接收模块310,用于接收组播报文,并将所述组播报文存储至相应的缓冲区。
组播成员获取模块320,用于获取所述组播报文所在组播组的每个组播成员的信息。
二层头部构建模块330,用于根据每个组播成员的信息,构建对应发送给该组播成员的报文二层头部并进行缓存。
报文获取模块340,用于根据每个组播成员对应的报文二层头部与所述组播报文的数据部分获取发送给该组播成员的报文,并发送至该组播成员。
所述路由设备通过不同的成员接口分别与多个组播成员中的每个组播成员连接。
所述路由设备还包括:组播数量记录模块,用于获取并记录所述组播组对应的组播成员的数量作为报文发送数量。组播数量更新模块,用于每当所述路由设备将报文发送给一个组播成员,所述路由设备将所述报文发送数量减一。缓冲区挂接模块,用于将存储所述组播报文的缓冲区挂接在预设链表,并对挂接在所述预设链表的缓冲区个数进行计数。缓冲区遍历模块,用于若挂接在所述预设链表的缓冲区个数超过预设阈值,遍历挂接在所述预设链表的缓冲区对应的组播报文的报文发送数量。缓冲区释放模块,用于释放报文发送数量为0的组播报文所在的缓冲区。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法中的对应过程,在此不再过多赘述。
本申请还提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当所述电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行第一实施例所述的方法。
本申请还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行第一实施例所述的方法。
本申请还提供一种计算机程序产品,所述计算机程序产品在计算机上运行时,使得计算机执行第一实施例所述的方法。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统的具体工作过程,可以参考前述方法中的对应过程,在此不再过多赘述。
本申请实施例提供了一种报文转发方法及路由设备,包括:路由设备接收组播报文,并将所述组播报文存储至缓冲区;所述路由设备获取所述组播报文所在组播组的每个组播成员的信息;所述路由设备根据每个组播成员的信息,构建对应发送给该组播成员的报文二层头部并进行缓存;所述路由设备根据每个组播成员对应的报文二层头部与所述组播报文的数据部分获取发送给该组播成员的报文,并发送至该组播成员。由于本实施例根据报文二层头部与原组播报文的数据部分组成即将发送的新报文,不需要根据组播成员的个数对原组播报文进行相同数量的拷贝,有效降低缓冲区间的内存拷贝次数和缓冲区资源的占用,提高缓冲区的使用效率,避免缓冲区被组播数据转发堆积占用导致出现的丢包现象。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
Claims (10)
1.一种报文转发方法,其特征在于,应用于路由设备,所述方法包括:
路由设备接收组播报文,并将所述组播报文存储至缓冲区;
所述路由设备获取所述组播报文所在组播组的每个组播成员的信息;
所述路由设备根据每个组播成员的信息,构建对应发送给该组播成员的报文二层头部并进行缓存;
所述路由设备根据每个组播成员对应的报文二层头部与所述组播报文的数据部分获取发送给该组播成员的报文,并发送至该组播成员。
2.根据权利要求1所述的方法,其特征在于,所述路由设备根据每个组播成员的信息,构建对应发送给该组播成员的报文二层头部并进行缓存,包括:
所述路由设备根据每个组播成员所属的组播组的MAC地址、该组播成员对应的出接口的MAC地址,构成发送给该组播成员的报文的对应的二层头部,并进行缓存。
3.根据权利要求1或2所述的方法,其特征在于,所述路由设备根据每个组播成员对应的报文二层头部与所述组播报文的数据部分获取发送给该组播成员的报文,包括:
所述路由设备根据每个组播成员的报文二层头部的起始地址以及长度、所述组播报文的数据部分的起始地址以及数据部分长度,读取报文二层头部与所述组播报文的数据部分,得到发送给该组播成员的报文。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述路由设备获取并记录所述组播组对应的组播成员的数量作为报文发送数量;
每当所述路由设备将报文发送给一个组播成员,所述路由设备将所述报文发送数量减一。
5.根据权利要求4所述的方法,其特征在于,在所述路由设备根据每个组播成员的信息,构建对应发送给该组播成员的报文二层头部并进行缓存之后,在所述路由设备根据每个组播成员对应的报文二层头部与所述组播报文的数据部分获取发送给该组播成员的报文,并发送至该组播成员之前,所述方法还包括:
所述路由设备将存储所述组播报文的缓冲区挂接在预设链表,并对挂接在所述预设链表的缓冲区个数进行计数;
若挂接在所述预设链表的缓冲区个数超过预设阈值,遍历挂接在所述预设链表的缓冲区对应的组播报文的报文发送数量;
释放报文发送数量为0的组播报文所在的缓冲区。
6.一种路由设备,其特征在于,所述路由设备包括:
报文接收模块,用于接收组播报文,并将所述组播报文存储至相应的缓冲区;
组播成员获取模块,用于获取所述组播报文所在组播组的每个组播成员的信息;
二层头部构建模块,用于根据每个组播成员的信息,构建对应发送给该组播成员的报文二层头部并进行缓存;
报文获取模块,用于根据每个组播成员对应的报文二层头部与所述组播报文的数据部分获取发送给该组播成员的报文,并发送至该组播成员。
7.根据权利要求6所述的路由设备,其特征在于,所述二层头部构建模块用于:根据每个组播成员所属的组播组的MAC地址、该组播成员对应的出接口的MAC地址,构成发送给该组播成员的报文的对应的二层头部,并进行缓存。
8.根据权利要求6或7所述的路由设备,其特征在于,所述报文获取模块用于根据每个组播成员的报文二层头部的起始地址以及长度、所述组播报文的数据部分的起始地址以及数据部分长度,读取报文二层头部与所述组播报文的数据部分,得到发送给该组播成员的报文。
9.根据权利要求7所述的路由设备,其特征在于,所述路由设备还包括:
组播数量记录模块,用于获取并记录所述组播组对应的组播成员的数量作为报文发送数量;
组播数量更新模块,用于每当所述路由设备将报文发送给一个组播成员,所述路由设备将所述报文发送数量减一。
10.根据权利要求9所述的路由设备,其特征在于,所述路由设备还包括:
缓冲区挂接模块,用于将存储所述组播报文的缓冲区挂接在预设链表,并对挂接在所述预设链表的缓冲区个数进行计数;
缓冲区遍历模块,用于若挂接在所述预设链表的缓冲区个数超过预设阈值,遍历挂接在所述预设链表的缓冲区对应的组播报文的报文发送数量;
缓冲区释放模块,用于释放报文发送数量为0的组播报文所在的缓冲区。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811150923.XA CN109302349A (zh) | 2018-09-29 | 2018-09-29 | 一种报文转发方法及路由设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811150923.XA CN109302349A (zh) | 2018-09-29 | 2018-09-29 | 一种报文转发方法及路由设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109302349A true CN109302349A (zh) | 2019-02-01 |
Family
ID=65161273
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811150923.XA Pending CN109302349A (zh) | 2018-09-29 | 2018-09-29 | 一种报文转发方法及路由设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109302349A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110048963A (zh) * | 2019-04-19 | 2019-07-23 | 杭州朗和科技有限公司 | 虚拟网络中的报文传输方法、介质、装置和计算设备 |
CN110445721A (zh) * | 2019-09-09 | 2019-11-12 | 迈普通信技术股份有限公司 | 一种报文转发方法及装置 |
CN113225303A (zh) * | 2020-02-04 | 2021-08-06 | 迈络思科技有限公司 | 通用分组报头插入和移除 |
CN114157620A (zh) * | 2021-11-30 | 2022-03-08 | 新华三半导体技术有限公司 | 一种报文转发方法及装置 |
CN114691590A (zh) * | 2020-12-31 | 2022-07-01 | 中科寒武纪科技股份有限公司 | 一种用于数据传送的方法和相关产品 |
CN116192741A (zh) * | 2023-04-27 | 2023-05-30 | 顺霆科技(无锡)有限公司 | 基于自组网的数据传输方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080069002A1 (en) * | 2006-09-15 | 2008-03-20 | Sbc Knowledge Ventures, L.P. | In-band media performance monitoring |
CN101227306A (zh) * | 2008-02-19 | 2008-07-23 | 中兴通讯股份有限公司 | 用于多播处理的报文复制方法和装置 |
CN101242419A (zh) * | 2008-03-19 | 2008-08-13 | 中兴通讯股份有限公司 | 一种快速组播的处理方法 |
WO2012103704A1 (zh) * | 2011-06-24 | 2012-08-09 | 华为技术有限公司 | 组播复制方法、装置及系统 |
CN108055211A (zh) * | 2017-12-22 | 2018-05-18 | 盛科网络(苏州)有限公司 | 一种组播复制的方法、设备和存储介质 |
-
2018
- 2018-09-29 CN CN201811150923.XA patent/CN109302349A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080069002A1 (en) * | 2006-09-15 | 2008-03-20 | Sbc Knowledge Ventures, L.P. | In-band media performance monitoring |
CN101227306A (zh) * | 2008-02-19 | 2008-07-23 | 中兴通讯股份有限公司 | 用于多播处理的报文复制方法和装置 |
CN101242419A (zh) * | 2008-03-19 | 2008-08-13 | 中兴通讯股份有限公司 | 一种快速组播的处理方法 |
WO2012103704A1 (zh) * | 2011-06-24 | 2012-08-09 | 华为技术有限公司 | 组播复制方法、装置及系统 |
CN108055211A (zh) * | 2017-12-22 | 2018-05-18 | 盛科网络(苏州)有限公司 | 一种组播复制的方法、设备和存储介质 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110048963A (zh) * | 2019-04-19 | 2019-07-23 | 杭州朗和科技有限公司 | 虚拟网络中的报文传输方法、介质、装置和计算设备 |
CN110445721A (zh) * | 2019-09-09 | 2019-11-12 | 迈普通信技术股份有限公司 | 一种报文转发方法及装置 |
CN113225303A (zh) * | 2020-02-04 | 2021-08-06 | 迈络思科技有限公司 | 通用分组报头插入和移除 |
CN114691590A (zh) * | 2020-12-31 | 2022-07-01 | 中科寒武纪科技股份有限公司 | 一种用于数据传送的方法和相关产品 |
CN114691590B (zh) * | 2020-12-31 | 2024-04-05 | 中科寒武纪科技股份有限公司 | 一种用于数据传送的方法和相关产品 |
CN114157620A (zh) * | 2021-11-30 | 2022-03-08 | 新华三半导体技术有限公司 | 一种报文转发方法及装置 |
CN114157620B (zh) * | 2021-11-30 | 2024-01-19 | 新华三半导体技术有限公司 | 一种报文转发方法及装置 |
CN116192741A (zh) * | 2023-04-27 | 2023-05-30 | 顺霆科技(无锡)有限公司 | 基于自组网的数据传输方法 |
CN116192741B (zh) * | 2023-04-27 | 2023-07-04 | 顺霆科技(无锡)有限公司 | 基于自组网的数据传输方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109302349A (zh) | 一种报文转发方法及路由设备 | |
US8954992B2 (en) | Distributed and scaled-out network switch and packet processing | |
WO2021135468A1 (zh) | 段标识的确定方法和设备 | |
US8010673B2 (en) | Transitioning network traffic between logical partitions in one or more data processing systems | |
US9122439B2 (en) | System and method for efficient buffer management for banked shared memory designs | |
KR102410422B1 (ko) | 네트워크에서의 분산 프로세싱 | |
US9584332B2 (en) | Message processing method and device | |
CN105511954A (zh) | 一种报文处理方法及装置 | |
WO2014026613A1 (zh) | 网络带宽分配方法及终端 | |
US10812606B2 (en) | Supporting communications in a stream processing platform | |
WO2019024671A1 (zh) | 部署网络切片的方法、设备及系统 | |
EP4044529A1 (en) | Detnet data packet processing method and apparatus | |
CN111935033B (zh) | 用于时间敏感流的终端流预留方法、系统及计算机设备 | |
CN108322376B (zh) | 路由同步方法、装置及机器可读存储介质 | |
US9268621B2 (en) | Reducing latency in multicast traffic reception | |
CN113127139A (zh) | 一种基于数据面开发套件dpdk的内存分配方法和装置 | |
CN114050998A (zh) | 实现远程直接内存访问的方法、装置、电子设备及介质 | |
CN107483628B (zh) | 基于dpdk的单向代理方法及系统 | |
CN104683312A (zh) | 媒体复用协商的方法和装置 | |
US9503278B2 (en) | Reflective relay processing on logical ports for channelized links in edge virtual bridging systems | |
JP4646002B2 (ja) | 接続管理の方法、システム、およびプログラム製品 | |
CN114726657A (zh) | 中断管理和数据收发管理的方法、装置及智能网卡 | |
CN107005468B (zh) | 一种待上载的nsd的确定方法及装置 | |
CN110660205B (zh) | 报警信息处理方法、装置、电子设备及可读存储介质 | |
WO2020169009A1 (zh) | 时隙容器的配置方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190201 |