一种报文转发方法和装置的制造方法

文档序号:9754487阅读:205来源:国知局
一种报文转发方法和装置的制造方法
【技术领域】
[0001]本发明涉及通信技术领域,特别涉及一种报文转发方法和装置。
【背景技术】
[0002]传统的交换机以及路由器等具有报文转发和流量监控功能的装置,都可以将报文向介质访问控制(英文:media access control,缩写:MAC)地址表中记录的目的地址对应的端口转发,被转发的队列中的报文一般都缓存在交换机设置的随机存取存储器(英文:random-access memory,缩写:RAM)中。
[0003]通常的报文转发的实现方案中,可以通过队列链表和缓存空间链表管理RAM缓存空间中待转发的队列中的报文。其中,队列链表按照报文的入队顺序记录各报文的头指针,先入队的报文的头指针只记录有紧跟它入队的下一个队列的报文的头指针,以此来记录队列中报文的转发顺序。每个缓存在RAM中的报文都具有各自的缓存空间链表,缓存空间链表中记录了缓存该报文数据的所有缓存空间对应的指针。缓存空间链表的任意指针对应的缓存空间中只记录有该指针的下一个缓存空间链表指针,每个缓存空间链表指针都对应一块缓存空间。在转发缓存在RAM中的队列中的报文时,交换机中设置的用于转发报文的现场可编程门阵列(英文:field-programmable gate array,缩写:FPGA)芯片只能根据该报文的缓存空间链表指针的顺序先获取存储该报文的第一个RAM缓存空间地址并读取缓存数据,然后再获取存储该报文的第二个RAM缓存空间地址并读取缓存数据,依此类推,直到读取报文的完整数据,然后将读取的报文转发。在完成一个报文的转发后,根据队列链表中报文的顺序,获取下一个报文的头指针,按照以上的描述,再将该报文读取并转发,直到将队列中的报文全部转发出去。
[0004]读取报文的过程中,由于RAM芯片的特性,在获取存储该报文的相邻的两个RAM缓存空间地址之间会有时延,若报文较大导致缓存该报文的缓存空间较多,那么就会在读取报文的过程中产生较大的时延,而这会严重影响网络的性能,为了减小时延对网络性能的影响,一般采用四倍数据倍率同步动态随机存储器(英文:Quad Data Rate synchronousdynamic random-access memory,缩写:QDR SDRAM)芯片来存储队列链表和缓存空间链表。QDR SDRAM芯片虽然读取速度快、可以减小时延,但是QDR SDRAM的存储空间较小且成本极高,在现阶段不能够大规模的使用,实用性较低。

【发明内容】

