一、BGP的基本概念
BGP(Border Gateway Protocol,邊界網關協議)是一種用于在不同自治系統(AS)之間交換路由信息的外部網關協議(EGP)。通過TCP179端口建立連接。目前采用BGP4版本,IPv6協議中采用BGP4+。
BGP類型:
EBGP:運行在不同AS之間的BGP成為EBGP,為了防止AS間產生環路,當BGP設備接收EBGP對等體發送的路由時,會將帶有本地AS號的路由丟棄。
IBGP:運行于同一AS內部的BGP稱為IBGP。為了防止AS內產生環路,BGP設備不將從IBGP對等體學到的路由通告給其他IBGP對等體,并與所有IBGP對等體建立全連接。
1.自治系統(AS)
-
AS1使用RIP作為內部網關協議(IGP)。
-
AS2使用OSPF作為內部網關協議(IGP)。
AS是指在一個實體管轄下的擁有相同選路策略的IP網絡。BGP網絡中的每個AS都被分配一個唯一的AS號,用于區分不同的AS。
公有 AS 號:公有 AS 號用于在互聯網上可被路由的自治系統,這些 AS 號是全球唯一的,范圍從 1 到 64511。
私有 AS 號:私有 AS 號范圍是從 64512 到 65535,實際一般做實驗或者大內網中使用AS 65535。
2.網部網關協議
AS1和AS2之間通過BGP(屬于EGP)交換跨自治系統的路由信息。
3.協議分層邏輯
-
內部網絡:自治系統內部使用輕量級IGP(如RIP、OSPF)實現高效路由。
-
外部互聯:不同自治系統之間使用EGP(如BGP)實現策略控制和大規模路由交換。
二、BGP報文
如上圖所示,BGP存在5種類型的報文,分別為Open、Update、Notification、Keepalive、Route-refresh,不同類型的報文擁有相同的頭部(header)。5種報文各自起到作用及發送時間見下表:
報文名稱 | 作用 | 發送時間 |
Open | 協商BGP對等體參數,建立對等體關系 | BGP TCP連接建立成功之后 |
Update | 發送BGP路由更新 | BGP對等體關系建立之后有路由需要發送或路由變化時向對等體發送Update報文 |
Notification | 報文錯誤信息,中止對等體關系 | 當BGP在運行中發現錯誤時,發送Notification報文將錯誤通過給BGP對等體 |
Keepalive | 標志對等體建立,維持BGP對等體關系 | BGP路由器收到對端發送的Keepalive報文,將對等體狀態置為已建立,同時后續定期發送Keepalive報文用于保持連接 |
Route-refresh | 用于在改變路由策略后請求對等體重新發送路由信息。只有支持路由刷新能力的BGP設備會發送和響應此報文 | 當路由策略發生變化時,觸發請求對等體重新通告路由 |
-
Open消息:是 TCP 連接建立后發送的第一個消息,用于建立 BGP 對等體之間的連接關系。對等體在接收到 Open 消息并協商成功后,將發送 Keepalive 消息確認并保持連接的有效性。確認后,對等體間可以進行 Update、Notification、Keepalive和 Route-Refresh 消息的交換。
應用:通過 TCP 建立 BGP 連接時,發送 OPEN 消息。 -
Update消息:用于在對等體之間交換路由信息。
-
Update消息可以發布多條屬性相同的可達路由信息,也可以撤銷多條不可達路由信息。
應用:連接建立后,如果有路由需要發送或路由變化時,發送UPDATE消息通告對端。 -
Keepalive消息:BGP 會周期性的向對等體發出 Keepalive消 息,用來保持連接的有效性。
- 應用:穩定后要定時發送 KEEPALIVE 消息以保持 BGP 連接的有效性。
-
Notification消息:當 BGP 檢測到錯誤狀態時,就向對等體發出 Notification 消息,之后 BGP 連接會立即中斷。
- 應用:當本地 BGP 在運行中發現錯誤時,要發送 NOTIFICATION 消息通告 BGP 對等體。
-
Route-Refresh消息:通過 OPEN 消息告知 BGP peer 本地支持路由刷新能力(Route-Refresh capability)。
- 應用:ROUTE-REFRESH 消息用來通知對等體自己支持路由刷新。
三、BGP狀態機
1.BGP六種狀態
BGP的狀態有idle、connect、active、opensent、openconfirm、established六種狀態。
Peer狀態名稱 | 用途 |
ldle | 開始準備TCP的連接并監視遠程對等體,啟用BGP時,要準備足夠的資源 |
Connect | 正在進行TCP連接,等待完成中,認證都是在TCP建立期間完成的。如果TCP連接建立失敗則進入Active狀態,反復嘗試連接 |
Active | TCP連接沒建立成功,反復嘗試TCP連接 |
OpenSent | TCP連接已經建立成功,開始發送Open包,Open包攜帶參數協商對等體的建立 |
OpenConfirm | 參數、能力特性協商成功,自己發送Keepalive包,等待對方的Keepalive包 |
Established | 已經收到對方的Keepalive包,雙方能力特性經協商發現一致,開始使用Update通告路由信息 |
2.BGP狀態變換
BGP的狀態有idle、connect、active、opensent、openconfirm、established六種狀態。
(1)Idle狀態是BGP初始狀態。
在Idle狀態下,BGP拒絕對等體發送的連接請求。只有在收到本設備的Start事件后,BGP才開始嘗試和其它BGP對等體進行TCP連接,并轉至Connect狀態。
Start事件是由一個操作者配置一個BGP過程,或者重置一個已經存在的過程或者路由器軟件重置BGP過程引起的。
任何狀態中收到Notification報文或TCP拆鏈通知等Error事件后,BGP都會轉至Idle狀態。
(2)Connect狀態
在Connect狀態下,BGP啟動連接重傳定時器(Connect Retry),等待TCP完成連接。
如果TCP連接成功,那么BGP向對等體發送Open報文,并轉至OpenSent狀態。
如果TCP連接失敗,那么BGP轉至Active狀態。
如果連接重傳定時器超時,BGP仍沒有收到BGP對等體的響應,那么BGP繼續嘗試和其它BGP對等體進行TCP連接,停留在Connect狀態。
(3)Active狀態
在Active狀態下,BGP總是在試圖建立TCP連接。
如果TCP連接成功,那么BGP向對等體發送Open報文,關閉連接重傳定時器,并轉至OpenSent狀態。
如果TCP連接失敗,那么BGP停留在Active狀態。
如果連接重傳定時器超時,BGP仍沒有收到BGP對等體的響應,那么BGP轉至Connect狀態。
(4)Opensent狀態、openconfirm狀態
TCP三次握手建立成功后,發送open報文建立對等體關系,此時的狀態為
opensent狀態,當收到對端回應的open報文,并且參數檢查無誤,在發送keepalive報文后進入openconfirm狀態。
(5)established狀態
進入openconfirm狀態后,收到對端的keepalive報文后進入established狀態。
四、BGP對等體
1.BGP對等體的概念
BGP發言者:運行BGP路由協議的路由器稱為BGP發言者(BGP路由器);
BGP對等體:兩個建立BGP會話(BGP的會話是基于TCP建立的)的路由器互為BGP對等體,BGP對等體之間可以交換路由表;
2.BGP對等體分類
BGP對等體可以按照兩個路由器是否AS相同,分為EBGP對等體和IBGP對等體。
(1)IBGP:位于相同的AS的BGP路由器互為IBGP對等體關系;
(2)EBGP:位于不同的AS的BGP路由器互為EBGP對等體關系;
能夠建立對等體的條件:
兩個路由器指定建立對等體的地址必需可達;
TCP連接能夠建立;
3.BGP對等體的建立
(1)TCP連接建立
假設BGP路由器R1先啟動,則R1先發起建立TCP連接,通過3次握手完成TCP的連接建立。
(2)BGP路由器發送OPEN報文協商參數
三次握手建立完成后,R1和R2之間相互發送OPEN報文,用于建立對等體的參數協商。
OPEN報文參數:
-
自身AS號;
-
hold time:用于協商后續keepalive報文發送時間;
-
BGP identifier:自身router id;
(3)BGP路由器發送keepalive報文完成對等體建立
參數協商正常后雙方相互發送keepalive報文,收到對方的keepalive報文后對等體建立成功,同時后續定期發送keepalive報文用于保持連接。
(4)BGP路由器發送UPDATE報文通告路由
BGP對等體關系建立好了,就可以通過BGP update 報文通告路由到對等體。收到對方的keepalive報文后對等體建立成功,同時后續定期發送keepalive報文用于保持連接。
4.BGP對等體建立使用源地址
BGP默認使用出接口的IP地址建立對等體。
(1)在建立IBGP對等體關系時,建議使用loopback地址建立IBGP對等體。因為loopback地址穩定,可以借助內部IGP冗余保證可靠性。
例如上圖:
R1和R2通過loopback地址建立IBGP對等體,如果R1和R2之間的物理鏈路斷了,loopback地址的連通性也不會受影響,可以通過R3實現R1和R2的loopback地址的互通,那么R1和R2之間的對等體關系依然可以保持建立。如果通過接口建立的話,就會導致BGP對等體關系中斷。
(2)在建立EBGP對等體關系時,建議使用直連地址建立EBGP對等體。如果使用loopback,需要注意EBGP多跳的問題。
五、BGP路由表
1.BGP對等體表
可以通過dis bgp peer 查看BGP對等體表;
(1)peer:對等體地址
(2)V:版本號
(3)AS:對等體AS號
(4)UP/DOWN:對等體存在up或者down的時間
(5)state:對等體狀態
(6)prefRce:從該對等體收到的路由前綴數目
2.BGP路由表
可以通過display ?bgp routing-table ?查看BGP路由表;
如果到達同一個目的地存在多條路由,則將路由都進行羅列,但每個目的地只會優選一條路由。
通過display bgp routing-table ipv4-address { mask | mask-length } 可以顯示指定IP地址/掩碼長度的路由信息,在其中有關于該BGP路由的詳細信息,如:路由始發者、下一跳地址、路由的路徑屬性等
六、BGP選路原則
當到達同一目的地存在多條路由時, BGP 依次對比下列屬性來選擇路由:
1.優選協議首選值(PrefVal)最高的路由。協議首選值(PrefVal)是華為設備的特有屬性,該屬性僅在本地有效。
2.優選本地優先級(Local_Pref)最高的路由。如果路由沒有本地優先級,BGP選路時將該路由按缺省的本地優先級100來處理。
3.依次優選手動聚合路由、自動聚合路由、network命令引入的路由、import-route命令引入的路由、從對等體學習的路由。
4.優選AS路徑(AS_Path)最短的路由。當AS_Path為空時,會優選AS_Path為空的路由。
5.依次優選Origin類型為IGP、EGP、Incomplete的路由。
6.對于來自同一AS的路由,優選MED值最低的路由。
7.依次優選EBGP路由、IBGP路由、LocalCross路由、RemoteCross路由。
8.優選到BGP下一跳IGP度量值(metric)最小的路由。
9.優選Cluster_List最短的路由。
10.優選Router ID最小的設備發布的路由。如果路由攜帶Originator_ID屬性,選路過程中將比較Originator_ID的大小(不再比較Router ID),并優選Originator_ID最小的路由。
11.優選從具有最小IP Address的對等體學來的路由。
當到達同一目的地址存在多條等價路由時,可以通過 BGP 等價負載分擔實現均衡流量的目的。形成 BGP 等價負載分擔的條件是“BGP 選擇路由的策略”的 1 至 8 條規則中需要比較的屬性完全相同。
七、BGP路由生成
BGP路由是通過BGP命令通告而成的,而通告BGP路由的方法有兩種:network和Import。
(1)network方式:
使用network命令可以將當前設備路由表中的路由(非BGP)發布到BGP路由表中并通告給鄰居,和OSPF中使用network命令的方式大同小異,只不過在BGP宣告時,只需要宣告網段+掩碼數即可,如:network 12.12.0.0 16。
(2)Import方式:
使用Import命令可以將該路由器學到的路由信息重分發到BGP路由表中,是BGP宣告路由的一種方式,可以引入BGP的路由包括:直連路由、靜態路由及動態路由協議學到的路由。其命令格式與在RIP中重分發OSPF差不多。
八、BGP的配置
1.基本配置
需要在所有Router間運行BGP協議,RouterA、RouterB之間建立EBGP連接,RouterB、RouterC和RouterD之間建立IBGP全連接。
配置思路:
采用如下的思路配置BGP的基本功能:
(1)在RouterB、RouterC和RouterD間配置IBGP連接。
(2)在RouterA和RouterB之間配置EBGP連接。
配置步驟:
(1)配置各接口的IP地址
# 配置RouterA。
<Huawei> system-view
[Huawei] sysname RouterA
[RouterA] interface gigabitethernet 1/0/0
[RouterA-GigabitEthernet1/0/0] ip address 10.1.1.1 8
[RouterA-GigabitEthernet1/0/0] quit
其他路由器各接口的IP地址與此配置一致(略)。
(2)配置IBGP連接
# 配置RouterB。
[RouterB] bgp 65009 ?//配置as號
[RouterB-bgp] router-id 2.2.2.2
[RouterB-bgp] peer 172.16.1.2 as-number 65009 ? //配置對等體的IP地址及其所屬的AS編號
[RouterB-bgp] peer 172.16.3.2 as-number 65009 ? //配置對等體的IP地址及其所屬的AS編號
指定對等體的IP地址可以是以下三種:
直連對等體的接口IP地址。
直連對等體的子接口IP地址。
路由可達的對等體的Loopback接口地址。
# 配置RouterC。
[RouterC] bgp 65009?
[RouterC-bgp] router-id 3.3.3.3
[RouterC-bgp] peer 172.16.3.1 as-number 65009 ?
[RouterC-bgp] peer 172.16.2.2 as-number 65009
[RouterC-bgp] quit
# 配置RouterD。
[RouterD] bgp 65009
[RouterD-bgp] router-id 4.4.4.4
[RouterD-bgp] peer 172.16.1.1 as-number 65009
[RouterD-bgp] peer 172.16.2.1 as-number 65009
[RouterD-bgp] quit
(3)配置EBGP連接
# 配置RouterA。
[RouterA] bgp 65008
[RouterA-bgp] router-id 1.1.1.1
[RouterA-bgp] peer 192.168.1.1 as-number 65009
# 配置RouterB。
[RouterB-bgp] peer 192.168.1.2 as-number 65008
# 查看BGP對等體的連接狀態。
[RouterB-bgp] display bgp peer
(4)配置RouterA發布路由10.1.0.0/8
# 配置RouterA發布路由。
[RouterA-bgp] ipv4-family unicast ? ?//使能BGP的IPv4單播地址族視圖
[RouterA-bgp-af-ipv4] network 10.1.0.0 255.0.0.0
[RouterA-bgp-af-ipv4] quit
# 查看RouterA路由表信息。
[RouterA-bgp] display bgp routing-table?
(5)配置BGP引入直連路由
# 配置RouterB。
[RouterB-bgp] ipv4-family unicast
[RouterB-bgp-af-ipv4] import-route direct ? //引入直連路由
# 查看RouterA的BGP路由表。
[RouterA-bgp] display bgp routing-table
2.路由反射器的配置
2.1路由反射技術概述
BGP在AS之間的路由防環,是要依賴AS_PATH屬性,但是AS_PATH屬性只有路由在EBGP鄰居之間傳遞時才會發生改變,在AS內部,AS_PATH是不會改變的,那么在AS內部的路由防環,就無法依賴AS_PATH了,因此BGP定義IBGP的水平分割規則:一臺BGP路由器從它的IBGP鄰居學習到的BGP路由不能再傳遞給任何IBGP鄰居。由于存在IBGP水平分割原則,使得AS內的BGP路由器之間不得不兩兩建立IBGP連接(IBGP全互聯),以求獲得完整的BGP路由更新,然而這是個擴展性非常低的做法,同時也給網絡設備帶來了負擔,解決IBGP擴展性問題的兩種有效的辦法是路由反射器及聯邦。
路由反射器相比于聯邦,優勢在于,聯邦中所有路由器都需要支持并理解聯邦機制,而路由反射器只需要RR理解反射器機制即可,另外,路由反射器的實現機制也相對簡單一些,并且對大型冗余性、層次性強的網絡架構采用路由反射器的解決方案也是一個不錯的選擇。當然如果希望用各種EBGP機制來管理大規模AS,那么聯邦將是一個更優的解決方案。
在上圖中,由于IBGP水平分割的限制,使得R4在收到IBGP鄰居R3發來的路由更新后,不能在發送給另一個IBGP鄰居R5。如此一來R5就無法正常學習路由,除非在R3-R5之間也建立一條IBGP連接。
采用路由反射技術即可解決這個問題,首先我們定義一個RR,同時定義這個RR的Client。那么這時候當RR收到她的Client發送過來的路由,就可以像一面鏡子一樣,將路由反射給其他IBGP路由器。此刻R4作為RR,與它的Client R3就構成了一個路由反射簇。
思考路由反射器時,將簇當作一個邏輯的整體去考慮即可, RR和client共同構成反射簇,但是只有RR知道(配置只是在RR上完成)。注意RR只通告或反射它所知道的最佳路徑。
為了維護一致的BGP拓撲,RR在反射路由的時候不修改某些BGP路徑屬性,這些屬性包括NH、AS_PATH、LOCAL_PREF和MED,并且增加了ORIGINATOR和CLUSTER_LIST用于防環。
2.2路由反射規則
-
如果路由學習自非client IBGP對等體,則反射給所有client
-
如果路由學習自一client,則反射給所有非client IBGP鄰居和除了該client以外的所有client(我司設備可以關閉RR在Client之間的路由反射行為)
-
如果路由學習自EBGP鄰居,則發送給所有client和非client IBGP鄰居
注意紅色關鍵字。注意反射和發送的區別。下面看幾個例子:
2.3路由反射器的基本配置
互聯IP的規劃如圖所示;所有路由器Loopback0口地址為x.x.x.x/32,x為設備編號。
AS123內跑一個OSPF,宣告直連接口,以及各自的Loopback0接口。
R1、R2、R3根據上圖所示建立IBGP鄰居關系。
在R1上引入11.11.11.0/24路由進BGP,初始情況下R2能夠學習這條BGP路由,但是R3無法學習到。
將R2配置為RR,R1作為R2的Client,使得R3能夠學習到11.11.11.0/24路由
# R1的配置-省略OSPF及接口的配置
[R1] bgp 123[R1-bgp] router-id 1.1.1.1[R1-bgp] peer 2.2.2.2 as-number 123[R1-bgp] peer 2.2.2.2 connect-interface loopback0[R1-bgp] network 11.11.11.0 24
# R2的配置-省略OSPF及接口的配置
[R2] bgp 123[R2-bgp] router-id 2.2.2.2[R2-bgp] peer 1.1.1.1 as-number 123[R2-bgp] peer 1.1.1.1 connect-interface loopback0[R2-bgp] peer 1.1.1.1 reflect-client[R2-bgp] peer 3.3.3.3 as-number 123[R2-bgp] peer 3.3.3.3 connect-interface loopback0
# R3的配置省略OSPF及接口的配置
[R3] bgp 123[R3-bgp] router-id 3.3.3.3[R3-bgp] peer 2.2.2.2 as-number 123[R3-bgp] peer 2.2.2.2 connect-interface loopback0
在R3上驗證一下,查看路由11.11.11.0的詳細信息:
另一個需要關注的配置是配置路由反射簇的Cluster_ID,這也是在RR上完成的配置。當RR反射一條路由時,如果該路由不存在Originator及Cluster_list屬性,則插入這兩個屬性值,同時Cluster_list屬性值中寫入本路由反射簇的Cluster_ID,默認情況下,Cluster_ID為RR的RouterID,如果需要修改,可使用下面的命令。
如果RR在反射路由時,被反射路由中已經存在Cluster_List屬性了,那么RR將自己的Cluster_ID插入到已有的CLuster_List中。
九、軟考真題
2020年11月網絡規劃設計師:
下列哪種BGP屬性不會隨著BGP的Update報文通告被鄰居()
A.PreVal
B.Next-hop
C.AS-Path
D.Origin
【解析】答案是A,PreVal是華為設備特有屬性,僅本地有效。
2016年11月網絡規劃設計師:
當一條路由被發布到它所起源的AS時,會發生的情況是()
A.該AS在路徑屬性列表中看到自己的號碼,從而拒絕接收這條路由
B.邊界路由器把該路由傳送到這個AS中的其他路由器
C.該路由將作為一條外部路由傳送給同一AS中的其他路由器
D.邊界路由器從AS路徑列表中刪除自己的AS號碼并重新發布路由
【解析】答案是A,EBGP防止環路就是不接收帶有本地AS號的路由。
2022年11月網絡規劃設計師:
以下關于IS-IS協議的描述中,錯誤的是()。
A.IS-IS使用SPF算法來計算路由
B.IS-IS是一種鏈路狀態路由協議
C.IS-IS使用域(area)來建立分級的網絡拓撲結構,骨干為area0
D.IS-IS通過傳遞LSP來傳遞鏈路信息,完成鏈路數據庫的同步
【解析】答案是C,area分級網絡是OSPF協議內容。
2021年11月網絡工程師:
以下關于IS-IS路由協議的說法中,錯誤的是()
A.IS-IS是基于距離矢量的路由協議。
B.IS-IS屬于內部網關路由協議
C.IS-IS路由協議將自治系統分為骨干區域和非骨干區域
D.IS-IS路由協議中Leve1-2路由器可以和不同區域的Leve1-2或者Leve1-1-2路由器形成鄰居關系
【解析】答案是A。IS-IS是鏈路狀態路由協議,采用SPF算法計算路由路徑。