一种传输数据包的方法及装置转让专利

申请号 : CN200810179102.9

文献号 : CN101414973B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 汪斌强黄万伟兰巨龙马海龙李丹黄惠群于婧王晶申娟

申请人 : 中国人民解放军信息工程大学

摘要 :

本发明公开了一种传输数据包的方法及装置,所述方法包括:在一级缓存侧,将接收到的数据包缓存至一级缓存,并将所述数据包的出端口信息转换为输出控制信息,所述输出控制信息包括数据包的复制次数和输出端口信息;在二级缓存侧:二级缓存从所述一级缓存中顺序读取数据包,所述二级缓存中的二级第一缓存和二级第二缓存根据复制次数,将当前读取到的数据包交替输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将所述数据包输出至相应的输出端口。根据本发明实施例的方法,通过二级主备缓存交替输出数据包的方法,只有一个主要的缓存数据包的等待队列,因此大大节约了硬件的内部存储资源,并且该实现方法具有很强的可移植性。

权利要求 :

1.一种传输数据包的方法,其特征在于,包括:

在一级缓存侧:

将接收到的数据包缓存至一级缓存,并将所述数据包的出端口信息转换为输出控制信息,所述输出控制信息包括数据包的复制次数和输出端口信息;

在二级缓存侧:

二级缓存从所述一级缓存中顺序读取数据包,所述二级缓存中的二级第一缓存和二级第二缓存根据所述复制次数,将当前读取的数据包交替输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息将数据包输出至相应的输出端口,直至对所述当前读取的数据包输出完毕。

2.根据权利要求1所述的方法,其特征在于,所述二级第一缓存根据所述复制次数和输出端口信息,将当前读取的数据包输出至封装处理模块,具体包括:二级第一缓存根据所述复制次数判断所述当前读取的数据包是否需要复制,如果是,则依据复制次数和输出端口信息输出并备份所述数据包,如果否,则二级第一缓存直接将所述当前读取的数据包输出至封装处理模块,并告知所述二级第二缓存从一级缓存中读取下一个需要输出的数据包。

3.根据权利要求2所述的方法,其特征在于,所述备份所述数据包,具体包括:将当前读取的数据包备份至二级第二缓存;

将所述数据包的复制次数减1。

4.根据权利要求1所述的方法,其特征在于,所述二级第二缓存根据所述复制次数和输出端口信息,将当前读取的数据包输出至封装处理模块,具体包括:二级第二缓存根据所述复制次数判断所述当前读取的数据包是否需要复制,如果是,则依据复制次数和输出端口信息输出并备份所述数据包,如果否,则二级第二缓存直接将所述当前读取的数据包输出至封装处理模块,并告知所述二级第一缓存从一级缓存中读取下一个需要输出的数据包。

5.根据权利要求4所述的方法,其特征在于,所述备份所述数据包具体包括:将当前读取的数据包备份至二级第一缓存;

将所述数据包的复制次数减1。

6.根据权利要求1所述的方法,其特征在于,所述输出控制信息以输出控制列表的形式进行保存。

7.一种传输数据包的装置,其特征在于,包括:

一级缓存,用于对接收到的数据包进行缓存,并将所述数据包的出端口信息转换为输出控制信息,所述输出控制信息包括数据包的复制次数和输出端口;

二级第一缓存,用于从所述一级缓存中顺序读取数据包,并和二级第二缓存根据所述复制次数,将当前读取的数据包交替输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口;

二级第二缓存,用于从所述一级缓存中读取数据包,并和二级第一缓存根据所述复制次数,将当前读取的数据包交替输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口。

8.根据权利要求7所述的装置,其特征在于,所述二级第一缓存具体包括:第一判断模块,用于根据所述复制次数判断所述数据包是否需要复制;

第一输出备份模块,用于当所述第一判断模块的结果为是时,依据复制次数和输出端口信息输出并备份所述数据包;

第一输出模块,用于当所述判断模块的结果为否时,直接将当前读取的数据包输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口;

第一告知模块,用于当所述判断模块的结果为否时,告知所述二级第二缓存从一级缓存中读取下一个需要输出的数据包。

9.根据权利要求8所述的装置,其特征在于,所述第一输出备份模块具体包括:第一输出子模块,用于依据复制次数将所述数据包输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口;

