電腦網路-4-8-外部網關協議BGP
外部網關協議BGP
1989年,公布了新的外部網關協議BGP(邊界網關協議),我們目前使用最多的版本是BGP-4(但仍然是起草方案[RFC 4271]),簡寫為BGP。
在不同的自治系統AS中之間的路由選擇為什麼不選擇前面討論的內部網關協議,如RIP或者OSPF?我們知道,內部網關協議(如RIP或RSPF)主要是設法使數據報在一個AS當中儘可能從源站發送到目的站。然而BGP使用的環境卻不同,這主要有以下兩種原因:
-
互聯網的規模太大,使得自治系統AS之間路由選擇非常困難。連接在互聯網主幹上的路由器,必須對任何有效的IP地址都能在路由表中找到匹配的目的網路。目前在互聯網的路由器中,一個路由表的數目早已超過5萬個網路前綴。如果使用鏈路狀態協議,則每一個路由器必須維持一個很大的鏈路狀態數據路,對於這麼大的主幹網,迪傑斯特拉演算法計算最短路徑時花費的時間也太長。另外,不同的AS自治系統運行著自己選擇特定的內部路由選擇協議,並使用本AS指明的路徑長度。比較合理的做法是在自治區系統之間交換可達性資訊(即「可到達」或者「不可到達」),例如,告訴相鄰路由器:「到達目的網路N可以經過自治系統ASx」。
-
自治系統AS之間的路由選擇必須考慮有關策略。由於相互連接的網路的性能相差很大,根據最短路徑(即最小跳數)找出來的路徑,可能並不合適。還有一種情況,如自治系統AS1要發送的數據報給自治系統AS2,本來是最好經過AS3,但AS3並不願意讓這些數據報通過本自治區的網路,因為「這是他們的事,和我們沒有關係」。因此,自治系統之間的路由選擇應當允許使用多種路由選擇策略。使用這些策略是為了找出更好的路徑而不是最佳的路徑。
由於上述情況,邊界網關協議BGP只能時力求尋找一條能夠到達目的網路且比較好的的路由(不能兜圈子),而並非要找一條最佳路由,BGP採用了路徑向量(path vector)路由選擇協議,它與距離向量協議(如RIP)和鏈路狀態協議(如OSPF)都有很大的區別。
在配置BGP的時候,每一個自治系統的管理員要選擇至少一個路由器作為該自治系統的BGP發言人。一般來說,兩個BGP發言人都是通過一個共享網路連接在一起的,而BGP發言人往往就是BGP邊界路由器,但也可以不是BGP邊界路由器。
一個BGP發言人與其他AS的BGP發言人要交換路由資訊,就要先建立起TCP連接(埠號為179),然後在此連接上交換BGP報文以建立BGP會話(session),利用BGP會話交換路由資訊,如增加了新的路由,或撤銷過時的路由,以及報告出差錯情況等等。使用TCP連接能提供可靠的服務,也簡化了路由選擇協議。使用TCP連接路由資訊的兩個BGP發言人,彼此成為對方的鄰站(neighbor)或對等站(peer)。
圖4-38表示BGP發言人和自治系統AS之間的關係示意圖。在圖中畫出了三個自治系統中的5個BGP發言人,每個BGP發言人除了必須運行BGP協議模組外,還必須要運行該自治系統內部的內部網關協議,例如OSPF協議或者RIP協議。
邊界網關協議BGP所交換的網路可達性的資訊就是要到達某個網路(用網路前綴表達式)所要經過的一系列自治系統。當BGP發言人互相交換了網路可達的資訊後,各BGP發言人就根據所採用的策略從收到的路由器資訊找到到達各自治系統較好的路由,圖4-39表示了從圖4-38的AS1上的一個BGP發言人構造出的自治系統連通圖,它是樹形結構,不存在迴路。
在如下圖4-40中,給出了一個BGP發言人交換路徑向量的例子。自治系統AS2的BGP發言人通過主幹網的BGP發言人:」要到達網路N1,N2,N3,N4和N5可以經過AS2「。主幹網在收到這個通知後,就發出通知:」要到達網路N1,N2,N3和N4可經過AS2可沿著路經(AS1和AS2)「。同理,主幹網還可以發出通知:」要經過網路N5,N6,N7可沿路徑(AS1和AS3)「。
從上面可以看出:BGP協議交換路由資訊的結點數量級是自治系統個數,這要比這些自治系統中的網路個數少很多,每一個自治系統中BGP發言人(路由器)的數目是很少的,這樣就使得自治系統之間的路由選擇並不過分複雜。
BGP支無分類持域間路由選擇協議CIDR,因此BGP的路由表也就包括目的網路前綴資訊,下一跳路由器,以及要到達目的網路所要經過的自治系統序列,由於使用了路徑向量資訊,就可以很容易的避免」兜圈子」。
在BGP協議剛剛運行的時候,BGP的鄰站是交換整個BGP路由表,但以後只需要在發生變化時更新有變化的部分。這樣做對節省網路頻寬和減少路由器的處理開銷都有好處。在RFC 4271中規定了BGP-4種報文:
- OPEN(打開)報文:用來和相鄰的另一個BGP發言人建立關係,初始化通訊。
- UPDATE(更新)報文:用來通告某一個路由的資訊,以及列出要撤出的路由。
- KEEPALIVE(保活)報文:用來周期性證實鄰站的連通性。
- NOTIFICATION(通知報文):用來發送檢測到的差錯。
若兩個鄰站屬於不同AS,而其中一個鄰站打算要定期和另一個鄰站交換路由資訊,一開始就應該發送一個OPEN報文,如果鄰站接受鄰站的關係,就用KEEPALIVE報文(一般每隔30s)。KEEPALIVE報文只有19位元組長(只用BGP報文的通用首部),因此不會造成網路上太大的開銷。
UPDATE報文是BGP協議的核心,BGP發言人可以使用UPDATE報文撤銷它以前通知過的路由,也可以宣布增加新的路由,撤銷路由可以一次性撤銷許多條,但是新增路由,每個UPDATE報文只能添加一條。BGP可以很容易地解決距離向量路由選擇演算法中的「壞消息傳播得慢「這一問題。當某個路由器或者鏈路出現故障的時候,由於BGP發言人可以從不止一個鄰站獲取路由資訊。因此很容易地選擇出新的路由。距離向量演算法往往不能給出正確的選擇,因為這些演算法往往不能給出正確的選擇,是因為這些演算法不能指出哪些鄰站的目的站的路由時獨立的。
圖4-41給出了BGP報文的格式。四種類型的BGP報文具有同樣的通用首部,其長度為19位元組,通用首部分為三個欄位:
- 標記欄位16位元組:用來鑒別收到的BGP報文,如果不使用鑒別,則標記欄位要置為全1。
- 長度欄位指出包含通用首部在內的整個BGP報文以位元組為單位的長度,最小值為19,最大值為4096(佔1位元組)。
- 類型欄位的值為1-4,分別對應上述BGP報文中的一種,佔1位元組。
OPEN報文共有6個欄位:
- 版本(1位元組,現在的值是4)
- 本自治系統(2位元組,使用全球唯一的16位自治系統號,由ICANN分配)
- 保持時間(2位元組,以秒計算的保持為鄰站關係的時間)
- BGP標識符(4位元組,通常是該路由器的IP地址)
- 可選參數長度(1位元組,可選參數)
UPDATE報文共有5個欄位:
- 不可行路由長度(2位元組,指明下一個欄位的長度)
- 撤銷的路由(列出所有要撤銷的路由)
- 路徑屬性總長度(2位元組,指明下一個欄位的長度)
- 路徑屬性(定義這個報文中增加的路徑屬性)
- 網路層可達資訊NLRI(Network Layer Reachability Information:定義發出此報文的網路,包括網路前綴的位數,IP地址前綴)
KEEPALIVE報文只有BGP的19位元組長度的通用首部。
NOTIFICATION報文只有三個欄位:
- 差錯程式碼(1位元組)
- 差錯子程式碼(1位元組)
- 差錯數據(給出有關差錯的診斷資訊)