簡介
BGP是一種在自治系統之間動态交換路由信息的路由協議。一個自治系統的經典定義是在一個管理機構控制之下的一組路由器,它使用IGP和普通度量值向其他自治系統轉發報文。
在BGP中使用自治系統這個術語是為了強調這樣一個事實:一個自治系統的管理對于其他自治系統而言是提供一個統一的内部選路計劃,它為那些通過它可以到達的網絡提供了一個一緻的描述。
BGP是自主網絡系統中網關之間交換器路由信息的協議。邊界網關協議常常應用于互聯網的網關之間。路由表包含已知路由器的列表、路由器能夠達到的地址以及到達每個路由器的路徑的跳數。
使用邊界網關協議的主機一般也使用傳輸控制協議(TCP)。當網絡檢測到某台主機發出變化時,就會發送新的路由表。BGP-4,邊界網關協議的最新版本,允許網絡管理員在策略描述下配置跳數的規格。
簡單擴展
BGP是一種不同自治系統的路由器之間進行通信的外部網關協議。BGP是ARPANET所使用的老EGP的取代品。RFC1267[LougheedandRekhter1991]對第3版的BGP進行了描述。
RFC1268[RekhterandGross1991]描述了如何在Internet中使用BGP。下面對于BGP的大部分描述都來自于這兩個RFC文檔。同時,1993年開發第4版的BGP(見RFC1467[Topolcic1993]),以支持CIDR。
BGP系統與其他BGP系統之間交換網絡可到達信息。這些信息包括數據到達這些網絡所必須經過的自治系統AS中的所有路徑。這些信息足以構造一幅自治系統連接圖。然後,可以根據連接圖删除選路環,制訂選路策略。
首先,将一個自治系統中的IP數據報分成本地流量和通過流量。在自治系統中,本地流量是起始或終止于該自治系統的流量。也就是說,其信源IP地址或信宿IP地址所指定的主機位于該自治系統中。其他的流量則稱為通過流量。在Internet中使用BGP的一個目的就是減少通過流量。
可以将自治系統分為以下幾種類型:
1) 殘樁自治系統(stubAS),它與其他自治系統隻有單個連接。stubAS隻有本地流量。
2) 多接口自治系統(multihomedAS),它與其他自治系統有多個連接,但拒絕傳送通過流量。
3) 轉送自治系統(transitAS),它與其他自治系統有多個連接,在一些策略準則之下,它可以傳送本地流量和通過流量。
這樣,可以将Internet的總拓撲結構看成是由一些殘樁自治系統、多接口自治系統以及轉送自治系統的任意互連。殘樁自治系統和多接口自治系統不需要使用BGP——它們通過運行EGP在自治系統之間交換可到達信息。
BGP允許使用基于策略的選路。由自治系統管理員制訂策略,并通過配置文件将策略指定給BGP。制訂策略并不是協議的一部分,但指定策略允許BGP實現在存在多個可選路徑時選擇路徑,并控制信息的重發送。選路策略與政治、安全或經濟因素有關。
BGP與RIP和OSPF的不同之處在于BGP使用TCP作為其傳輸層協議。兩個運行BGP的系統之間建立一條TCP連接,然後交換整個BGP路由表。從這個時候開始,在路由表發生變化時,再發送更新信号。
BGP是一個距離向量協議,但是與(通告到目的地址跳數的)RIP不同的是,BGP列舉了到每個目的地址的路由(自治系統到達目的地址的序列号)。這樣就排除了一些距離向量協議的問題。采用16bit數字表示自治系統标識。
BGP通過定期發送keepalive報文給其鄰站來檢測TCP連接對端的鍊路或主機失敗。兩個報文之間的時間間隔建議值為30秒。應用層的keepalive報文與TCP的keepalive選項是獨立的。
詳解
一:背景
路由包括兩個基本的動作:确定最佳路徑和信息群(通常稱為分組)通過網絡的傳輸。通過網絡傳輸分組相對較簡單,而路徑的确定複雜。BGP就是當今網絡中實現路徑選擇的一種協議。下面簡述BGP的基本操作,并提供其協議組件的描述。
BGP在TCP/IP網中實現域間路由。BGP是一種外部網關協議(EGP),即它在多個自治系統或域間執行路由、 與其它BGP系統交換路由和可達性信息。
BGP設計用以代替其前身(現在已不用了)外部網關協議(EGP)作為全球因特網的标準外部網關路由協議。 BGP解決了EGP的嚴重問題,能更有效地适應因特網的飛速發展。
下面是核心路由器用BGP在AS間路由數據的示意圖。
BGP在多個RFC中規定
RFC1771 - 描述了BGP4,即BGP的當前版本。
RFC1654 - 描述了第一個BGP4規範。
RFC1105,RFC1163和RFC1267 - 描述了BGP4之前的BGP版本。
二:BGP操作
BGP執行三類路由:AS間路由、AS内部路由和貫穿AS路由。
AS間路由發生在不同AS的兩個或多個BGP路由器之間,這些系統的對等路由器使用BGP來維護一緻的網絡拓撲視圖,AS間通信的BGP鄰居必須處于相同的物理網絡。因特網就是使用這種路由的實例,因為它由多個AS(或稱管理域)構成,許多域為構成因特網的研究機構、公司和實體。BGP經常用于為因特網内提供最佳路徑而做路由選擇。
AS内部路由發生在同一AS内的兩個或多個BGP路由器間,同一AS内的對等路由器用BGP來維護一緻的系統拓撲視圖。BGP也用于決定哪個路由器作為外部AS的連接點。再次重申,因特網提供了AS間路由的實例。一個組織,如大學,可以利用BGP在其自己的管理域(或稱AS)内提供最佳路由。BGP協議既可以提供AS間也可以提供AS内部路由。
貫穿(pass-through)AS路由發生在通過不運行BGP的AS交換數據的兩個或多個BGP對等路由器間。在貫穿AS環境中,BGP通信既不源自AS内,目的也不在該AS内的節點,BGP必須與AS内使用的路由協議交互以成功地通過該AS傳輸BGP通信,下圖所示為貫穿AS環境:
三:BGP路由
與其它路由協議一樣,BGP維護路由表、發送路由更新信息且基于路由metric決定路由。BGP系統的主要功能是交換其它BGP系統的網絡可達信息,包括AS路徑的列表信息,此信息可用于建立AS系統連接圖,以消除路由環,及執行AS策略确定。
每個BGP路由器維護到特定網絡的所有可用路徑構成的路由表,但是它并不清除路由表,它維持從對等路由器收到的路由信息直到收到增值(incremental)更新。
BGP設備在初始數據交換和增值更新後交換路由信息。當路由器第一次連接到網絡時,BGP路由器交換它們的整個BGP路由表,類似的,當路由表改變時,路由器發送路由表中改變的部分。BGP路由器并不周期性發送路由更新,且BGP路由更新隻包含到某網絡的最佳路徑。
BGP用單一的路由metric決定到給定網絡的最佳路徑。這一metric含有指定鍊路優先級的任意單元值,BGP的metric通常由網管賦給每條鍊路。賦給一條鍊路的值可以基于任意數目的尺度,包括途經的AS數目、穩定性、速率、延遲或代價等。
四:BGP消息類型
RFC1771中規定了四種BGP消息類型:初始(open)消息,更新消息、通知消息和keep-alive消息。
初始消息在對等路由器間打開一個BGP通信會話,是建立傳輸協議後發送的第一個消息,初始消息由對等設備發送的keep-alive消息确認,且必須得到确認後才可以交換更新、通知和keep-alive消息。
更新消息用于提供到其它BGP系統的路由更新,使路由器可以建立網絡拓撲的一緻視圖。更新用TCP發送以保證傳輸的可靠性。 更新消息可以從路由表中清除一條或多條失效路由,同時發布若幹路由。
通知消息在檢查到有錯誤時發送。通知消息用于關閉一條活動的會話,并通知其它路由器為何關閉該會話。
keep-alive消息通知對等BGP路由器該設備仍然alive。keep-alive消息發布足夠頻繁以防止會話過期。
五:BGP分組格式
簡述BGP初始、更新、通知和keep-alive消息類型及基本的BGP信頭格式。
1、信頭格式
所有的BGP消息類型都使用基本的分組信頭。初始、更新和通知消息有附加的域,而keep-alive消息隻使用基本的分組信頭。
下圖為BGP信頭使用的域:
每個BGP分組都包含信頭,其主要目的是标識該分組的功能。下面簡述信頭中的每個域。
标記 - 含有認證值。
長度 - 指示消息的總長度,以字節計。
類型 - 标識消息類型為下列類型之一:
初始
更新
通知
keep-alive
數據:為可選域,含有上層信息。
2、初始消息格式
BGP初始消息由BGP信頭和附加域構成,下圖為BGP初始消息的附加域:
在信頭的類型域中标識為BGP初始消息的BGP分組包含下列各域,這些域為兩個BGP路由器建立對等關系提供了交換方案:
版本 - 提供BGP版本号,使接收者可以确認它是否與發送者運行同一版本協議。
自治系統 - 提供發送者的AS号。
保持時間(Hold-time) - 在發送者被認為失效前最長的不接收消息的秒數。
BGP标識 - 提供發送者的标識(IP地址),在啟動時決定,對所有本地接口和所有對等BGP路由器而言都是相同的。
可選參數長度 - 标識可選參數域的長度(如果存在的話)。
可選參數 - 包含一組可選參數。目前隻定義了一個可選參數類型:認證信息。認證信息含有下列兩個域:
認證碼:标識使用的認證類型。
認證數據:包含由認證機制使用的數據。
3、更新消息格式
BGP更新消息由BGP信頭和附加域構成,下圖為BGP更新消息的附加域:
收到更新消息分組後,路由器就可以從其路由表中增加或删除指定的表項以保證路由的準确性。更新消息包含下列域:
失效路由長度 - 标識失效路由域的總長度或該域不存在。
失效路由 - 包含一組失效路由的IP地址前綴。
總路徑屬性長度 - 标識路徑屬性域的總長度或該域不存在。
路徑屬性 - 描述發布路徑的屬性,可能的值如下:
源:必選屬性,定義路徑信息的來源。
AS路徑:必選屬性,由一系列AS路徑段組成。
下一跳:必選屬性,定義了在網絡層可達信息域中列出的應用作到目的地下一跳的邊緣路由器的IP地址。
多重出口區分:可選屬性,用于在到相鄰AS的多個出口間進行區分。
本地優先權:可選屬性,用以指定發布路由的優先權等級。
原子聚合:可選屬性,用于發布路由選擇信息。
聚合:可選屬性,包含聚合路由信息。
網絡層可達信息 - 包含一組發布路由的IP地址前綴。
4、通知消息格式:
下圖為BGP通知消息使用的附加域:
通知消息分組用于給對等路由器通知某種錯誤情況。
錯誤碼 - 标識發生的錯誤類型。下面為定義的錯誤類型:
消息頭錯:指出消息頭出了問題,如不可接受的消息長度、标記值或消息類型。
初始消息錯:指出初始消息出了問題,如不支持的版本号,不可接受的AS号或IP地址或不支持的認證碼。
更新消息錯:指出更新消息出了問題,如屬性列表殘缺、屬性列表錯誤或無效的下一跳屬性。
保持時間過期:指出保持時間已過期,這之後BGP節點就被認為已失效。
有限狀态機錯:指示期望之外的事件。
終止:發生嚴重錯誤時根據BGP設備的請求關閉BGP連接。
錯誤子碼 - 提供關于報告的錯誤的更具體的信息。
錯誤數據 - 包含基于錯誤碼和錯誤子碼域的數據,用于檢測通知消息發送的原因。
協議同步規則
一.理解BGP同步及其基本需求
1.BGP同步規則的定義:
在bgp同步打開的情況下,一個BGP路由器不會把那些通過ibgp鄰居學到的bgp路由通告給自己的ebgp鄰居;除非自己的igb路由表中存在這些路由,才可以向ebgp路由器通告.
2.BGP同步規則的目的:
防止一個AS(不是所有的路由器都運行bgp)内部出現路由黑洞,即向外部通告了一個本AS不可達的虛假的路由.
3.BGP同步規則的基本需求
如果一個AS内部存在非bgp路由器,那麼就出現了BGP和IGP的邊界,需要在邊界路由器将BGP路由發布到igp中,才能保證AS所通告到外部的BGP路由在AS内部是連通的.實際上是要求BGP路由和igp路由的同步.
4.滿足BGP同步規則的基本需求的結果
如果将BGP路由發布到igp中,由于BGP路由主要是來自AS外部的路由(來自internet),那麼結果是igp路由器要維護數以萬計的外部路由,對路由器的CPU和memeory以及AS内部的鍊路帶寬的占用将帶來巨大的開銷.
5.結論
通常BGP協議的運行需要關閉同步.
二.BGP同步的解決方案1.full mesh iBGP解決方案
AS内部的所有路由器都運行full mesh iBGP,就可以關閉所有路由器的同步而不影響路由的通告和連通性.
問題:
當AS内部路由器數量很多時,需要建立N*(N-1)/2個ibgp會話,帶來過度的系統開銷,擴展性不好.
Full-Mesh IBGP 拓撲示意:15個路由器的AS,需要建立15(15-1)/2=105個ibgp會話
2.路由反射器解決方案
AS内部的所有路由器都運行bgp,在AS内部部署路由反射器,構建hub and spoke的ibgp(會話數為N-1), 然後關閉所有bgp路由器的同步。
問題:此方案可以使bgp路由器傳遞ibgp路由到ebgp, 并保證bgp路由的連通性.但是對物理拓撲有很大的限制(要求是星型拓撲)
3.bgp聯盟解決方案:
AS内部的所有路由器都運行bgp,把一個原始的AS基于網絡拓撲劃分為若幹個sub-AS(又稱聯盟AS),聯盟AS之間的bgp鄰居叫做聯盟ebgp,不需要full mesh bgp會話;在每個聯盟AS内部運full mesh ibgp或者hub and spoke反射器,然後就可以關閉所有路由器的bgp同步功能。
結論:bgp聯盟結合路由反射器的方式較好的解決了bgp的同步規則帶來的需求,是最為有效的解決方案.
bgp聯盟拓撲示意圖
三.BGP同步規則的總結
1.在所有的方案中, 既要保證傳遞bgp路由,還要保證bgp路由的連通性.
2.關閉同步能夠實現bgp路由的傳遞,不一定能保證as内部連通性,除非as内所有路由器都運行bgp才可以保證連通性;否則,仍然需要路由再發布(bgpàigp)
3.最後,在as内部一般需要部署igp來維持AS内部網絡路徑的連通性,以保證as内部的所通告的bgp路由的下一跳的可達性.這樣bgp網絡就具有更好的靈活性和擴展性.
協議分析-報文、狀态機
BGP是一種自治系統間的動态路由發現協議,它的基本功能是在自治系統間自動交換無環路的路由信息。與OSPF和RIP等在自治區域内部運行的協議對應,BGP是一類EGP(Edge Gateway Protocol)協議,而OSPF和協議。
BGP是在EGP應用的基礎上發展起來的。EGP在此以前已經作為自治區域間的路由發現協議,廣泛應用于NFSNET等主幹網絡上。但是,EGP被路由環路問題所困擾。BGP通過在路由信息中增加自治區域(AS)路徑的屬性,來構造自治區域的拓撲圖,從而消除路由環路并實施用戶配置的策略。同時,随着INTERNET的飛速發展,路由表的體積也迅速增加,自治區域間路由信息的交換量越來越大,都影響了網絡的性能。BGP支持無類型的區域間路由CIDR(classless Interdomain Routing),可以有效的減少日益增大的路由表。
BGP運行時刻分别與本自治區域外和區域内的BGP夥伴建立連接(使用Socket)。與區域内夥伴的連接稱為IBGP(Internal BGP)連接,與自治區域外的BGP夥伴的連接稱為EBGP(External BGP)連接。本地的BGP協議對IBGP和EBGP夥伴使用不同的機制處理。
1、BGP協議的層次位置
BGP使用Socket服務建立連接,端口号為179。
2、BGP的消息結構
BGP有4種類型的消息。分别為OPEN,UPDATE,KEEPALIVE和NOTIFY。它們有相同的消息頭
⑴消息頭結構:
Marker : (16字節) 鑒權信息
Length : (2字節) 消息的長度
Type : (1字節) 消息的類型
0 :OPEN
1 :UPDATE
2 :NOTIFICATION
3 :KEEPALIVE
⑵OPEN消息結構:
消息頭加如下結構 :
Version :(1字節) 發端BGP版本号
My Autonomous system :(2字節無符号整數) 本地AS号
Hold Time :(2字節無符号整數) 發端建議的保持時間
BGP Identifier :(4字節) 發端的路由器标識符
OptParmLen :(1字節) 可選的參數的長度
Optional Parameters :(變長) 可選的參數
⑶KEEPALIVE消息結構
KEEPALIVE消息隻有一個消息頭。
⑷NOTIFY消息結構
消息頭加如下結構:
Errsubcode :(1字節) 輔助錯誤代碼,略。
Data :(變長) 依賴于不同的錯誤代碼和輔助錯誤代碼。用于診斷錯誤原因。
⑸UPDATE消息結構
消息頭加如下結構:
Unfeasible Routes Len :(2字節無符号整數) 不可達路由長度
Withdrawn Routes :(變長) 退出路由
Path Attribute Len :(2字節無符号整數) 路徑屬性長
Path Attributes :(變長) 路徑屬性(以下詳細說明)
Network Layer Reachability Information :(變長) 網絡可達信息(信宿)
其中退出路由和信宿地址的表示方法為一 的二元組。length一個字節,指示地址前綴的長度。prefix為地址前綴,長度1至4字節。
3、BGP路徑的屬性
每個路徑屬性由1字節的屬性标志位,1字節的屬性類型,1或2字節路由屬性長度和路徑屬性數據組成。
屬性标志位:
位0:0 表示此屬性必選,1 表示此屬性可選。
位1:0 表示此屬性為非過渡屬性,1表示此屬性為過渡屬性。
位2:0 表示所有屬性均為路由起始處生成,1 表示中間AS加入了新屬性。
位3:0 表示路由屬性長度由1字節指示,1表示由2字節指示。
位4至位7:未用置0
位0和位1标識了BGP的4類路由屬性:
-(01) 公認必選:BGP的UPDATE報文中必須存在的屬性。它必須能被所有的BGP工具識别。公認必選屬性的丢失意味着UPDATE報文的差錯。這是為了保證所有的BGP工具統一于一套标準屬性。
-(01) 公認自決:能被所有BGP識别的屬性,但在UPDATE報文中可發可不發
-(11) 可選過渡:如果BGP工具不能識别可選屬性,它就去找過渡屬性位。如果此屬性是過渡的,BGP工具就接受此屬性,并把它向前傳遞給其它BGP路由器。
-(10) 可選非過渡:當可選屬性未被識别,且過渡屬性也未被置位時,此屬性被忽略,不傳遞給其它BGP路由器。
路由屬性類型:
⑴ORIGIN (Type Code = 1,公認必選屬性)
指示此路由起始類型:
⑵AS_PATH (Type Code = 2,公認必選屬性)
AS路徑屬性由一系列AS路徑段(Segment)組成。每個AS路徑段為一三元組。
路徑類型有:
路徑段長度用1字節表示AS号的數量,即最長為255個AS号。
路徑值為若幹AS号,每個AS号為2字節。
⑶NEXT_HOP (Type Code = 3,公認必選屬性)
此屬性為UPDATE消息中的信宿地址所使用的下一跳。
⑷MULTI_EXIT_DISC (Type Code = 4,公認自決屬性)
簡稱MED屬性。為一4字節無符合整數。它在AS區域間傳播,用來幫助一個其它AS區域的BGP夥伴選擇進入本AS區域的人口。
⑸LOCAL_PREF (Type Code = 5,公認自決屬性)
本地優先級屬性。為一4字節無符合整數。它在AS區域内傳播,用來幫助一個本AS區域内BGP夥伴選擇進入其它AS區域的出口。
⑹ATOMIC_AGGREGATE (Type Code = 6,公認自決屬性)
元聚合屬性。長度為零。它表示本地BGP在若幹路由中選擇了一個較抽象的(less specific)路由,而沒有選擇較具體(specific)的路由。
⑺aggregator (Type Code = 7,可選過渡屬性)
聚合者屬性。長度為6字節,分别為最後進行路由聚合的路由器的AS号(2字節)和IP地址(4字節)。
4、BGP協議的特點
BGP是一種AS(自治區域)外部路由協議,主要負責本自治區域和外部的自治區域間的路由可達信息的交換。因此,它所關心的拓撲結構是AS(自治區域)的拓撲結構,BGP通過UPDATE消息中路由的AS屬性來構造AS的拓撲結構圖,進一步通過此結構圖來選擇路由。
與OSPF,RIP等IGP協議相比,BGP的拓撲圖要更抽象和粗略一些。因為IGP協議構造的是AS内部的路由器的拓撲結構圖。IGP把路由器抽象成若幹端點,把路由器之間的鍊路抽象成邊,根據鍊路的狀态等參數和一定的度量标準,每條邊配以一定的權值,生成拓撲圖。根據此拓撲圖選擇代價(兩點間經過的邊的權值和)最小的路由。這裡有一個假設,即路由器(端點)轉發數據包是沒有的代價的。而在BGP中,拓撲圖的端點是一個AS區域,邊是AS之間的鍊路。此時,數據包經過一個端點(AS自治區域)時的代價就不能假設為0了,此代價要由IGP來負責計算。這體現了EGP和IGP是分層的關系。即IGP負責在AS内部選擇花費最小的路由,EGP負責選擇AS間花費最小的路由。
BGP作為EGP的一種,選擇路由時考慮的是AS間的鍊路花費,AS區域内的花費(由BGP路由器配置)等因素。
如上所述,内部網關協議IGP需引入AS自治區域内部網絡拓撲圖其它各點的路由,同時向其它端點發送本端點(路由器)所知的路由,如直接路由、靜态路由等。作為外部網關協議,BGP發送和引入路由的單位是整個AS自治區域,即BGP要發送本地路由器所在的AS内部的所有路由,引入其它AS自治區域的所有路由(假設不使用路由策略控制發送和引入)。其路由數量顯然要遠遠大于IGP發送和引入的路由數量。因此,類似于IGP那樣定時對外廣播路由信息是不可取的。
BGP采用發送路由增量(Incremental)的方法,完成全部路由信息的通告和維護:初始化時發送所有的路由給BGP對端(BGP Peer),同時在本地保存了已經發送給BGP對端的路由信息。當本地的BGP收到了一條新路由時(如通過IGP注入了新路由或加入了新的靜态路由),與保存的已發送信息進行比較,如未發送過,則發送,如已發送過則與已經發送的路由進行比較,如新路由花費更小,則發送此新路由,同時更新已發送信息,反之則不發送。當本地BGP發現一條路由失效時(如對應端口失效),如此路由已發送過,則向BGP對端發送一個退出路由消息。
應用于IP骨幹網
1 制約BGP擴展性的幾個問題
BGP是目前應用在因特網上的IP網絡互聯協議,為運營商之間的互聯提供了穩定而安全的路由協議,具有豐富的路由控制機制。為了更好地控制路由策略,當前大部分的運營商均将BGP部署到骨幹路由器。随着網絡的不斷擴展、路由器數目的增多以及路由信息條目的激增,解決BGP的擴展性問題變得越來越重要。
目前BGP的擴展性面臨如下幾個問題。
(1)I-BGP的Full-Mesh問題
BGP路由協議分為I-BGP和E-BGP兩個部分。I-BGP用于自治域内的路由器之間,E-BGP用于自治域間的路由器之間。為了防止産生環回路由,BGP協議要求一個路由器通過I-BGP學到的路由,不再向其他I-BGP鄰居廣播,所以一個自治域内所有參加I-BGP協議的路由器都要與其他路由器建立會話,從而保證路由信息能夠正确地廣播到每一個路由器。依照這個原則,一個自治域内總的I-BGP會話數為N×(N-1)/2 (N為運行I-BGP的路由器數),當N不斷增大時,這個數字會大得驚人:如100台路由器,則會話數為4950。這對網絡設備而言是個非常大的負擔,而且還将使網絡的管理與配置變得異常複雜。而骨幹網通常由大量的運行I-BGP的路由器組成,因此,這個問題是否能夠解決,直接影響到網絡規模的大小。
(2)更改路由策略時路由振蕩的問題
BGP屬于增量更新的路由協議,當有新的路由要發布時,路由器會向鄰居發送Update信息,而如果要删除某條路由時,就會發送Withdraw信息。BGP路由的Flap的定義是:當一條路由在被收回(Withdraw)後,又被廣播(Update)出來,視為一次Flap。由于任何一條路由的收回和更新都會導緻一台路由器整個路由表重新計算,因此當Flap的情況比較多時,對路由器設備的負載将産生巨大的壓力。根據筆者在實際工作中的經驗,一般情況下,一台高端路由器在計算BGP路由的時候,CPU的負載基本上在80%~90%左右,有時甚至達到100%,占用了幾乎所有的CPU資源。雖然目前大部分的高端路由器都将路由計算的模塊與轉發模塊分布在不同的硬件上,來減少主CPU忙導緻的路由器性能下降的問題,但是路由表的頻繁變化和更新,對整個設備的運行還是有一定的影響的,而且這樣的計算會随着路由的收回或廣播,繼續向自治域内部擴展,使内部的路由器産生同樣的問題。
(3)其他需要考慮的問題
除了上面的兩個問題會導緻對路由器資源過量消耗之外,還有其他的一些因素,如路由的數目、BGP路由表的大小和路由計算的方式等,同樣也會影響路由器的性能。
另外,網絡越大,路由條目越多,配置和管理的工作也就越複雜,這就需要在網絡設計的時候盡量簡化配置,降低管理人員的工作強度,避免人為原因造成故障。
2 如何解決制約BGP擴展性的問題
針對以上問題,介紹一些相關的解決方法。
(1)解決I-BGP會話數瓶頸的方法
上面提到的I-BGP的會話數過多的問題,可以采取兩種辦法來解決:
1)聯盟的方法(Confederations)
聯盟的工作原理是:将原來一個自治域的網絡分成多個子自治域,通過Confederations id将原AS号配置到每個路由器上。這樣有兩個好處:一是可以保留原有的I-BGP屬性,包括Local Preference、MED和NEXT_HOP;二是能在Confederations的功能中自動實現,無需管理員在網絡的出口處配置過濾内部AS号信息的操作。
2)路由反射器(Route-Reflector)
采用路由反射器是目前應用最廣泛的方法,較之前面聯盟的方法,具有更好的擴展性。路由反射器的工作原理是:将一個自治域内的路由器分成幾個Cluster,每個Cluster由Reflector和Client組成。Reflector之間形成Full Mesh,運行常規的I-BGP;Client隻與Reflector運行I-BGP,對于Client來說,Reflector隻是普通的鄰居而已,Reflector則扮演了路由集散地的角色,将從其他Reflector學到的I-BGP路由轉發給Client,同時,将從Client學到的I-BGP路由轉發給Cluster内的其他Clients和Cluster外的其他Reflector,再借由Reflectors廣播到其所在的Cluster。在實際的網絡中,為了提高冗餘度,通常一個Client與多個Reflector建立鄰居關系,而且不局限于Client所在Cluster的Reflector。
由此可見,Client上的I-BGP會話數一般為1~2個,與聯盟的方法相比,隻要Reflector的性能足夠高,Cluster就可以做得很大,而Client的負載不會随Cluster的變化有太大的變化。對于前一種方法,由于一個子自治域的所有路由器還是要做到Full Mesh,所以最低性能的路由器決定了一個子自治域的大小;而路由反射器法則通常是一個或多個最高性能的路由器決定Cluster的大小,因此,具有更好的網絡擴展性能。
另外,一個Reflector也可以成為另外一個Reflector的Client,形成層級結構,這特别适用于按照分層結構建設的網絡,可以很容易地把平面的網絡管理演變為分層管理。
當然,在使用路由反射器的時候,也有一些需要注意的地方,比如:Reflector并不是純粹的轉發路由,所有收到的路由在Reflector上同樣要經過最優計算,然後将優選路由向外廣播,所以Reflector的選擇要依據網絡結構而定,盡量使I-BGP鄰居關系與實際的電路連接關系相對應。
(2)控制路由振蕩
目前,控制Route Flap主要采取Damping的方法:一個BGP路由器對收到的E-BGP路由設定Penalty值,每一次路由Flap都會使該路由的Penalty值增大,而路由穩定時,Penalty值會随時間而減小;當Penalty值超過預設的抑制限制時,該路由就不再被廣播,而當Penalty減小至低于重用限制時,該路由才會被重新向外廣播。這種方法主要是針對E-BGP鄰居而言的。這樣,當一個網絡内部發生路由振蕩時,與之相連的其他網絡通過Damping可以有效地防禦對各自網絡的影響。
在網絡維護中,經常會遇到這樣的情況:甯願一條電路中斷一段時間,也不希望它在不停地震蕩。因為中斷一段時間後,隻要電路恢複,網絡流量也會随之恢複;與此相反,振蕩的電路恢複後,需要等待一段時間才能恢複正常的流量(其他網絡都在抑制振蕩的路由)。Damping則可以有效地保證因特網的穩定,但同時也會導緻一些故障的延時恢複。
當前的設備基本都支持Damping的功能,而且提供可以配置的參數來精細控制Damping。一般情況下,設備提供的缺省配置能夠滿足大多數網絡的需求,如果确有特殊需要,則一定要經過仔細計算,否則,不是沒有效果,就是把别人的路由抑制後很長時間不能恢複。
(3)Peer Group的應用
在實際的網絡中,有一種非常普遍的現象,即一個路由器會有多個屬于一類的BGP Peer。這裡的“屬于一類”是指BGP的策略相同或類似,當Peer比較多時,BGP的配置會變得臃腫,同時,路由器的負載也會加重,因為一旦有路由的更新,路由器需要針對每個Peer做一次策略計算(雖然策略都相同)。另外,應用Peer Group還有一個好處,就是降低了對路由器設備的資源消耗,因為路由器對同一Group更新路由時,由于使用相同策略,因此隻進行一次路由計算,從而大大減少了占用CPU的時間。
在實際的網絡維護中,即使當同一類的Peer很少時,一般也建議采用Peer Group的方式,因為這樣具有很好的擴展性。Peer Group不但适用于I-BGP的Peer,也适用于E-BGP的Peer。
3 總結
以上對BGP擴展性相關的幾個問題和相關的措施進行了論述,在實際的應用中還需要根據具體情況來部署。但是總的思路和原則都是一樣的,即一方面要降低設備的資源消耗,另外一方面要簡化維護管理,從硬件、軟件兩方面來提高網絡的擴展性。
鄰居協商過程
BGP有5種message
1. Open (code 1):用于建立連接,包含版本号(如BGP3/BGP4)Hold Time=180s(是一個協商的過程,以較小的Hold Time為準),Router-ID(OSPF和BGP可以手動配置),AS号(範圍從1~65535,其中64512~65535 的AS編号範圍留作私有);
2. KeepAlives(code 4):周期發送用于維護連接檢查路徑(這個包是不可靠的),T=Hold Time/3, Hold Time=0 => No KeepAlive.,keepalive 是個19 字節周期發送的BGP 消息頭标,沒有數據域。
3. Update(code 2):消息包含了三個組件:網絡層可達性消息(NLRI)、路徑屬性和被撤銷的路由。包括到達目的網絡的路徑和屬性,更新路由信息用,一次更新隻有一條路徑,但可以有多條網絡。Update可以删除(宣告不可達)和增加(宣告可達)路由.其内容是前綴的長度。
4. Notification(code 3):網絡中出現錯誤(Error),檢測到後斷開連接并發送通知給對方。
5.Route-Reflesh message:一個可選的message (negotiated during capability advertisement) that is sent to request dynamic BGP route updates from the Adj-RIB-Out table of a remote BGP speaker
協商過程基本上是:Idel,connect,open sent,open confirm,establish。
BGP鄰居建立會話的5種狀态:
1. Idle:查找路由表,該過程BGP對它的資源進行初始化,複位一個連接重試計時器,發起一條TCP 連接,并開始傾聽遠程對等體所發起的連接。
2. Connect:找到路由表後進行TCP三次握手,TCP 連接成功,則轉到OpenSent狀态,TCP連接失敗,則轉到active 狀态,将嘗試再次連接。
3. Open Sent:握上手後發送Open message消息,等待其對等體發送打開消息,如果出錯,則發送一條出錯消息并退回空閑狀态,如果無錯,則開始發送Keepalive 并複位keepalive 計時器。
4. Open Confirm:收到對方發來的Open消息,如果收到keepalive 消息,BGP 就進入established狀态,鄰居關系協商完成;如果系統收到一條更新或keepalive 消息,它将重新啟動保持計時器;如果收到Notification消息,BGP 就退回到空閑狀态。
5. Established:會話建立,鄰居關系協商過程最終狀态;這時BGP将開始與它的對等體交換路由更新數據包。
PS: Active狀态:當路由器發送出OPEN包給鄰居等待回應,如果長時間未接收到回應則超時,超時後狀态更改為Idle還是connect狀态?試圖發起TCP連接獲得對等體,成功轉到Open Sent狀态,連接重試計時器超時,退回連接狀态,這是由于TCP鍊路上出現了問題所緻。
産生問題的原因主要有:
1. Neighbor命令後面的ip-address配置有錯;
2. 沒有打上Neighbor命令(兩邊都要)
3. 更新源錯誤,或者更新源不可達。
answer:
1.當BGP speaker處于active狀态,BGP嘗試通過初始化傳輸協議連接來形成peer。如果傳輸連接建立,則進入OpenSent狀态。(同時發送OPEN信息)。如果ConnectRetry 計時器超時,BGP重啟ConnectRetry計時器,并且退回到Connect 狀态。隻有當系統中止,或者人為地把TCP中止時才退到Idle狀态。
2.問:在IBGP關系中,在sh ip b的時候看到的那個next-hop的ip 地址。下一跳地址,就是通告該路由的IBGP 的 更新源。還是Router-id?
answer:next-hop的IP地址是更新源地址。Router-ID其實隻是路由器的一個标識而已,沒有太多的意義。可以是虛拟的。比如,它通常就是loopback地址。不要求一定TCP可達。但是更新源必須TCP可達。否則怎麼保障路由信息更新的一定傳達目的地?對吧。
還有一個解決方法關鍵看sh ip bgp nei裡面的tcp會話那一塊,又還是沒有。如果沒有,檢查路由和acl。
在可擴展的網絡中
橫向隔離規則規定:
通過IBGP學到的路由永遠不能被傳輸到其它IGBP對等體。
路由反射器(Route Reflector)
路由反射器讓被配置為路由反射器的路由器向其他IBGP對等體傳輸由IBGP所學到的路由來修改BGP的橫向隔離規則。
路由反射器的優點:
配置了BGP路由反射器,就不再需要全互連的IBGP對等體。路由反射器被允許向其它IBGP對等體傳輸IBGP路由。當内部鄰居命令語句數量過多時,I SP就會采用路由反射器技術。路由反射器通過讓主要路由器給它們的路由反射器客戶複制路由更新來減少AS内BGP鄰居關系的數量(這樣可以減少T CP連接)。
路由反射器不影響IP數據包所要經過的路徑;隻有發布路由信息的那條路徑受影響。如果路由反射器沒有被正确配置,那麼将可能産生路由環路。
路由反射器的術語:
路由反射器:是被配置為允許它把通過IBGP所學到的路由通告(或反射)到其他IBGP對等體的路由器。
集群:路由反射器出其它客戶的組合;
客戶:路由反射器和其他路由有部分IBGP對等關系的這些路由器
非客戶:不是路由反射器的客戶的其他IBGP的對等體;
originator(始發者) ID:是任選的、非傳遞BGP屬性,它被路由反射器創建。這個屬性帶有本能AS内部由始發者的路由ID;
路由反射器集群表:路由報經過的集群ID序列。
originator(始發者) ID、集群ID和集群表有助于在路由反射器配置中防止産生路由環路。
用來将路由器配置為BGP路由反射器,并且将指定的鄰居配置為它的客戶:
neighbor ip-address route-reflector-client
ip-address:将被标識為客戶的BGP鄰居的IP地址
bgpcluster-id cluster-id: 配置集群ID
show ip bgp neighbors: 顯示那個鄰居是路由反射器客戶
策略控制和前綴列表(Prefix list)
發布列表利用訪問控制列表來指定哪些路由信息将被過濾。
采用前綴列表的優點:
*在大型列表的加載和路由查找方面比訪問控制列表有顯著的性能改進
*支持增量修改;
*較友好的命令行接口
*更大的靈活性
路由的優化
如果擁有多個互聯網連接,就會知道僅僅簡單使用邊界網關協議(Border Gateway Protocol,BGP)很難得到最優的路由路徑。在這點上,沒有電信網絡的7号信令系統精妙(Signaling System 7,SS7)。作為電訊網絡的控制面,SS7在一次通話建立之前能夠決定出最好的路徑。互聯網上沒有這樣的控制面,雖然BGP也能決定路由(這點與SS7相似),但它不是總能選擇最好的路徑。BGP在不打斷内部或外部用戶的情況下讓邊緣路由器通過一個首選的連接傳輸業務,如果首選連接失敗則通過次選連接提供業務。
當BGP選擇一個路由時,如果能考慮到每個ISP連接所能提供路由通路的性能等因素的話,情況肯定會更好。
RouteScience的PathControl是這樣一種新産品,它不僅可以衡量通過每個BGP對等體的路由性能,還可以根據這些信息來改變通過BGP的優先路由。
PathControl勇挑重任
PathControl 1.1運行在Linux上,提供獨立的功能,一個用于報告,一個用于管理,還有一個給核心引擎,對于每個外部BGP對等體都有一個接口。
PathControl 1.1提供了一個強健的Java程序工具。下一個版本将允許從GUI(圖形用戶界面)配置PathControl,但在目前的版本中必須通過基于IOS的命令行界面管理設備。
PathControl所能提供的不隻是連接性能和它們的相應通路等内部信息,還可以讓你通過配置一些變量來控制使用那些連接。
PathControl可被放置于邊緣路由器之後的任何位置。對路由器的連接可以通過一個專用端口或一個通道連接建立,無論哪種方式,PathControl都需要對外部世界和邊緣路由器進行訪問。
測試見性能
将PathControl直接連接到一個Cisco Catalyst 6500交換機上,交換機被配置為接收來自兩個Nortel Web交換機(一台180e和一台AD4)的外部BGP輸入數據。PathControl被設置與Cisco交換器對等,監視被每個Nortel設備聲明的路由。PathControl可以保持在被動狀态,監視并報告每個遠程對等體的性能;它也可以被置于聲明模式,這使它可以在确定了哪一條連接性能更好後,在邊緣路由器上改變首選路由。
用戶可以配置PathControl更改路由的頻度,使用戶的邊緣路由器不會被壓制。最好讓PathControl至少在被動模式下持續運行幾天,使用報告發生器來觀察PathControl聲明一個新路由的頻度,然後針對具體情況确定最佳的更改頻度。
PathControl用一個TCP握手的往返時間作為其性能度量的基礎,經由HTTP向一台客戶機發送一幅1x1像素的GIF圖像來被動檢索衡量性能的數據,還可通過探查用戶設置的Web站點來進行主動檢索。對于後者,PathControl打開一個到達某站點的TCP連接并測量完成三向TCP握手的時間。
為實現被動測量,設備上的每一個測量接口都被配置一個虛拟IP地址(Virtual IP Address,VIP)。當經由HTTP或HTTPS訪問該地址時,返回一個1x1像素的GIF圖像。PathControl直接提供這個GIF,測量與一台客戶機建立起一個TCP通話的時間。隻要将VIP地址嵌入進站點網頁的一個HREF,一旦某台客戶機發出對該頁的請求,測量就開始。此中的關鍵是對基于策略路由的使用,該路由在邊緣路由器上配置,根據源地址連貫地轉送通訊數據。這樣PathControl會連續測量每條路徑的性能,而不必考慮路由表中的其它項。
默認狀态下PathControl為執行對數據的計算至少需要6次測量。計算過程賦予每條路徑一個等級,該等級将用于确定哪條連接工作得更好。在默認狀态下,如果兩個或更多的等級被賦的數值差别不超過25點,它們都會被認為“更好”。如果某條連接的等級比另一條高出25點,則它被認為是“最好”的,PathControl會經由内部邊界網關協議(interior BGP,iBGP)向與之對等的邊緣路由器聲明這條路由。
ISP網内部署
随着INTERNET在中國的發展,ISP服務商與INTERNET的連接也在發生着變化。在網絡連接上,從單一的連接,到通過多個電信公司多條線路連接到INTERNET;在所使用的路由協議方面,從使用的靜态路由協議,發展到使用BGP(Border gateway protocol)。那麼ISP如何随着網絡的發展,在網絡内部合理有效地部署BGP路由協議呢?我們将在本文中簡要的介紹一下。實際上,如何在網内部署BGP路由協議的主導思想也就是如何使自治域内部的路由器獲得自治域外部路由信息,從而引導訪問域外的流量流出自治域。
從總體上,在域内部署BGP路由協議應考慮以下幾點:
1.網絡實際的拓撲結構;
2.設備性能是否滿足啟動BGP的要求,通常BGP的路由表非常龐大,以從50,000條增加到現在約100,000餘條。這對路由器的内存及性能要求很高;
3.在有多條INTERNET接入線路時,線路的備份和流量的分布。
以下将通過一些例子來具體說明這些問題。在繼續讨論前,我們先提及幾個概念:
核心層:具有高速交換能力的骨幹網絡,位于網絡的核心。
分布層:在核心層的外圍,通常用于實現各種路由策略或實施訪問控制等功能。
接入層:在網絡的最外層,在該範圍内的路由器是用戶聯入ISP的接入點。
在網絡發展初期,網絡結構比較簡單(如圖一),ISP隻有一條線路連接到INTERNET。通常人們不會在這種簡單的網絡結構中使用BGP,而會使用簡單方便的靜态路由進行互聯。這樣可以簡化路由器配置,便于管理,同時降低對邊界路由器的性能要求,減少成本。
如果需要啟用BGP,操作也很簡單隻需在路由器R1上啟用BGP,并将R1作為網内其它路由器的缺省網關,從而達到将外部路由注入網内的目的。
随着網絡的近一步發展,ISP需要通過不同的網絡提供商,通過多條線路與INTERNET連接,以保證網絡的可靠性。這時BGP才有了真正的用武之地。在這種情況下,網絡通常會出現以下幾種結構。如圖二,圖三。兩種網絡結構看起來有些類似,圖三中網絡結構隻是增加了一台路由器以排除圖二中路由器R1産生單點故障的可能,但在如何部署BGP路由時卻完全不同。
在圖二中隻需在R1上配置BGP,并将R1作為網内其它路由器的缺省網關,并通過
BGP路由協議所提供的Weight這個路由參數,調節網内流量在兩條線路上的分布。這樣即可實現線路的互為備份,又可有效的調節流量分布。
有兩台路由器擁有外部路由,通常為保證域内的路由一緻性,需在圖中路由器R1和R2之間建立IBGP連接,使其建立一緻的BGP路由表。在這個過程中,也可人為的使用BGP路由協議所提供的Local-Preference這個路由參數,優化路由選擇,以控制數據流量在線路上的分布。但如何将這些外部路由告知網内的其它路由器,簡單的有以下兩種方法:
1.在網絡結構相對簡單時,網絡沒有分布層,核心層直接與接入層連接。這時接入層路由器往往不能在傳輸大量的用戶數據的同時, 滿足啟用BGP所需的性能要求。在這種情況下,隻有依據流量的分布情況,将網内接入路由器劃分組别,不同的組别将缺省網關指向不同的邊界網關路由器。
這種設計隻能作為網絡結構不完善,設備性能不高時的臨時方案,不能作為永久性方案。因為它經常需要人為幹預,依據網絡流量變化情況重新劃分路由器組别,否則會出現某一路由器負載過重,而另為一台負載較輕的情況,從而不能有效的使用設備資源。而且當互聯的線路增多時,這種設計會面臨更多的問題。
2.最好的方法是首先要建立完善網絡結構,網絡結構應具備核心層,分布層和接入層。通過IBGP路由協議将外部路由注入到分布層路由器中,如圖二中路由器R3,R4。進而将分布層的路由器作為某一區域接入層路由器的缺省網關,将通往域外的負載均勻的分布到各個分布層路由器上,從減少對具體某個路由器的壓力。
這種設計是網絡結構日趨完善,網絡規模日趨擴大的ISP最終的選擇。
最近CISCO公司有從另一角度提出一個部署BGP路由協議的新思路,使用IBGP作為内部路由協議,交換網内用戶路由信息。及在網絡的接入層路由器上啟用IBGP路由協議,并将指向用戶的靜态路由分布到IBGP中。這主要是考慮,BGP路由協議在路由變動時,隻更新發生變動的路由,不會象OSPF和ISIS,重新計算SPF數據庫。因而利用BGP這一特性減少路由收斂時間,提高網絡的穩定性。但在使用這種方法時,應注意BGP對路由器性能的要求,應避免将外部路由注入到接入層路由器中,導緻路由器工作性能下降。
綜上所述,我們簡單讨論了如何在ISP的網絡上部署BGP路由協議。實際上,BGP的應用重點和優勢在于其對路由信息的控制能力, 從而達到對數據流量的控制和分配。這是一項非常複雜的工作,要依據具體的情況而定,在本文就不多談了。但有一點需要注意,僅僅依靠BGP自身的手段來滿足各種不同的實際需要是不可行的,還需與互聯夥伴共同協作才能實現,因為BGP中的許多參數需要互聯雙方共同商定,才能生效。



