[0005]为了解决上述的问题,本发明实施例提供了一种报文转发方法和装置。所述技术方案如下:
[0006]第一方面,本发明实施例提供了一种报文转发方法,所述方法包括:
[0007]获取对报文的转发指令,所述报文有缓存空间链表,所述缓存空间链表包括所述报文的所有指针,所述报文的所有指针中的头指针对应的第一类缓存空间中记录有所述报文的第一部分报文数据和多个第二类缓存空间对应的多个指针,所述多个第二类缓存空间分别缓存所述报文的所述第一部分报文数据外的多个部分的报文数据;
[0008]从所述报文的缓存空间链表中获取所述报文的头指针;
[0009]从所述报文的头指针对应的所述第一类缓存空间中,读取所述报文的所述第一部分报文数据,并获取所述多个指针;
[0010]根据所述多个指针,获取所述多个第二类缓存空间;
[0011]从所述多个第二类缓存空间中,并行读取所述第一部分报文数据外的所述多个部分的报文数据;
[0012]读取到完整的报文数据后,转发所述报文。
[0013]在第一方面的第一种可能的实现方式中,在获取对报文的转发指令之前,所述方法还包括:
[0014]接收所述报文;
[0015]确定用于缓存所述报文的RAM的空间是否已满;
[0016]若确定所述RAM的空间未满,则从所述RAM中获取多个空闲缓存空间对应的指针;
[0017]根据多个空闲缓存空间对应的指针,生成所述报文的缓存空间链表;
[0018]根据生成的所述缓存空间链表,将接收到的所述报文缓存到多个空闲缓存空间中,其中,所述多个空闲缓存空间包括第一类缓存空间和多个所述第二类缓存空间;
[0019]将所述报文的所述缓存空间链表的头指针连接到所述报文所在队列的队列链表中。
[0020]结合第一方面以及第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述方法还包括:
[0021]若确定所述RAM的空间已满,则丢弃所述报文。
[0022]结合第一方面的第一种可能的实现方式,在第三种可能的实现方式中,在所述判断所述RAM的空间是否已满步骤中:
[0023]若所述RAM中缓存的报文占用的缓存空间数量小于预先设定的阈值,则确定所述RAM未满。
[0024]结合第一方面的第一种可能的实现方式,在第四种可能的实现方式中,所述队列链表和所述缓存空间链表存储在所述RAM中。
[0025]第二方面,本发明实施例提供了一种报文转发装置,所述装置包括:
[0026]第一获取模块,用于获取对报文的转发指令,所述报文有缓存空间链表,所述缓存空间链表包括所述报文的所有指针,所述报文的所有指针中的头指针对应的第一类缓存空间中记录有所述报文的第一部分报文数据和多个第二类缓存空间对应的多个指针,所述多个第二类缓存空间分别缓存所述报文的所述第一部分报文数据外的多个部分的报文数据;
[0027]第二获取模块,用于从所述报文的缓存空间链表中获取所述报文的头指针;
[0028]第三获取模块,用于从所述报文的头指针对应的所述第一类缓存空间中,读取所述报文的所述第一部分报文数据,并获取所述多个指针;
[0029]第四获取模块,用于根据所述多个指针,获取所述多个第二类缓存空间;
[0030]读取模块,用于从所述多个第二类缓存空间中,并行读取所述报文的所述第一部分报文数据外的所述多个部分的报文数据;
[0031]转发模块,用于读取到完整的报文数据后,转发所述报文。
[0032]在第二方面的第一种可能的实现方式中,所述装置还包括:
[0033]接收模块,用于接收所述报文;
[0034]判断模块,用于确定用于缓存所述报文的RAM的空间是否已满;
[0035]第一处理模块,用于若确定所述RAM的空间未满,则从所述RAM中获取多个空闲缓存空间对应的指针;
[0036]第二处理模块,用于根据多个空闲缓存空间对应的指针,生成所述报文的缓存空间链表;
[0037]缓存模块,用于根据生成的所述缓存空间链表,将接收到的所述报文缓存到多个空闲缓存空间中,其中,所述多个空闲缓存空间包括所述第一类缓存空间和多个所述第二类缓存空间;
[0038]存储模块,用于将所述报文的所述缓存空间链表的头指针连接到所述报文所在队列的队列链表中。
[0039]结合第二方面以及第二一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述装置还包括:第三处理模块,用于若确定所述RAM的空间已满,则丢弃所述报文。
[0040]结合第二方面的第一种可能的实现方式,在第三种可能的实现方式中,在所述判断模块中:
[0041]若所述RAM中缓存的报文占用的缓存空间数量小于预先设定的阈值,则说明所述RAM未满。
[0042]结合第二方面的第一种可能的实现方式,在第四种可能的实现方式中,所述队列链表和所述缓存空间链表存储在RAM中。
[0043]本发明实施例提供的技术方案带来的有益效果是:
[0044]本发明实施例提供了一种报文转发方法和装置,通过从报文的缓存空间链表中获取报文的头指针,报文的头指针中记录有缓存报文其余部分的第二类缓存空间对应指针,可以使缓存到RAM中的报文被转发时,可以仅通过读取报文的头指针就可以获取报文的头指针对应的第一类缓存空间和第一类缓存空间中记录的多个指针对应的指针所对应的分别缓存报文的
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1