一种报文复制方法和装置制造方法

文档序号:7813280阅读:185来源:国知局
一种报文复制方法和装置制造方法
【专利摘要】本发明实施方式提出一种报文复制方法和装置。方法包括:基于出接口的类型确定报文封装格式,并在与所述出接口对应的缓存中保存对应于所述报文封装格式的报文头;获取原始报文的载荷地址;基于所述原始报文的载荷地址以及所述缓存的地址,在所述出接口发送对应于所述报文封装格式的报文。本发明实施方式无需复制完整的载荷,而是利用复制报文的载荷相同的原理实现报文复制,可以显著提高报文复制能力并节约系统资源。
【专利说明】种报文复制方法和装置

【技术领域】
[0001 ]本发明实施方式属于通信【技术领域】,特别是-种报文复制方法和装置。

【背景技术】
[0002]带大量虚拟接口和物理接口的网络设备往往存在广播、组播报文复制性能的问 题。例如,无线控制器支持数量众多的接入点(AP),每个AP又有大量虚拟BSS接口,因此无 线控制器内部维护了数量庞大的虚拟BSS接口集合。举例,支持2048个AP的无线控制器, 其内部往往需要维护超过6万个虚拟接口。在极端情况下,如果这些虚拟接口均在同一个 虚拟局域网(VLAN)内,那么一个广播报文,在无线控制器内部需要复制6万多份,这就对无 线控制器的报文复制能力提出了很高的要求。如果设备的广播复制能力比较弱,那么设备 就会消耗大量时间处理广播报文,使得正常单播报文都得不到及时处理。
[0003]在现有技术中,网络设备利用多核硬件多线程CPU遍历所有待复制报文的接口, 逐接口复制报文载荷,再根据对应接口类型封装相应报文头后再发送报文,依次循环至到 所有接口遍历完成。
[0004]然而,这种报文复制方式中,需要为每个接口分别复制整个报文载荷,因此报文复 制效率很低,而且还会占用大量资源。


【发明内容】

[0005]有鉴于此,本发明实施方式提出一种报文复制方法和装置,以提高报文复制效率。 [0006] 本发明实施方式的技术方案如下:
[0007]本发明实施方式一方面提出一种报文复制方法,该方法包括:
[000S] 基于出接口的类型确定报文封装格式,并在与所述出接口对应的缓存中保存对应 于所述报文封装格式的报文头;
[0009] 获取原始报文的载荷地址;
[0010]基于所述原始报文的载荷地址以及所述缓存的地址,在所述出接口发送对应于所 述报文封装格式的报文。
[0011] 优选地,所述在出接口发送对应于所述报文封装格式的报文包括:在所述出接口 以单报文多地址方式发送对应于所述报文封装格式的报文;
[0012] 该方法还包括:
[0013]当所述出接口发送报文完毕后,释放所述与出接口对应的缓存。
[0014] 优选地,进一步包括:
[0015] 基于出接口的数目确定报文复制份数,并设置初始值为所述报文复制份数的引用 计数器;
[0016] 每个出接口在完成报文发送后分别将所述引用计数器减1 ;
[0017] 当所述引用计数器为零时,释放所述原始报文的存储空间。
[0018] 优选地,所述获取原始报文的载荷地址包括:
[0019] 基于接收所述原始报文的入接口的类型确定原始报文格式;
[0020] 根据所述原始报文格式确定原始报文的报文头长度;
[0021] 将所述原始报文的报文头起始位置向后偏移所述报文头长度的位置,确定为所述 原始报文的载荷地址。
[0022] 优选地,所述报文封装格式包括:电气和电子工程师协会(IEEE) 802. 3格式、控 制的无线接入点和配置协议(CAPWAP)格式、通用路由封装(GRE)格式或第二层隧道协议 (L2TP)格式。
[0023] 本发明实施方式的另一方面提出一种报文复制装置,包括:
[0024] 报文头缓存模块,用于基于出接口的类型确定报文封装格式,并在与所述出接口 对应的缓存中保存对应于所述报文封装格式的报文头;
[0025] 载荷地址获取模块,用于获取原始报文的载荷地址;
[0026] 报文发送模块,用于基于所述原始报文的载荷地址以及所述缓存的地址,在所述 出接口发送对应于所述报文封装格式的报文。
[0027] 优选地,报文发送模块,用于在所述出接口以单报文多地址方式发送对应于所述 报文封装格式的报文;该装置还包括:
[0028]缓存释放模块,用于当所述出接口发送报文完毕后释放所述与出接口对应的缓 存。
[0029] 优选地,进一步包括:
[0030] 计数器设置模块,用于基于出接口的数目确定报文复制份数,并设置初始值为所 述报文复制份数的引用计数器,其中每个出接口在完成报文发送之后分别将所述引用计数 器减1 ;
[0031] 原始报文释放模块,用于当所述引用计数器为零时,释放所述原始报文的存储空 间。
[0032] 优选地,载荷地址获取模块,用于基于接收所述原始报文的入接口的类型确定原 始报文格式;根据所述原始报文格式确定报文头;将所述原始报文的报文头起始位置向后 偏移所述报文头长度的位置,确定为所述原始报文的载荷地址。
[0033] 优选地,所述报文封装格式包括:IEEE 802. 3格式、控制的无线接入点和配置协 议CAPWAP格式、通用路由封装GRE格式或第二层隧道协议L2TP格式。
[0034] 在本发明的技术方案中,基于出接口的类型确定报文封装格式,并在与出接口对 应的缓存中保存对应于报文封装格式的报文头;获取原始报文的载荷地址;基于原始报文 的载荷地址以及缓存的地址,在出接口发送对应于报文封装格式的报文。由此可见,应用本 发明实施方式之后,各个出接口复制报文时无需复制完整的报文载荷,而是利用复制报文 的载荷相同的原理,获取原始报文的载荷地址并封装必要的简短报文头以实现报文复制, 从而提高报文复制能力并节约系统资源。
[0035]而且,本发明实施方式通过对引用计数器进行计数,在所有出接口完成报文复制 之后,网络设备可以正常释放原始报文,从而可以进一步节约系统资源。

