天天看點

BGP邊界網關路由協定

BGP邊界網關路由協定

BGP (Border Gateway Protocol) --- 邊界網關協定是一種實作自治系統AS (Autonomous system) 之間的路由可達,并選擇最佳路由的距離矢量路由協定。(路徑矢量路由協定)

自治系統( Autonomous System , AS ) , 指的是在同-一個組織管理下、使用相同政策的裝置的集合。

AS号分為2位元組AS号和4位元組AS号,其中2位元組AS号的範圍為1至65535,其中1-64511是 網際網路上注冊公有AS号,類似公網IP位址:

64512-65535是私有AS号,類似私網IP位址。4位元組AS号的範圍為1至4294967295,支援4位元組AS号的裝置能夠與支援2位元組AS号的裝置相容。

IANA (網際網路數字配置設定機構)負貴As号的分發。

中國電信163 AS号: 4134.

中國電信CN2 AS号: 4809.

中國網通AS号: 9929.

1、BGP能夠承載大批量的路由資訊,能夠支撐大規模網絡。

2、BGP使用TCP作為其傳輸層協定(監聽端口号為179),提高了協定的可靠性。

3、BGP是外部路由協定,用來在AS之間傳遞資料,對穩定性要求非常高。是以用TCP協定的高可靠性來保證BGP協定的穩定性。

4、BGP的對等體之間必須邏輯上連通,并進行TCP連接配接。目的端口号為179,本地端口号任意。

5、BGP對等體和IGP對等體不同,BGP對等體(Peer) 是指使用TCP建立連接配接的兩端,而非與IGP同概念的直連鄰居,隻要TCP能夠建立連接配接并不一定需要直連。

6、BGP本身隻負責控制路由,資料轉發依然靠靜态或IGP路由。

7、BGP支援無類别域間路由CIDR。

8、路由更新時,BGP隻發送更新的路由,大大減少了BGP傳播路由所占用的帶寬,适用于在Internet上傳播大量的路由資訊。

9、BGP是一種增強的距離矢量路由協定,從設計上避免了環路的發生。

10、AS之間: BGP通過攜帶AS_ Path資訊标記途經的AS,帶有本地AS号的路由将被丢棄,進而避免了域間産生環路。

11、AS内部: BGP在AS内學到的路由不會再通告給AS内的BGP鄰居,避免了AS内産生環路。

12、BGP提供了豐富的路由政策,能夠對路由實作靈活的過濾和選擇。

13、BGP提供了防止路由振蕩的機制(路由衰減),有效提高了Internet網絡的穩定性。

14、BGP易于擴充,能夠适應網絡新的發展(ipv4單/多點傳播、vpv4單/多點傳播)。主要是通過TLV進行擴充。

BGP按照運作方式分為EBGP ( External/Exterior BGP)和IBGP ( Internal/Interior BGP )

1、EBGP:運作于不同AS之間的BGP稱為EBGP。為了防止As間産生環路,當BGP裝置接收EBGP對等體發送的路由時,會将帶有本地AS号的路由丢棄。

2、IBGP:運作于同一"AS内部的BGP稱為IBGP.為了防止:AS内産生環路,BGP裝置不将從IBGP對等體學到的路由通告給其他IBGP對等體,并與所有IBGP對等體建立全連接配接。為了解決IBGP對等體的連接配接數量太多的問題,BGP設計了路由反射器和BGP聯盟。

1、BGP的Router-ID是一個用于辨別BGP裝置的32位值,通常是IPv4位址的形式,在BGP 會話建立時發送的open封包中攜帶。對等體之間建立BGP會話時,每個BGP裝置都必須有唯一的Router ID,否則對等體之間不能建立BGP連接配接。 

2、BGP的Router-ID在BGp網絡中必須是唯一的, 可以采用手工配置,也可以讓裝置自動選取。預設情況下,BGP選擇裝置上的Loopback接口的

IPv4位址作為BGP的Router-ID。如果裝置.上沒有配置Loopback接口,系統會選擇接口中最大的IPv4位址作為BGP的Router-ID.

一旦選出Router-ID,除非發生接口位址删除等事件,否則即使配置了更大的位址,也保持原來的Router- ID.

3、BGP對等體也叫BGP鄰居,與OSPF、RIP等協定不同, BGP的會話是基于TCP建立的。建立BGP對等體關系的兩台路由器并不要求必須直連。4、BGP存在兩種對等體關系類型: EBGP及IBGP。針對這兩種對等體類型, BGP處理路由的操作存在較

大差異。

BGP對等體問通過以下5種封包進行互動,其中Keepalive封包為周期性發送,其餘封包為觸發式發送:

1、Open封包:用于協商BGP對等體的各項參數,主要包括BGP版本(V4) 、AS号等資訊,建立BGP對等體連接配接。

Open是TCP連接配接建立後發送的第一個封包

2、Update封包:用于在對等體之間交換路由資訊。連接配接建立後,有路由需要發送或者路由變化時,發送Update通告對端可達或者撤銷路由資訊及路徑屬性。

