計算機網絡-4-8-外部網關協議BGP


外部網關協議BGP

1989年,公布了新的外部網關協議BGP(邊界網關協議),我們目前使用最多的版本是BGP-4(但仍然是起草方案[RFC 4271]),簡寫為BGP。

在不同的自治系統AS中之間的路由選擇為什么不選擇前面討論的內部網關協議,如RIP或者OSPF?我們知道,內部網關協議(如RIP或RSPF)主要是設法使數據報在一個AS當中盡可能從源站發送到目的站。然而BGP使用的環境卻不同,這主要有以下兩種原因:

  1. 互聯網的規模太大,使得自治系統AS之間路由選擇非常困難。連接在互聯網主干上的路由器,必須對任何有效的IP地址都能在路由表中找到匹配的目的網絡。目前在互聯網的路由器中,一個路由表的數目早已超過5萬個網絡前綴。如果使用鏈路狀態協議,則每一個路由器必須維持一個很大的鏈路狀態數據路,對於這么大的主干網,迪傑斯特拉算法計算最短路徑時花費的時間也太長。另外,不同的AS自治系統運行着自己選擇特定的內部路由選擇協議,並使用本AS指明的路徑長度。比較合理的做法是在自治區系統之間交換可達性信息(即“可到達”或者“不可到達”),例如,告訴相鄰路由器:“到達目的網絡N可以經過自治系統ASx”。

  2. 自治系統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協議。

image

邊界網關協議BGP所交換的網絡可達性的信息就是要到達某個網絡(用網絡前綴表達式)所要經過的一系列自治系統。當BGP發言人互相交換了網絡可達的信息后,各BGP發言人就根據所采用的策略從收到的路由器信息找到到達各自治系統較好的路由,圖4-39表示了從圖4-38的AS1上的一個BGP發言人構造出的自治系統連通圖,它是樹形結構,不存在回路。

image

在如下圖4-40中,給出了一個BGP發言人交換路徑向量的例子。自治系統AS2的BGP發言人通過主干網的BGP發言人:”要到達網絡N1,N2,N3,N4和N5可以經過AS2“。主干網在收到這個通知后,就發出通知:”要到達網絡N1,N2,N3和N4可經過AS2可沿着路經(AS1和AS2)“。同理,主干網還可以發出通知:”要經過網絡N5,N6,N7可沿路徑(AS1和AS3)“。

image

從上面可以看出: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字節。

image

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字節)
  • 差錯數據(給出有關差錯的診斷信息)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM