BGP小結一

一 BGP簡介

BGP(Border Gateway Protocol)是一種自治系統間的動態路由發現協議。當前使用的版本是BGP-4。主要用來在自治系統之間路由IPV4流量的域間路由協議。

AS是遵循相同的策略,在統一的管理控制下的一些路由域。

BGP會話有兩種類型,一種是內部BGP(IBGP),一種是外部BGP(EBGP)。內部BGP主要用於在自治系統內部路由流量,所有自治系統內部的流量必須遵循相同的路由策略,對外部BGP網絡表現出本自治系統的一致性。外部BGP在自治系統的邊界路由流量,每個自治體系統維持自己的路由策略,同時利用邊界路由器來增強路由策略的控制,每個參與公共因特網路由的自治系統都需要唯一的自治系統號碼,自治系統號範圍從1~65535,私有自治系統號64512~65535。BGP 特性:
1. BGP 是一種外部路由協議,與OSPF、RIP 等內部路由協議不同,其着眼點不在於發現和計算路由,而在於控制路由的傳播和選擇最好的路由。
2. 通過在BGP 路由中攜帶AS 路徑信息,可以徹底解決路由循環問題。
3. 使用TCP 作爲其傳輸層協議,提高了協議的可靠性。
4. BGP-4 支持無類域間路由CIDR。
5. 路由更新時,BGP 只發送更新的路由.
6. BGP-4 提供了豐富的路由策略,能夠對路由實現靈活的過濾和選擇,
並且易於擴展以支持網絡新的發展。

二 BGP路由表

運行BGP協議的路由器爲了不同的目的使用不同的路由表,主IP路由表包含了通過RIP或是開放最短路徑優先(OSPF)等內部網夫協議獲得的路由、靜態路由和直連網段。除此之外還有3個概念性的BGP表,通常被稱爲路由信息表(RIB),它們一般只包含和BGP相關的路由信息。BGP表被用來保存BGP路徑的信息,這些信息包括到每一個目的網段的最佳路徑(用於本地路由),發送給其他BGP對等體的信息以及從其他BGP對等體收到的信息。當BGP選定了到某個網段的最佳路徑後,該路徑會被加入到主IP路由表中。

BGP使用兩個不同的路由表來分別存放接收到的和發出的網段通告:Adj-RIB-in和Adj-RIB-out。這些路由表存放從其他SPEAKER那裏接收到的信息和發送給其他BGP對等體的信息。

三 BGP的鄰居關係

1、EBGP:

外部BGP被用來在屬於不同的自治系統(AS)的路由器之間交換路由信息,每個自治系統都有自己的路由策略並且被不同的部門或是組織的人員獨立地管理。由於EBGP對等體分別屬於不同的網絡,每個EBGP對等體必須配置相關的策略來控制內部路由向外部網絡的廣播,過濾掉不應該對外通告的內部網段,在需要的時候聚合路由和提供穩定的會話。除非特別指定,EBGP對等體路由器必須互相直連。

2、IBGP:

IBGP被用在同一自治系統內部的BGP對等體之間。和EBGP— 樣,每個IBGP的SPEAKER都必須被配置以便和相鄰的BGP路由器建立對等的關係。BGP不支持鄰居關係的自動識別,爲了給通過IBGP連接的路由器提供對網絡的一致埋解,這些路由器必須配置爲全網狀連接的體系結構。每個有IBGP對等關係的路由器都必須通過本地的BGP配置和其他所有的IBGP對等體建立連接。每個IBGP也必須在不同的BGP狀態之問轉換,給每一個相鄰的對等體發送同樣的BGP消息和建立BGP連接以交換路由信息。與EBGP對等路由器不同的是,IBGP路由器不需要直接相連。

 

四、BGP報文

OPEN報文格式

1、版本(version):1字節,BGP協議版本號。鄰居協商期間,對等路由器就使用BGP版本號達成一致。通常使用兩個路由器都支持的最高版本。

2、本自治系統(my autonomous system):2字節,標明發送路由器的AS號。

3、保持時間(hold time):2字節,指明在相鄰的keepalive和update報文間可等待的最大時間,單位爲秒。協商爲最小值。

4、BGP標識(bgp identifier):4字節,指出發送路由器的BGP標識。此字段是路由器的ID號,也就是BGP會話啓動時最高的回送(loopback)地址或路由器上的最高的IP地址。