第一备份子模块,用于将所述数据包备份至二级第二缓存;

第一计算子模块,用于将所述数据包的复制次数减1。

10.根据权利要求7所述的装置,其特征在于,所述二级第二缓存具体包括:第二判断模块,用于根据所述复制次数判断所述数据包是否需要复制;

第二输出备份模块,用于当所述第二判断模块的结果为是时,依据复制次数和输出端口信息输出并备份所述数据包;

第二输出模块,用于当所述第二判断模块的结果为否时,直接将当前读取的数据包输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口;

第二告知模块,用于当所述判断模块的结果为否时,告知所述二级第一缓存从一级缓存中读取下一个需要输出的数据包。

11.根据权利要求10所述的装置,其特征在于,所述第二输出备份模块具体包括:第二输出子模块,用于依据所述复制次数将所述数据包输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口;

第二备份子模块,用于将所述数据包备份至二级第一缓存;

第二计算子模块,用于将所述数据包的复制次数减1。

说明书 :

一种传输数据包的方法及装置

技术领域

[0001] 本发明涉及网络数据传输领域,尤其涉及一种传输数据包的方法及装置。 背景技术
[0002] 在网络数据的传输过程中,数据包按照接收者和发送者之间的连接方式可以分为单播包和组播包,单播包的查表关键字为目的IP地址,单播包的目的出端口只有一个,组播包的查表关键字为组播IP地址,组播的出端口可能不只一个,则输出端口可能在不同的线卡板上,或则在同一线卡板的多个不同输出端口上,因此组播包的传输过程就涉及到不同线卡板之间和同一线卡板上不同输出端口之间的包复制过程。板间的组播复制过程由专门的交换板完成,本发明不涉及,本方明装置主要针对同一线卡板上不同输出端口的组播复制过程,采用一个出端口列表表示该组播包所有要输出的端口,参考表1所示。在表1中,当出端口的对应值为1时,表明数据包从该端口输出,当数据包为单播包时,只有一个出端口的对应值为1,当数据包为组播包时,则出端口的对应值有几个1,则相应的组播包就需要被复制几次。
[0003]出端口15 出端口14 出端口13 …… 出端口1 出端口0
0/1 0/1 0/1 …… 0/1 0/1
[0004] 表1
[0005] 在数据包的传输过程中,当接收到的数据包只有单播包时,就以单通道流水线将单播包送封装处理模块进行链路层处理,所述封装处理模块可以是前端帧封装处理模块;当数据包是组播包时,则需要采用组播复制的方式传输组播包。在组播复制的过程中,需要根据外部物理端口建立同等个数的内部逻辑等待队列,,去往同一外部物理端口的数据包(单播包和组播包)都存储在与其对应的同一内部逻辑等待队列中,当组播包到达以后,该组播包被复制的次数等同于出端口列表中有效位个数,通过同时向出端口列表中对应为1的所有等待队列中写入该数据包,从而实现组播包的复制过程。
[0006] 以10xGE线卡板为例,该线卡板同时支持10个千兆以太网输入输出端口,则在组播复制的过程中,内部必须要建立10个缓存队列,每个缓存队列依次对应外部的一个物理输出端口。在数据包传输过程中,当接收到单播包时,根据其输出端口号,将其放入与外部物理输出端口对应的内部逻辑队列中,当接收到组播包时,将复制后的组播包写入到其输出端口列表对应的多个内部缓存队列中。由于数据包由统一的前端帧封装处理模块进行二层封装处理,各等待队列和前端帧封装处理模块以总线的方式互连,各队列必须竞争总线的控制权才可向前端帧封装处理模块发送数据包,通常采用各队列轮流占用总线控制权,因此,需要对数据包的传输采用轮询策略进行相应的调度。所述轮询策略即是每次都需要询问已经建立的内部逻辑队列是否有数据包输出,在采用轮询策略调度的过程中,取得总线控制权的等待队列才输出数据包,其它队列处于等待状态。
[0007] 从上述过程可以看出,在传输数据包的过程中,内部所例化的逻辑等待队列的个数等于外部物理端口的数量,单播包只写入其要输出的物理端口所对应的等待队列,而对于组播包来讲,虽然其所承载的报文内容相同,但是由于它们的外部物理输出端口不同,需要放在不同的内部逻辑等待队列中,同一内容占用不同的等待队列,从而浪费了器件内部缓存资源。由于事先设计的内部等待队列数等同于外部的物理端口数,因此不管是传输单播包,还是在内部逻辑多队列中同时缓存报文内容相同的组播包,当数据包的复制次数小于内部逻辑队列的个数时,都浪费了当前用于例化该逻辑缓存的内部硬件存储资源;进一步的,用户不一定同时使用所有的物理端口,则未用的物理端口所对应的内部逻辑队列中就不会存储数据包,因此,就存在一些内部逻辑队列就一直处于空闲状态,若采用简单的轮询策略,这些空闲队列也参与总线仲裁则浪费了处理时间;再者,外部的物理端口数决定了内部逻辑等待队列的数目,则对不同接入类型的线卡板,其内部的组播复制和队列调度处理模块也就不一样,使得该组播复制的方法不具有开放性,该处理流程的可移植性比较差,不能同时兼容多个不同类型的线卡板类型。

