BGP學習筆記

用心整理的一份學習筆記真的能夠記住很多東西,真的可以收穫很多東西。防止遺忘最好的方法就是在一開始便印象深刻。這是我整理的一份BGP筆記。

BGP(邊界網關協議)(增強型距離矢量路由協議)TCP 179

1.什麼是BGP,爲什麼需要BGP

1.1AS(自治區域)

AS是指由同一個技術管理機構統一管理的路由器集合。簡單來說就是一個機構,比如說一個特別大的公司就可以是一個AS,IANA組織會分配給它一個AS號,標明它是一個自治系統。就像將一個省劃分爲很多市,每個市有自己的一個車牌前綴,比如滬A。一臺路由器只能屬於一個AS。

AS號的分類:

公有AS號:1-65411 

私有AS號:65412-65535

1.2網絡協議

1.2.1網絡協議可以劃分爲兩部分,一部分是IGP(內部網關協議),一部分是EGP(外部網關路由協議)

IGP(運行在AS內部)(市區內交通規則)

     類似於RIP,OSPF,ISIS,靜態路由等

     着重發現和計算路由

     部署在運營商和企業內部(保證市區內的交通通行)

     承載路由條目少

EGP(運行在AS之間)(市區間(高速上)交通規則)

      着重控制路由傳播路線和選擇最優路由

      部署在運行商之間(保證市區間的交通通行)

      可承載路由條目多

總結:

BGP的作用就是用於AS之間傳遞路由信息。爲AS之間提供無環路的路由交互。形象地說就是,在定位系統中只有知道每個鄉鎮的具體位置才能夠實現互訪,鄉鎮之間只能知道它隔壁鄉鎮的具體位置。相要知道更多的信息則需要通過定義一種交通規則將地理位置信息傳遞過去才能互訪。我們把鄉鎮的集合稱爲城市(AS),鄉鎮之間的傳遞信息的規則就是IGP。城市之間傳遞信息的規則爲EGP。BGP的作用就是實現不同城市的鄉鎮互訪,互訪的前提城市內部的鄉鎮和城市之間的道路是通的,能夠實現互訪(TCP底層可達)BGP本質上是一種EGP協議。

1.3BGP特點:

基於TCP協議,端口號爲179,可靠更新

支持CIDR(無類別域間路由)

豐富的路徑屬性

增量更新和觸發更新

2.BGP的鄰居建立過程

目錄:

第一步、單播指鄰居

第二步、檢測TCP可達性,建立TCP連接

第三步、隨機一方發送Open消息。Keeplive消息協商成版本低的

第四步、1、檢查AS是否一致,不一致則發送報錯信息

               2、檢查源地址是否和自己指定的鄰居一致,不一致則換成自己發送消息

               3、如果消息一致,鄰居建立成功

第一步:單播指鄰居

BGP的鄰居類型分爲兩類:IBGP鄰居和EBGP鄰居。

   一般情況下   IBGP鄰居使用迴環口建立(保證冗餘性和穩定性,更換接口仍能夠實現網絡互通)默認TTL值爲255

                         EBGP鄰居使用物理接口建立,默認TTL值爲1

狀態變化:IDLE - CONNECT

IDLE:拒絕所有入站狀態,啓動BGP進程後進入CONNECT狀態

第二步、檢測TCP可達性,建立TCP連接

進行TCP的三次握手,確保網絡能夠互通,並建立TCP連接。(必須確保網絡的底層能夠互通)

狀態變化:CONNECT-Opensent/Active

在connect狀態下,BGP進程等待TCP連接的完成,若TCP建立成功,發送Open消息進入Opensent,否則進入Active,在Active狀態下嘗試和BGP鄰居建立TCP連接,建立成功直接進入Opensent狀態。

爲了確定TCP連接的穩定性,會週期性(60s)發送keeplive給對等體

第三步、隨機一方發送Open消息。Keeplive消息協商成版本低的

隨機一方發送Open消息(發現和建立鄰居,與OSPF中的HELLO報文一致),並偵聽來自鄰居的Open消息。

狀態變化:Opensent-Openconfirm/IDLE

在Opensent狀態下會偵聽來自鄰居的消息,並進行比對,如果存在差錯則發送notification消息進入IDLE狀態,沒有差錯則進入Openconfirm狀態

