1. 簡介
BGP是一種實現自治系統AS之間的路由可達,並選擇最佳路由的距離矢量路由協議
BGP從多方面保證了網絡的安全性,靈活性,穩定性,可靠性和高效性
BGP采用認證和GTMS方式,保證了網絡的安全性
BGP提供了豐富的路由策略,能夠靈活的進行路由選路
BGP提供了路由聚合和路由衰減用於防止路由震盪,有效提高網絡的穩定性
BGP使用TCP(179)並支持與BFD聯動,BGP tracking,BGP GR提高網絡的可靠性
2. 自治系統(AS)
AS是指在一個實體管轄下的擁有相同選路策略的IP網絡,BGP網絡中的每個AS都被分配一個唯一的AS號,用於區分不同的AS
2字節AS號:1-65535
4字節AS號:1-4294967295
3. BGP的分類
EBGP:運行於不同AS之間的BGP,為了防止AS之間產生環路,當BGP設備接收EBGP對等體發送的路由時,會將帶有本地AS號的路由丟棄
IBGP: 運行於同一個AS內部的BGP,為了防止環路,BGP設備不將從IBGP對等體學到的路由通告給其他IBGP對等體,並與所有IBGP對等體建立全連接,為了解決IBGP對等體鏈接數量太多的問題,BGP設計了路由反射器和BGP 聯盟
4. BGP工作原理
BGP對等體的建立,更新和刪除等交互過程主要有5種報文,6種狀態機和5個原則
4.1 BGP的報文
BGP對等體通過以下5種報文進行交互,其中keepalive報文為周期性發送,其余報文觸發式
open報文,用於建立bgp對等體.
update報文,用於在對等體之間交換路由信息
notification報文,用於中斷bgp連接
keepalive報文,用於保持bgp連接
route-refresh報文,用於在改變路由策略后請求對等體重新發送路由信息,只有支持路由刷新功能的bgp設備支持。
4.2 BGP狀態機
6中狀態機,空閑Idle,連接Connect,活躍Active,open報文已發送Opensent,open報文已確認Openconfirm,連接已建立Establish
在BGP對等體建立的過程中,通常可見的3種狀態Idle,Active,Established

