1.簡介
BGP(Border Gateway Protocol,邊界網關協議)是一種既可以用於不同AS(Autonomous System,自治系統)之間,又可以用於同一AS內部的動態路由協議。當BGP運行於同一AS內部時,被稱為IBGP(Internal BGP);
當BGP運行於不同AS之間時,稱為EBGP(External BGP)。AS是擁有同一選路策略,屬於同一技術管理部門的一組路由器。當前使用的BGP版本是BGP-4。
2.BGP的特點
· BGP是一種EGP(Exterior Gateway Protocol,外部網關協議),與OSPF、RIP等IGP(Interior Gateway Protocol,內部網關協議)不同,其着眼點不在於發現和計算路由,而在於控制路由的傳播和選擇最佳路由。
· BGP使用TCP作為其傳輸層協議(端口號179),提高了協議的可靠性。
· BGP是一種路徑矢量(Path-Vector)路由協議,它采用到達目的地址所經過的AS列表來衡量到達目的地址的距離。
· BGP支持CIDR(Classless Inter-Domain Routing,無類域間路由)。
· 路由更新時,BGP只發送更新的路由,大大減少了BGP傳播路由所占用的帶寬,適用於在Internet上傳播大量的路由信息。
· BGP路由通過攜帶AS路徑信息徹底解決路由環路問題。
· BGP提供了豐富的路由策略,能夠對路由實現靈活的過濾和選擇。
· BGP易於擴展,能夠適應網絡新的發展。
3.BGP的發言者和對等體
運行BGP協議的路由器稱為BGP發言者。BGP發言者接收或產生路由信息,並將路由信息發布給其它BGP發言者。相互之間存在TCP連接、相互交換路由信息的BGP發言者互為BGP對等體。
根據對等體所在的AS,可以將對等體分為以下兩種:
· IBGP對等體:對等體與本地路由器位於同一AS。
· EBGP對等體:對等體與本地路由器位於不同AS。
根據對等體的IP地址類型,可以將對等體分為以下兩種:
· IPv4對等體:通過IPv4地址創建的對等體。
· IPv6對等體:通過IPv6地址創建的對等體。
4.BGP的5個消息類型
· Open:TCP連接建立后發送的第一個消息,用於在BGP對等體之間建立會話。
· Update:用於在對等體之間交換路由信息。一條Update消息可以發布具有相同路徑屬性的多條可達路由,也可以同時撤銷多條不可達路由。
· Keepalive:BGP周期性地向對等體發送Keepalive消息,以保持會話的有效性。
· Route-refresh:用來要求對等體重新發送指定地址族的路由信息。
· Notification:當BGP檢測到錯誤狀態時,就向對等體發出Notification消息,之后BGP會話會立即中斷。
5.BGP的路由屬性
BGP路由屬性是跟隨路由一起發布出去的一組參數。它對特定的路由進行了進一步的描述,使得路由接收者能夠根據路由屬性值對路由進行過濾和選擇。下面將介紹幾種常見的路由屬性。
1) 源(ORIGIN)屬性
ORIGIN屬性定義了路由信息的來源,標記一條BGP路由是怎么生成的。它有以下三種類型:
· IGP:優先級最高,表示路由產生於本AS內。
· EGP:優先級次之,表示路由通過EGP學到。
· Incomplete:優先級最低,表示路由的來源無法確定。例如,從其它路由協議引入的路由信息。
2)AS路徑(AS_PATH)屬性
AS_PATH屬性記錄了某條路由從本地到目的地址所要經過的所有AS號。當BGP路由器將一條路由通告到其他AS時,會把本地AS號添加在AS_PATH列表中。收到此路由的BGP路由器根據AS_PATH屬性就可以知道到達目的地址所要經過的AS。
AS_PATH屬性有以下兩種類型:
· AS_SEQUENCE:AS號按照一定的順序排列。如下圖所示,離本地AS最近的相鄰AS號排在前面,其他AS號按順序依次排列。
· AS_SET:AS號只是經過的AS的簡單羅列,沒有順序要求。
AS_PATH屬性具有如下用途:
· 避免路由環路的形成:缺省情況下,如果BGP路由器接收到的路由的AS_PATH屬性中已經包含了本地的AS號,則BGP路由器認為出現路由環路,不會接受該路由。
· 影響路由的選擇:在其他因素相同的情況下,BGP會優先選擇路徑較短的路由。比如在上圖中,AS 50中的BGP路由器會選擇經過AS 40的路徑作為到目的地址8.0.0.0的最優路由。
用戶可以使用路由策略來人為地增加AS路徑的長度,以便更為靈活地控制BGP路徑的選擇。
· 對路由進行過濾:通過配置AS路徑過濾列表,可以針對AS_PATH屬性中所包含的AS號來對路由進行過濾。
3)下一跳(NEXT_HOP)屬性
BGP的NEXT_HOP屬性取值不一定是鄰居路由器的IP地址。如下圖所示,NEXT_HOP屬性取值情況分為幾種:
· BGP發言者把自己產生的路由發給所有鄰居時,將該路由信息的NEXT_HOP屬性設置為自己與對端連接的接口地址;
· BGP發言者把接收到的路由發送給EBGP對等體時,將該路由信息的NEXT_HOP屬性設置為自己與對端連接的接口地址;
· BGP發言者把從EBGP鄰居得到的路由發給IBGP鄰居時,並不改變該路由信息的NEXT_HOP屬性。如果配置了負載分擔,等價路由被發給IBGP鄰居時則會修改NEXT_HOP屬性。
4)MED(Multi-Exit Discriminator,多出口區分)屬性
MED屬性僅在相鄰兩個AS之間交換,收到此屬性的AS不會再將其通告給其它AS。
MED屬性相當於IGP使用的度量值(metrics),它用於判斷流量進入AS時的最佳路由。當一個BGP路由器通過不同的EBGP對等體得到目的地址相同但下一跳不同的多條路由時,在其它條件相同的情況下,
將優先選擇MED值較小者作為最佳路由。如下圖所示,從AS 10到AS 20的流量將選擇Router B作為入口。
通常情況下,BGP只比較來自同一個AS的路由的MED屬性值。在某些特殊的應用中,用戶也可以通過配置compare-different-as-med命令,強制BGP比較來自不同AS的路由的MED屬性值。
5)本地優先(LOCAL_PREF)屬性
LOCAL_PREF屬性僅在IBGP對等體之間交換,不通告給其他AS。它表明BGP路由器的優先級。
LOCAL_PREF屬性用於判斷流量離開AS時的最佳路由。當BGP路由器通過不同的IBGP對等體得到目的地址相同但下一跳不同的多條路由時,將優先選擇LOCAL_PREF屬性值較高的路由。
如下圖所示,從AS 20到AS 10的流量將選擇Router C作為出口。
6)團體(COMMUNITY)屬性
BGP將具有相同特征的路由歸為一組,稱為一個團體,通過在路由中攜帶團體屬性標識路由所屬的團體。團體沒有物理上的邊界,不同AS的路由可以屬於同一個團體。
根據需要,一條路由可以攜帶一個或多個團體屬性值(每個團體屬性值用一個四字節的整數表示)。接收到該路由的路由器可以通過比較團體屬性值對路由作出適當的處理(比如決定是否發布該路由、在什么范圍發布等),
而不需要匹配復雜的過濾規則(如ACL),從而簡化路由策略的應用和降低維護管理的難度。
公認的團體屬性有:
· INTERNET:缺省情況下,所有的路由都屬於INTERNET團體。具有此屬性的路由可以被通告給所有的BGP對等體。
· NO_EXPORT:具有此屬性的路由在收到后,不能被發布到本地AS之外。如果使用了聯盟,則不能被發布到聯盟之外,但可以發布給聯盟中的其他子AS。
· NO_ADVERTISE:具有此屬性的路由被接收后,不能被通告給任何其他的BGP對等體。
· NO_EXPORT_SUBCONFED:具有此屬性的路由被接收后,不能被發布到本地AS之外,也不能發布到聯盟中的其他子AS。
除了公認的團體屬性外,用戶還可以使用團體屬性列表自定義團體屬性,以便更為靈活地控制路由策略。
7)擴展團體屬性
隨着團體屬性的應用日益廣泛,原有四字節的團體屬性無法滿足用戶的需求。因此,BGP定義了新的路由屬性——擴展團體屬性。擴展團體屬性與團體屬性有如下不同:
· 擴展團體屬性為八字節,提供了更多的屬性值。
· 擴展團體屬性可以划分類型。在不同的組網應用中,可以使用不同類型的擴展團體屬性對路由進行過濾和控制。與不區分類型、統一使用同一個屬性值空間的團體屬性相比,擴展團體屬性的配置和管理更為簡單。
目前,設備支持的擴展團體屬性有VPN Target屬性和SoO(Site of Origin,源站點)屬性。
SoO擴展團體屬性用來標識路由的原始站點。路由器不會將帶有SoO屬性的路由發布給該SoO標識的站點,確保來自某個站點的路由不會再被發布到該站點,從而避免路由環路。在AS路徑信息丟失時,可以通過SoO屬性來避免發生環路。
SoO屬性有三種格式:
· 16位自治系統號:32位用戶自定義數,例如:101:3。
· 32位IP地址:16位用戶自定義數,例如:192.168.122.15:1。
· 32位自治系統號:16位用戶自定義數,其中的自治系統號最小值為65536。例如:65536:1。
6.BGP的選路規則
1)丟棄下一跳(NEXT_HOP)不可達的路由;
2)優選首選值(Preferred-value)最大的路由;
3)優選本地優先級(LOCAL_PREF)最高的路由;
4)依次選擇network命令生成的路由、import-route命令引入的路由、聚合路由;
5)優選AS路徑(AS_PATH)最短的路由;
6)依次選擇ORIGIN類型為IGP、EGP、Incomplete的路由;
7)優選MED值最低的路由;
8)依次選擇從EBGP、聯盟EBGP、聯盟IBGP、IBGP學來的路由;
9)優選IGP Metric值最小的路由;
10)優選迭代深度值小的路由;
11)如果當前的最優路由為EBGP路由,則BGP路由器收到來自不同的EBGP鄰居的路由后,不會改變最優路由;
12)優選Router ID最小的路由器發布的路由。如果路由包含RR屬性,那么在路由選擇過程中,就用ORIGINATOR_ID來替代Router ID;
13)優選下一跳地址為IPv4地址的路由。
14)優選CLUSTER_LIST長度最短的路由;
15)優選IP地址最小的對等體發布的路由。