5、可選參數長度(optional parameter length):1字節長,它指出可選參數字段的總長度(以字節爲單位)。如果沒有可選參數,此字段被設爲0。

6、可選參數(optional parameter):此字段爲變長的。它給出BGP鄰居會話協商中的可選參數的列表。

UPDATE報文格式

當一個BGP說話者通告或撤消來自從對等路由器的一個路由時,UPDATE報文被使用。UPDATE報文包括定長的BGP頭和:不可行路由長度(unfeasible routes length):包含撤消字段的長度、撤消的路由(withdrawn routes):包含了從服務中撤消的路由的IP地址前綴列表、路徑屬性總長度(total path attribute length)、路徑屬性(path attributes),此變長字段包含了與網絡層可達性信息字段中的前綴相關聯的BGP屬性的列表。路徑屬性給出了正被通告的前綴的信息,如優先級,其中路徑屬性分爲4類。

1、well-known mandatory:BGP更新報文中必須包含的,且必須被所有BGP協商所能識別的。ORIGIN、AS-PATH、NEXT-HOP就是三個這種屬性的例子。

ORIGIN:路由更新的源AS。說明了源路由是怎樣放到BGP表中的。一箇中由可以從諸如OSPF的一個IGP得到,它被重分發布進BGP。本屬性可由外部路由協議(EGP)或其他除IGP或EGP之外的東西(如靜態路由)等得知。

有三個可能的源:IGP、EGP、INCOMPLETE。路由器在多個路由的處理中使用這個信息。路由器選擇最有最低ORIGIN類型的路徑。IGP比EGP低,EGP比INCOMPLETE低。

AS-PATH:指出包含在UPDATE報文中的路由信息所經過的自治系統。

NEXT-HOP:定義了被用來作爲到達UPDATE報文中列出的目的地的下一跳的邊界路由器的IP地址。

2、well-known discretionary:指必須被所有BGP實現所識別,但是在BGP更新(update)報文中可發不可發的屬性。

LOCAL-PREFERENCE(本地優先級):用來區分到同一目的地的各個路由優先程度的。本地優先級越高,路由優先級就越高。本地優先級並不包含在發送到AS外的BGP鄰居的更新報文中。如果這個屬性包含在來自於不同AS中的BGP鄰居的更新報文中,則該更新被忽略。

ATOMIC-AGGREGATE:指出已被丟失了的信息。當路由聚合時將會導致信息的丟失,因爲聚合來自具有不同屬性的不同源。如果一個路由器發送了導致路由信息丟失的聚合,路由器被要求將原子聚合屬性附加到該路由上。

3、optional transitive:不要求所有的BGP都支持。如果該屬性不能被BGP進程識別,它就會去看傳遞標誌。如果此標誌被設置了,BGP進程會接受這個屬性並將它傳給其他BGP speaker。

AGGREGATOR:標明瞭實施路由聚合的BGP SPEAKER(IP地址)和AS號。

4、optional nontransitive:不要求所有BGP實現都支持。如果此屬性不能被BGP進程識別,它會去查看傳遞標誌。如果未設置傳遞標誌,此屬性應該被忽略並不傳送給其他BGP對等體。

MULTI-EXIT-DISC:MED被BGP SPEAKER用來區分到一個相鄰AS的多個出口點。低MED表示高優先級。MED屬性在自治系統間切換,但MED屬性進入一AS後就不離開該AS(非傳遞的)。這與local pref的處理不同,在這裏外部路由器能夠影響到另一個AS中的路徑選取。使用local pref僅能影響到自己AS內部的路由。

五 通知(NOTIFICATION)報文:

BGP通知報文用於表明一個錯誤,這個錯誤可能會導致BGP會話中斷。通知報文通常在會話剛剛中斷時就立即產生。當BGP連接中斷後,在兩個BGP對等體之間的TCP會話將關閉,所有資源被釋放。“路由撤銷”報文會向其他BGP對等體發送,所有BGP路由會從路由表中刪除。BGP會話可能會出於多種原因被中斷。

每個通知報文包含了3個字段:錯誤代碼、錯誤子代碼和數椐。錯誤代碼字段指明瞭NOTIFICATION錯誤的類型,如果有的話錯誤子代碼給出出錯的詳細解釋,數據字段包含了和錯誤相關的診斷信息,不是所有的通知報文都有數據字段。

