劉金生,陳石
(中國聯合網絡通信有限公司 網絡運維部綜合監控處,北京 100033)
摘要:在多鏈路互聯的BGP鄰居之間實現流量按需負載分擔,可以有效提高鏈路利用率,降低組網成本,但目前常見的實現方法要么對硬件性能要求較高,要么配置復雜,不易在較大網絡特別是電信運營商網內靈活部署。利用BGP路由尋址的特點,采用多重遞歸的方式,實現了按鏈路帶寬的比例分配流量的非等價負載分擔。這種方法原理簡單,易于操作,具備較好的擴展性。
關鍵詞:邊界網關協議;等價多路徑;非等價負載分擔;遞歸尋址;選路原則
0引言
數據流量的多鏈路負載分擔技術在互聯網界應用廣泛,對應不同的網絡結構和需求,解決方案不盡相同。本文提供的非等價負載分擔方案基于路由尋址算法和BGP“下一跳”的遞歸屬性,與常見的策略路由方式相比,該方案配置更簡單,部署更加靈活。
1等價負載分擔
Internet是由眾多相互聯在一起的自治系統(Autonomous System)組成的,為這些自治系統提供路由交換功能的協議就是邊界網關協議(BGP)[1]。為了保障BGP協議自身的健壯性和穩定性,BGP協議規定了13條選路原則,所有開啟BGP功能的路由器都嚴格遵守這些選路原則。
根據這13條選路原則,BGP協議默認不支持等價路徑,也就是說BGP數據庫中到達同一個目的IP只有一條最優的路由會被放入路由表。
基于網絡可靠性的考慮,很多企業網在與電信運營商互聯時采用了雙歸、甚至多上聯的拓撲結構。為了提高數據傳送的效率和可靠性,對于這種多鏈路互聯的BGP鄰居,BGP協議在設計之初也保留了一個后門,即“等價多路徑”(Equal Cost MultiPath,ECMP)功能,一旦啟用了這一功能,對于同一目的IP,BGP協議允許最多可以有6條等價路徑被放入路由表中。
如圖1所示,自治系統AS100和AS200通過邊界路由器R1和R2建立了BGP鄰居關系。R1和R2之間有兩條直連的物理鏈路。當AS100內的用戶訪問AS200內的服務器時,在R1和R2上開啟ECMP功能,兩個自治系統之間的流量就會按照1∶1的比例加載到兩條直連鏈路上,而不是只選擇其中一條鏈路進行數據流量的傳遞。
這樣看,ECMP解決了多鏈路流量負載均擔問題,在一定程度上提高了網絡的可靠性。目前,國內主要電信運營商已把ECMP功能作為BGP接入的備選方案向用戶推薦,各主流電信設備供應商如思科、華為、Junior、中興等也紛紛宣布支持這一功能。
2非等價負載分擔的提出
仍以圖1為例,R1和R2之間的兩條物理鏈路,第一條是點到點的串行鏈路,假設帶寬為2.5 Gb/s;第二條是廣播型的以太網鏈路,假設為帶寬為10 Gb/s。如果在R1和R2上開啟ECMP功能,則每條鏈路最大流量不能超過2.5 Gb/s,否則串行鏈路就會因流量超過帶寬值而丟包,此時的以太網鏈路尚有10 Gb/s-2.5 Gb/s=7.5 Gb/s的帶寬處于閑置狀態。
如何既能夠讓去往同一目的IP的流量承載在不同的鏈路上,又能夠讓帶寬高的鏈路能者多勞?就此提出了非等價負載分擔的需求。
目前實現非等價負載分擔常見方法包括:策略路由、流量工程、MPLSVPN等。這些方法要么對設備的性能要求較高,要么需要BGP鄰居之間密切配合,對各種數據流進行分類和打標記,并在路由進行收發雙向控制,配置過程復雜,無法根據業務流量和中繼鏈路的變化靈活地部署,擴展性差[2]。
3路由尋址與遞歸過程
路由尋址算法的本質就是在路由表中實現對目的IP地址前綴的最長匹配[3]。
圖2路由尋址的哈希過程如圖2所示,目的IP一旦被放入路由表,它的前綴同時就被哈希到特定的桶中,尋址的過程就是從哈希表中的第一個記錄開始,對被哈希的關鍵字與給定值(即掩碼值,從32到0)逐個進行比較,當某個哈希的關鍵字與給定值完全相等時,則查找成功,路由協議會根據所查的記錄將包含目的IP數據包送入對應的出接口;否則,若直到最后一個記錄,其關鍵字和給定值比較都不相等,則查找失敗,包含目的IP的數據包被送入默認網關(若未設默認網關,則該數據包被丟棄)。
路由尋址哈希算法描述[4]如下:
int Search(int d,int a[],int n)
/*在數組a[]中查找等于D元素,若找到,則函數返回d在數組中的位置,否則為0。其中n為數組長度*/
int i;
/*從后往前查找*/
for(i=n-1;a!=d;--i)
return i ;
/*如果找不到,則i為0*/
事實上,路由尋址算法還包含了遞歸的過程,即尋找數據包下一跳的過程路由的三元素包括:目標地址、掩碼、下一跳。只有計算出有效的下一跳,IP協議才能逐跳地將數據包送往目的地。
所謂有效的下一跳,對于路由器而言分為兩個層面。從轉發層面(FIB:轉發信息庫)看,就是本路由器到達目的IP所經的出接口。從控制層面(RIB:路由信息庫)看,就是在路由表中進行最長掩碼匹配的哈希算法查找的結果,是一個IP地址,如果這個IP地址對應一個直連出接口,它就是一個有效的下一跳,可以被直接映射到轉發表中,參與指導數據包的轉發[5];如果這個IP地址沒有對應的直連出接口,則不能稱之為有效的下一跳,需要進行遞歸查找,最終找到對應的直連出接口為止。
如圖3所示,在BGP路由表中,R0到達Server的下一跳是R3,到達R3的下一跳是R2,到達R2的下一跳是R1,以此類推。IP協議在查找路由時,如果發現下一跳不是與自己直連的,那么就會將此下一跳地址作為目的IP再次按照上述邏輯查找路由表,直到查到與自己直連的下
一跳或者完全失敗為止,這就是路由的遞歸查找。
遞歸過程算法描述如下:
CheckNode{
int A;
int B;
Node children[1<<B];
}
union Node{
Leaf entry;
CheckNode node;
}
由于查找下一跳的次數不是固定的(用A表示),并且經過本次遞歸查找后下一跳是否有對應的直連接口也不確定(用B表示),因此每一輪遞歸查找就是一個CheckNode過程。
4案例實現
仍以圖1為例,AS100網內的用戶希望向AS200網內的文件服務器(IP地址200.0.0.1)傳送文件,并且希望在傳送過程中根據兩條互聯鏈路帶寬的比例(2.5 Gb/s∶10 Gb/s=1∶4)分配數據流量。具體配置如表1所示。表1R1和R2的初始配置設備名R1R2Loopback0接口IP地址1.1.1.1/322.2.2.2/32鏈路帶寬鏈路流量占比
需求(共5份)R1R2Serial5/112.0.0.1/2412.0.0.2/242.5 Gb/s1份R1R2GigabitEthernet1/021.0.0.1/2421.0.0.2/2410 Gb/s4份
本例中R1與R2通過雙方的環回口(loopback0)建立EBGP鄰居關系,因此對R1而言,到達AS200網內的目的IP200.0.0.1的下一跳地址就是R2的loopback0的地址2.2.2.2。
(1)第一步:指定新的目的IP和下一跳地址
為了通過遞歸尋址影響BGP的選路,在R1側,把2.2.2.2/32作為新的目的IP,并分配5個虛擬IP地址作為它的下一跳(之所以選擇5個虛擬IP地址,是因為鏈路帶寬比例為1∶4,可以理解為需要把數據流量分成1+4=5份)。
完成配置后,檢查到達2.2.2.2/32的路由。如圖4所示,每個下一跳均為“traffic share count is 1”,代表這5個下一跳之間是等價的。注意:由于這些虛擬IP地址僅用于本地路由表的遞歸尋址,并不需要廣播到互聯網中,因此建議使用私網地址,本例中使用的是192.168.1.1~192.168.1.5。
(2)第二步:將虛擬下一跳引入路由表
根據實際鏈路的帶寬比例(1∶4)為這些下一跳地址分配出接口(本例中串口被分配1次,以太口被分配4次),如圖5所示。
虛擬下一跳地址一旦關聯了出接口,指向虛擬IP地址的靜態路由就變了合法的路由,將被放入路由表中,參與對目的IP的遞歸尋址過程(查找有效的下一跳)。
(3)第三步:尋址過程分析
從控制層面看(如圖6所示),在R1的路由表(RIB)中查找到達目的IP200.0.0.1的路由,首先會查到它的下一跳地址2.2.2.2,但由于沒有對應的出接口,需要進行一次遞歸查找;以2.2.2.2作為目的IP,經過第一次遞歸查找,發現到達2.2.2.2有5個等價的下一跳地址,分別是192.168.1.1~192.168.1.5,由于這5個下一跳依然沒有對應的出接口,因此需要再進行一次遞歸查找;經過第二次遞歸查找,5個下一跳都找到了對應的出接口,路由尋址過程結束[6]。
從轉發層面看(如圖7所示),轉發表(FIB)中去往目的IP 200.0.0.1的數據包被等價地分配到5個出口:1份流量由點到點的串口鏈路(Serial5/1)承載,剩下的4份流量由廣播型的以太口鏈路(Gigabit1/0)承載。
這樣就實現了預先設定的需求:在兩條鏈路上實現按1∶4的流量進行轉發,即非等價負載分擔。
5結論
實際案例證明:在路由尋址中增加一次遞歸過程,可以比較靈活地實現等價或非等價負載分擔。相比常用的策略路由,這種方法不需要對特定的數據流量進行分類標記,在配置上更簡單,另外用于遞歸算法的下一跳使用的是私網地址,不消耗公網資源,部署起來也比較方便。
這里需要強調的是,本例中的EBGP鄰居R1和R2并未打開等價多路徑(ECMP)功能,對于目的IP200.0.0.1,在R1的BGP數據庫中只有2.2.2.2/32這一個下一跳,而不是多個下一跳。也就是說本方法并不是在BGP協議內實現非等價負載分擔,而是借用BGP協議中“下一跳”的概念,通過路由表中的多重遞歸實現流量非等價分擔的效果,因此這與BGP的等價多路徑選路原則并不矛盾。
另外,本例中介紹的非等價負載分擔方法適用于通過環回口建立的EBGP鄰居。對于通過直連接口建立的EBGP鄰居,可以在雙方的直連接口上配置若干個second IP作為到目的IP的下一跳地址,再經過路由遞歸查找,也能實現非等價負載均衡的效果,具體配置方法本文不再贅述。
參考文獻
[1] STEWART J.BGP4: interdomain routing in the Internet[M].USA Addison Wesley,1998.
[2] 薩姆·哈拉比. Internet 路由結構(第2版)[M].孫劍,孫余強,譯.北京:人民郵電出版社,2015.
[3] 布萊恩特,奧哈拉倫.深入理解計算機系統(第2版)[M].北京:機械工業出版社,2011.
[4] 維斯.數據結構與算法分析:C語言描述[M].馮舜璽,譯.北京:機械工業出版社,2004.
[5] 艾云霄,譚躍生,王靜宇,等.MooseFS中chunkserver負載均衡算法研究[J].微型機與應用,2013,32(5):13.
[6] SCUDDER J, CHANDRA R.RFC 5492: capabilities advertisement with BGP4[EB/OL].(200902xx).http://tools.ietf.org/html/rfc5492.