專利名稱:實現快速轉發并支持負載分擔的方法
所屬領域本發明涉及一種實現快速轉發并支持負載分擔的方法,屬于IP網絡通信技術領域。
在路由器未使能快速轉發功能時,其接收到的報文將經過鏈路層直接送交IP層進行轉發處理該報文在IP層查找路由表,根據相應的路由信息選擇對應的接口發送。該報文經IP層輸出到鏈路層后,將更換新的鏈路層幀頭信息,然后從物理層發出。在路由器使能了快速轉發功能之后,其接收到的報文在鏈路層將進行如下處理首先查找路由緩存表(又稱快速轉發表)。如果未發現與其匹配的表項,該報文將被送交IP層進行上述的轉發處理。所不同的是,當該報文經IP層輸出到鏈路層處理完畢,即將交給物理層時,將把其鏈路層幀頭等信息添加到路由緩存表項目中,然后再從物理層發出該報文。這樣,當鏈路層再次收到和該報文有相同特征的報文(如目的地址相同的報文),就會在查找路由緩存表時,發現與其匹配的表項。此時,新報文將不再走IP層處理,直接根據路由緩存表中保存的信息,更換其幀頭信息,從相應輸出接口中發出。
在路由器使能了負載分擔功能之后,路由器的路由表將發生如下變化原來路由表中到達某一地址的路由項目只有一條;而使能了負載分擔功能后,路由表中到達某一地址的路由項目將有多條(參見圖2,為便于描述,以設置三條路由表項為例,分別命名為分擔路由1、分擔路由2、分擔路由3;它們分別對應不同的輸出接口)。當具有相同目的地址的一組IP報文(簡稱一條IP數據流)依次經過IP層查找路由處理時,將輪流選用這三個分擔路由,從三個不同輸出接口輪流發出,從而實現了分擔流量的功能在圖2中,虛線描述的是未使能快速轉發和負載分擔功能時,IP報文的一般處理流程;圖2的中間和下方實線描述的是使能快速轉發功能時,IP報文的處理流程,特點是通過簡化報文處理流程,提高路由器轉發報文的效率;圖2上方的實線描述的是使能負載分擔功能時,IP報文的處理流程,特點是通過配置多條分擔路由,使業務流量被多條鏈路負載分擔。
現在市場上銷售的路由器產品,包括申請人研制的路由器和業界絕大多數公司的路由器,其快速轉發都不支持負載分擔特性。例如業界權威思科(cisco)公司的快速轉發也不支持負載分擔功能。雖然cisco公司特有的CEF轉發(CiscoExpress Forwarding)特性既能支持高速數據轉發,又能支持負載分擔;但它是通過采用路由分級索引來加快路由查找速度的,同時,在相同平臺的路由器中,CEF轉發性能較快速轉發要低得多,也就是說通過CEF來支持負載分擔沒有通過快速轉發支持負載分擔的效率高。
在現有技術中,當用戶使能快速轉發模塊,同時配置了多條路由分擔負載時,由于現有快速轉發緩存表的數據結構僅保存一條輸出接口信息(參見圖3),所以路由器在處理需要轉發的報文是按照如下方式進行的當鏈路層接收到一條IP流的第一個IP報文時,先會查找到其沒有保存快速轉發緩存信息,就把該報文送交IP過程轉發處理。然后,檢查到第一條負載分擔路由時,將根據該路由信息進行轉發,同時,生成并添加相應的快速轉發路由緩存項目(包括該IP報文對應的輸出接口、輸出接口的幀頭信息、幀頭長度信息等)。當鏈路層接收到該IP流的第二個IP報文后,由于它們具有相同的索引,會直接查找到相應的轉發路由緩存信息。所以從第二個報文開始,該IP流的所有報文都將被直接貼上對應輸出接口的幀頭信息,從同一輸出接口發送出去。也就是說,由于有了快速轉發,這些IP報文流都將按照第一條負載分擔路由,從相同的輸出接口被轉發,導致路由負載分擔失效,數據流量不能按照用戶設置的負載分擔要求得到分流。
圖3展示了現有的快速轉發路由緩存表的數據結構,其中每一組緩存項目與一條IP流相對應,每一組緩存項目由一個索引項和對應的輸出接口信息單元所組成,其特點是在該輸出接口信息單元里僅靜態地保存了一個輸出接口的信息。
本發明的目的是這樣實現的一種實現快速轉發并支持負載分擔的方法,其特征在于(1)設置環行鏈表;(2)將輸出接口信息存儲在該環行鏈表中;(3)數據報文根據存儲在該環行鏈表中的輸出接口信息從相應的輸出接口直接轉發。
所述步驟(1)是在由多個緩存表項所組成的快速轉發路由緩存表中的每個緩存信息單元的數據結構中,設置緩存有“輸出接口信息”和“指向下一個輸出接口的指針”;該“輸出接口信息”的數據結構是由支持該IP數據流負載分擔的若干個“輸出接口信息節點”組成,其中每個“輸出接口信息節點”均采用動態生成,并用“輸出接口信息節點”中的尾指針相連成環而形成環行鏈表結構,每個鏈表的節點對應一個“輸出接口信息節點”。
所述的多個緩存表項中的每一個緩存項目對應于一條IP數據流,該每一個緩存項目包括一個索引項和對應的緩存信息單元。
所述的每一個緩存項目中的緩存信息單元存儲有“指向下一個輸出接口的指針”和由若干個“輸出接口信息節點”組成的“輸出接口信息”。
所述的每個“輸出接口信息節點”存儲有該IP流的幀頭信息、對應的輸出接口和尾指針。
所述的數據報文根據存儲在該環行鏈表中的輸出接口信息從相應的輸出接口直接轉發的處理流程包括有下列步驟(A)在系統初試化時,首先將路由緩存表中的第一個“輸出接口信息”及其“指向下一個輸出接口的指針”均初試化為“空”;(B)當鏈路層接收到某條IP流的第一個報文時,先檢查其輸出接口信息,發現它為“空”,則將該報文轉交IP層處理,選擇該IP流第一條負載分擔路由進行轉發;并在該接口發送報文前,把該輸出接口信息保存在路由緩存表第一個節點,同時把該節點的尾指針指向自身,而“指向下一個輸出接口的指針”仍為“空”;(C)當鏈路層接收到某條IP流的第二個及其后續報文時,都是先檢查其輸出接口信息,若不為“空”,則立刻檢查“指向下一個輸出接口的指針”,發現它為“空”;則將該報文轉交IP層處理,每次按順序地選擇該IP流的一條負載分擔路由進行轉發;并在其相應接口發送報文前,比較該輸出接口信息與路由緩存表中已經保存的接口信息是否不同,若不存在相同的接口信息,則每次在輸出接口信息的雙向鏈表中創建一個新節點,再通過各節點的頭尾指針將該輸出接口信息中的各個節點順序連接成環;其中“指向下一個輸出接口的指針”在各個負載分擔的不同路由沒有全部緩存到該輸出接口信息中時,每次均為“空”;(D)在所有負載分擔的不同路由全部分流傳輸過一次該IP流的報文之后,該IP流的第二次循環的第一個報文在對應的鏈路層接口轉發報文前,發現以前已經保存過該輸出接口信息,就不再生成新節點;而是把該“輸出接口信息”尾指針對應的值賦給“指向下一個輸出接口的指針”;(E)當這條IP流的后續報文再次到來時,檢查到“指向下一個輸出接口的指針”不為“空”,即直接從它所指向的節點對應的輸出接口信息,找到當前報文的輸出接口,并依據該輸出接口信息更換幀頭,從相應的輸出接口直接轉發出去;同時,把“指向下一個輸出接口的指針”內容修改為該節點尾指針中的值。
本發明的創新關鍵是對快速轉發緩存中保存的緩存信息單元的數據結構進行修改,增加一個“指向下一個輸出接口的指針”,同時將其中的“輸出接口信息”的數據結構修改成由支持該IP數據流負載分擔的若干個“輸出接口信息節點”組成,其中每個“輸出接口信息節點”均采用動態生成,并用該“輸出接口信息節點”中的尾指針順序連接成環而形成環型鏈表結構;不同于以往的靜態存儲,且只存儲一個輸出接口信息;再輔以相應的處理方法,就可以實現快速轉發支持負載分擔的特性。
本發明的優點是在保證高速轉發效率的同時,可以充分利用網絡帶寬的資源來平衡業務流量。該方法對現有的快速轉發流程修改很簡單,容易實現;且由于快速轉發是在中斷中執行的,故本發明對現有快速轉發流程的處理效率影響也很小,理論分析的結果是比cisco的CEF特性在支持負載分擔情況下的轉發處理效率要高。
圖2是現有的IP報文的快速轉發和負載分擔的處理流程示意圖。
圖3是現有的快速轉發路由緩存表的數據結構示意圖。
圖4是本發明的實現快速轉發并支持負載分擔的方法的流程圖。
圖5是本發明中快速轉發路由緩存表中路由緩存項數據結構的示意圖。
本發明是一種采用環行鏈表實現快速轉發并支持負載分擔的方法,其快速轉發路由緩存表的數據結構是由多個緩存表項所組成,其中每一組緩存項目對應于一條IP數據流,每一組緩存項目包括一個索引項和對應的緩存信息單元;本發明的創新點是在該快速轉發路由緩存表中的每個緩存信息單元的數據結構中,除了緩存的“輸出接口信息”以外,還設置一個“指向下一個輸出接口的指針”;且路由緩存表中的該“輸出接口信息”的數據結構也修改為由支持該IP數據流負載分擔的若干個“輸出接口信息節點”組成,其中每個“輸出接口信息節點”均采用動態生成,并用“輸出接口信息節點”中的尾指針相連成環而形成環行鏈表結構,每個鏈表的節點對應一個“輸出接口信息節點”;再輔以相應的報文處理流程而實現的。
本發明的數據報文根據存儲在該環行鏈表中的輸出接口信息從相應的輸出接口直接轉發的處理流程包括有下列步驟(A)在系統初試化時,首先將路由緩存表中的第一個“輸出接口信息”及其“指向下一個輸出接口的指針”均初試化為“空”;(B)當鏈路層接收到某條IP流的第一個報文時,先檢查其輸出接口信息,發現它為“空”,則將該報文轉交IP層處理,選擇該IP流第一條負載分擔路由進行轉發;并在該接口發送報文前,把該輸出接口信息保存在路由緩存表第一個節點,同時把該節點的尾指針指向自身,而“指向下一個輸出接口的指針”仍為“空”;(C)當鏈路層接收到某條IP流的第二個及其后續報文時,都是先檢查其輸出接口信息,若不為“空”,則立刻檢查“指向下一個輸出接口的指針”,發現它為“空”;則將該報文轉交IP層處理,每次按順序地選擇該IP流的一條負載分擔路由進行轉發;并在其相應接口發送報文前,比較該輸出接口信息與路由緩存表中已經保存的接口信息是否不同,若不存在相同的接口信息,則每次在輸出接口信息的雙向鏈表中創建一個新節點,再通過各節點的頭尾指針將該輸出接口信息中的各個節點順序連接成環;其中“指向下一個輸出接口的指針”在各個負載分擔的不同路由沒有全部緩存到該輸出接口信息中時,每次均為“空”;(D)在所有負載分擔的不同路由全部分流傳輸過一次該IP流的報文之后,該IP流的第二次循環的第一個報文在對應的鏈路層接口轉發報文前,發現以前已經保存過該輸出接口信息,就不再生成新節點;而是把該“輸出接口信息”尾指針對應的值賦給“指向下一個輸出接口的指針”,也就是說,此時“指向下一個輸出接口的指針”不再為“空”,而是指向了負載分擔的第二個“輸出接口信息”;(E)當這條IP流的后續報文再次到來時,檢查到“指向下一個輸出接口的指針”不為“空”,即直接從它所指向的節點對應的輸出接口信息,找到當前報文的輸出接口,并依據該輸出接口信息更換幀頭,從相應的輸出接口直接轉發出去;同時,把“指向下一個輸出接口的指針”內容修改為該節點尾指針中的值;這樣,后續的報文就能夠順序輪流地從配置的各個負載分擔接口中高速轉發出去,實現了快速轉發支持負載分擔的功能。
下面結合圖5介紹本發明的一個實施例(其配置了三條負載分擔路由)首先啟動路由器,系統初試化,路由緩存表中的第一項“輸出接口信息”及其“指向下一個輸出接口的指針”均初試化為“空”;此時“輸出接口信息”里的“輸出接口信息節點1”、及其后面的“輸出接口信息節點2”和“輸出接口信息節點3”都還未生成。
當鏈路層接收到某條IP流的第一個報文時,檢查到“輸出接口信息”為“空”,則將該報文轉交IP過程轉發,進行路由查找時會查到第一條負載分擔路由,即“輸出接口信息節點1”;在鏈路層即將發送該報文前,把其相應的輸出接口的信息數據(包括該IP流的幀頭信息、輸出接口和尾指針)保存在路由緩存表對應索引項的“輸出接口信息節點1”的節點中,同時把該節點的尾指針指向自身;此時,其“指向下一個輸出接口的指針”仍為“空”;當該IP流的第二個報文到來時,先檢查“輸出接口信息”不為“空”,然后立刻檢查“指向下一個輸出接口的指針”,發現它還是為“空”;則將該報文轉交IP層處理,此時使能了的負載分擔軟件功能模塊就會將該報文從第二條負載分擔路由的輸出接口轉發出去;在鏈路層發送該報文之前,比較該輸出接口信息和路由緩存中已經保存的信息時,發現當前輸出接口信息沒有保存,則創建一個新節點“輸出接口信息節點2”,同時,修改“輸出接口信息節點1”的尾指針指向“輸出接口信息節點2”,而“輸出接口信息節點2”的尾指針指向“輸出接口信息節點1”,兩個節點連接成環;而“指向下一個輸出接口的指針”仍為“空”。
當該IP流的第三個報文到來時,如同第二個報文進行處理。即上交IP層處理,查找到第三條負載分擔路由。在對應鏈路層接口發出報文前,發現以前沒有保存過該輸出接口信息,于是在路由緩存中添加新節點“輸出接口信息節點3”。同時,修改“輸出接口信息節點2”的尾指針指向“輸出接口信息節點3”,“輸出接口信息節點3”的尾指針指向“輸出接口信息節點1”,連接成環。“指向下一個輸出接口的指針”仍為“空”。
當這條流的第四個報文到來時,也是如同第二個報文進行同樣處理。即上交IP層處理,此時負載分擔軟件功能模塊就會將該報文送交第一條分擔路由轉發。在對應鏈路層接口發出報文前,發現以前已經保存過該接口信息,于是不再生成新節點;而是把“輸出接口信息節點1”尾指針對應的值賦給“指向下一個輸出接口的指針”,也就是說此時“指向下一個輸出接口的指針”不再為“空”,指向了“輸出接口信息節點2”。
當這條流的后續報文到來時,檢查到“指向下一個輸出接口的指針”不為“空”,即根據它所指向節點對應的輸出接口信息,更換幀頭,從相應的輸出接口直接轉發出去。同時,把“指向下一個輸出接口的指針”內容修改為該節點尾指針中的值。例如在本實施例中,第五個報文就不再被上交IP層處理,而是直接從“指向下一個輸出接口的指針”找到輸出接口2,依據“輸出接口信息節點2”更換幀頭后直接轉發。同時修改“指向下一個輸出接口的指針”指向“輸出接口信息節點3”這樣,后續的IP報文就能夠輪流從配置的負載分擔接口中高速轉發出去了,從而實現了快速轉發支持負載分擔的功能。
權利要求
1.一種實現快速轉發并支持負載分擔的方法,其特征在于(1)設置環行鏈表;(2)將輸出接口信息存儲在該環行鏈表中;(3)數據報文根據存儲在該環行鏈表中的輸出接口信息從相應的輸出接口直接轉發。
2.根據權利要求1所述的一種實現快速轉發并支持負載分擔的方法,其特征在于所述步驟(1)是在由多個緩存表項所組成的快速轉發路由緩存表中的每個緩存信息單元的數據結構中,設置緩存有“輸出接口信息”和“指向下一個輸出接口的指針”;該“輸出接口信息”的數據結構是由支持該IP數據流負載分擔的若干個“輸出接口信息節點”組成,其中每個“輸出接口信息節點”均采用動態生成,并用“輸出接口信息節點”中的尾指針相連成環而形成環行鏈表結構,每個鏈表的節點對應一個“輸出接口信息節點”。
3.根據權利要求2所述的一種實現快速轉發并支持負載分擔的方法,其特征在于所述的多個緩存表項中的每一個緩存項目對應于一條IP數據流,該每一個緩存項目包括一個索引項和對應的緩存信息單元。
4.根據權利要求3所述的一種實現快速轉發并支持負載分擔的方法,其特征在于所述的每一個緩存項目中的緩存信息單元存儲有“指向下一個輸出接口的指針”和由若干個“輸出接口信息節點”組成的“輸出接口信息”。
5.根據權利要求2或4所述的一種實現快速轉發并支持負載分擔的方法,其特征在于所述的每個“輸出接口信息節點”存儲有該IP流的幀頭信息、對應的輸出接口和尾指針。
6.根據權利要求1所述的一種實現快速轉發并支持負載分擔的方法,其特征在于所述的數據報文根據存儲在該環行鏈表中的輸出接口信息從相應的輸出接口直接轉發的處理流程包括有下列步驟(A)在系統初試化時,首先將路由緩存表中的第一個“輸出接口信息”及其“指向下一個輸出接口的指針”均初試化為“空”,(B)當鏈路層接收到某條IP流的第一個報文時,先檢查其輸出接口信息,發現它為“空”,則將該報文轉交IP層處理,選擇該IP流第一條負載分擔路由進行轉發;并在該接口發送報文前,把該輸出接口信息保存在路由緩存表第一個節點,同時把該節點的尾指針指向自身,而“指向下一個輸出接口的指針”仍為“空”;(C)當鏈路層接收到某條IP流的第二個及其后續報文時,都是先檢查其輸出接口信息,若不為“空”,則立刻檢查“指向下一個輸出接口的指針”,發現它為“空”;則將該報文轉交IP層處理,每次按順序地選擇該IP流的一條負載分擔路由進行轉發;并在其相應接口發送報文前,比較該輸出接口信息與路由緩存表中已經保存的接口信息是否不同,若不存在相同的接口信息,則每次在輸出接口信息的雙向鏈表中創建一個新節點,再通過各節點的頭尾指針將該輸出接口信息中的各個節點順序連接成環;其中“指向下一個輸出接口的指針”在各個負載分擔的不同路由沒有全部緩存到該輸出接口信息中時,每次均為“空”;(D)在所有負載分擔的不同路由全部分流傳輸過一次該IP流的報文之后,該IP流的第二次循環的第一個報文在對應的鏈路層接口轉發報文前,發現以前已經保存過該輸出接口信息,就不再生成新節點;而是把該“輸出接口信息”尾指針對應的值賦給“指向下一個輸出接口的指針”;(E)當這條IP流的后續報文再次到來時,檢查到“指向下一個輸出接口的指針”不為“空”,即直接從它所指向的節點對應的輸出接口信息,找到當前報文的輸出接口,并依據該輸出接口信息更換幀頭,從相應的輸出接口直接轉發出去;同時,把“指向下一個輸出接口的指針”內容修改為該節點尾指針中的值。
全文摘要
一種實現快速轉發并支持負載分擔的方法,首先設置環行鏈表,即在快速轉發路由緩存表中的每個緩存信息單元的數據結構中增設一個“指向下一個輸出接口的指針”,且緩存的“輸出接口信息”是由支持負載分擔的若干個“輸出接口信息節點”組成,每個“輸出接口信息節點”均為動態生成,并用“輸出接口信息節點”中的尾指針相連成環而形成環行鏈表結構;然后將輸出接口信息存儲在該環行鏈表中,數據報文根據存儲在該環行鏈表中的輸出接口信息從相應的輸出接口直接轉發,以支持負載分擔。
文檔編號H04L12/54GK1414736SQ0211787
公開日2003年4月30日 申請日期2002年5月24日 優先權日2002年5月24日
發明者馬達 申請人:華為技術有限公司