1.idle狀態時BGP初始狀態,在idle狀態下,BGP拒絕鄰居發送的連接請求,只有在收到本設備的start事件后,BGP才開始嘗試和其他BGP對等體進行TCP連接,並轉至Connect狀態
2.connect狀態下,BGP啟動連接重傳定時器,等待TCP完成連接
a.如果tcp連接成功,那么BGP向對等體發送open報文,並轉至opensent狀態
b.如果tcp連接失敗,那么bgp轉至active狀態
c.如果連接重傳定時器超時,BGP仍沒有收到對等體的響應,那么BGP繼續嘗試和其他BGP對等體進行TCP連接,停留在Connect狀態
3.active狀態下,BGP總是在試圖建立TCP連接
a.如果TCP連接成功,那么BGP向對等體發送open報文,關閉連接重傳定時器,並轉至opensent狀態
b.如果TCP連接失敗,那么BGP停留在active狀態
c.如果連接重傳定時器超時,BGP仍沒有收到BGP對等體響應,那么BGP轉至connect狀態
4.opensent狀態下,BGP等待對等體的open報文並對收到open報文中的AS號,版本號,認證碼進行檢查
a.如果收到open報文正確,那么BGP發送keepalive報文,並轉至openconfirm狀態
b.如果發現收到的open報文錯誤,那么BGP發送notification報文給對等體,並轉至idle狀態
5.openconfirm狀態下,BGP等待keepalive或notification報文。如果收到keepalive報文,則轉至established狀態,如果收到notification報文,則轉至idle狀態
6.established狀態下,BGP可以和對等體交換update,keepalive,route-refersh報文和notification報文
a.如果收到正確的update報文或keepalive報文,那么BGP就認為對端處於正常運行狀態,將保持BGP連接
b.如果收到錯誤的update報文或keepalive報文,那么BGP發送notification報文至對端,並轉至idle狀態
c.route-refresh報文不會改變BGP狀態
d.如果收到notification報文,BGP轉至idle狀態
e.如果收到TCP拆鏈通知,BGP斷開連接,轉至idle狀態
5. BGP對等體之間的交互原則
BGP設備將最優路由加入BGP路由表,形成BGP路由表,BGP設備與對等體建立鄰居關系,采用以下原則:
1.從IBGP對等體獲得的BGP路由,BGP設備只發布給它的EBGP對等體
2.從EBGP對等體獲得的BGP路由,BGP設備發布給它所有EBGP和IBGP對等體
3.當存在多台到達同一目的地址的有效路由時,BGP設備只將最優路由發布給對等體
4.路由更新時,BGP設備只發送更新的BGP路由
5.所有對等體發送的路由,BGP設備都會接收
6. BGP與IGP交互
1.BGP引入IGP路由
BGP在引入IGP路由時,可以使用路由策略進行路由過濾和路由屬性設置,也可以設置MED值指導EBGP對等體判斷流量進入AS時選路
BGP引入路由時支持import和network兩種方式
import按協議引入,將RIP,OSPF,ISIS等協議的路由引入到BGP路由表,也可以引入靜態路由和直連路由
network逐條將IP路由表中已經存在的路由引入到BGP路由表中,比import更精確
2.IGP引入BGP路由
當一個AS需要引入其他AS的路由時,AS邊緣路由器會在IGP路由表中引入BGP路由
為了避免大量BGP路由對AS內部設備造成影響,當IGP引入BGP路由時,可以使用路由策略,進行路由過濾和路由屬性設置
7. BGP的路由選擇規則和負載分擔
7.1 BGP屬性
路由屬性是對路由的特定描述,所有的BGP路由屬性可以分為以下4類
1.公認必須遵循,所有BGP設備都可以識別此類屬性,且必須存在於update報文中,如果缺少這類屬性,路由信息會報錯
2.公認任意,所有BGP設備都可以識別此類屬性,但不要求必須存在於update報文中,就算缺少這類屬性,路由信息也不會報錯
3.可選過渡,BGP設備可以不識別此類屬性,如果BGP設備部識別此類屬性,但它仍然會接受這類屬性,並通告給其他對等體
4.可選非過渡,BGP設備可以不識別此類屬性,如果BGP設備不識別此類屬性,則會忽略該屬性,且不會通告給其他對等體
7.2 BGP常見屬性類型
| 屬性名 | 類型 |
|---|---|
| origin屬性 | 公認必須遵循 |
| AS_path屬性 | 公認必須遵循 |
| Next_hop屬性 | 公認必須遵循 |
| Local_perf屬性 | 公認任意 |
| MED屬性 | 可選非過渡 |
| 團體屬性 | 可選過度 |
| originator_id屬性 | 可選非過度 |
| cluster_list屬性 | 可選非過度 |
7.3 常用路由屬性
1.origin屬性
用來定義路徑信息的來源,標記一條路由時怎么成為BGP路由的
3種類型:
IGP,具有最高優先級,通過network命令注入到BGP路由表的路由,起origin屬性為IGP
EGP,優先級次之,通過EGP得到的路由信息,其origin屬性為EGP
incomplete,優先級最低,通過其他方式學到的路由信息,比如BGP通過import-route命令引入的路由,其origin屬性為incomplete
2. AS_path屬性
按矢量順序記錄了某條路由從本地到目的地址所要經過的所有AS編號,在接收路由時,設備如果發現AS_path列表中有本AS號,則不接收該路由,從而避免了AS間的路由環路
當BGP speaker傳播自身引入的路由時
a.當BGP speaker將這條路由通告到EBGP對等體時,便會在update報文中創建一個攜帶本地AS號的AS_path列表
b.當BGP speaker將這條路由通告到IBGP對等體時,便會在update報文中創建一個空的AS_path列表
當BGP speaker傳播從其他BGP speaker的update報文中學習到的路由時
a.當BGP speaker將這條路由通告給EBGP對等體時,便會把本地AS編號添加到AS_path列表的最前面(最左邊),離本地AS最近的相鄰AS號排在前面,其他AS號按順序依次排列
b.當BGP speaker將這條路由通告給IBGP對等體時,不會改變着路由相關的AS_path屬性
3.Next_hop屬性
記錄了路由的下一跳信息,遵循下面原則
a.BGP speaker在向EBGP對等體發布某條路由時,會把該路由信息的下一跳屬性設置為本地與對端建立BGP鄰居關系的接口地址
b.BGP speaker將本地始發的路由發布給IBGP對等體時,會把該路由信息的下一跳屬性設置為本地與對端建立BGP鄰居關系的接口地址
c.BGP speaker在向IBGP對等體發布從EBGP對等體學來的路由時,並不改變該路由信息的下一跳屬性
4.Local_perf屬性
表明路由器的BGP優先級,用於判斷流量離開AS時的最佳路由
當BGP的設備通過不同的IBGP對等體得到目的地址相同但下一跳不同的多條路由時,將優先選擇local_perf屬性值較高的路由
local_perf屬性僅在IBGP對等體之間有效,不通告給其他AS
local_perf屬性可手動配置,缺省值為100
5.MED屬性
在其他條件相同的情況下,優先選擇MED值較小的作為最佳路由
MED屬性僅在相鄰的兩個AS之間傳遞,收到此屬性的AS不會將其通告給其他第三方AS
MED可手動配置,缺省值為0
6.團體屬性
團體屬性 用於標識具有相同特征的BGP路由,使路由策略的應用更加靈活,降低維護管理的難度
公認團體屬性
| 團體屬性名稱 | 團體屬性號 | 說明 |
|---|---|---|
| internet | 0(0x00000000) | 設備在收到具有此屬性的路由后,可以向任何對等體發布 |
| NO_advertise | 4294967042(0xFFFFFF02) | 不向任何BGP對等體發布具有此屬性的路由 |
| NO_export | 4294967041(0xFFFFFF01) | 不向AS外發布具有此屬性的路由 |
| NO_export_subconfed | 4294967043(0xFFFFFF03) | 不向AS外,也不向AS內其他子AS發布具有此屬性的路由 |
originator_id和cluster_list屬性
用於解決路由反射器場景中的環路問題
7.4 BGP路由選擇策略
當到達同一目的地址存在多條路由時,BGP依次對比下列屬性來選擇路由
1.優選weight(cisco)最高,per-val(huawei)最高的路由,僅在本地有效
2.優選本地優先級(local_perf)最高的路由,缺省值為100
3.優選手動聚合路由,自動聚合路由,network命令引入的路由,import-route命令引入的路由,從對等體學到的路由
4.優選AS路徑(AS_path)最短的路由
5.依次優選origin屬性為IGP,EGP,Incomplete的路由
6.對於來自同一AS的路由,優選MED值最低的路由
7.依次選在從EBGP,聯盟,IBGP學到的路由
8.優選下一跳度量值最低的路由(metric)
9.優選cluster_id最低的路由
10.優選origin_id最小的路由
11.優選router id最小的路由器發布的路由
12.優選從最小地址對等體學來的路由
7.5 BGP負載分擔
當到達同一目的地址存在多條等價路由時,可以通過BGP等價負載分擔實現均衡流量的目的
形成條件是“BGP選擇路由策略的”1至8規則中需要比較的屬性完全相同
8. 路由反射器 router-refector
為了保證IBGP對等體之間的連通性,需要在IBGP對等體之間建立全連接關系 full-mesh
假設在一個AS內部有n台設備,那么建立的IBGP連接數為n(n-1)/2,當設備數目很多時,設備配置十分復雜,配置后網絡資源和CPU資源消耗很大,在IBGP之間使用路由反射器可以解決上述問題
8.1 角色:
路由反射器RR,允許把從IBGP對等體學到的路由反射到其他IBGP對等體的BGP設備,類似於OSPF里的DR
客戶機client,與RR形成反射鄰居關系的IBGP設備,在AS內部客戶機只需要與RR直連
非客戶機non-client,既不是RR,也不是client的BGP設備,在AS內部非客戶機與RR之間,以及所有的非客戶機之間仍然必須建立全連接關系
始發者originator,在AS內部始發路由的設備,originator_id屬性用於防止集群內產生路由環路
集群cluster,RR與client的集合,cluster_list屬性用於防止集群間產生路由環路
8.2 發布路由規則
路由反射器RR突破了“從IBGP對等體獲得的路由,BGP設備只發布給它的EBGP對等體”,並采用獨有的originator_id和cluster_list屬性防止路由環路
RR向IBGP鄰居發布路由規則如下:
1.從非客戶機學到的路由,發布給所有客戶機
2.從客戶機學到的路由,發布給所有非客戶機和客戶機(發布此路由的客戶機除外)
3.從EBGP對等體學到的路由,發布給所有的非客戶機和客戶機
8.3 cluster_list屬性
RR和它的client組成一個集群cluster,使用AS內唯一的cluster_id作為標識,為了防止集群間產生路由環路,RR使用cluster_list屬性,記錄路由經過過的所有集群的cluster_id
當一條路由第一次被RR反射,RR會把本地cluster_id添加到cluster_list的前面,如果沒有cluster_list屬性,RR會創建一個
當RR接收到一條更新路由時,RR會檢查cluster_list屬性,如果cluster_list中 已經有本地cluster_id,丟棄該路由,如果沒有,加入cluster_list屬性,反射該路由
8.4 多集群RR
分級RR

