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

文档序号:9754487阅读:来源:国知局
分的报文数据的第二类缓存空间,从而并行读取完整的报文数据,在读取到完整的报文数据后,完成报文的转发,避免了传统的报文缓存空间链表读取报文时延较长的缺陷。
[0079]实施例二
[0080]本发明实施例提供了一种报文转发方法,参见图3,方法流程包括:
[0081]步骤300、交换机接收报文。
[0082]其中,队列中的报文,是交换机接收的等待转发的一批报文,而队列中报文的排列顺序由报文进入队列的顺序确定。
[0083]进一步地,本发明实施例的执行主体不限于是交换机,也可以是其他具有报文转发和流量监控的装置,如路由器等。
[0084]步骤301、交换机确定用于缓存报文的RAM的空间是否已满。
[0085]如果确定RAM的空间未满,则执行步骤302。
[0086]如果确定RAM的空间已满,则执行步骤303。
[0087]具体地,交换机在接收到队列中的报文数据后,会判断用于缓存队列中的报文数据的RAM的空间是否已经缓冲满了需要转发的报文。
[0088]其中,用于缓存队列中的报文数据的RAM设置在交换机中。
[0089]可选的,交换机判断RAM中缓存的报文占用的缓存空间数量是否大于等于预先设定的阈值。若确定RAM中缓存的报文数量小于预先设定的阈值,则说明RAM未满,否则说明RAM已满。
[0090]其中,预先设定的阈值是RAM空间中可以缓存的最大的报文数量。
[0091]步骤302、若确定RAM的空间未满,则交换机从RAM中获取多个空闲缓存空间对应的指针。
[0092]具体地,若确定RAM的空间未满,那么交换机根据获取到报文大小,从RAM中空闲缓存空间链表中获取多个空闲缓存空间对应的指针。
[0093]其中,交换机设置的用于缓存需要转发的报文的RAM是专门用来缓存报文的,独立于交换机的用于加载运行程序的内存。
[0094]其中,若报文数据的大小大于单位缓存空间的大小,那么说明一个缓存空间是装不下报文的全部数据的,那么需要将报文分成多个部分并分别缓存到多个RAM的缓存空间中,所以可以通过报文数据大小和单位缓存空间的大小对报文进行分块处理,然后将分块后的报文分别存储到多个缓存空间中。
[0095]其中,单位缓存空间是指预先设置的RAM中每个缓存空间的大小。
[0096]其中,获取的空闲缓存空间链表的指针数量等于获取的空闲缓存空间的数量。
[0097]步骤303、若确定RAM的空间已满,则交换机丢弃报文。
[0098]具体地,若确定RAM的空间已满,说明RAM已经没有空间缓存报文了,那么交换机丢弃该报文。
[0099]步骤304、根据多个空闲缓存空间对应的指针,交换机生成报文的缓存空间链表。
[0100]具体地,根据多个空闲缓存空间对应的指针,交换机先确定报文数据在这些获取的缓存空间的缓存顺序,使第一个从空闲缓存空间链表中获取的指针作为缓存空间链表中报文的头指针,第二个从空闲缓存空间链表中获取的指针作为缓存空间链表中报文的第二个指针,……,最后一个从空闲缓存空间链表中获取的指针作为缓存空间链表中报文的尾指针,那么缓存空间链表的头指针对应的缓存空间存储报文的第一部分数据、紧邻头指针的下一个指针对应的缓存空间存储报文的第二部分数据,……,尾指针对应的缓存空间存储报文的最后一部分数据,确定报文在所取出的缓存空间中的存储顺序,然后将缓存报文其余部分的缓存空间对应的指针存储到该缓存空间链表的头指针对应的缓存空间中,使得该报文的头指针可以指向存储报文其余部分的缓存空间对应的指针,以此生成报文的缓存空间链表。
[0101]其中,在多个缓存同一报文的缓存空间中,缓存报文最后一部分数据的缓存空间对应的指针被称作报文的尾指针。
[0102]比如:交换机中缓存报文的RAM的空间按照预先设置的单位缓存空间的大小被成了 N+1份缓存空间,RAM中第一份缓存空间对应的指针是0,那么RAM中最后一份缓存空间对应的指针是N。假设从这些缓存空间中取指针是:0、3、5、6的指针对应的4个缓存空间来对报文进行缓存,那么以指针O为缓存空间链表中报文头指针,以指针6为缓存空间链表中报文尾指针;则确定指针O对应的缓存空间缓存报文的第一部分、确定指针3对应的缓存空间缓存报文的第二部分、确定指针5对应的缓存空间缓存报文的第三部分、确定指针6对应的缓存空间缓存报文的第四部分,而且指针O对应的缓存空间中记录有指针3、5和6,那么指针O指向指针3、5和6对应的指针,到此,生成了报文的缓存空间列表。
[0103]步骤305、根据生成的缓存空间链表,交换机将接收到的报文缓存到多个空闲缓存空间中,其中,多个空闲缓存空间包括第一类缓存空间和多个第二类缓存空间。
[0104]具体地,根据缓存空间链表中各指针确定的报文各个部分的缓存空间,交换机将报文的各部分分别存储到对应的指针对应的缓存空间中。
[0105]其中,报文头指针对应的第一类缓存空间中记录有报文的第一部分报文数据和多个第二类缓存空间对应的多个指针,多个第二类缓存空间分别缓存报文的第一部分报文数据外的多个部分的报文数据。
[0106]比如:缓存空间链表中的各指针已经确定指针O对应的缓存空间缓存报文的第一部分、指针3对应的缓存空间缓存报文的第二部分、指针5对应的缓存空间缓存报文的第三部分、指针6对应的缓存空间缓存报文的第四部分,那么交换机将报文的第一部分缓存到指针O对应的缓存空间中,将报文的第二部分缓存到指针3对应的缓存空间中,将报文的第三部分缓存到指针5对应的缓存空间中,将报文的第四部分缓存到指针6对应的缓存空间中,完成报文的缓存操作。
[0107]步骤306、交换机将报文的缓存空间链表的头指针连接到报文所在队列的队列链表中。
[0108]其中,交换机将报文的缓存空间链表的头指针连接到报文所在队列的队列链表的末尾,作为队列链表的尾指针,并将队列链表中的尾指针与队列链表中紧挨尾指针的上一指针进行关联。
[0109]其中,队列链表和缓存空间链表存储在RAM中,队列链表和缓存空间链表的存储位置与空闲缓存空间链表存储在RAM中的存储位置不同。
[0110]比如:RAM中队列链表和缓存空间链表的嵌套结构如图4所示:指针为0、3、5、6的指针对应的4个缓存空间来对队列的第一个报文进行缓存,所以指针0、3、5、6组成队列第一个报文的缓存空间链表,指针O为队列第一个报文的头指针,而队列第一个报文的头指针对应的缓存空间中记录有指针3、5、6,还记录有第二个进入队列的报文的头指针2,以及报文描述符,而缓存空间的剩余部分还缓存有报文的第一部分数据;而队列链表是按照报文的入队顺序记录各报文的头指针,从图4中可以看出,指针0、2、4、7分别是第一个进入队列的报文的头指针、第二个进入队列的报文的头指针,第三个进入队列的报文的头指针、和第四个进入队列的报文的头指针,指针7是当前队列链表的尾指针。
[0111]通过以上描述,将队列链表和缓存空间链表设置在队列链表和缓存空间链表管理的RAM缓存空间中,无需另外设置单独的队列转发管理RAM芯片,而且在读取报文的缓存空间链表中头指针对应的缓存空间时,不仅可以读取指针等信息,还可以读取缓存在头指针对应的缓存空间中的报文数据,减小了指针占用的网络带宽,进一步提高网络带宽的利用效率。
[0112]步骤307、交换机获取对报文的转发指令,报文有缓存空间链表,缓存空间链表包括报文的所有指针,报文的所有指针中的头指针对应的第一类缓存空间中记录有报文的第一部分报文数据和多个第二类缓存空间对应的多个指针,多个第二类缓存空间分别缓存报文的第一部分报文数据外的多个部分的报文数据。
[0113]步骤308、交换机从报文的缓存空间链表中获取报文的头指针。
[0114]步骤309、从报文头指针对应的第一类缓存空间中,交换机读取报文的第一部分报文数据,并获取多个指针。
[0115]其中,多个指针对应的第二类缓存空间是指除了报文头指针外,分别缓存报文的第一部分
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1