主要錯誤通知報文:

1、報文報頭錯誤:

表明處理BGP報文的報頭時發現錯誤,通過子代碼可以表明出錯的原因

2、OPEN報文錯誤:

表明一個0PEN報文中有錯誤,通過子代碼可以表明出錯的原因

3、UPDATE報文錯誤:

表明一個UPDATE報文中有錯誤,通過子代碼可以表明出錯的原因

4、保持計時器超時:

表明在協商好的時間間隔內沒有收到KEEPALIVE或是UPDATE報文

5、有限狀態機錯誤:

當發生不可預見的錯誤時發送給對端路由器來終結BGP會話

6、停止:

表示立刻終止BGP會話

保活(keepalive)報文:

當BGP會話成功地建立並且完成了BGP更新的發送和接收後,BGP對等體會週期性地互相發送保活報文。默認的情況下BGP路由器每隔60s發送保活報文,通知相鄰的對等體BGP連接仍然處於激活狀態,保活報文的間隔可以從默認值改爲3-4294967295之間的任意數值,或是設爲0表示不需要交換保活報文。

六 BGP狀態機

1. 空閒(idle):不分配BGP資源,不允許傳入BGP連接。
2. 連接(connect):BGP等待TCP連接完成,連接成功進入open sent狀態,連接不成功進入active狀態。
3. 活動(active):初始化一個TCP連接來建立BGP間的鄰居關係,連接成功進入open sent狀態,連接不成功仍處於active狀態或退回idle狀態。
4. 打開發送(open sent):發送open分組給對方,等侍對應的迴應,有迴應進入open confirm狀態,無迴應退回idle狀態或active狀態。
5. 打開確認(open confirm):等待對方的keepalive分組,接收到keepalive分組,進入established狀態,沒收到keepalive分組,退回idle狀態。
6. 已建立(established):BGP對待體之間可以交換信息狀態,交換的信息:update信息,keepalive信息,notification信息。

處於Idle狀態的BGP進程不接受任何鄰居發送過來的鄰居建立的請求,除非觸發了BGP start事件,這事件一般是由用戶配置BGP觸發的,一旦觸發了BGP start事件,設備就會初始化一個connect-retry timer,並且向指定鄰居發起建立TCP 連接的請求,然後就進入了connect狀態。

處於connect狀態的設備會試圖完成與鄰居的TCP連接,如果連接一旦建立,設備就會清除connect-retry timer,發送open message,然後進入open-sent狀態。

如果連接建立失敗,設備就會重置connect-retry timer,然後等待鄰居發送過來的連接建立請求,這時就進入Active狀態。

如果connect-retry timer超時,設備就會重置它,並試圖與鄰居建立TCP連接,BGP仍然保持在connect狀態。

如果在connect狀態中設備遇到錯誤,就會回到Idle狀態。

狀態三 Active

處於Active狀態的設備仍然試圖完成與鄰居的TCP連接,如果連接一旦建立,設備就會清除connect-retry timer,發送open message,然後進入open-sent狀態。

如果connect-retry timer超時,設備就會重置它,並試圖與鄰居建立TCP連接,BGP會回到connect狀態。

如果鄰居試圖建立TCP連接的請求報文中的源地址與本地鄰居表中的地址不符,設備就會陷入active狀態。

如果在active狀態中設備遇到錯誤,就會回到Idle狀態。

狀態四 Open-sent

在open-sent狀態中,設備會等待鄰居發送過來的open message,一旦接受到鄰居發送過來的open message,設備就會檢查open message中的所有字段,如果發現錯誤,設備就會發送Notification message通告這個錯誤,並且中斷TCP連接,回到Idle狀態。

如果所有的字段都匹配,設備就會發送第一個Keepalive message,初始化Holdtimer和Keepalive timer,進入open-confirm狀態。

如果在open-sent狀態中設備遇到錯誤,或是Holdtimer超時,設備就會發送Notification message通告錯誤,並回到Idle狀態。

狀態五 Open-confirm

設備在open-confirm狀態會等待鄰居發送過來的Keepalive message,一旦收到,就會進入Established狀態。

如果在open-confirm狀態中設備遇到錯誤,或是Holdtimer超時,設備就會發送Notification message通告錯誤,並回到Idle狀態。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章