一個AS中可以存在多個集群,各個集群的RR之間建立IBGP對等體,當RR所處的網絡層不同時,可以將較低網絡層次的RR配成客戶機,形成分級RR,當RR所處的網絡層相同時,可以將不同集群的RR全連接,形成同級RR。
在實際的RR部署中,常用的是分級RR的場景
同級RR

一個骨干網被分成多個集群,各集群的RR互為客戶機,並建立全連接,此時,雖然每個客戶機只與所在集群的RR建立IBGP連接,但所有RR和客戶機都能收到全部的路由信息
9. BGP聯盟
解決AS內部的IBGP網絡連接激增的問題,除了使用路由反射器之外,還可以使用聯盟,聯盟將一個AS划分為若干個子AS。每個子AS內部建立IBGP全連接關系,子AS之間建立聯盟EBGP連接關系,但聯盟外部AS認為聯盟是一個AS,配置聯盟后,原AS號作為每個路由器的聯盟ID。
好處:
1.可以保留原有的IBGP屬性,包括local-perf,MED,next_hop屬性
2.聯盟相關的屬性在傳出聯盟時會自動刪除,管理員無需再聯盟的出口配置過濾子AS號的操作
聯盟示意圖

AS100使用聯盟后被划分成3個子AS:AS65001,AS65002,AS65003,使用AS100作為聯盟ID,此時IBGP的連接豎向從10條減少到4條,不僅簡化了設備的配置,也減輕了網絡和CPU的負擔,AS100外的設備只知道AS100的存在,並不知道AS100內部的聯盟關系
10. 路由反射器和聯盟的對比:
| 路由反射器 | 聯盟 |
|---|---|
| 不需要改變現有拓撲,兼容性好 | 需要改變邏輯拓撲 |
| 配置方便,只需要對RR配置,客戶機不需要知道自己是客戶機 | 所有設備需要重新配置 |
| 集群與集群之間需全連接 | 聯盟的子AS之間是特殊的EBGP,不許全連接 |
11. 路由聚合
在大規模網絡中,BGP路由表十分龐大,給設備造成很大負擔,同時使發生路由振盪的幾率大大增加,影響網絡的穩定性
路由聚合是將多條路由合並的機制,它通過只向對等體發送聚合后的路由而不發送所有的具體路由的方法,減小路由表的規模。並且被聚合的路由如果發生路由振盪,也不再對網絡造成影響,從而提高了網絡穩定性
BGP在IPV4網絡中支持手動聚合和自動聚合,IPV6網絡中僅支持手動聚合方式
1.自動聚合:對BGP引入的路由進行聚合。配置自動聚合后,BGP將按照自然網段聚合路由(例如非自然網段A類地址10.1.1.1/24和10.2.1.1/24將聚合為自然網段A類地址10.0.0.0/8),並且BGP向對等體只發送聚合后的路由。
2.手動聚合:對BGP本地路由表中存在的路由進行聚合。手動聚合可以控制聚合路由的屬性,以及決定是否發布具體路由。
為了避免路由聚合可能引起的路由環路,BGP設計了AS_set屬性。該屬性是一種無序的AS_path屬性,標明聚合路由所經過的AS號。當聚合路由重新進入AS_set屬性中列出的任何一個AS時,BGP將會檢測到自己的AS號在聚合路由的AS_set屬性中,於是會丟棄該聚合路由,從而避免路由環路的形成。
12. 路由衰減
當BGP應用於復雜的網絡環境時,路由振盪十分頻繁,為了防止頻繁的路由振盪帶來的不利影響,BGP使用路由衰減來抑制不穩定的路由。
路由振盪是指路由表中添加一條路由后,該路由又被撤銷的過程。當發生路由振盪時,設備會向鄰居發布路由更新,收到跟新報文的設備需要重新計算路由並球蓋路由表。所以頻繁的路由振盪會消耗大量的帶寬資源和CPU資源,嚴重時會影響網路的正常工作。
路由衰減使用懲罰值來衡量一條路由的穩定性,懲罰值越高說明路由越不穩定。路由每發生一次振盪,BGP會給此路由增加1000的懲罰值,其余時間懲罰值會緩慢下降。當懲罰值超過抑制閾值時,此路由會被抑制,不加入路由表,也不向其他BGP對等體發布更新報文
被抑制的路由每經過一段時間,懲罰值會減半,這個時間被稱為半衰期
當懲罰值降到再使用閾值時,此路由變為可用,並被加入路由表中,同時向其他BGP對等體發布更新報文。
從路由被抑制到路由恢復可用的時間稱為抑制時間
路由衰減只對EBGP路由起作用,對IBGP路由不起作用。這是因為IBGP路由可能含有本AS的路由,而IGP網絡要求AS內部路由表盡可能一致。如果路由衰減對IBGP路由起作用,那么當不同設備的衰減參數不一致時,會導致路由表不一致。
13. BMP
BGP監控協議BGP Monitoring protocol 能夠對網絡中的設備的BGP運行狀態進行實時監控,BGP運行狀態包括對等體關系的建立與解除,路由信息刷新等。