【专利附图】

【附图说明】
[0036]图1为根据本发明的报文复制方法的示范性流程图;
[0037]图2为根据本发明缓存与出接口的对应关系示意图;
[0038] 图3为入接口为物理以太接口时,获取载荷地址的示意图;
[0039] 图4为入接口为虚拟BSS接口时,获取载荷地址的示意图;
[0040]图5为根据本发明的报文复制装置的示范性结构图。

【具体实施方式】
[0041]为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步 的详细描述。
[0042]在本发明实施方式中,各个出接口复制报文时无需复制完整的载荷,而是利用复 制报文的载荷相同的原理,获取原始报文的载荷地址并封装必要的简短报文头以实现报文 复制,从而提高报文复制能力并节约系统资源。
[0043] 图1为根据本发明的报文复制方法的示范性流程图。
[0044] 如图1所示,该方法包括:
[0045] 步骤101 :基于出接口的类型确定报文封装格式,并在与出接口对应的缓存中保 存对应于报文封装格式的报文头。
[0046] 网络设备通常具有多个分别用于发送复制报文的出接口,每个出接口都具有相应 的报文封装格式,其中出接口既可以是虚拟接口,也可以是物理接口。
[0047] 比如:物理接口支持的报文封装格式为IEEE 802. 3格式,这意味着物理接口可以 发送IEEE 8〇2· 3格式的报文;虚拟BSS接口支持的报文封装格式为控制的无线接入点和配 置协议(CAPWAP)格式,这意味着虚拟BSS接口可以发送CAPWAP格式的报文;GRE接口支持 的报文封装格式为GRE格式,这意味着虚拟GRE接口可以发送GRE格式的报文;L2TP接口 支持的报文封装格式为L2TP格式,这意味着虚拟BSS接口可以发送L2TP格式的报文。 [0048] 分别为每个出接口设置用于保存对应于出接口所支持报文封装格式的报文头的 缓存。
[0049] 图2为根据本发明缓存与出接口的对应关系示意图。
[0050] 如图2所示,网络设备具有N个出接口,分别为每个出接口设置有缓存,在各个缓 存中分别保存相对应出接口所支持的报文封装格式的报文头。
[0051] 比如,假定第一出接口为物理接口,则在与第一出接口相对应的第一缓存中保存 第一出接口的IEEE 802. 3格式的报文头;第二出接口为虚拟BSS接口,则在与第二出接口 相对应的第二缓存中保存第二出接口的CAPWAP格式的报文头。
[0052] 可以使用内存缓存(memory cache)机制维护各个缓存,从而提高缓存的申请和释 放性能。内存缓存是linux内核中普遍用到的技术。在第一次申请调用缓存时,可以使用 系统提供的malloc函数调用缓存。在释放缓存时不直接调用f ree函数,而是将缓存放入 free链中。这样,当下次再申请缓存时,可以直接从free链中调取缓存,从而无需再次调用 开销很大的malloc函数。
[0053] 以上详细描述了出接口和报文封装格式的典型实例,而且还描述了缓存维护方 式。本领域技术人员可以意识到,这种描述仅是示范性的,并不对本发明的保护范围构成限 定。
[0054] 步骤102 :获取原始报文的载荷地址。
[0055] 原始报文即为其载荷需要被各个出接口发送的待复制报文。网络设备可以通过自 身的入接口接收待复制报文,并在网络设备中存储待复制报文。网络设备还可以通过预定 的报文封装协议自行生成待复制报文,同样也在网络设备中存储待复制报文。 '
[0056] 待复制报文包括报文头和载荷。当通过网络设备的入接口接收待复制报文时,报 文头与入接口的类型相对应。当网络设备通过预定的报文封装协议自行生成待复制报文 时,报文头与该预定的报文封装协议相对应。确定待复制报文的报文头之后,可以确定出原 始报文的载荷在网络设备中的存储地址,即原始报文的载荷地址。
[0057] 在一个实施方式中,当通过网络设备的入接口接收待复制报文时,首先基于接收 原始报文的入接口的类型确定原始报文格式;再根据原始报文格式确定该原始报文的报文 头长度;将原始报文的报文头起始位置向后偏移报文头长度的位置,确定为原始报文的载 荷地址。
[0058]例如,如果接收原始报文的入接口为物理接口,那么原始报文格式即为IEEE 802. 3报文格式。根据IEEE 802· 3报文格式规范可知,报文头长度为以太(ΕΤΗ)头,此时原 始报文的载荷地址(为载荷的起始地址)为原始报文的报文头起始地址向后偏移以太头长 度。
[0059]图3为入接口为物理以太接口时,获取载荷地址的示意图。
[0060] 由图3可见,当入接口为物理以太接口时,原始报文包括报文头和载荷,其中报文 头为以太头。此时载荷的地址即为原始报文的报文头向后偏移以太头长度处。
[0061] 类似地,如果接收原始报文的入接口为虚拟BSS接口,那么原始报文格式即为 CAPWAP报文格式。根据CAPWAP报文格式规范可知,报文头包括以太(ΕΤΗ)头、IP头、UDP 头和CAPWAP头,此时原始报文的载荷地址(同样为载荷的起始地址)为原始报文的报文头 向后偏移报文头长度,即向后偏移以太头、IP头、UDP头和CAPWAP头的长度之和。
[0062] 图4为入接口为虚拟BSS接口时,获取载荷地址的示意图。
[0063] 由图4可见,当入接口为虚拟BSS接口时,原始报文包括报文头和载荷,其中报文 头依次包括:以太头、IP头、UDP头和CAPWAP头。此时原始报文的载荷地址即为原始报文的 报文头向后偏移报文头长度处,即向后偏移以太头、IP头、UDP头和CAPWAP头的长度之和。 [0064]以上以入接口为物理接口或虚拟BSS接口为实例对获取原始报文的载荷地址的 方式进行了详细说明。本领域技术人员可以意识到,这种描述是示范性的,并不用于对本发 明的保护范围进行限定。类似地,如果从其它类型的入接口接收原始报文,则需要偏移其对 应接口的报文头长度来确定原始报文的载荷地址。
[0065]在另一个实施方式中,当网络设备通过预定的报文封装协议自行生成待复制报文 时,首先基于报文封装协议确定该原始报文的报文头长度;再将原始报文的报文头起始位 置向后偏移报文头长度的位置,确定为原始报文的载荷地址。
[0066] 当获取了原始报文的载荷地址之后,各个出接口可以基于该载荷地址获取相同的 载荷内容,而不需要逐接口复制载荷。
[0067] 步骤103 :基于原始报文的载荷地址以及缓存的地址,在出接口发送对应于所述 报文封装格式的报文。
[0068] 各个出接口基于原始报文载荷地址以及各自缓存的地址,分别发送对应于各自出 接口类型的报文。出接口可以通过单报文多地址方式发送对应于报文封装格式的报文。具 体地,出接口通过原始报文的载荷地址获取原始报文的载荷,通过缓存地址获取对应于出 接口类型的报文头,并通过单报文多地址方式将这两块内存地址的内容拼接在一起组成一 个完整报文发送。
[0069] 由此可见,应用本发明之后,报文复制过程中不需要拷贝载荷,只涉及简短的报文 头的封装。因此,相比传统的整报文复制的方法,性能显著提升。
[0070] 基于示范性测试运行本发明,报文复制性能提升明显,大约为现有技术的10倍以 上。而且,本发明的性能提升程度与报文载荷长度相关,当报文载荷长度越长时,本发明的 报文复制性能提升越明显。
[0071] 在一个实施方式中,各个出接口并行发送报文,而且当每个出接口发送报文完毕 后,释放与该出接口对应的缓存。这样,本发明可以及时释放出接口所占用的缓存,从而节 约系统资源。
[0072] 在一个实施方式中,该方法进一步包括:
[0073] 基于出接口的数目确定报文复制份数,并设置初始值为报文复制份数的引用计数 器;每个出接口在完成报文发送后分别将引用计数器减1 ;当引用计数器为零时,释放原始 报文的存储空间。这样,本发明可以及时释放原始报文的存储空间,从而节约系统资源。 [00 74] 举例,目前需要复制报文的应用场景,至少包括如下:
[0075] (1)、VLAN内复制:包括广播报文、没有开启IGMP或IGMP snooping等组播协议时 的组播报文以及未知单播报文。
[0076] (2)、组播复制:根据组播表项中的接口列表发送报文。
[0077]可以将本发明应用到上述应用场景中,由于本发明的报文复制过程中不存在载荷 拷贝,只涉及简短的报文头封装。因此,相比传统的报文复制的方法,性能显著提升。
[0078] 下面以组播复制为例,对本发明的实施方式进行说明。
[0079]第一步:根据VLAN表或组播表,预先计算报文复制份数,其中报文复制份数通常 是该VLAN或组播表项的出接口数目。
[0080] 第二步:计算原始报文的载荷地址,并为此载荷地址设置引用计数器,该引用计数 器的初始值即为报文复制份数;
[0081] 第三步:分别为每个出接口分配一块缓存,根据出接口类型不同,在对应的缓存 中封装报文头。例如,如果出接口为物理接口,则在对应于该物理接口的缓存中封装 IEEE 8〇2· 3报文头;如果出接口为虚拟BSS接口,则在对应于该虚拟BSS接口的缓存中封装 CAPWAP报文头,等等。
[0082]第四步:将原始报文的载荷地址和缓存地址发送给与缓存相对应的出接口。出接 口的硬件可以通过单报文多地址方式发送由原始报文的载荷地址和缓存地址所组合的报 文,其中各个出接口并行发送报文。
[0083]第五步:每个出接口发送完成报文后,释放对应于出接口的缓存空间,并将报文载 荷的引用计数器减1。
[0084]第六步:当报文载荷的引用计数器值为0时,表示所有出接口的报文复制工作完 成,此时释放原始报文存储空间。
[0085]基于上述详细分析,本发明还提出了一种报文复制装置。
[0086]图5为根据本发明的报文复制装置的示范性结构图。
[0087]如图5巧示,该装置50。包括:
[0088]>报文头缓存模块5〇1,用于基于出接口的类型确定报文封装格式,并在与出接口对 应的缓存中保存对应于报文封装格式的报文头; _9]载荷地址获取模块卿,用于获取原始报文的载荷地址;
[0090]报文发送模块503,用于基于原始报文的载荷地址以及缓存的地址,在出接口发送 对应于所述报文封装格式的报文。
[0091]在一个实施方式中,报文发送模块503,用于在出接口以单报文多地址方式发送对 应于报文封装格式的报文;该装置5〇〇还包括:
[0092]缓存释放模块504,用于当出接口发送报文完毕后释放与出接口对应的缓存。 [0093]在一个实施方式中,该装置500进一步包括:
[0094]计数器设置模块505,用于基于出接口的数目确定报文复制份数,并设置初始值 为报文复制份数的引用计数器,其中每个出接口在完成报文发送之后分别将引用计数器减 1 ;
[0095]原始报文释放模块506,用于当引用计数器为零时,释放原始报文的存储空间。 [00%]在一个实施方式中,载荷地址获取模块502,用于基于接收原始报文的入接口的类 型确定原始报文格式;根据原始报文格式确定报文头;将原始报文的报文头起始位置向后 偏移报文头长度的位置,确定为原始报文的载荷地址。
[0097]在一个实施方式中,报文封装格式包括:IEEE 802. 3格式、控制的无线接入点和 配置协议CAPWAP格式、通用路由封装GRE格式或第二层隧道协议L2TP格式,等等。
[0098] 可以将装置500应用到各种需要复制报文的网络设备中,这些网络设备包括并不 局限于:诸如个人电脑或网络设备的计算机、集线器、交换机、网桥、路由器、网关、网络接口 卡(NIC)、无线控制器,等等。
[0099]以上详细罗列了本发明实施方式可适用的网络设备,本领域技术人员可以意识 至IJ,这种罗列仅是示范性的,并不用于对本发明实施方式的保护范围构成限定。
[0100] 综上所述,本发明实施方式基于出接口的类型确定报文封装格式,并在与所述出 接口对应的缓存中保存对应于所述报文封装格式的报文头;获取原始报文的载荷地址;基 于所述原始报文的载荷地址以及所述缓存的地址,在所述出接口发送对应于所述报文封装 格式的报文。由此可见,应用本发明实施方式之后,各个出接口复制报文时无需复制完整的 载荷,而是利用复制报文的载荷相同的原理,通过获取原始报文的载荷地址并封装必要的 简短报文头,实现报文复制,从而提高报文复制能力并节约系统资源。
[0101] 而且,本发明实施方式通过引用计数器,使得原始报文在复制完成之后可以正常 释放,从而可以进一步节约系统资源。
[0102] 以上所述,仅为本发明的较佳实施方式而已,并非用于限定本发明的保护范围。凡 在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保 护范围之内。
【权利要求】
1. 一种报文复制方法,其特征在于,该方法包括: 基于出接口的类型确定报文封装格式,并在与所述出接口对应的缓存中保存对应于所 述报文封装格式的报文头; 获取原始报文的载荷地址; 基于所述原始报文的载荷地址以及所述缓存的地址,在所述出接口发送对应于所述报 文封装格式的报文。
2. 根据权利要求1所述的方法,其特征在于,所述在出接口发送对应于所述报文封装 格式的报文包括:在所述出接口以单报文多地址方式发送对应于所述报文封装格式的报 文; 该方法还包括: 当所述出接口发送报文完毕后,释放所述与出接口对应的缓存。
3. 根据权利要求1所述的方法,其特征在于,进一步包括: 基于出接口的数目确定报文复制份数,并设置初始值为所述报文复制份数的引用计数 器; 每个出接口在完成报文发送后分别将所述引用计数器减1 ; 当所述引用计数器为零时,释放所述原始报文的存储空间。
4. 根据权利要求1-3中任一项所述的方法,其特征在于,所述获取原始报文的载荷地 址包括: 基于接收所述原始报文的入接口的类型确定原始报文格式; 根据所述原始报文格式确定原始报文的报文头长度; 将所述原始报文的报文头起始位置向后偏移所述报文头长度的位置,确定为所述原始 报文的载荷地址。
5. 根据权利要求1-3中任一项所述的方法,其特征在于,所述报文封装格式包括:电气 和电子工程师协会IEEE 802. 3格式、控制的无线接入点和配置协议CAPWAP格式、通用路由 封装GRE格式或第二层隧道协议L2TP格式。
6. -种报文复制装置,其特征在于,包括: 报文头缓存模块,用于基于出接口的类型确定报文封装格式,并在与所述出接口对应 的缓存中保存对应于所述报文封装格式的报文头; 载荷地址获取模块,用于获取原始报文的载荷地址; 报文发送模块,用于基于所述原始报文的载荷地址以及所述缓存的地址,在所述出接 口发送对应于所述报文封装格式的报文。
7. 根据权利要求6所述的报文复制装置,其特征在于, 报文发送模块,用于在所述出接口以单报文多地址方式发送对应于所述报文封装格式 的报文;该装置还包括: 缓存释放模块,用于当所述出接口发送报文完毕后释放所述与出接口对应的缓存。
8. 根据权利要求6所述的报文复制装置,其特征在于,还包括: 计数器设置模块,用于基于出接口的数目确定报文复制份数,并设置初始值为所述报 文复制份数的引用计数器,其中每个出接口在完成报文发送之后分别将所述引用计数器减 1 ; 原始报文释放模块,用于当所述引用计数器为零时,释放所述原始报文的存储空间。
9·根据权利要求6-8中任一项所述的报文复制装置,其特征在于, 载荷地址获取模块,用于基于接收所述原始报文的入接口的类型确定原始报文格式; 根据所述原始报文格式确定报文头;将所述原始报文的报文头起始位置向后偏移所述报文 头长度的位置,确定为所述原始报文的载荷地址。
10.根据权利要求6-8中任一项所述的报文复制装置,其特征在于,所述报文封装格式 包括:IEEE 802. 3格式、控制的无线接入点和配置协议CAPWAP格式、通用路由封装GRE格 式或第二层隧道协议L2TP格式。
【文档编号】H04L12/801GK104219158SQ201410445607
【公开日】2014年12月17日 申请日期:2014年9月3日 优先权日:2014年9月3日
【发明者】郭玮维, 刘雅彬 申请人:杭州华三通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1