notification:當BGP路由器檢測到錯誤狀態時,就向鄰居發出Notification報文,之後BGP連接會立即中斷。

第四步、

等待keeplive消息和notification消息,收到keeplive消息進入下一狀態,收到notification消息則斷開TCP連接

狀態變化:openconfirm-idle/establish

establish:鄰居建立完成

router-refresh:

  • 手動發送,在用戶視圖下RF bgp all import(export)觸發發送該報文
  • 當需要刷新路由時,發送該消息給對等體

BGP鄰居更新消息報文(UPDATE)

用於對等體之間交換路由信息(更新和撤銷)

一條Update報文可以發佈多條具有相同路由屬性的可達路由,這些路由可共享一組路由屬性。所有包含在一個給定的Update報文裏的路由屬性適用於該Update報文中的NLRI(Network Layer Reachability Information)字段裏的所有目的地(用IP前綴表示)。

一條Update報文可以撤銷多條不可達路由。每一個路由通過目的地(用IP前綴表示),清楚地定義了BGP路由器之間先前通告過的路由。

一條Update報文可以只用於撤銷路由,這樣就不需要包括路徑屬性或者NLRI。相反,也可以只用於通告可達路由,就不需要攜帶撤銷路由信息了。

BGP的通告原則:

1.僅將自己最優的路由發佈給鄰居

2.通過EBGP獲得的最優路由發佈給所有BGP鄰居

3.通過IBGP獲得的最優路由不會發布給其他的IBGP鄰居

4.BGP與IGP同步

3.BGP的路由生成方式

產生BGP的路由方式有兩種,一種是Network,一種是import

3.1.Network

將IP路由表中已經存在的路由逐條引進BGP路由表中

3.2.import

根據具體的需求,編寫路由策略進行精確引入

3.3BGP路由信息的處理

從BGP鄰居發送過來的更新報文會在本地進行路徑選擇處理,選出一條最優的傳到本地路由表,並上傳到路由信息表備用。然後再將最優的更新報文傳給鄰居。

IP路由表(IP_RIB):全局路由信息庫,包括所有的IP路由信息。

BGP路由表(Local_RIB):BGP路由信息庫,包括本地BGP路由器選擇的路由信息,鄰居表,鄰居清單列表。

4.BGP的路徑屬性(選出一條最優的道路到達目的城市)

兩個主要問題:

1.到達同一目的地有千千萬萬條路,如何選擇一條最寬(帶寬較高)的路

2.如何避免環路

 

BGP提供了四種路徑屬性

公認必遵:BGP所有的Updata消息必須包含的屬性(起點-路徑-目的地)

Origin:標明路由起源(i>e>Incomplete(?))

i表明BGP路由通過network命令注入;

e表明BGP路由是從EGP學來的,EGP協議在現網中很難見到,但可以通過路由策略將路由的Origin屬性修改爲e;

? 即Incomplete表明BGP路由通過其它方式學到路由信息,如使用import命令引入的路由。

AS-Path:記錄了路由經過的所有的AS的編號(行車軌跡)

   AS-sequence:表示AS_Path內的AS號是一個有序的列表。

   AS-Set:表示AS_Path內的AS號是一個無序的列表。(AS 內發生了聚合並配置了as-set參數,則聚合路由會將明細路由的AS_Path信息用一個AS-Set集表示(放在中括號裏的AS號信息,該集合的AS號沒有先後順序),攜帶在聚合路由後用以防止環路。)

Next-hop:下一跳(下一站)

1.BGP路由器將本端始發路由發佈給IBGP鄰居時,會把該路由信息的Next_hop設爲本端建立鄰居關係所使用的接口IP。BGP鄰居通常採用Loopback接口建立鄰居,當路由是本路由器起源的,在發送給鄰居之後Next_hop改爲自己的更新源地址,這樣即使網絡中出現鏈路故障,只要Next_hop可達,同樣可以訪問目的網段,提高網絡穩定性;

(在本城市去往其他鄉鎮要的下一站就是本鎮的大門。這樣當道路發生改變,大門也不會改變,增加穩定性)

2.BGP路由器在向EBGP鄰居發佈路由時,會把路由信息的Next_hop設置爲本端與對端建立BGP鄰居關係的接口IP。EBGP鄰居之間一般採用直連接口建立鄰居關係,EBGP鄰居在相互通告路由時會修改Next_hop爲自己的出接口IP;