发明内容

[0008] 本发明实施例提供一种传输数据包的方法及装置,以解决现有技术在传输数据包的过程中浪费内部硬件的存储资源的问题,进一步的,还可以解决可移植性差的问题。 [0009] 为解决上述技术问题,本发明实施例提供了一种传输数据包的方法,包括: [0010] 在一级缓存侧:
[0011] 将接收到的数据包缓存至一级缓存,并将所述数据包的出端口信息转换为输出控制信息,所述输出控制信息包括数据包的复制次数和输出端口信息;
[0012] 在二级缓存侧:
[0013] 二级缓存从所述一级缓存中顺序读取数据包,所述二级缓存中的二级第一缓存和二级第二缓存根据所述复制次数,将当前读取的数据包交替输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息将数据包输出至相应的输出端口,直至对所述当前读取的数据包输出完毕。
[0014] 优选的,所述二级第一缓存根据所述复制次数和输出端口信息,将当前读取的数据包输出至封装处理模块,具体包括:
[0015] 二级第一缓存根据所述复制次数判断所述当前读取的数据包是否需要复制,如果是,则依据复制次数和输出端口信息输出并备份所述数据包,如果否,则二级第一缓存直接将所述当前读取的数据包输出至封装处理模块,并告知所述二级第二缓存从一级缓存中读取下一个需要输出的数据包。
[0016] 优选的,所述备份所述数据包,具体包括:
[0017] 将当前读取的数据包备份至二级第二缓存;
[0018] 将所述数据包的复制次数减1。
[0019] 优选的,所述二级第二缓存根据所述复制次数和输出端口信息,将当前读取的数据包输出至封装处理模块,具体包括:
[0020] 二级第二缓存根据所述复制次数判断所述当前读取的数据包是否需要复制,如果是,则依据复制次数和输出端口信息输出并备份所述数据包,如果否,则二级第二缓存直接将所述当前读取的数据包输出至封装处理模块,并告知所述二级第一缓存从一级缓存中读取下一个需要输出的数据包。
[0021] 优选的,所述备份所述数据包具体包括:
[0022] 将当前读取的数据包备份至二级第一缓存;
[0023] 将所述数据包的复制次数减1。
[0024] 优选的,所述输出控制信息以输出控制列表的形式进行保存。 [0025] 本发明实施例还提供了一种传输数据包的装置,包括:
[0026] 一级缓存,用于对接收到的数据包进行缓存,并将所述数据包的出端口信息转换为输出控制信息,所述输出控制信息包括数据包的复制次数和输出端口; [0027] 二级第一缓存,用于从所述一级缓存中顺序读取数据包,并和二级第二缓存根据所述复制次数,将当前读取的数据包交替输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口;
[0028] 二级第二缓存,用于从所述一级缓存中读取数据包,并和二级第一缓存根据所述复制次数,将当前读取的数据包交替输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口。
[0029] 优选的,所述二级第一缓存具体包括:
[0030] 第一判断模块,用于根据所述复制次数判断所述数据包是否需要复制; [0031] 第一输出备份模块,用于当所述第一判断模块的结果为是时,依据复制次数和输出端口信息输出并备份所述数据包;
[0032] 第一输出模块,用于当所述判断模块的结果为否时,直接将当前读取的数据包输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口;
[0033] 第一告知模块,用于当所述判断模块的结果为否时,告知所述二级第二缓存从一级缓存中读取下一个需要输出的数据包。
[0034] 优选的,所述第一输出备份模块具体包括:
[0035] 第一输出子模块,用于依据复制次数将所述数据包输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口; [0036] 第一备份子模块,用于将所述数据包备份至二级第二缓存;
[0037] 第一计算子模块,用于将所述数据包的复制次数减1。
[0038] 优选的,所述二级第二缓存具体包括:
[0039] 第二判断模块,用于根据所述复制次数判断所述数据包是否需要复制; [0040] 第二输出备份模块,用于当所述第二判断模块的结果为是时,依据复制次数和输出端口信息输出并备份所述数据包;
[0041] 第二输出模块,用于当所述第二判断模块的结果为否时,直接将当前读取的数据包输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口;
[0042] 第二告知模块,用于当所述判断模块的结果为否时,告知所述二级第一缓存从一级缓存中读取下一个需要输出的数据包。
[0043] 优选的,所述第二输出备份模块具体包括:
[0044] 第二输出子模块,用于依据所述复制次数将所述数据包输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口; [0045] 第二备份子模块,用于将所述数据包备份至二级第一缓存;
[0046] 第二计算子模块,用于将所述数据包的复制次数减1。
[0047] 与现有技术相比,本发明具有以下优点:
[0048] 在本发明中,采用一级缓存将接收到的数据包进行缓存,并将所述数据包的出端口信息转换为输出控制信息,所述输出控制信息包括数据包的复制次数和输出端口信息;二级缓存可以从所述一级缓存中读取数据包,并且所述二级缓存包括二级第一缓存和二级第二缓存,所述二级第一缓存和二级第二缓存可以根据所述复制次数和输出端口信息,将当前读取的数据包交替输出至封装处理模块,直至对所述当前读取的数据包输出完毕。可以看出,运用本发明的方法,无需针对外部物理端口建立内部逻辑缓存队列,而是对数据包进行流水处理,这种采用两级缓存的方式实现数据包的传输,将内部缓存对数据包的存储和复制的两个功能分开,一级缓存主要用于存储输入的数据包,二级缓存主要用于实现包复制过程,其存储空间可设计得很小,只需存储一个最大包即可,因而该实现方法中只有一级缓存这个大的等待队列,因此大大节约了片内硬件的缓存资源。