3、Notification封包:用于中斷BGP連接配接。當BGP在運作中發現錯誤時,發送Notification封包通告BGP對端, 随後與之相關的鄰居關系将被關閉。

4、Keepalive封包:用于保持BGP連接配接。( 保活)定時發送Keepalive封包以保持BGP對等體關系的有效性。

響應收到的正确的open封包

5、Route-refresh封包:用于在改變路由政策後軟複位BGP路由表請求對等體重新發送路由資訊。隻有支援路由重新整理( Route-refresh)能力的BGP裝置會發送和響應此封包。

BGP對等體的互動過程中存在6種狀态機:空閑(Idle) 、連接配接(Connect) 、活躍(Active) 、Open封包已發送(openSent) 、open封包已确認(openConfirm)和連接配接已建立(Established) 。

在BGP對 等體建立的過程中,通常可見的3個狀态是: Idle、 Active和Established.

1、Idle狀态是BGP初始狀态。在Idle狀态下,BGP拒絕鄰居發送的連接配接請求。 隻有在收到本裝置的Start事件後,BGP才開始嘗試和其它BGP對等體進行TCP連接配接,并轉至Connect狀态。

2、在Connect狀态下,BGP啟動連接配接重傳定時器(Connect Retry) ,等待TCP完成連接配接。 ●如果TCP連接配接成功,那麼BGP向對等體發送Open封包,并轉至OpenSent狀态。

●如果TCP連接配接失敗,那麼BGP轉至Active狀态,反複嘗試連接配接。

 

●如果連接配接重傳定時器逾時,BGP仍沒 有收到BGP對等體的響應,那麼BGP繼續嘗試和其它BGP對等體進行TCP連接配接,停留在Connect狀态。

3、在Active狀态下,BGP總是在試圖建立TCP連接配接。 

●如果TCP連接配接成功,那麼BGP向對等體發送open封包,關閉連接配接重傳定時器,并轉至openSent狀态。

●如果TCP連接配接失敗,那麼BGP停留在Active狀态。

●如果連接配接重傳定時器逾時,BGP仍沒有收到BGP對等體的響應,那麼BGP轉至Connect狀态。

4、在openSent狀态下,BGP等待對等體的open封包,并對收到的open封包中的AS号、版本号、認證碼等進行檢查。 

●如果收到的Open封包正确,那麼BGP發送Keepalive封包,并轉至openConfirm狀态。 ●如果發現收到的open封包有錯誤,那麼BGP發送Notification封包給對等體,并轉至Idle狀态。

5、在openConfirm狀态下,BGP等待Keepalive或Notification封包。如果收到Keepalive封包, 則轉至Established狀态, 如果收到Notification封包,則轉至Idle狀态。

6、在Established狀态下,BGP可以和對等體交換Update、 Keepalive、 Route-refresh封包和Notification封包。 

●如果收到正确的Update或Keepalive封包,那麼BGP就認為對端處于正常運作狀态,将保持BGP連接配接。

●如果收到錯誤的Update或Keepalive封包,那麼BGP發送Notification封包通知對端,并轉至Idle狀态。

●如果收到Notification封包,那麼BGP轉至Idle狀态。

●如果收到TCP拆鍊通知,那麼BGP斷開連接配接,轉至Idle狀态。

●Route-refresh封包不會改變BGP狀态。

BGP裝置将最優路由加入BGP路由表,形成BGP路由。BGP裝置與對等體建立鄰居關系後,采取以下互動原則:

●從IBGP對等體獲得的BGP路由,BGP裝置隻釋出給它的EBGP對等體

●從EBGP對等體獲得的BGP路由,BGP裝置釋出給它所有EBGP和IBGP對等體

●當存在多條到達同一目的位址的有效路由時,BGP裝置隻将最優路由釋出給對等體

●路由更新時,BGP裝置隻發送更新的BGP路由

●所有對等體發送的路由,BGP裝置都會接收

●所有EBGP對等體在傳遞過程中下一跳改變

●所有IBGP對等體在傳遞過程中下一跳不變

●預設EBGP傳遞時TTL值為1

●預設IBGP傳遞時TTL值為255

1、直連建立對等體需要注意的點建立IBGP對等體時要讓下一跳可達,處于邊界的IBGP對等體需要将下一跳指向自己,這樣才能建立IBGP對等體

2、用環回口建立鄰居需要注意的點需要修改更新源,預設更新源是實體口,需要修改成環回口。建立IBGP對等體時要保障下一跳可達,處于邊界的IBGP對等體需要将下一跳指向自己,

這樣才能建立IBGP對等體

建立EBGP對等體時因為EBGP隻能傳一跳, 因而,在建立EBGP對等體時,需要修改EBGP多跳的跳數為2以上(自己環回到對端環回是兩跳,預設一跳)

3、關于為什麼要用環回口建鄰居原因是環回口穩定,隻要路由器啟動着,環回口就不DOWN,而實體鍊路可能會受線路或者接口等因素的影響導緻對等體關系有問題,因而一般BGP建

立對等體都是環回口來建

1、配置IP和AS内的IGP2、配置BGP對等體