(從本城市去往其他城市的下一站是目的城市的高速出口)

3.BGP路由器在向IBGP鄰居通告從EBGP學來的路由時,不改變該路由下一跳屬性。相對於IGP,如RIP在發佈路由時,每經過一個路由器都會修改下一跳,發佈路由的路由器都宣稱自己能夠到達目標地址,並採用逐跳傳遞的方式將數據包發送給目標網絡,但網絡中的路由器並不知道誰是真正的始發路由器,因此會造成環路。BGP在EBGP之間傳遞時才修改Next_hop,IBGP發送從EBGP學來的路由給IBGP鄰居時並不修改下一跳,在一定程度上起到了防環作用。

(向本城市其他鄉鎮通告去往其他城市的信息,下一站不發生改變。在本鄉鎮傳播其他城市的信息時,下一站會不斷改變,爲了讓大家更加清楚,所以將去往其他城市的下一站設爲一個固定地點)

公認任意(不必存在於BGP的Update消息中,可以根據需求自由選擇的屬性。)(城市道路優劣選擇)

Local-preference(本城市(AS)有效)(去往高速路口的優先級,越大越厲害)

Local_Pref屬性用於判斷流量離開AS時的最佳路由。當BGP路由器通過不同的IBGP鄰居獲得目的地址相同但下一跳不同的多條路由時,將優先選擇Local_Pref屬性值較高的路由,其默認值爲100。

MED(城市間高速的優先級,越小越厲害)

MED(Multi-Exit-Discriminator)屬性僅在相鄰兩個AS之間傳遞,收到此屬性的AS不會再將其通告給任何其他第三方AS。

可選過渡(可行駛範圍,同一目的地限定行駛路線)

Community

作用:限定路由的傳播範圍。

           打標記,便於對符合相同條件的路由進行統一處理。

可選非過渡

5.BGP選路原則

BGP路由器將路由通告給鄰居後,每個BGP鄰居都會進行路由優選,路由選擇有三種情況:

該路由是到達目的地的唯一路由,直接優選。 (到達目的地只有一條路的直接行駛)

對到達同一目的地的多條路由,優選優先級最高的。 (到達目的地有多條路的,選擇最快的)

對到達同一目的地且具有相同優先級的多條路由,必須用更細的原則去選擇一條最優的。 (到達目的地有多條速度一樣的,根據更多的信息進行優選)

一般來說,BGP計算路由優先級的規則如下:

丟棄下一跳不可達的路由。

優選Preference_Value值最高的路由(私有屬性,僅本地有效)。

優選本地優先級(Local_Preference)最高的路由。

優選手動聚合>自動聚合>network>import>從對等體學到的。

優選AS_Path短的路由。

起源類型IGP>EGP>Incomplete。

對於來自同一AS的路由,優選MED值小的。 優選從EBGP學來的路由(EBGP>IBGP)。

優選AS內部IGP的Metric最小的路由。 等

Preference_Value對選路的影響(越大越優先,華爲私有,本地有效)

聚合方式對選路的影響(手動>自動)

EBGP鄰居的路由優於IBGP鄰居的路由(城際道路優先於鄉鎮道路)

AS內部IGP Metric對BGP選路的影響

Router-ID與IP地址對BGP選路的影響(優選小的)

6.路由聚合

目的:

1、存儲路由條目的路由表將佔用大量的內存資源,傳輸路由信息需要佔用大量的帶寬資源;

2、明細路由頻繁震盪造成網絡不穩定。

靜態

使用靜態路由將明細路由聚合成10.1.8.0/22,下一跳指向NULL 0,因爲聚合路由並不是具體的地址,發送給AS 200時只是明細路由的替代,爲了防止路由環路,所以將下一跳指向Null 0;

由於使用靜態路由,路由表中產生了一條10.1.8.0/22的路由,下一跳爲Null 0。使用network命令將IP路由表中的10.1.8.0/22路由變爲BGP路由,並通告給對端BGP鄰居,達到聚合的目的。

自動聚合  (summary automatic)

自動彙總路由,自動彙總import方式引入的路由

手動聚合

彙總import和network引入的路由

路由聚合帶來的問題

丟失了AS-path屬性,可能造成潛在環路

 

(部分圖片和內容源於網絡,侵刪)

 

 

 

 

 

 

 

 

 

 

 

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