附图说明

[0049] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0050] 图1是本发明的传输数据包的方法实施例一的流程图;
[0051] 图2是本发明的传输数据包的方法实施例二的流程图;
[0052] 图3是本发明的传输数据包的方法实施例三的流程图;
[0053] 图4是本发明的传输数据包的装置实施例一的结构示意图;
[0054] 图5是本发明的传输数据包的装置实施例二的结构示意图;
[0055] 图6是本发明的传输数据包的装置实施例三的结构示意图。

具体实施方式

[0056] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0057] 为使本发明实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明实施例作进一步详细的说明。
[0058] 本发明的核心构思之一在于,将内部缓存对数据包的存储和复制两个功能分开,即是采用两级缓存的形式实现数据包的临时存储和多次复制。其中,一级缓存是真正意义上的缓存,用于存储陆续接收到的数据包,并将所述数据包的出端口信息转换为输出控制信息,所述输出控制信息包括数据包的复制次数和输出端口;二级缓存包括二级第一缓存和二级第二缓存,可以从所述一级缓存中顺序读取数据包,二级第一和第二缓存每次只存储当 前正被复制的数据包,只有当前数据包复制完成以后,才由二级第一缓存或者二级第二缓存从一级缓存中读取下一个需要输出的数据包,并且二级第一缓存和二级第二缓存可以根据所述复制次数,将当前读取的数据包交替输出至封装处理模块,并由封装处理模块根据各数据包的输出端口信息,对数据包进行二层帧封装处理并输出至相应的输出端口,直至对所述当前读取的数据包输出完毕。在本发明中,所述一级缓存的控件可以设置得比较大,用于缓存后续的多个数据包;并采用二级第一缓存和二级第二缓存交替的方式,根据数据包的复制次数将数据包经由封装处理模块输出至相应的输出端口。本发明采用两级缓存的方式实现组播数据包的多次复制和输出,不同于现有技术中的针对出外部物理端口建立内部逻辑缓存队列,本发明中只有一个等待队列,因此其内存管理简单,能达到节约片内硬件缓存资源的目的;同时该方法不依赖于外部具体的物理接口数,其具有很强的可移植性。
[0059] 参考图1,在本发明实施例一中,实现本发明实施例一所提供的方法可以包括以下步骤:
[0060] 步骤101:一级缓存将接收到的数据包进行缓存,并将所述数据包的出端口信息转换为输出控制信息;
[0061] 其中,所述数据包的出端口信息可以参考表1所示的信息,所述输出控制信息可以包括数据包的复制次数和输出端口;当复制次数为1的时候,该数据包为单播包,当复制次数大于1时,该数据包为组播包,并且复制次数的大小等于输出端口的个数; [0062] 可以理解的是,在一级缓存侧将接收到的数据包进行缓存后,如果二级缓存已经将该数据包获取,则一级缓存可以继续缓存后续的数据包,在一级缓存侧进行缓存的步骤可以和二级缓存侧的步骤同时进行;
[0063] 步骤102:二级第一缓存从所述一级缓存中读取数据包,并获取所述数据包的输出控制信息;
[0064] 需要说明的是,二级缓存在本发明中设置为两个,可以任意设置其中一个为二级第一缓存,则另一个为二级第二缓存,二级主备缓存所能完成的功能是完全一样的,因此,二级缓存中的任意一个都可以是二级 第一缓存;
[0065] 步骤103:二级第一缓存根据所述复制次数判断所述数据包是否需要复制,如果是,进入步骤104,如果否,进入步骤106;
[0066] 所述二级第一缓存进行判断的过程,即是读取所述输出控制信息的过程,当获取到所述输出控制信息中的复制次数和输出端口信息时,就可以知道数据包是单播包还是组播包;当数据包是单播包时,说明该数据包并不需要复制,当数据包是组播包时,需要按照复制次数的多少对该组播包进行复制和输出;
[0067] 步骤104:二级第一缓存将所述数据包备份所述数据包至二级第二缓存,以便于二级第二缓存用于下一次的数据包输出,进入步骤105;
[0068] 当数据包是组播包时,因为二级第一缓存在输出后并不会再有该组播包,因此二级第一缓存将当前数据包备份至二级第二缓存,以便于二级第二缓存在输出该组播包的时候可以直接按照输出端口进行输出;
[0069] 步骤105:二级第一缓存将所述数据包输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口,并将所述数据包的复制次数减1,二级第二缓存开始进行该数据包的后续输出任务;
[0070] 二级第一缓存将该组播包输出至相应的输出端口,并将该数据包的复制次数减1,说明该组播包已经完成了某一个输出端口的输出任务;其中,步骤104和步骤105之间也可以同时进行,并不影响本发明的实现;二级第二缓存开始进行该组播包的第二次复制,以及进行和二级第一缓存一样的备份和输出工作;需要说明的是,所述封装处理模块为前端帧封装处理模块,所述前端帧封装处理模块根据数据包的输出端口信息,可以对数据包进行二层帧封装处理,并输出至相应的输出端口;
[0071] 步骤106:二级第一缓存直接将所述数据包输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口,进入步骤107; [0072] 当数据包是单播包时,二级第一缓存无需备份该单播包,则直接从一级缓存中读取所述单播包,并将该单播包输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,输出至相应的输出端口;
[0073] 步骤107:二级第二缓存从所述一级缓存中读取下一个需要输出的数据包。 [0074] 当二级第一缓存将单播包输出至相应的输出端口后,所述二级第二缓存则从所述一级缓存中读取下一个需要输出的数据包,以执行后续的数据包的输出任务。其中,步骤106~步骤107的流程,即是当数据包为单播包的时候,两级缓存之间进行数据包输出的过程。
[0075] 可以看出,在本发明实施例中,一级缓存可以对接收到的数据包进行缓存,并且可以将所述数据包的出端口信息转换为输出控制信息,所述输出控制信息包括复制次数以及该数据包的输出端口信息;需要说明的是,将出端口信息转换为所述输出控制信息需要花费多个内部时钟周期,在前一个数据包的信息转换过程中,如果一级缓存中又有下一个数据包写入,则可以同时处理下一个数据包的信息转换;同时,可以理解的是,在前一个数据包的组播复制过程当中,如果后一个数据包的输出控制信息已经生成,则可以将后一个数据包的输出控制信息进行缓存,等到二级第一缓存或者二级第二缓存对当前组播包进行最后一次复制时,再读取所述一级缓存的下一个数据包,并同时提取的该数据包的输出控制信息,获取该数据包的输出方式。
[0076] 需要说明的是,在本方法实现的数据包传输过程中,缓存至一级缓存的每一个数据包都有其对应的输出控制信息,只要两者一一对应,在二级缓存进行主备交替输出数据包的过程中就不会出现错包现象;同时,在实际应用中还可以对一级缓存设定阈值,用于表明一级缓存的满状态,所述满状态可以指示其剩余的存储空间不够存储一个后续的最大数据包,以避免后续缓存数据包时在该数据包并未完全缓存时,就使得一级缓存的实际存储空间被写满,导致该数据包只被缓存了部分内容,以至于出现错包现象。 [0077] 运用本实施例所述的方法,可以看出,在传输数据包的过程中,通过二级主备缓存交替输出数据包的方法,只有一个一级缓存数据包的等待队列,二级缓存空间只需设得很小,因此与现有技术中多个内部逻辑等待队列都需要大的缓存空间相比,大大节约了硬件的内部存储资源,同时,因为只有一个一级缓存需要大的缓存空间,所以其容量可以设得 比较大,用于缓存突发的数据包,采用较长的缓存队列更易于减少由于组播数据突发造成的丢包现象,进一步提高了系统的整体传输性能。
[0078] 参考图2,在本发明实施例二中,实现本发明实施例二所提供的方法可以包括以下步骤:
[0079] 步骤201:一级缓存将接收到的数据包进行缓存,并将所述数据包的出端口信息转换为输出控制列表;
[0080] 在实际应用中,具体的输出控制信息可以采用列表的形式进行展示,参考表2,为本实施例中具体的数据包的输出控制列表;每个数据包可以对应一个68位宽的输出控制列表,其中,每四位可以表示一个1~16的数字,第67~63位用于表示复制次数,在所述输出控制列表中,当数据包为组播包时,复制次数表示当前数据包将要被复制几次,出端口号表示连续复制出的数据包的输出端口,大于复制次数以后的出端口号无效,用NULL来表示,当数据包为单播包时,其复制的次数为1,即只有其第一个出端口号才有意义,其他表示位无效;在表2中,可以看出,复制次数的大小为3,输出端口分别是,6、11和15;所述输出控制列表可以保存在输出控制列表缓存中;
[0081]67-64 63-60 59-56 55-52 51-48 …… 3-0
数据包1 3 6 11 15 null …… null
[0082] 表2
[0083] 步骤202:二级第一缓存从输出控制列表中获取当前数据包的输出控制信息,从根据所述复制次数判断得出所述数据包需要复制3次;
[0084] 步骤203:二级第一缓存从一级缓存中读取数据包并经由封装处理模块输出至端口号为6的第一个输出端口,并将所述数据包备份至二级第二缓存,同时将复制次数减1; [0085] 步骤204:二级第二缓存根据备份结果将所述数据包经由封装处理模块输出至端口号为11的第二个输出端口,并备份至二级第一缓存,同时将复制次数减1; [0086] 步骤205:二级第一缓存根据备份结果经由封装处理模块将所述数据 包输出至端口号为15的第三个输出端口;
[0087] 步骤206:二级第一缓存依据当前复制次数为1,判断得出当前输出操作为最后一次,则不再备份数据包,并告知二级第二缓存从一级缓存中继续读取数据包; [0088] 步骤207:二级第二缓存从所述一级缓存中重新读取下一个需要输出的数据包。 [0089] 在本实施例中,采用二级两个缓存互相切换的方式实现数据包的传输,可以在传输组播包的时候,避免有多个等待队列时的调度处理,尤其在外部端口的密度比较大时,更有利于组播包复制过程的快速实现,其实现过程并不依赖于外部的物理端口数,并且其实现效率与各外部端口的使用情况无关,具有很强的可移植性。同时,本发明在传输单播包的时候,由二级第一缓存或者二级第二缓存直接将所述单播包传输至封装处理模块,简便快捷地可以将数据包输出至目标地址,节约了片内的大量硬件存储资源。因此,运用本发明的方法时,可以在选择可用的硬件可编程逻辑器件(FPGA)时更具有灵活性,不必过多考虑所选器件的内部硬件缓存资源。
[0090] 需要说明的是,在本发明实施例中,所述二级缓存的容量可以相对较小,其空间大小可以存储当前一个最大的数据包即可。采用一级缓存和二级缓存的方式,一级缓存仅仅用于数据包的缓存,而二级第一第二缓存之间可以交替地输入输出数据包,其中一个输出数据包时可以备份该数据包至另一个二级缓存,用于下一次的传输,使得数据包的输出和备份同时进行,因此前后的复制过程不需要等待,从而可以节约大量的时间;再者,本发明实施例的方法,可以无需过多考虑不同端口数的的线卡板之间的差异,可移植性较好,可以同时兼容多个不同类型的线卡板。
[0091] 参考图3,在本发明实施例三中,实现本发明实施例三所提供的方法可以包括以下步骤:
[0092] 步骤301:在一级缓存侧,将接收到的数据包进行缓存,并将所述数据包的出端口列表转换为输出控制列表;
[0093] 在本实施例中,假设实际中的出端口列表为表3所示:
[0094]出端口16 出端口15 出端口14 …… 出端口2 出端口1
1 1 0 …… 0 0
[0095] 表3
[0096] 则转换后的输出控制列表为表4所示:
[0097]67-64 63-60 59-56 55-52 51-48 …… 3-0
数据包N 2 15 14 Null null …… null
[0098] 表4
[0099] 步骤302:二级第二缓存从所述一级缓存中读取数据包,并获取所述数据包的输出控制列表内一个时钟周期的输出控制信息;
[0100] 即是从所述输出控制列表中获取所述数据包的一行列表信息,该列表信息包括复制次数的大小,和输出端口号;
[0101] 步骤303:根据所述输出控制信息判断得知所述数据包为需要复制两次的组播包,以及输出端口信息;
[0102] 所述二级第二缓存依据获取到的输出控制信息可以判断得知,所述数据包为组播包,需要复制两次,输出端口号为15和16;
[0103] 步骤304:所述二级第二缓存经由封装处理模块将所述组播包输出至第一个输出端口,并备份至所述二级第一缓存,将所述组播包的复制次数减1;
[0104] 所述二级第二缓存将所述数据包输出至第一个输出端口后,将所述组播包的复制次数减1;
[0105] 步骤305:所述二级第一缓存根据备份内容,经由封装处理模块将所述数据包输出至第二个输出端口;
[0106] 所述二级第一缓存根据输出端口信息,经由封装处理模块将所述组播包输出至第二个输出端口,并且根据当前复制次数为1,可以判断得出,无需再对该组播包进行复制,因此不再将所述组播包备份至所述二级第二缓存;
[0107] 步骤306:所述二级第二缓存从所述一级缓存中读取下一个需要输出的数据包,并执行相应的后续输出任务。
[0108] 在本实施例中,为了支持现有的各类板卡类型,将出端口列表定义为16位宽,当实际中的线卡支持16个以上的端口时,所述输出控制列表可以继续扩展,可以增加输出控制列表的位数,即是输出控制列表可以根据实际中的出端口列表进行相应的扩展;在所述输出控制列表中,每一行数据都表示一个数据包的输出控制信息,在接收到新的数据包时,可以通过新增一行数据的方式来表示该数据包的输出控制信息。
[0109] 需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
[0110] 与上述本发明实施例所提供的方法相对应,参见图4,本发明实施例还提供了一种传输数据包的装置,所述装置包括:
[0111] 一级缓存401,用于对接收到的数据包进行缓存,并将所述数据包的出端口信息转换为输出控制信息,所述输出控制信息包括数据包的复制次数和输出端口; [0112] 二级第一缓存402,用于从所述一级缓存中顺序读取数据包,并和二级第二缓存根据所述复制次数,将当前读取的数据包交替输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口;
[0113] 二级第二缓存403,用于从所述一级缓存中顺序读取数据包,并和二级第一缓存根据所述复制次数,将当前读取的数据包交替输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口。
[0114] 在本实施例中,所述装置可以分为一级缓存、二级第一缓存和二级第二缓存,所述一级缓存可以对接收到的数据包进行缓存,并将所述数据包的出端口信息转换为输出控制信息,所述输出控制信息包括数据包的复制次数和输出端口,所述二级第一缓存和二级第二缓存的功能是一 致的,都可以从所述一级缓存中读取数据包,当二级第一缓存读取到单播包的时候,就直接将该单播包输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口,当二级第一缓存读取到组播包的时候,则在输出该组播包的同时,将该组播包复制到二级第二缓存,当二级第一缓存输出完毕之后,所述二级第二缓存就可以根据备份的内容将该组播包经由封装处理模块继续输出至第二个输出端口,这样采用二级第一第二两个缓存之间互相切换的方式,大大节约了片内的硬件存储资源。
[0115] 参考图5所示,示出了本发明装置实施例二的结构示意图,如图所示,该装置可以包括:
[0116] 一级缓存501,用于对接收到的数据包进行缓存,并将所述数据包的出端口信息转换为输出控制信息,所述输出控制信息包括数据包的复制次数和输出端口; [0117] 第一判断模块502,用于根据所述复制次数判断所述数据包是否需要复制; [0118] 第一输出备份模块503,用于当所述第一判断模块的结果为是时,依据复制次数和输出端口输出并备份所述数据包;
[0119] 其中,所述第一输出备份模块具体可以包括:
[0120] 第一输出子模块5031,用于依据所述输出端口信息将所述数据包输出至相应的输出端口;
[0121] 第一备份子模块5032,用于将所述数据包备份至二级第二缓存,以便于二级第二缓存根据输出端口信息进行下一次的数据包输出;
[0122] 第一计算子模块5033,用于将所述复制次数减1;
[0123] 第一输出模块504,用于当所述判断模块的结果为否时,直接将当前读取的数据包输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口;
[0124] 第一告知模块505,用于当所述判断模块的结果为否时,告知所述二级第二缓存从一级缓存中读取下一个需要输出的数据包;
[0125] 二级第二缓存506,用于根据所述输出备份模块的备份结果,进行下 一次的数据包输出任务。
[0126] 与本发明方法实施例三相对应,参考图6所示,示出了本发明装置实施例三的结构示意图,如图所示,该装置具体可以包括:
[0127] 一级缓存601,用于对接收到的数据包进行缓存,并将所述数据包的出端口信息转换为输出控制信息,所述输出控制信息包括数据包的复制次数和输出端口; [0128] 第二判断模块602,用于根据所述复制次数判断所述数据包是否需要复制; [0129] 第二输出备份模块603,用于当所述第二判断模块的结果为是时,依据复制次数和输出端口信息输出并备份所述数据包;
[0130] 其中,所述第二输出备份模块603具体可以包括:
[0131] 第二输出子模块6031,用于依据所述复制次数将所述数据包输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口; [0132] 第二备份子模块6032,用于将所述数据包备份至二级第二缓存; [0133] 第二计算子模块6033,用于将所述数据包的复制次数减1。
[0134] 第二输出模块604,用于当所述第二判断模块的结果为否时,直接将当前读取的数据包输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口;
[0135] 第二告知模块605,用于当所述判断模块的结果为否时,告知所述二级第一缓存从一级缓存中读取下一个需要输出的数据包。
[0136] 二级第一缓存606,用于从所述一级缓存中顺序读取数据包,并和二级第二缓存根据所述复制次数,将当前读取的数据包交替输出至封装处理模块,以便于所述封装处理模块根据所述输出端口信息,将数据包输出至相应的输出端口。需要说明的是,因为前述传输数据包的方法介绍的十分详尽,所以所述传输数据包的装置实施例未详尽之处,可以参见前述对传输数据包的方法实施例的描述,在此不再对装置作详细描述。 [0137] 通过以上实施例的描述,本领域的技术人员可以清楚地了解到需要说明的是,本发明实施例不需要引入独立的功能部件,可借助软件加必 需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以执行本发明各个实施例所述的方法。这里所称的存储介质,如:ROM/RAM、磁盘、光盘等。
[0138] 需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。 [0139] 以上对本发明实施例所提供的一种传输数据包的方法及装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明实施例的方法及其思想;同时,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。