被監控設備(圖中PE1,PE2)與監控服務器建立TCP連接,監控服務器無須發送任何指令給被監控設備,被監控設備就會發送BGP運行狀態信息給監控服務器,監控服務器解析接收到的BMP報文並呈現在監控試圖中。設備發送給監控服務器的報文都帶有標識對等體信息的報文,從而監控服務器可以區分報文出自哪個BGP鄰居
設備與監控服務器建立連接時需要注意以下幾點:
1.設備與監控服務器的連接基於TCP協議,可以指定連接端口號
2.設備與監控服務器的連接可以是多對多的關系
3.一個BMP實例能連接多台監控服務器,其好處為:
多台服務器可以實現互相備份,提高可靠性
減少單台服務器監控BGP鄰居的負載
可以實現不同的服務器監控不同的BGP鄰居,從而控制不同的BGP業務
4.監控服務器監控所有BGP鄰居,不可以指定需要監控的鄰居
14. BGP GR和NSR
BGP的平滑重啟GR(graceful restart)和不間斷路由NSR(non-stop routing)作為高可靠性的解決方案,其根本目的都是為了保證用戶業務在設備故障的時候不受影響后者影響最小。
BGP GR技術保證了在設備重啟或者主備倒換過程中轉發層面能夠繼續指導數據的轉發,同時控制層面鄰居關系的重建以及路由計算等動作不會影響轉發層面的功能,從而避免了路由振盪引發的業務中斷,提高了網絡的可靠性。
GR相關概念:
GR Restarter:由管理員觸發或故障觸發后,以GR方式重啟的設備。
GR Helper:GR Restarter的鄰居,協助Restarter進行GR的設備。
GR Time:是GR Helper檢測到GR Restarter重啟或主備倒換后,保持轉發信息不刪除的時間。
BGP GR的過程:
1.利用BGP的能力協商機制,GR Restarter和GR Helper了解彼此的GR能力,建立有GR能力的會話。
2.當GR Helper檢查到GR Restarter重啟或者主備倒換后,不刪除和GR Restarter相關的路由和轉發表項,也不通知其他鄰居,而是等待重建BGP連接。
3.GR Restarter在GR Time超時前與重啟前的所有GR Helper新建立好鄰居關系。
BGP NSR
NSR是一種控制平面倒換而鄰居不感知的可靠性技術,適用於設備具有主用主控板和備用主控板的場景。與GR相比,NSR具有不需要鄰居協助,不存在互通性問題的有點。

15. BGP缺省配置
keepalive消息發送間隔 60秒
對等體鄰接關系保持時間 180秒