3、EBGP最大跳數>=24、在邊界IBGP給IBGP對等體配置下一跳指向自己

5、EBGP之間配置靜态路由,指向回環網卡IP6、宣告網段或IP,每個EBGP都要宣告所有網段和靜态路由學習到的網段

配置BGPR1 (ibgp)與R2、R3、R4、R5、R6建立鄰居關系(R2、R4、R5配置與其相似略)

[R1]bgp 100

###建立bgp編号為100 (也就是AS100)

[R1 -bgp] router-id 1.1.1.1 ###配置BGP的Router ID

[R1-bgp]peer 2.2.2.2 as-number 100 ##指定對等體的環回口IP位址及其所屬的As編号

[R1-bgp]peer 2.2.2.2 connect- interface LoopBackO ###更新發送bgp封包的接口為loopback0接口

[R1 -bgp]peer 3.3.3.3 as-number 100

[R1-bgp]peer 3.3.3.3 connect - interface LoopBackO

[R1 -bgp]peer 4.4.4.4 as-number 100

[R1 -bgp]peer 4.4.4.4 connect - interface LoopBack0

[R1-bgp]peer 5.5.5.5 as-number 100

[R1-bgp]peer 5.5.5.5 connect- interface LoopBackO

[R1 -bgp]peer 6.6.6.6 as-number 100

[R1-bgp]peer 6.6.6.6 connect - interface LoopBack0

----R3 (ebgp)與R1、R2、R4、R5、R6、R7 (R3與R7互為ebgp)建立鄰居關系(R6配置與其相似略)

[R3]bgp 100

[R3-bgp] router-id 3.3.3.3

[R3-bgp]peer 1.1.1.1 as-number 100

[R3-bgp]peer 1.1.1.1 connect - interface LoopBack0

[R3-bgp]peer 2.2.2.2 as-number 100

[R3-bgp]peer 2.2.2.2 connect - interface LoopBack0

[R3-bgp]peer 4.4.4.4 as-number 100

[R3-bgp]peer 4.4.4.4 connect- interface LoopBackO

[R3-bgp]peer 5.5.5.5 as-number 100

[R3-bgp]peer 5.5.5.5 connect- interface LoopBack0

[R3-bgp]peer 6.6.6.6 as-number 100

[R3-bgp]peer 6.6.6.6 connect - interface LoopBack0

[R3-bgp]peer 2.2.2.2 next-hop-local##ASBR從ebgp鄰居學習到的路由傳遞給ibgp鄰居時,修改該路由轉發資料到對方As的資料的下一跳為自已.

[R3-bgp]peer 1.1.1.1 next -hop-local

[R3-bgp]peer 6.6.6.6 next -hop- local

[R3-bgp]peer 7.7.7.7 as-number 200 ###此為ebgp鄰居的AS編号

[R3-bgp]peer 7.7.7.7 connect- interface LoopBack0

[R3-bgp]peer 7.7.7.7 ebgp-max-hop 2##兩個AS之間用環回口建的鄰居要将它們的鄰居的最大跳數改為2,

預設的是1 (因為不是直連而是用1oopback0接口,需要經過2個路由,而預設EBGP傳遞時TTL值為1 )

[R3-bgp]network 1.1.1.1 255.255.255.255 #宣告指定的IGP、靜态、預設路由進BGP程序

[R3-bgp]network 2.2.2.2 255.255.255.255

[R3]ip route-static 7.7.7.7 255.255.255.255 12.1.1.2兩個As之間的ebgp對等體需要建立tcp連接配接,這裡用靜态做底層的尋址,也可以使用IGP路由搭建底層尋址(比如RIP)

[R3-bgp]network 7.7.7.7 255.255.255.255###ebgp用于配置靜态路由或IGP路由的網段或IP需要在兩端ebgp都宣告

R7與R8、R3 (R3與R7互為EBGP)建立鄰居關系(R8配置與其相似略)[R7]bgp 200

建立AS200

[R7-bgplrouter-id 7.7.7.7

[R7-bgp]peer 3.3.3.3 as-number 100

811此為ebgp鄰居的AS編号

[R7-bgp]peer 3.3.3.3 connect- interface LoopBack0

[R7-bgplpeer 3.3.3.3 ebgp-max-hop 2

iitebgp封包允許的最大跳數修改為2 (因為不是直連而是用loopback0接口)

[R7-bgp]peer 8.8.8.8 as-number 200

[R7-bgp]peer 8.8.8.8 connect-interface LoopBack0

[R7-bgp]peer 8.8.8.8 next -hop-local

IIIASBR從ebgp鄰居學習到的路由傳遞給ibgp鄰居時,路由的下一跳修改為自己

[R7-bgp]network 8.8.8.8 255.255.255.255

宣告指定的從本區城Ibgp鄰居學到的路由給ebgp鄰居

[R7]ip route-static 3.3.3.3 255.255.255.255 12.1.1.1

兩個AS之間運作靜态路由

[R7-bgplnetwork 7.7.7.7 255.255.255.255

ebgp用于配置靜态路由或IGP路由的回環網口IP需要在兩端ebgp都宣告