CN102780626A - 一种数据转发方法、装置及网络设备 - Google Patents
一种数据转发方法、装置及网络设备 Download PDFInfo
- Publication number
- CN102780626A CN102780626A CN2012102653978A CN201210265397A CN102780626A CN 102780626 A CN102780626 A CN 102780626A CN 2012102653978 A CN2012102653978 A CN 2012102653978A CN 201210265397 A CN201210265397 A CN 201210265397A CN 102780626 A CN102780626 A CN 102780626A
- Authority
- CN
- China
- Prior art keywords
- data
- chain table
- length
- table block
- descriptor
- 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.)
- Granted
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种数据转发方法、装置及网络设备,用以解决现有技术中路由器转发数据的速率的稳定性较低的问题。该方法路由器生成描述符,判断将该描述符***到相应数据队列中的最后一个链表块中后,最后一个链表块中包含的所有描述符对应的数据的长度的和值是否大于规定长度,若是,则新建一个链表块***到该数据队列的末尾,并将生成的描述符***到新建的链表块中,否则将生成的描述符***到最后一个链表块中,在转发数据时,一次转发该数据队列中的一个链表块中包含的所有描述符对应的数据。通过上述方法,路由器在连续接收到短数据或者长数据时,仍然可以保证转发数据的速率的稳定性。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种数据转发方法、装置及网络设备。
背景技术
高速以太网是数据通信***的核心部分,用于汇集来自众多边缘网络的数据,并通过相应的数据队列将数据转发出去。其中,高速以太网主要通过内部的路由器完成数据的转发。
图1为现有技术中高速以太网内部的路由器转发数据的过程,具体包括以下步骤:
S101:路由器接收边缘网络发送的数据,并保存该数据。
S102:生成该数据对应的描述符,并将生成的该描述符***到转发该数据所要采用的数据队列中的末尾。
其中,路由器预先建立了多个数据队列,可以根据接收到的数据的数据类型、发送该数据的发送方、接收该数据的接收方等信息建立不同的数据队列。
S103:按照该数据队列中各描述符排列的先后顺序,依次调度该数据队列中的每个描述符对应的数据并转发。
在实际应用中,通常要求路由器以稳定的速率转发数据。在判断一个路由器转发数据的速率是否稳定时,主要是根据路由器在两个相同的时间段内分别调度并转发数据的数据量的差值进行判断,如果差值较大,则说明路由器转发数据的速率的稳定性较差,如果差值较小,则说明路由器转发数据的速率的稳定性较好。
然而,在图1所示的步骤S103中,路由器在调度数据队列中的描述符对应的数据并转发时,每次只调度一个描述符对应的数据进行转发,也即路由器一次只调度一个数据并转发。
而由于需要转发的每个数据的长度并不是固定的,因此在现有技术中,不可避免的会出现这种情况:在一个时间段内,路由器调度并转发的大多数数据是长度较短的短数据,而在另一个时间段内,路由器调度并转发的大多数数据是长度较长的长数据。甚至出现极端的情况:路由器在一个时间段内调度并转发的所有数据都是短数据,在另一个时间段内调度并转发的所有数据都是长数据。这就会导致路由器在两个相同的时间段内调度并转发数据的数据量差异很大,从而降低路由器转发数据的速率的稳定性。
发明内容
本发明实施例提供一种数据转发方法、装置及网络设备,用以解决现有技术中路由器转发数据的速率的稳定性较低的问题。
本发明实施例提供的一种数据转发方法,包括:
接收并保存数据,确定所述数据所属的数据队列,并生成所述数据对应的描述符;
确定当前所述数据队列中的最后一个链表块中包含的所有描述符对应的数据的长度的第一和值,将生成的描述符对应的数据的长度与所述第一和值相加得到第二和值;
判断所述第二和值是否大于规定长度;
若是,则新建一个链表块并***到所述数据队列的末尾,并将所述生成的描述符***到新建的链表块中,否则,将所述生成的描述符***到所述最后一个链表块中;
在转发所述数据队列中的描述符对应的数据时,按照所述数据队列中各链表块排序的先后顺序,依次调度每个链表块中包含的所有描述符对应的数据并转发。
本发明实施例提供的一种数据转发装置,包括:
缓存管理单元,用于接收并保存数据,确定所述数据所属的数据队列,并生成所述数据对应的描述符;
链表输入单元,用于确定当前所述数据队列中的最后一个链表块中包含的所有描述符对应的数据长度的第一和值,将生成的描述符对应的数据的长度与所述第一和值相加得到第二和值;判断所述第二和值是否大于规定长度;若是,则新建一个链表块并***到所述数据队列的末尾,将所述生成的描述符***到新建的链表块中,否则,将所述生成的描述符***到所述最后一个链表块中;
链表输出单元,用于在转发所述数据队列中的描述符对应的数据时,按照所述数据队列中各链表块排序的先后顺序,依次调度每个链表块中包含的所有描述符对应的数据并转发。
本发明实施例提供的一种网络设备,包括如上所述的数据转发装置。
本发明实施例提供一种数据转发方法、装置及网络设备,该方法路由器生成接收到的数据对应的描述符,判断将该描述符***到相应数据队列中的最后一个链表块中后,最后一个链表块中包含的所有描述符对应的数据的长度的和值是否大于规定长度,若是,则新建一个链表块***到该数据队列的末尾,并将生成的描述符***到新建的链表块中,否则将生成的描述符***到最后一个链表块中,并在转发该数据队列中的描述符对应的数据时,一次调度该数据队列中的一个链表块中包含的所有描述符对应的数据并转发。通过上述方法,路由器在连续接收到短数据或者长数据时,均可以保证一个链表块中包含的所有描述符对应的数据的长度的和值接近于规定长度,但不超过规定长度,因此每次调度一个链表块中包含的所有描述符对应的数据进行转发,则可以在一定程度上提高路由器转发数据的速率的稳定性。
附图说明
图1为现有技术中高速以太网内部的路由器转发数据的过程;
图2为本发明实施例提供的数据转发过程;
图3为本发明实施例提供的将接收到的数据对应的描述符***到相应数据队列中的详细过程;
图4为本发明实施例提供的数据转发装置结构示意图。
具体实施方式
由于现有技术中路由器调度一个数据队列中的描述符对应的数据进行转发时,一次只调度一个描述对应的数据进行转发,也即一次转发一个数据,当路由器在一个时间段内连续收到长度较短的短数据,在下一个时间段内连续收到长度较长的长数据时,就会导致路由器在这两个时间段转发数据的数据量差异很大,从而降低路由器转发数据的速率的稳定性。
本发明实施例为了提高路由器转发数据的速率的稳定性,在数据队列中建立链表块,每个链表块中包含若干个描述符,并且使每个链表块中包含的所有描述符对应的数据的长度的和值接近于规定长度,但不超过规定长度,在调度并转发该数据队列中包含的描述符对应的数据时,一次调度该数据队列中的一个链表块包含的所有描述符对应的数据进行转发。采用本发明实施例提供的数据转发方法时,即使路由器在一个时间段内连续收到短数据,在下一个时间段内连续收到长数据,则数据队列中的每个链表块中包含的描述符对应的数据的长度的和值仍然接近于固定长度,因此每次调度一个链表块中包含的所有描述符对应的数据进行转发,则可以在一定程度上提高路由器转发数据的速率的稳定性。
下面结合说明书附图,对本发明实施例进行详细描述。
图2为本发明实施例提供的数据转发过程,具体包括以下步骤:
S201:接收并保存数据,确定该数据所属的数据队列,并生成该数据对应的描述符。
在本发明实施例中,路由器确定接收到的数据所属的数据队列,也即确定转发该数据所要采用的数据队列。
另外,路由器在生成该数据对应的描述符时,可以根据保存该数据的存储地址、该数据的长度、确定的该数据所属的数据队列的队列标识,生成该数据对应的描述符。生成的该数据对应的描述符的格式如表1所示。
Address | Length | Queue ID |
表1
在表1中,Address即为保存该数据的存储地址,Length即为该数据的长度,Queue ID即为该数据所属的数据队列的队列标识。由表1可见,生成的该数据对应的描述符中包含了该数据的存储地址、该数据的长度、确定的该数据所属的数据队列的队列标识。
S202:确定当前该数据队列中的最后一个链表块中包含的所有描述符对应的数据长度的第一和值,将生成的描述符对应的数据的长度与该第一和值相加得到第二和值。
在本发明实施例中,一个数据队列由顺序排列的若干个链表块(LinkBlock,LB)构成,每个LB中包含若干个描述符,如表2所示。
LB1 | LB2 | LB3 |
表2
在表2中,该数据队列共包含3个LB,按各LB排序的先后顺序依次为LB1、LB2、LB3。每个LB中均包含若干个描述符。
当生成了接收到的数据对应的描述符后,路由器先确定该数据所属的数据队列中的最后一个链表块中包含的所有描述符对应的数据长度的和值,记为第一和值。然后将生成的描述符对应的数据的长度(也即接收到的数据的长度)与第一和值相加得到第二和值。
继续以表2为例进行说明,由于该数据队列中的最后一个LB为LB3,因此路由器先确定当前LB3中包含的所有描述符对应的数据的长度的第一和值,在将接收到的数据的长度与第一和值相加得到第二和值。
S203:判断该第二和值是否大于规定长度,若是,则执行步骤S204,否则执行步骤S205。
S204:新建一个链表块并***到该数据队列的末尾,并将生成的描述符***到新建的链表块中,执行步骤S206。
S205:将生成的描述符***到该最后一个链表块中,执行步骤S206。
继续以表2为例进行说明,如果确定的第二和值大于规定长度,则建立一个链表块,记为LB4,并***到该数据队列的末尾,此时该数据队列中的最后一个LB即为LB4,并将生成的描述符***到LB4中。如果确定的第二和值不大于规定长度,则将生成的描述符***到LB3中。
通过步骤S202~S205,则可以保证一个LB中包含的所有描述符对应的数据的长度之和接近于规定长度,但不超过规定长度。
S206:在转发该数据队列中的描述符对应的数据时,按照该数据队列中个链表块排序的先后顺序,依次调度每个链表块中包含的所有描述符对应的数据并转发。
在本发明实施例中,路由器在转发该数据队列中的描述符对应的数据时,并非是每次只调度一个数据进行转发的,而是每次调度一个链表块中包含的所有描述符对应的数据进行转发的,而由于一个链表块中包含的所有描述符对应的数据的长度之和接近于规定长度,因此即使路由器在一个时间段内连续接收到短数据,在下一个时间段内连续接收到长数据,也仍然可以保证路由器在这两个时间段内转发数据的速率的稳定性。
例如,假设路由器先连续接收到8个长度均为64字节的短数据,又连续接收到3个长度均为1.5K字节的长数据,则如果路由器在第一时间段内连续转发8个长度均为64字节的短数据,在第二时间段内连续转发3个长度均为1.5K字节的长数据,必然会导致路由器在这两个时间段内转发数据的数据量差异较大,降低了路由器转发数据的速率的稳定性。
而采用如图2所示的方法转发数据时,假设规定长度设为2K字节,则路由器先新建一个LB,记为LB1,将8个长度均为64字节的短数据分别对应的描述符,以及第1个长度为1.5K字节的长数据分别对应的描述符***到LB1中。由于此时LB1中包含的9个描述符对应的数据的长度的和值已经达到规定长度(2K字节),因此再建立一个LB,记为LB2,将第2个长度为1.5K字节的长数据对应的描述符***到LB2中。类似的,再建立LB3,将第3个长度为1.5K字节的长数据对应的描述符***到LB3中。可见,数据队列中包含的3个LB(LB1、LB2、LB3)中分别包含的所有描述符对应的数据的长度的和值分别为2K字节、1.5K字节、1.5K字节。在调度并转发该数据队列中的描述符对应的数据时,每次调度一个LB中包含的所有描述符对应的数据进行转发,因此每次调度并转发的数据量均接近于2K字节,从而,路由器在任一时间段内转发的数据量均接近于2K字节的若干倍,因此即使路由器在一个时间段内连续接收到短数据,在下一个时间段内连续接收到长数据,也仍然可以保证路由器在这两个时间段内转发数据的速率的稳定性。另外,由于路由器一次调度并转发的多个数据的数据量接近于规定长度,因此可以保证每秒转发数据的数据量基本固定,从而也提高了控制数据转发速率的准确性。
并且,由上例也可以看出,现有技术中路由器一次只调度并转发一个数据,而本发明实施例提供的方法中路由器一次调度并转发多个数据,因此也提高了路由器转发数据的效率。
另外,由于路由器调度并转发一次短数据所需要的时间小于调度并转发一次长数据所需要的时间,因此现有技术中当路由器连续接收到短数据时,就需要频繁的进行调度转发,使路由器的负担增大。而本发明实施例提供的方法中路由器一次调度并转发多个数据,并且调度转发的数据量接近于规定长度,因此路由器即使连续接收到短数据,也不需要频繁的进行调度转发,从而也减轻了路由器的负担。
较佳的,为了进一步提高路由器在两个相同的时间段内转发的数据量的差异,以进一步提高路由器转发数据的速率的稳定性,本发明实施例中一个数据队列中包含的每个链表块可以对应不同的规定长度。其中,一个链表块对应的规定长度由可变长度与预先设定的固定长度决定,可变长度由该链表块的前一个链表块中包含的所有描述符对应的数据的长度的和值与该固定长度的差值决定。
具体的,在确定一个链表块对应的规定长度时,先确定该链表块的前一个链表块中包含的所有描述符对应的数据的长度的第三和值,根据预先设定的固定长度,确定该固定长度减第三和值的差值,确定的该差值就是规定长度中的可变长度。确定了可变长度之后,确定可变长度与预先设定的该固定长度的第四和值,作为该链表块对应的规定长度。
相应的,在图2所示的步骤S203中,判断第二和值是否大与规定长度的方法具体为:在该数据队列中确定该最后一个链表块的前一个链表块,确定该前一个链表块中包含的所有描述符对应的数据的长度的第三和值,根据预先设定的固定长度,确定该固定长度减第三和值的差值,再将该固定长度与该差值相加得到第四和值,判断第二和值是否大于第四和值,若是,则确定第二和值大于规定长度,否则确定第二和值不大于规定长度。
继续以表2为例进行说明,确定数据队列中的LB3中包含的所有描述符对应的数据的长度的第一和值,再确定生成的描述符对应的数据的长度与第一和值相加得到的第二和值之后,确定前一个链表块(LB2)中包含的所有描述符对应的数据的长度的第三和值。假设LB2中包含的所有描述符对应的数据的长度的第三和值为K,预先设定的固定长度为n,则确定该固定长度减第三和值的差值为n-K,将固定长度与该差值相加得到的第四和值即为2n-K,该第四和值就是LB3对应的规定长度。在判断第二和值是否大于规定长度时,则判断第二和值是否大于2n-K,若大于,则确定第二和值大于规定长度,执行步骤S204,否则,确定第二和值不大于规定长度,执行步骤S205。
由此可以看出,LB2中包含的所有描述符对应的数据的长度的和值为K,而LB3对应的规定长度为2n-K,二者的和值即为2n。采用该方法设定一个数据队列中每个LB对应的规定长度时,任意两个相邻的LB对应的规定长度相加的和值均为固定长度的两倍。从而,如果在一个时间段内,路由器可以对该数据队列进行m次调度,则这m次调度并转发的数据量即为mn±lmax,lmax为最长数据的长度,也即,理想情况下路由器在该时间段内路由器转发的数据量为mn,实际应用中在该时间段内转发的数据量是在mn上下不超过lmax的范围内浮动,因此路由器在两个相同时间段内转发的数据量的差异最多不会超过2lmax,进而提高了路由器转发数据的速率的稳定性。
在图2所示的步骤S204中,新建一个链表快并***到该数据队列的末尾的方法具体为:根据预先设定的最短数据长度,确定预先设定的固定长度与该最短数据长度的比值,新建一个长度大于该比值的链表块,并***到该数据队列的末尾,将新建的链表块重新作为该数据队列的最后一个链表块。其中,预先设定的最短数据长度就是路由器可能接收到的长度最短的数据的长度。
采用上述方法新建链表块的原因在于,建立了链表块之后,并不能预知将要在该链表块中***多少个描述符,而如果一个链表块中包含的所有描述符对应的数据都是最短的数据,那么这个链表块中包含的描述符的数量最大,因此建立的每个链表块均要求至少可以容纳最大数量的描述符,该最大数量即为其中,n为预先设定的固定长度,lmin为最短数据长度。
本发明实施例提供了一种链表块的格式,如表3所示。
Next LB Pointer |
Total Frame Number |
Total Frame Length |
Frame 1 Descriptor |
Frame 2 Descriptor |
…… |
Frame x Descriptor |
表3
在表3中,Next LB Pointer为该链表块的下一个链表块所在的位置,TotalFrame Number为该链表块中包含的描述符的数量,Total Frame Length为该链表块中包含的所有描述符对应的数据的长度的和值,Frame 1 Descriptor、Frame2 Descriptor、……Frame x Descriptor分别为该链表块中包含的第1、2、……x个描述符。在如表3所示的链表块中,Next LB Pointer、Total Frame Number和Total Frame Length共占用1个字节的长度,Frame 1 Descriptor、Frame 2Descriptor、……Frame x Descriptor分别占用1个字节的长度,链表块的长度为个字节,当然,当不是整数时,要将进行取整。
另外,还可以在一个数据队列中维护一个链表尾部信息(Tail),Tail的格式可以如表4所示。
Tail LB Pointer |
Current Frame Number |
Current Frame Length |
Last Offset |
表4
在表4中,Tail LB Pointer为该数据队列中最后一个链表块所在的位置,Current Frame Number为当前最后一个链表块中包含的描述符的数量,CurrentFrame Length为当前最后一个链表块中包含的所有描述符对应的数据的长度的和值,也即第一和值,Last Offset为预先设定的固定长度与最后一个链表块的前一个链表块中包含的所有描述符对应的数据的长度的第三和值的差值。
仍以表2为例进行说明,当维护如表4的Tail时,由于当前该数据队列中的最后一个链表块为LB3,因此该数据队列的Tail中的Tail LB Pointer为LB3所在的位置。假设当前LB3中包含的描述符的数量为x个,则Tail中的CurrentFrame Number为x。假设当前LB3中包含的所有描述符对应的数据的长度的第一和值为L,则Tail中的Current Frame Length为L。假设LB3的前一个链表块LB2中包含的所有描述符对应的数据的长度的第三和值为K,预先设定的固定长度n与第三和值K的差值为n-K,则Tail中的Last Offset为n-K。
采用如表3所示的LB构成数据队列,并在该数据队列中维护如表4所示的Tail时,路由器接收到属于该数据队列的数据后,处理过程具体如图3所示。
图3为本发明实施例提供的将接收到的数据对应的描述符***到相应数据队列中的详细过程,具体包括以下步骤:
S301:生成该数据对应的描述符,确定该数据所属的数据队列。
S302:判断该数据队列的Tail中的Tail LB Pointer是否为空,若是,则执行步骤S303,否则执行步骤S305。
当Tail中的Tail LB Pointer为空时,表示该数据队列中不存在任何LB,也即该数据队列为空。
S303:新建一个LB并***到该数据队列的末尾,将Tail中的Tail LB Pointer赋值为新建的该LB在数据队列中的位置。
其中,新建的该LB的Total Frame Number和Total Frame Length均为0,表示此时新建的该LB中不包含任何描述符。并且,由于此时该数据队列中尚不存在位于新建的该LB之后的下一个LB,因此新建的该LB的Next LB Pointer暂不赋值。
S304:将生成的描述符***到新建的该LB中,将Tail中的Current FrameNumber赋值为1,将Current Frame Length赋值为接收到的该数据的长度,将Last Offset赋值为0。
在上述步骤S304中,将生成的描述符***到新建的该LB中后,也要将新建的该LB中的Total Frame Number加1,并将新建的该LB中的Total FrameLength增加***的该描述符对应的数据的长度。
S305:根据Tail中的Tail LB Pointer确定该数据队列中的最后一个链表块,并根据Current Frame Length确定最后一个链表块中包含的所有描述符对应的数据的长度的第一和值,确定接收到的该数据的长度加该第一和值的第二和值。
S306:确定预先设定的固定长度与Last Offset值的第四和值。
S307:判断第二和值是否大于第四和值,若是,则执行步骤S308,否则执行步骤S311。
S308:新建一个LB并***到该数据队列的末尾,将步骤S305中确定的最后一个链表块中的Next LB Pointer赋值为新建的该LB所在的位置,并将Tail中的Tail LB Pointer赋值为新建的该LB所在的位置。
其中,新建的该LB的Total Frame Number和Total Frame Length均为0,表示此时新建的该LB中不包含任何描述符。并且,由于此时该数据队列中尚不存在位于新建的该LB之后的下一个LB,因此新建的该LB的Next LB Pointer暂不赋值。
上述步骤S308中将Tail中的Tail LB Pointer赋值为新建的该LB所在的位置表示:将新建的该LB重新作为该数据队列中的最后一个链表块。
S309:将生成的描述符***到新建的该LB中,并将Tail中的Current FrameNumber赋值为1,将Current Frame Length赋值为接收到的数据的长度。
在上述步骤S309中,将生成的描述符***到新建的该LB中后,也要将新建的该LB中的Total Frame Number加1,并将新建的该LB中的Total FrameLength增加***的该描述符对应的数据的长度。
S310:确定步骤S305中确定的最后一个链表块中的Total Frame Length的值,确定预先设定的固定长度减Total Frame Length的差值,将Tail中的LastOffset赋值为该差值。
S311:将生成的描述符***到该最后一个链表块中,并将Tail中的CurrentFrame Number的值加1,将Current Frame Length的值再加上接收到的该数据的长度。
在上述步骤S311中,将生成的描述符***到新建的该LB中后,也要将新建的该LB中的Total Frame Number加1,并将新建的该LB中的Total FrameLength增加***的该描述符对应的数据的长度。
在图2所示的步骤S206中,路由器按照该数据队列中各链表块排序的先后顺序,依次调度每个链表块中包含的所有描述符对应的数据并转发的过程具体为:按照该数据队列中各链表块排序的先后顺序,依次针对每个链表块,读取该链表块中包含的所有描述符,针对读取的每个描述符,根据该描述符中包含的存储地址,读取该描述符对应的数据并转发。
其中,由于一个数据对应的描述符中包含了该数据的存储地址,因此路由器可以针对读取的描述符,根据该描述符中包含的存储地址,在相应的存储地址上读取到该描述符对应的数据,并进行转发。
在本发明实施例中,数据队列中还可以维护一个链表头部信息(Header),Header中包含Header LB Pointer,Header LB Pointer为该数据队列中的第一个链表块所在的位置。
在转发该数据队列中包含的描述符对应的数据时,可以根据Header中的Header LB Pointer确定当前该数据队列中的第一个链表块,并将第一个链表块中包含的所有描述符对应的数据调度转发出去。转发数据后,还可以在该数据队列中删除已转发的数据对应的描述符所在的链表块。
具体的,仍以表2为例进行说明,由于LB1为该数据队列中的第一个链表块,因此Header中的Header LB Pointer为LB1所在的位置,在转发数据时,根据Header中的Header LB Pointer确定第一个链表块为LB1,将LB1中包含的所有描述符对应的数据调度并转发出去,然后将Header LB Pointer赋值为LB1中的Next LB Pointer的值,表示将该第一链表块(LB1)的下一个链表块(LB2)重新作为第一个链表块,并将LB1删除。
基于上述同样的思路,本发明实施例还提供一种数据转发装置,如图4所示。图4为本发明实施例提供的数据转发装置结构示意图,具体包括:
缓存管理单元401,用于接收并保存数据,确定所述数据所属的数据队列,并生成所述数据对应的描述符;
链表输入单元402,用于确定当前所述数据队列中的最后一个链表块中包含的所有描述符对应的数据长度的第一和值,将生成的描述符对应的数据的长度与所述第一和值相加得到第二和值;判断所述第二和值是否大于规定长度;若是,则新建一个链表块并***到所述数据队列的末尾,将所述生成的描述符***到新建的链表块中,否则,将所述生成的描述符***到所述最后一个链表块中;
链表输出单元403,用于在转发所述数据队列中的描述符对应的数据时,按照所述数据队列中各链表块排序的先后顺序,依次调度每个链表块中包含的所有描述符对应的数据并转发。
所述缓存管理单元401具体用于,根据保存所述数据的存储地址、所述数据的长度、确定的所述数据所属的数据队列的队列标识,生成所述数据对应的描述符;
所述链表输出单元403具体用于,按照所述数据队列中各链表块排序的先后顺序,依次针对每个链表块,读取该链表块中包含的所有描述符,针对读取的每个描述符,根据该描述符中包含的存储地址,读取该描述符对应的数据并转发。
所述链表输入单元402具体用于,在所述数据队列中确定所述最后一个链表块的前一个链表块,确定所述前一个链表块中包含的所有描述符对应的数据的长度的第三和值,根据预先设定的固定长度,确定所述固定长度减所述第三和值的差值,将所述固定长度与所述差值相加得到第四和值,判断所述第二和值是否大于第四和值,若是,则确定所述第二和值大于规定长度,否则确定所述第二和值不大于规定长度。
所述链表输入单元402具体用于,根据预先设定的最短数据长度,确定所述固定长度与所述最短数据长度的比值,新建一个长度大于所述比值的链表块,并***到所述数据队列的末尾,将新建的链表块重新作为所述数据队列的最后一个链表块。
所述链表输入单元402还用于,在所述链表输出单元403依次调度每个链表块中包含的所有描述符对应的数据并转发后,在所述数据队列中删除已转发的数据对应的描述符所在的链表块。
具体的,上述数据转发装置可以通过现场可编程门阵列(FieldProgrammable Gate Array,FPGA)芯片实现,也可以通过专用集成电路(Application Specific Integrated Circuit,ASIC)芯片实现。
本发明实施例还提供一种网络设备,包括如上所述的数据转发装置,该网络设备具体可以是位于高速以太网中的路由器或交换机。
本发明实施例提供一种数据转发方法、装置及网络设备,该方法路由器生成接收到的数据对应的描述符,判断将该描述符***到相应数据队列中的最后一个链表块中后,最后一个链表块中包含的所有描述符对应的数据的长度的和值是否大于规定长度,若是,则新建一个链表块***到该数据队列的末尾,并将生成的描述符***到新建的链表块中,否则将生成的描述符***到最后一个链表块中,并在转发该数据队列中的描述符对应的数据时,一次调度该数据队列中的一个链表块中包含的所有描述符对应的数据并转发。通过上述方法,路由器在连续接收到短数据或者长数据时,均可以保证一个链表块中包含的所有描述符对应的数据的长度的和值接近于规定长度,但不超过规定长度,因此每次调度一个链表块中包含的所有描述符对应的数据进行转发,则可以在一定程度上提高路由器转发数据的速率的稳定性。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (11)
1.一种数据转发方法,其特征在于,包括:
接收并保存数据,确定所述数据所属的数据队列,并生成所述数据对应的描述符;
确定当前所述数据队列中的最后一个链表块中包含的所有描述符对应的数据的长度的第一和值,将生成的描述符对应的数据的长度与所述第一和值相加得到第二和值;
判断所述第二和值是否大于规定长度;
若是,则新建一个链表块并***到所述数据队列的末尾,并将所述生成的描述符***到新建的链表块中,否则,将所述生成的描述符***到所述最后一个链表块中;
在转发所述数据队列中的描述符对应的数据时,按照所述数据队列中各链表块排序的先后顺序,依次调度每个链表块中包含的所有描述符对应的数据并转发。
2.如权利要求1所述的方法,其特征在于,生成所述数据对应的描述符,具体包括:
根据保存所述数据的存储地址、所述数据的长度、确定的所述数据所属的数据队列的队列标识,生成所述数据对应的描述符;
按照所述数据队列中各链表块排序的先后顺序,依次调度每个链表块中包含的所有描述符对应的数据并转发,具体包括:
按照所述数据队列中各链表块排序的先后顺序,依次针对每个链表块,读取该链表块中包含的所有描述符;
针对读取的每个描述符,根据该描述符中包含的存储地址,读取该描述符对应的数据并转发。
3.如权利要求1所述的方法,其特征在于,判断所述第二和值是否大于规定长度,具体包括:
在所述数据队列中确定所述最后一个链表块的前一个链表块,确定所述前一个链表块中包含的所有描述符对应的数据的长度的第三和值;
根据预先设定的固定长度,确定所述固定长度减所述第三和值的差值,将所述固定长度与所述差值相加得到第四和值;
判断所述第二和值是否大于第四和值,若是,则确定所述第二和值大于规定长度,否则确定所述第二和值不大于规定长度。
4.如权利要求3所述的方法,其特征在于,新建一个链表块并***到所述数据队列的末尾,具体包括:
根据预先设定的最短数据长度,确定所述固定长度与所述最短数据长度的比值;
新建一个长度大于所述比值的链表块,并***到所述数据队列的末尾,将新建的链表块重新作为所述数据队列的最后一个链表块。
5.如权利要求1所述的方法,其特征在于,依次调度每个链表块中包含的所有描述符对应的数据并转发之后,所述方法还包括:
在所述数据队列中删除已转发的数据对应的描述符所在的链表块。
6.一种数据转发装置,其特征在于,包括:
缓存管理单元,用于接收并保存数据,确定所述数据所属的数据队列,并生成所述数据对应的描述符;
链表输入单元,用于确定当前所述数据队列中的最后一个链表块中包含的所有描述符对应的数据长度的第一和值,将生成的描述符对应的数据的长度与所述第一和值相加得到第二和值;判断所述第二和值是否大于规定长度;若是,则新建一个链表块并***到所述数据队列的末尾,将所述生成的描述符***到新建的链表块中,否则,将所述生成的描述符***到所述最后一个链表块中;
链表输出单元,用于在转发所述数据队列中的描述符对应的数据时,按照所述数据队列中各链表块排序的先后顺序,依次调度每个链表块中包含的所有描述符对应的数据并转发。
7.如权利要求6所述的装置,其特征在于,所述缓存管理单元具体用于,根据保存所述数据的存储地址、所述数据的长度、确定的所述数据所属的数据队列的队列标识,生成所述数据对应的描述符;
所述链表输出单元具体用于,按照所述数据队列中各链表块排序的先后顺序,依次针对每个链表块,读取该链表块中包含的所有描述符,针对读取的每个描述符,根据该描述符中包含的存储地址,读取该描述符对应的数据并转发。
8.如权利要求6所述的装置,其特征在于,所述链表输入单元具体用于,在所述数据队列中确定所述最后一个链表块的前一个链表块,确定所述前一个链表块中包含的所有描述符对应的数据的长度的第三和值,根据预先设定的固定长度,确定所述固定长度减所述第三和值的差值,将所述固定长度与所述差值相加得到第四和值,判断所述第二和值是否大于第四和值,若是,则确定所述第二和值大于规定长度,否则确定所述第二和值不大于规定长度。
9.如权利要求8所述的装置,其特征在于,所述链表输入单元具体用于,根据预先设定的最短数据长度,确定所述固定长度与所述最短数据长度的比值,新建一个长度大于所述比值的链表块,并***到所述数据队列的末尾,将新建的链表块重新作为所述数据队列的最后一个链表块。
10.如权利要求6所述的装置,其特征在于,所述链表输入单元还用于,在所述链表输出单元依次调度每个链表块中包含的所有描述符对应的数据并转发后,在所述数据队列中删除已转发的数据对应的描述符所在的链表块。
11.一种网络设备,其特征在于,包括如权利要求6~10任一所述的数据转发装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210265397.8A CN102780626B (zh) | 2012-07-27 | 2012-07-27 | 一种数据转发方法、装置及网络设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210265397.8A CN102780626B (zh) | 2012-07-27 | 2012-07-27 | 一种数据转发方法、装置及网络设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102780626A true CN102780626A (zh) | 2012-11-14 |
CN102780626B CN102780626B (zh) | 2015-08-19 |
Family
ID=47125387
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210265397.8A Active CN102780626B (zh) | 2012-07-27 | 2012-07-27 | 一种数据转发方法、装置及网络设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102780626B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105792268A (zh) * | 2014-12-25 | 2016-07-20 | 展讯通信(上海)有限公司 | 一种数据维护***及方法 |
CN106851594A (zh) * | 2017-03-10 | 2017-06-13 | 广东欧珀移动通信有限公司 | 一种广播发送方法、装置及终端 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1547358A (zh) * | 2003-12-02 | 2004-11-17 | 烽火通信科技股份有限公司 | 一种用于以太网无源光网络的数据帧缓存设备和方法 |
US20060174251A1 (en) * | 2005-02-03 | 2006-08-03 | Level 5 Networks, Inc. | Transmit completion event batching |
CN101938404A (zh) * | 2009-07-01 | 2011-01-05 | 中兴通讯股份有限公司 | 用于数据流量管理的随机早期丢弃方法和装置 |
CN102326369A (zh) * | 2011-08-04 | 2012-01-18 | 华为技术有限公司 | 队列调度方法和装置 |
-
2012
- 2012-07-27 CN CN201210265397.8A patent/CN102780626B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1547358A (zh) * | 2003-12-02 | 2004-11-17 | 烽火通信科技股份有限公司 | 一种用于以太网无源光网络的数据帧缓存设备和方法 |
US20060174251A1 (en) * | 2005-02-03 | 2006-08-03 | Level 5 Networks, Inc. | Transmit completion event batching |
CN101938404A (zh) * | 2009-07-01 | 2011-01-05 | 中兴通讯股份有限公司 | 用于数据流量管理的随机早期丢弃方法和装置 |
CN102326369A (zh) * | 2011-08-04 | 2012-01-18 | 华为技术有限公司 | 队列调度方法和装置 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105792268A (zh) * | 2014-12-25 | 2016-07-20 | 展讯通信(上海)有限公司 | 一种数据维护***及方法 |
CN105792268B (zh) * | 2014-12-25 | 2019-11-22 | 展讯通信(上海)有限公司 | 一种数据维护***及方法 |
CN106851594A (zh) * | 2017-03-10 | 2017-06-13 | 广东欧珀移动通信有限公司 | 一种广播发送方法、装置及终端 |
Also Published As
Publication number | Publication date |
---|---|
CN102780626B (zh) | 2015-08-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109962847B (zh) | 业务功能链报文的封装方法和装置及计算机可读存储介质 | |
CN104125045A (zh) | 一种用于传输ack/nack消息的方法 | |
CN103188810B (zh) | 指示位表下发方法和指示操作方法及设备和*** | |
CN102665284A (zh) | 上行业务传输调度方法和终端 | |
US11621925B2 (en) | Asynchronous medium access control layer scheduler for directional networks | |
CN102780626A (zh) | 一种数据转发方法、装置及网络设备 | |
CN1848973B (zh) | 一种短消息群发的方法、终端及短消息中心 | |
CN107666626B (zh) | 多波长通道的数据传输方法、光线路终端以及*** | |
CN103051744B (zh) | 组播地址的转换方法及装置 | |
CN101878619B (zh) | 无线中继网络中控制数据包传输的方法和装置 | |
US20120151878A1 (en) | Method for Automatically Generating Dynamic Frame Packing Groups | |
CN107615810B (zh) | 用于在线网络代码的包头压缩***和方法 | |
CN103532758B (zh) | 适合下一代传输、数据设备融合的配置处理方法 | |
CN107005420B (zh) | 组业务反馈方法及装置 | |
CN112188562B (zh) | 中继基站的多播调度方法和装置、存储介质及电子装置 | |
CN104144134A (zh) | 一种队列调度方法及装置 | |
CN101964745A (zh) | 一种网络转发设备及其进行报文转发的方法 | |
CN104618083A (zh) | 一种多通道报文转发的方法 | |
CN105245423B (zh) | 基于最大分配距离算法的1553b总线消息传输优化方法 | |
CN1819667B (zh) | 分配编码和调度编码的方法以及网络侧设备和无线电站 | |
CN108702335A (zh) | 用于在多媒体***中发送和接收媒体数据的方法和设备 | |
CN107026888A (zh) | 大容量数据传送装置及方法 | |
US10911986B2 (en) | Wireless communication device, wireless communication system, and wireless communication method | |
CN105389267A (zh) | stats分配的芯片实现方法 | |
JP2006197003A (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder |
Address after: Cangshan District of Fuzhou City, Fujian province 350002 Jinshan Road No. 618 Garden State Industrial Park 19 floor Patentee after: RUIJIE NETWORKS Co.,Ltd. Address before: Cangshan District of Fuzhou City, Fujian province 350002 Jinshan Road No. 618 Garden State Industrial Park 19 floor Patentee before: Beijing Star-Net Ruijie Networks Co.,Ltd. |
|
CP01 | Change in the name or title of a patent holder |