CN105516023A - 一种报文转发方法和装置 - Google Patents
一种报文转发方法和装置 Download PDFInfo
- Publication number
- CN105516023A CN105516023A CN201410494274.0A CN201410494274A CN105516023A CN 105516023 A CN105516023 A CN 105516023A CN 201410494274 A CN201410494274 A CN 201410494274A CN 105516023 A CN105516023 A CN 105516023A
- Authority
- CN
- China
- Prior art keywords
- message
- spatial cache
- pointer
- ram
- forwarding
- 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
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种报文转发方法和装置,属于通信技术领域。所述方法包括:获取对报文的转发指令;从报文的缓存空间链表中获取报文的头指针;从报文的头指针对应的第一类缓存空间中,读取报文的第一部分报文数据,并获取多个指针;根据多个指针,获取多个第二类缓存空间;从多个第二类缓存空间中,并行读取第一部分报文数据外的多个部分的报文数据;读取到完整的报文数据后,转发报文。本发明通过一次读取就可以读取报文的完整数据并完成报文的转发,避免了传统的报文缓存空间链表读取报文时延较长的缺陷。
Description
技术领域
本发明涉及通信技术领域,特别涉及一种报文转发方法和装置。
背景技术
传统的交换机以及路由器等具有报文转发和流量监控功能的装置,都可以将报文向介质访问控制(英文:mediaaccesscontrol,缩写:MAC)地址表中记录的目的地址对应的端口转发,被转发的队列中的报文一般都缓存在交换机设置的随机存取存储器(英文:random-accessmemory,缩写:RAM)中。
通常的报文转发的实现方案中,可以通过队列链表和缓存空间链表管理RAM缓存空间中待转发的队列中的报文。其中,队列链表按照报文的入队顺序记录各报文的头指针,先入队的报文的头指针只记录有紧跟它入队的下一个队列的报文的头指针,以此来记录队列中报文的转发顺序。每个缓存在RAM中的报文都具有各自的缓存空间链表,缓存空间链表中记录了缓存该报文数据的所有缓存空间对应的指针。缓存空间链表的任意指针对应的缓存空间中只记录有该指针的下一个缓存空间链表指针,每个缓存空间链表指针都对应一块缓存空间。在转发缓存在RAM中的队列中的报文时,交换机中设置的用于转发报文的现场可编程门阵列(英文:field-programmablegatearray,缩写:FPGA)芯片只能根据该报文的缓存空间链表指针的顺序先获取存储该报文的第一个RAM缓存空间地址并读取缓存数据,然后再获取存储该报文的第二个RAM缓存空间地址并读取缓存数据,依此类推,直到读取报文的完整数据,然后将读取的报文转发。在完成一个报文的转发后,根据队列链表中报文的顺序,获取下一个报文的头指针,按照以上的描述,再将该报文读取并转发,直到将队列中的报文全部转发出去。
读取报文的过程中,由于RAM芯片的特性,在获取存储该报文的相邻的两个RAM缓存空间地址之间会有时延,若报文较大导致缓存该报文的缓存空间较多,那么就会在读取报文的过程中产生较大的时延,而这会严重影响网络的性能,为了减小时延对网络性能的影响,一般采用四倍数据倍率同步动态随机存储器(英文:QuadDataRatesynchronousdynamicrandom-accessmemory,缩写:QDRSDRAM)芯片来存储队列链表和缓存空间链表。QDRSDRAM芯片虽然读取速度快、可以减小时延,但是QDRSDRAM的存储空间较小且成本极高,在现阶段不能够大规模的使用,实用性较低。
发明内容
为了解决上述的问题,本发明实施例提供了一种报文转发方法和装置。所述技术方案如下:
第一方面,本发明实施例提供了一种报文转发方法,所述方法包括:
获取对报文的转发指令,所述报文有缓存空间链表,所述缓存空间链表包括所述报文的所有指针,所述报文的所有指针中的头指针对应的第一类缓存空间中记录有所述报文的第一部分报文数据和多个第二类缓存空间对应的多个指针,所述多个第二类缓存空间分别缓存所述报文的所述第一部分报文数据外的多个部分的报文数据;
从所述报文的缓存空间链表中获取所述报文的头指针;
从所述报文的头指针对应的所述第一类缓存空间中,读取所述报文的所述第一部分报文数据,并获取所述多个指针;
根据所述多个指针,获取所述多个第二类缓存空间;
从所述多个第二类缓存空间中,并行读取所述第一部分报文数据外的所述多个部分的报文数据;
读取到完整的报文数据后,转发所述报文。
在第一方面的第一种可能的实现方式中,在获取对报文的转发指令之前,所述方法还包括:
接收所述报文;
确定用于缓存所述报文的RAM的空间是否已满;
若确定所述RAM的空间未满,则从所述RAM中获取多个空闲缓存空间对应的指针;
根据多个空闲缓存空间对应的指针,生成所述报文的缓存空间链表;
根据生成的所述缓存空间链表,将接收到的所述报文缓存到多个空闲缓存空间中,其中,所述多个空闲缓存空间包括第一类缓存空间和多个所述第二类缓存空间;
将所述报文的所述缓存空间链表的头指针连接到所述报文所在队列的队列链表中。
结合第一方面以及第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述方法还包括:
若确定所述RAM的空间已满,则丢弃所述报文。
结合第一方面的第一种可能的实现方式,在第三种可能的实现方式中,在所述判断所述RAM的空间是否已满步骤中:
若所述RAM中缓存的报文占用的缓存空间数量小于预先设定的阈值,则确定所述RAM未满。
结合第一方面的第一种可能的实现方式,在第四种可能的实现方式中,所述队列链表和所述缓存空间链表存储在所述RAM中。
第二方面,本发明实施例提供了一种报文转发装置,所述装置包括:
第一获取模块,用于获取对报文的转发指令,所述报文有缓存空间链表,所述缓存空间链表包括所述报文的所有指针,所述报文的所有指针中的头指针对应的第一类缓存空间中记录有所述报文的第一部分报文数据和多个第二类缓存空间对应的多个指针,所述多个第二类缓存空间分别缓存所述报文的所述第一部分报文数据外的多个部分的报文数据;
第二获取模块,用于从所述报文的缓存空间链表中获取所述报文的头指针;
第三获取模块,用于从所述报文的头指针对应的所述第一类缓存空间中,读取所述报文的所述第一部分报文数据,并获取所述多个指针;
第四获取模块,用于根据所述多个指针,获取所述多个第二类缓存空间;
读取模块,用于从所述多个第二类缓存空间中,并行读取所述报文的所述第一部分报文数据外的所述多个部分的报文数据;
转发模块,用于读取到完整的报文数据后,转发所述报文。
在第二方面的第一种可能的实现方式中,所述装置还包括:
接收模块,用于接收所述报文;
判断模块,用于确定用于缓存所述报文的RAM的空间是否已满;
第一处理模块,用于若确定所述RAM的空间未满,则从所述RAM中获取多个空闲缓存空间对应的指针;
第二处理模块,用于根据多个空闲缓存空间对应的指针,生成所述报文的缓存空间链表;
缓存模块,用于根据生成的所述缓存空间链表,将接收到的所述报文缓存到多个空闲缓存空间中,其中,所述多个空闲缓存空间包括所述第一类缓存空间和多个所述第二类缓存空间;
存储模块,用于将所述报文的所述缓存空间链表的头指针连接到所述报文所在队列的队列链表中。
结合第二方面以及第二一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述装置还包括:第三处理模块,用于若确定所述RAM的空间已满,则丢弃所述报文。
结合第二方面的第一种可能的实现方式,在第三种可能的实现方式中,在所述判断模块中:
若所述RAM中缓存的报文占用的缓存空间数量小于预先设定的阈值,则说明所述RAM未满。
结合第二方面的第一种可能的实现方式,在第四种可能的实现方式中,所述队列链表和所述缓存空间链表存储在RAM中。
本发明实施例提供的技术方案带来的有益效果是:
本发明实施例提供了一种报文转发方法和装置,通过从报文的缓存空间链表中获取报文的头指针,报文的头指针中记录有缓存报文其余部分的第二类缓存空间对应指针,可以使缓存到RAM中的报文被转发时,可以仅通过读取报文的头指针就可以获取报文的头指针对应的第一类缓存空间和第一类缓存空间中记录的多个指针对应的指针所对应的分别缓存报文的第一部分报文数据外的多个部分的报文数据的第二类缓存空间,从而并行读取完整的报文数据,在读取到完整的报文数据后,完成报文的转发,避免了传统的报文缓存空间链表读取报文时延较长的缺陷,可以使用价格低廉且存储空间大的双倍数据倍率同步动态随机存储器(英文:DoubleDataRatesynchronousdynamicrandom-accessmemory,缩写:DDRSDRAM)等RAM芯片对报文进行缓存并转发,无需使用价格昂贵且存储空间小的QDRSDRAM对缓存在RAM中的报文进行转发,降低了对缓存在RAM中的队列进行管理的成本,并提高了链表的存储空间。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的报文转发方法所涉及的一种实施环境的结构示意图;
图2是本发明实施例一提供的报文转发方法流程图;
图3是本发明实施例二提供的报文转发方法流程图;
图4是本发明实施例三提供的报文转发方法中缓存空间链表和队列链表的嵌套结构示意图。
图5是本发明实施例三提供的报文转发装置结构示意图;
图6是本发明实施例四提供的报文转发装置结构示意图;
图7是本发明实施例五提供的报文转发装置结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
除非另作定义,此处使用的技术术语或者科学术语应当为本发明所属领域内具有一般技能的人士所理解的通常意义。本发明专利申请说明书以及权利要求书中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。
对各实施例中出现的技术术语进行如下定义:
队列链表,用于按照报文的入队顺序记录各报文的头指针,先入队的报文的头指针只记录有紧跟它入队的下一个队列的报文的头指针,以此来记录队列中报文的转发顺序。
缓存空间链表,用于记录了缓存报文数据的所有缓存空间对应的指针。缓存空间链表中的每个指针都对应一块缓存空间的物理地址,因此每个指针都与一块缓存空间对应。
各实施例中所描述的指针,可以是指针本身,也可以是指针的编号。
参见图1,其示出了本发明实施例提供的报文转发方法所涉及的一种具有报文转发和流量监控的装置的结构示意图,该环境包括:拥塞管理模块100、包存储模块110、数据输出模块120和内存管理模块130。
其中,拥塞管理模块100根据当前RAM的空间是否已满判断接收的报文是否需要丢弃;包存储模块110根据报文的大小为该报文分配一定数量的空闲缓存空间,同时根据分配的空闲缓存空间对应的空闲缓存空间链表指针生成该报文的缓存空间链表,按照缓存空间链表中该报文的头指针对应的缓存空间记录的指针顺序,将报文缓存到所分配的空闲缓存空间中,在该报文的头指针对应的缓存空间中记录的多个缓存报文其余部分的缓存空间对应的指针,然后将该报文的头指针记录到该报文所在队列的队列链表的尾部,完成报文的缓存操作;在需要转发队列中的报文时,数据输出模块120从第一个报文的缓存空间链表中获取报文的头指针,从第一个报文的头指针对应的缓存空间中获取预先记录的多个缓存报文其余部分的缓存空间对应的指针,然后从报文的头指针对应的缓存空间和头指针中记录的指针对应的缓存空间中,读取报文的完整数据,并将该队列的第一个报文转发,然后根据第一个报文的头指针记录的队列中第二个需要转发的报文的头指针,找到第二个需要转发的报文的头指针,再次通过队列的第一个报文转发过程对队列中第二个需要转发的报文进行转发,以此类推,转发该队列的所有报文;内存管理模块130为包存储模块存储的报文提供RAM中的空闲缓存空间,且在某个报文转发后,回收分配给已转发报文的RAM缓存空间。
其中,拥塞管理模块100、包存储模块110、队列调度模块120、数据输出模块130和内存管理模块140都设置在转发芯片上,而该转发芯片一般都设置在具有报文转发和流量监控的装置上。其中,转发芯片是FPGA芯片或网络处理器。
实施例一
本发明实施例提供了一种报文转发方法,参见图2,方法流程包括:
步骤200、交换机的转发芯片获取对报文的转发指令,报文有缓存空间链表,缓存空间链表包括报文的所有指针,报文的所有指针中的头指针对应的第一类缓存空间中记录有报文的第一部分报文数据和多个第二类缓存空间对应的多个指针,多个第二类缓存空间分别缓存报文的第一部分报文数据外的多个部分的报文数据。
其中,所要转发的报文,可以是网络中需要转发的任意报文,存储在随机存储器(英文:random-accessmemory,缩写:RAM)中。RAM以缓存空间链表的形式存储该报文。
其中,报文的头指针是缓存空间链表中缓存报文数据的第一个缓存空间对应的指针;报文的头指针对应的第一类缓存空间中存储有:队列指针、报文描述符、多个第二类缓存空间对应的指针和报文数据。
其中,队列指针为队列中紧邻该报文进入队列的下一个报文的头指针。
步骤201、交换机的转发芯片从报文的缓存空间链表中获取报文的头指针。
具体地,交换机的转发芯片从报文的缓存空间链表中获取报文的头指针,根据获取的头指针找到对应的第一类缓存空间。
步骤202、从报文的头指针对应的所第一类缓存空间中,交换机的转发芯片读取报文的第一部分报文数据,并获取多个指针。
步骤203、根据多个指针,交换机的转发芯片获取多个第二类缓存空间。
具体地,通过从报文的头指针对应的第一类缓存空间中获取第二类缓存空间对应的多个指针,根据获取的多个指针从缓存空间列表中找到第二类缓存空间所对应的指针,根据指针找到第二类缓存空间。
步骤204、交换机的转发芯片从多个第二类缓存空间中,并行读取第一部分报文数据外的多个部分的报文数据。
具体地,由于获取到了缓存第一部分报文数据外的多个部分的报文数据的第二类缓存空间,说明已经获取到了缓存报文数据的所有缓存空间,那么就可以并行读取第二类缓存空间中的报文数据,以获取完整的报文数据。
其中,对多个第二类缓存空间中的报文数据的并行读取是指读取这些报文数据的操作相互间没有依赖性,可以在短时间内,例如几个时钟周期内,先后发起各个读取操作,并不要求严格地同时读取这些报文数据。
步骤205、读取到完整的报文数据后,交换机的转发芯片转发报文。
具体地,在交换机中的转发芯片并行读取报文数据的过程中,每次只能从缓存空间中获取报文的一部分数据,而只有在获取到完整的报文数据时,才能对报文进行转发操作,所以转发芯片就会在并行读取报文数据的过程完成,直到将完整的报文数据都读取出来后转发报文。
通过以上描述,通过从报文的缓存空间链表中获取报文的头指针,报文的头指针中记录有缓存报文其余部分的第二类缓存空间对应指针,可以使缓存到RAM中的报文被转发时,可以仅通过读取报文的头指针就可以获取报文的头指针对应的第一类缓存空间和第一类缓存空间中记录的多个指针对应的指针所对应的分别缓存报文的第一部分报文数据外的多个部分的报文数据的第二类缓存空间,从而并行读取完整的报文数据,在读取到完整的报文数据后,完成报文的转发,避免了传统的报文缓存空间链表读取报文时延较长的缺陷。
实施例二
本发明实施例提供了一种报文转发方法,参见图3,方法流程包括:
步骤300、交换机接收报文。
其中,队列中的报文,是交换机接收的等待转发的一批报文,而队列中报文的排列顺序由报文进入队列的顺序确定。
进一步地,本发明实施例的执行主体不限于是交换机,也可以是其他具有报文转发和流量监控的装置,如路由器等。
步骤301、交换机确定用于缓存报文的RAM的空间是否已满。
如果确定RAM的空间未满,则执行步骤302。
如果确定RAM的空间已满,则执行步骤303。
具体地,交换机在接收到队列中的报文数据后,会判断用于缓存队列中的报文数据的RAM的空间是否已经缓冲满了需要转发的报文。
其中,用于缓存队列中的报文数据的RAM设置在交换机中。
可选的,交换机判断RAM中缓存的报文占用的缓存空间数量是否大于等于预先设定的阈值。若确定RAM中缓存的报文数量小于预先设定的阈值,则说明RAM未满,否则说明RAM已满。
其中,预先设定的阈值是RAM空间中可以缓存的最大的报文数量。
步骤302、若确定RAM的空间未满,则交换机从RAM中获取多个空闲缓存空间对应的指针。
具体地,若确定RAM的空间未满,那么交换机根据获取到报文大小,从RAM中空闲缓存空间链表中获取多个空闲缓存空间对应的指针。
其中,交换机设置的用于缓存需要转发的报文的RAM是专门用来缓存报文的,独立于交换机的用于加载运行程序的内存。
其中,若报文数据的大小大于单位缓存空间的大小,那么说明一个缓存空间是装不下报文的全部数据的,那么需要将报文分成多个部分并分别缓存到多个RAM的缓存空间中,所以可以通过报文数据大小和单位缓存空间的大小对报文进行分块处理,然后将分块后的报文分别存储到多个缓存空间中。
其中,单位缓存空间是指预先设置的RAM中每个缓存空间的大小。
其中,获取的空闲缓存空间链表的指针数量等于获取的空闲缓存空间的数量。
步骤303、若确定RAM的空间已满,则交换机丢弃报文。
具体地,若确定RAM的空间已满,说明RAM已经没有空间缓存报文了,那么交换机丢弃该报文。
步骤304、根据多个空闲缓存空间对应的指针,交换机生成报文的缓存空间链表。
具体地,根据多个空闲缓存空间对应的指针,交换机先确定报文数据在这些获取的缓存空间的缓存顺序,使第一个从空闲缓存空间链表中获取的指针作为缓存空间链表中报文的头指针,第二个从空闲缓存空间链表中获取的指针作为缓存空间链表中报文的第二个指针,……,最后一个从空闲缓存空间链表中获取的指针作为缓存空间链表中报文的尾指针,那么缓存空间链表的头指针对应的缓存空间存储报文的第一部分数据、紧邻头指针的下一个指针对应的缓存空间存储报文的第二部分数据,……,尾指针对应的缓存空间存储报文的最后一部分数据,确定报文在所取出的缓存空间中的存储顺序,然后将缓存报文其余部分的缓存空间对应的指针存储到该缓存空间链表的头指针对应的缓存空间中,使得该报文的头指针可以指向存储报文其余部分的缓存空间对应的指针,以此生成报文的缓存空间链表。
其中,在多个缓存同一报文的缓存空间中,缓存报文最后一部分数据的缓存空间对应的指针被称作报文的尾指针。
比如:交换机中缓存报文的RAM的空间按照预先设置的单位缓存空间的大小被成了N+1份缓存空间,RAM中第一份缓存空间对应的指针是0,那么RAM中最后一份缓存空间对应的指针是N。假设从这些缓存空间中取指针是:0、3、5、6的指针对应的4个缓存空间来对报文进行缓存,那么以指针0为缓存空间链表中报文头指针,以指针6为缓存空间链表中报文尾指针;则确定指针0对应的缓存空间缓存报文的第一部分、确定指针3对应的缓存空间缓存报文的第二部分、确定指针5对应的缓存空间缓存报文的第三部分、确定指针6对应的缓存空间缓存报文的第四部分,而且指针0对应的缓存空间中记录有指针3、5和6,那么指针0指向指针3、5和6对应的指针,到此,生成了报文的缓存空间列表。
步骤305、根据生成的缓存空间链表,交换机将接收到的报文缓存到多个空闲缓存空间中,其中,多个空闲缓存空间包括第一类缓存空间和多个第二类缓存空间。
具体地,根据缓存空间链表中各指针确定的报文各个部分的缓存空间,交换机将报文的各部分分别存储到对应的指针对应的缓存空间中。
其中,报文头指针对应的第一类缓存空间中记录有报文的第一部分报文数据和多个第二类缓存空间对应的多个指针,多个第二类缓存空间分别缓存报文的第一部分报文数据外的多个部分的报文数据。
比如:缓存空间链表中的各指针已经确定指针0对应的缓存空间缓存报文的第一部分、指针3对应的缓存空间缓存报文的第二部分、指针5对应的缓存空间缓存报文的第三部分、指针6对应的缓存空间缓存报文的第四部分,那么交换机将报文的第一部分缓存到指针0对应的缓存空间中,将报文的第二部分缓存到指针3对应的缓存空间中,将报文的第三部分缓存到指针5对应的缓存空间中,将报文的第四部分缓存到指针6对应的缓存空间中,完成报文的缓存操作。
步骤306、交换机将报文的缓存空间链表的头指针连接到报文所在队列的队列链表中。
其中,交换机将报文的缓存空间链表的头指针连接到报文所在队列的队列链表的末尾,作为队列链表的尾指针,并将队列链表中的尾指针与队列链表中紧挨尾指针的上一指针进行关联。
其中,队列链表和缓存空间链表存储在RAM中,队列链表和缓存空间链表的存储位置与空闲缓存空间链表存储在RAM中的存储位置不同。
比如:RAM中队列链表和缓存空间链表的嵌套结构如图4所示:指针为0、3、5、6的指针对应的4个缓存空间来对队列的第一个报文进行缓存,所以指针0、3、5、6组成队列第一个报文的缓存空间链表,指针0为队列第一个报文的头指针,而队列第一个报文的头指针对应的缓存空间中记录有指针3、5、6,还记录有第二个进入队列的报文的头指针2,以及报文描述符,而缓存空间的剩余部分还缓存有报文的第一部分数据;而队列链表是按照报文的入队顺序记录各报文的头指针,从图4中可以看出,指针0、2、4、7分别是第一个进入队列的报文的头指针、第二个进入队列的报文的头指针,第三个进入队列的报文的头指针、和第四个进入队列的报文的头指针,指针7是当前队列链表的尾指针。
通过以上描述,将队列链表和缓存空间链表设置在队列链表和缓存空间链表管理的RAM缓存空间中,无需另外设置单独的队列转发管理RAM芯片,而且在读取报文的缓存空间链表中头指针对应的缓存空间时,不仅可以读取指针等信息,还可以读取缓存在头指针对应的缓存空间中的报文数据,减小了指针占用的网络带宽,进一步提高网络带宽的利用效率。
步骤307、交换机获取对报文的转发指令,报文有缓存空间链表,缓存空间链表包括报文的所有指针,报文的所有指针中的头指针对应的第一类缓存空间中记录有报文的第一部分报文数据和多个第二类缓存空间对应的多个指针,多个第二类缓存空间分别缓存报文的第一部分报文数据外的多个部分的报文数据。
步骤308、交换机从报文的缓存空间链表中获取报文的头指针。
步骤309、从报文头指针对应的第一类缓存空间中,交换机读取报文的第一部分报文数据,并获取多个指针。
其中,多个指针对应的第二类缓存空间是指除了报文头指针外,分别缓存报文的第一部分报文数据外的多个部分的报文数据的缓存空间对应的指针。
比如:通过指针是:0、3、5、6的指针对应的4个缓存空间来对报文数据进行缓存,指针0头指针,而指针3、5、6就是第二类缓存空间对应的指针,指针3、5、6就会预先存储在头指针对应的第一类缓存空间中。那么在读取报文之前,可以在报文头指针对应的第一类缓存空间中就可以获取第二类缓存空间对应的指针3、5、6。
步骤310、根据多个指针,交换机获取多个第二类缓存空间。
具体地,根据多个第二类缓存空间对应的多个指针,交换机从缓存空间链表中找到第二类缓存空间对应的多个指针,根据指针找到分别缓存报文的第一部分报文数据外的多个部分的报文数据的第二类缓存空间。
步骤311、从多个第二类缓存空间中,交换机并行读取第一部分报文数据外的多个部分的报文数据。
具体地,交换机按照报文的缓存空间链表中的第二类缓存空间对应的指针顺序并行读取第二类缓存空间中的报文数据;而且在读取完某一个指针对应的缓存空间中缓存的报文数据后,间隔很短的时间周期就可以立刻并行读取下一个指针对应的缓存空间中缓存的报文数据,减小了网络中交换机转发报文的时延。
比如:通过指针:0、3、5、6对应的4个缓存空间来对报文数据进行缓存,那么交换机分别找到指针0、3、5、6对应的缓存空间,然后按照缓存报文的顺序读取指针对应的缓存空间中缓存的报文数据,完成缓存在RAM中的报文的读取操作。步骤312、读取到完整的报文数据后,交换机转发报文。
具体地,交换机在读取完报文的任意部分数据后,都将读取的该部分报文数据进行缓存,然后立刻就可以读取另一部分的报文数据,直到读取报文的完整数据。在预读取到完整的报文数据后,交换机将读取的完整的报文通过预先确定的接口转发到用户接入网络的终端对应的网络节点中。
基于上述描述,本发明实施例提供的报文转发方法,通过从报文的缓存空间链表中获取报文的头指针,报文的头指针中记录有缓存报文其余部分的第二类缓存空间对应指针,可以使缓存到RAM中的报文被转发时,可以仅通过读取报文的头指针就可以获取报文的头指针对应的第一类缓存空间和第一类缓存空间中记录的多个指针对应的指针所对应的分别缓存报文的第一部分报文数据外的多个部分的报文数据的第二类缓存空间,从而并行读取完整的报文数据,在读取到完整的报文数据后,完成报文的转发,避免了传统的报文缓存空间链表读取报文时延较长的缺陷,可以使用价格低廉且存储空间大的DDRSDRAM等RAM芯片对报文进行缓存并转发,无需使用价格昂贵且存储空间小的QDRSDRAM对缓存在RAM中的报文进行转发,降低了对缓存在RAM中的队列进行管理的成本,并提高了链表的存储空间。
实施例三
本发明实施例提供了一种报文转发装置,参见图5,报文转发装置包括:第一获取模块400、第二获取模块401、第三获取模块402、第四获取模块403、读取模块404和转发模块405。
具体地,第一获取模块400,用于获取对报文的转发指令,报文有缓存空间链表,缓存空间链表包括报文的所有指针,报文的所有指针中的头指针对应的第一类缓存空间中记录有报文的第一部分报文数据和多个第二类缓存空间对应的多个指针,多个第二类缓存空间分别缓存报文的第一部分报文数据外的多个部分的报文数据;第二获取模块401和第一获取模块400相连接,用于从报文的缓存空间链表中获取报文的头指针;第三获取模块402和第二获取模块401相连接,用于从报文的头指针对应的第一类缓存空间中,读取报文的第一部分报文数据,并获取多个指针;第四获取模块403和第三获取模块402相连接,用于根据多个指针,获取多个第二类缓存空间;读取模块404和第四获取模块403相连接,用于从多个第二类缓存空间中,并行读取报文的第一部分报文数据外的多个部分的报文数据;转发模块405和读取模块404相连接,用于读取到完整的报文数据后,转发报文。
基于上述描述,本发明实施例提供的报文转发装置,通过从报文的缓存空间链表中获取报文的头指针,报文的头指针中记录有缓存报文其余部分的第二类缓存空间对应指针,可以使缓存到RAM中的报文被转发时,可以仅通过读取报文的头指针就可以获取报文的头指针对应的第一类缓存空间和第一类缓存空间中记录的多个指针对应的指针所对应的分别缓存报文的第一部分报文数据外的多个部分的报文数据的第二类缓存空间,从而并行读取完整的报文数据,在读取到完整的报文数据后,完成报文的转发,避免了传统的报文缓存空间链表读取报文时延较长的缺陷,可以使用价格低廉且存储空间大的DDRSDRAM等RAM芯片对报文进行缓存并转发,无需使用价格昂贵且存储空间小的QDRSDRAM对缓存在RAM中的报文进行转发,降低了对缓存在RAM中的队列进行管理的成本,并提高了链表的存储空间。
实施例四
本发明实施例提供了一种报文转发装置,参见图6,报文转发装置包括:第一获取模块500、第二获取模块501、第三获取模块502、第四获取模块503、读取模块504、转发模块505、接收模块506、判断模块507、第一处理模块508、第二处理模块509、缓存模块510、存储模块511和第三处理模块512。
具体地,接收模块506,用于接收报文;判断模块507和接收模块506相连接,用于确定用于缓存报文的RAM的空间是否已满;第一处理模块508和判断模块507相连接,用于若确定RAM的空间未满,则从RAM中获取多个空闲缓存空间对应的指针;第三处理模块512和判断模块507相连接,用于若确定RAM的空间已满,则丢弃报文;第二处理模块509和第一处理模块508相连接,用于根据多个空闲缓存空间对应的指针,生成报文的缓存空间链表;缓存模块510和第二处理模块509相连接,用于根据生成的缓存空间链表,将接收到的报文缓存到多个空闲缓存空间中,其中,多个空闲缓存空间包括第一类缓存空间和多个第二类缓存空间;存储模块511和缓存模块510相连接,用于将报文的缓存空间链表的头指针存储到报文所在队列的队列链表中;第一获取模块500和存储模块510相连接,用于获取对报文的转发指令,报文有缓存空间链表,缓存空间链表包括报文的所有指针,报文的所有指针中的头指针对应的第一类缓存空间中记录有报文的第一部分报文数据和多个第二类缓存空间对应的多个指针,多个第二类缓存空间分别缓存报文的第一部分报文数据外的多个部分的报文数据;第二获取模块501和第一获取模块500相连接,用于从报文的缓存空间链表中获取报文的头指针;第三获取模块502和第二获取模块501相连接,用于从报文的头指针对应的第一类缓存空间中,读取报文的第一部分报文数据,并获取多个指针;第四获取模块503和第三获取模块502相连接,用于根据多个指针,获取多个第二类缓存空间;读取模块504和第四获取模块503相连接,用于从多个第二类缓存空间中,并行读取报文的第一部分报文数据外的多个部分的报文数据;转发模块505和读取模块504相连接,用于读取到完整的报文数据后,转发报文。
具体地,在判断模块507中:
若RAM中缓存的报文占用的缓存空间数量小于预先设定的阈值,则说明RAM未满。
进一步地,队列链表和缓存空间链表存储在RAM中。
基于上述描述,本发明实施例提供的报文转发装置,通过从报文的缓存空间链表中获取报文的头指针,报文的头指针中记录有缓存报文其余部分的第二类缓存空间对应指针,可以使缓存到RAM中的报文被转发时,可以仅通过读取报文的头指针就可以获取报文的头指针对应的第一类缓存空间和第一类缓存空间中记录的多个指针对应的指针所对应的分别缓存报文的第一部分报文数据外的多个部分的报文数据的第二类缓存空间,从而并行读取完整的报文数据,在读取到完整的报文数据后,完成报文的转发,避免了传统的报文缓存空间链表读取报文时延较长的缺陷,可以使用价格低廉且存储空间大的DDRSDRAM等RAM芯片对报文进行缓存并转发,无需使用价格昂贵且存储空间小的QDRSDRAM对缓存在RAM中的报文进行转发,降低了对缓存在RAM中的队列进行管理的成本,并提高了链表的存储空间。
实施例五
参见图7,本发明实施例提供了一种报文转发装置,包括有FPGA芯片600和RAM610,FPGA芯片600设置有接口601,FPGA芯片600中固化有一个或者一个以上的程序,且经配置以由FPGA芯片600执行一个或者一个以上程序包含用于进行以下操作的指令:
获取对报文的转发指令,报文有缓存空间链表,缓存空间链表包括报文的所有指针,报文的所有指针中的头指针对应的第一类缓存空间中记录有报文的第一部分报文数据和多个第二类缓存空间对应的多个指针,多个第二类缓存空间分别缓存报文的第一部分报文数据外的多个部分的报文数据;
从报文的缓存空间链表中获取报文的头指针;
从报文的头指针对应的第一类缓存空间中,读取报文的第一部分报文数据,并获取多个指针;
根据多个指针,获取多个第二类缓存空间;
从多个第二类缓存空间中,并行读取第一部分报文数据外的多个部分的报文数据;
读取到完整的报文数据后,通过接口601转发报文。
基于上述描述,本发明实施例提供的报文转发装置,通过从报文的缓存空间链表中获取报文的头指针,报文的头指针中记录有缓存报文其余部分的第二类缓存空间对应指针,可以使缓存到RAM中的报文被转发时,可以仅通过读取报文的头指针就可以获取报文的头指针对应的第一类缓存空间和第一类缓存空间中记录的多个指针对应的指针所对应的分别缓存报文的第一部分报文数据外的多个部分的报文数据的第二类缓存空间,从而并行读取完整的报文数据,在读取到完整的报文数据后,完成报文的转发,避免了传统的报文缓存空间链表读取报文时延较长的缺陷,可以使用价格低廉且存储空间大的DDRSDRAM等RAM芯片对报文进行缓存并转发,无需使用价格昂贵且存储空间小的QDRSDRAM对缓存在RAM中的报文进行转发,降低了对缓存在RAM中的队列进行管理的成本,并提高了链表的存储空间。
需要说明的是:上述实施例三至实施例五提供的报文转发装置在转发报文时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的报文转发装置与报文转发方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (10)
1.一种报文转发方法,其特征在于,所述方法包括:
获取对报文的转发指令,所述报文有缓存空间链表,所述缓存空间链表包括所述报文的所有指针,所述报文的所有指针中的头指针对应的第一类缓存空间中记录有所述报文的第一部分报文数据和多个第二类缓存空间对应的多个指针,所述多个第二类缓存空间分别缓存所述报文的所述第一部分报文数据外的多个部分的报文数据;
从所述报文的缓存空间链表中获取所述报文的头指针;
从所述报文的头指针对应的所述第一类缓存空间中,读取所述报文的所述第一部分报文数据,并获取所述多个指针;
根据所述多个指针,获取所述多个第二类缓存空间;
从所述多个第二类缓存空间中,并行读取所述第一部分报文数据外的所述多个部分的报文数据;
读取到完整的报文数据后,转发所述报文。
2.根据权利要求1所述的报文转发方法,其特征在于,在获取对报文的转发指令之前,所述方法还包括:
接收所述报文;
确定用于缓存所述报文的RAM的空间是否已满;
若确定所述RAM的空间未满,则从所述RAM中获取多个空闲缓存空间对应的指针;
根据多个空闲缓存空间对应的指针,生成所述报文的缓存空间链表;
根据生成的所述缓存空间链表,将接收到的所述报文缓存到多个空闲缓存空间中,其中,所述多个空闲缓存空间包括第一类缓存空间和多个所述第二类缓存空间;
将所述报文的所述缓存空间链表的头指针连接到所述报文所在队列的队列链表中。
3.根据权利要求1或2所述的报文转发方法,其特征在于,所述方法还包括:
若确定所述RAM的空间已满,则丢弃所述报文。
4.据权利要求2所述的报文转发方法,其特征在于,在所述判断所述RAM的空间是否已满步骤中:
若所述RAM中缓存的报文占用的缓存空间数量小于预先设定的阈值,则确定所述RAM未满。
5.据权利要求2所述的报文转发方法,其特征在于,所述队列链表和所述缓存空间链表存储在所述RAM中。
6.一种报文转发装置,其特征在于,所述装置包括:
第一获取模块,用于获取对报文的转发指令,所述报文有缓存空间链表,所述缓存空间链表包括所述报文的所有指针,所述报文的所有指针中的头指针对应的第一类缓存空间中记录有所述报文的第一部分报文数据和多个第二类缓存空间对应的多个指针,所述多个第二类缓存空间分别缓存所述报文的所述第一部分报文数据外的多个部分的报文数据;
第二获取模块,用于从所述报文的缓存空间链表中获取所述报文的头指针;
第三获取模块,用于从所述报文的头指针对应的所述第一类缓存空间中,读取所述报文的所述第一部分报文数据,并获取所述多个指针;
第四获取模块,用于根据所述多个指针,获取所述多个第二类缓存空间;
读取模块,用于从所述多个第二类缓存空间中,并行读取所述报文的所述第一部分报文数据外的所述多个部分的报文数据;
转发模块,用于读取到完整的报文数据后,转发所述报文。
7.根据权利要求6所述的报文转发装置,其特征在于,所述装置还包括:
接收模块,用于接收所述报文;
判断模块,用于确定用于缓存所述报文的RAM的空间是否已满;
第一处理模块,用于若确定所述RAM的空间未满,则从所述RAM中获取多个空闲缓存空间对应的指针;
第二处理模块,用于根据多个空闲缓存空间对应的指针,生成所述报文的缓存空间链表;
缓存模块,用于根据生成的所述缓存空间链表,将接收到的所述报文缓存到多个空闲缓存空间中,其中,所述多个空闲缓存空间包括所述第一类缓存空间和多个所述第二类缓存空间;
存储模块,用于将所述报文的所述缓存空间链表的头指针连接到所述报文所在队列的队列链表中。
8.根据权利要求6或7所述的报文转发装置,其特征在于,所述装置还包括:第三处理模块,用于若确定所述RAM的空间已满,则丢弃所述报文。
9.据权利要求7所述的报文转发装置,其特征在于,在所述判断模块中:
若所述RAM中缓存的报文占用的缓存空间数量小于预先设定的阈值,则说明所述RAM未满。
10.据权利要求7所述的报文转发装置,其特征在于,所述队列链表和所述缓存空间链表存储在RAM中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410494274.0A CN105516023A (zh) | 2014-09-24 | 2014-09-24 | 一种报文转发方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410494274.0A CN105516023A (zh) | 2014-09-24 | 2014-09-24 | 一种报文转发方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105516023A true CN105516023A (zh) | 2016-04-20 |
Family
ID=55723673
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410494274.0A Pending CN105516023A (zh) | 2014-09-24 | 2014-09-24 | 一种报文转发方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105516023A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107342954A (zh) * | 2017-06-29 | 2017-11-10 | 北京东土军悦科技有限公司 | 一种报文的调度方法及装置 |
CN111988158A (zh) * | 2019-05-23 | 2020-11-24 | 北京物芯科技有限责任公司 | 芯片级实现oam报文发送方法、装置、系统及存储介质 |
CN113282040A (zh) * | 2021-05-26 | 2021-08-20 | 苏州智加科技有限公司 | 减少整车网关转发丢帧的方法及装置 |
CN113595932A (zh) * | 2021-08-06 | 2021-11-02 | 上海金仕达软件科技有限公司 | 数据乱序报文的处理方法及专用集成电路 |
CN114785714A (zh) * | 2022-03-01 | 2022-07-22 | 阿里巴巴(中国)有限公司 | 一种报文传输时延检测方法、存储介质及设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1341314A (zh) * | 1999-02-26 | 2002-03-20 | 红石通信公司 | 使用压缩树转发表的网络路由器搜索引擎 |
CN101789908A (zh) * | 2010-03-04 | 2010-07-28 | 成都市华为赛门铁克科技有限公司 | 分片报文接收处理方法及装置 |
CN102130833A (zh) * | 2011-03-11 | 2011-07-20 | 中兴通讯股份有限公司 | 一种高速路由器流量管理芯片链表存储管理方法及系统 |
US20120051366A1 (en) * | 2010-08-31 | 2012-03-01 | Chengzhou Li | Methods and apparatus for linked-list circular buffer management |
CN103678172A (zh) * | 2013-12-25 | 2014-03-26 | Tcl集团股份有限公司 | 一种本地数据缓存管理方法及装置 |
-
2014
- 2014-09-24 CN CN201410494274.0A patent/CN105516023A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1341314A (zh) * | 1999-02-26 | 2002-03-20 | 红石通信公司 | 使用压缩树转发表的网络路由器搜索引擎 |
CN101789908A (zh) * | 2010-03-04 | 2010-07-28 | 成都市华为赛门铁克科技有限公司 | 分片报文接收处理方法及装置 |
US20120051366A1 (en) * | 2010-08-31 | 2012-03-01 | Chengzhou Li | Methods and apparatus for linked-list circular buffer management |
CN102130833A (zh) * | 2011-03-11 | 2011-07-20 | 中兴通讯股份有限公司 | 一种高速路由器流量管理芯片链表存储管理方法及系统 |
CN103678172A (zh) * | 2013-12-25 | 2014-03-26 | Tcl集团股份有限公司 | 一种本地数据缓存管理方法及装置 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107342954A (zh) * | 2017-06-29 | 2017-11-10 | 北京东土军悦科技有限公司 | 一种报文的调度方法及装置 |
CN107342954B (zh) * | 2017-06-29 | 2019-11-22 | 北京东土军悦科技有限公司 | 一种报文的调度方法及装置 |
CN111988158A (zh) * | 2019-05-23 | 2020-11-24 | 北京物芯科技有限责任公司 | 芯片级实现oam报文发送方法、装置、系统及存储介质 |
CN113282040A (zh) * | 2021-05-26 | 2021-08-20 | 苏州智加科技有限公司 | 减少整车网关转发丢帧的方法及装置 |
CN113282040B (zh) * | 2021-05-26 | 2022-08-05 | 苏州智加科技有限公司 | 减少整车网关转发丢帧的方法及装置 |
CN113595932A (zh) * | 2021-08-06 | 2021-11-02 | 上海金仕达软件科技有限公司 | 数据乱序报文的处理方法及专用集成电路 |
CN113595932B (zh) * | 2021-08-06 | 2024-05-14 | 上海金仕达软件科技股份有限公司 | 数据乱序报文的处理方法及专用集成电路 |
CN114785714A (zh) * | 2022-03-01 | 2022-07-22 | 阿里巴巴(中国)有限公司 | 一种报文传输时延检测方法、存储介质及设备 |
CN114785714B (zh) * | 2022-03-01 | 2023-08-22 | 阿里巴巴(中国)有限公司 | 一种报文传输时延检测方法、存储介质及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20240143169A1 (en) | Method for Improving Message Storage Efficiency of Network Chip, Device, and Storage medium | |
US9313115B2 (en) | Traffic generator with priority flow control | |
CN105516023A (zh) | 一种报文转发方法和装置 | |
JP7074839B2 (ja) | パケット処理 | |
CN102769869B (zh) | 无线接入点的控制和配置报文快速转发系统 | |
CN105573711B (zh) | 一种数据缓存方法及装置 | |
JP2016503526A (ja) | データ処理方法及び装置 | |
CN103914341A (zh) | 数据队列出队管控方法和装置 | |
CN103581055A (zh) | 报文的保序方法、流量调度芯片及分布式存储系统 | |
WO2011015055A1 (zh) | 一种存储管理的方法和系统 | |
CN105099957A (zh) | 一种基于软件查表的数据包转发方法 | |
CN114124848B (zh) | 一种基于vlid监控的交换机多监控端口方法 | |
CN101848132A (zh) | 流量统计装置及方法 | |
WO2024021801A1 (zh) | 报文转发装置及方法、通信芯片及网络设备 | |
CN103106177B (zh) | 多核网络处理器的片上互联结构及其方法 | |
CN100499563C (zh) | 提高分组应用的存储器存取效率 | |
JP5391449B2 (ja) | 記憶装置 | |
CN111988158B (zh) | 芯片级实现oam报文发送方法、装置、系统及存储介质 | |
CN100493000C (zh) | 一种实现多逻辑通道计数的方法和装置 | |
CN114153758B (zh) | 具有帧计数功能的跨时钟域数据处理方法 | |
CN109308180B (zh) | 缓存拥塞的处理方法及处理装置 | |
CN104539490A (zh) | 基于交换芯片实现报文高速统计的方法及装置 | |
CN117061439B (zh) | 一种tsn实时以太网交换机的数据处理方法 | |
CN114785396A (zh) | 逻辑端口配置、查找映射及流量管理方法、系统及终端 | |
JP2006174233A (ja) | パケット処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into 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: 20160420 |