今天我們來看看BGP協定。 我們不會很長時間談論它的原因以及為什麼它被用作唯一的協議。 關於這個主題有很多信息,例如 .
那什麼是BGP呢? BGP是一種動態路由協議,也是唯一的EGP(外部網關協定)協定。 該協定用於在 Internet 上建置路由。 讓我們看看如何在兩個 BGP 路由器之間建立鄰居。
考慮 Router1 和 Router3 之間的鄰居。 讓我們使用以下命令來配置它們:
router bgp 10
network 192.168.12.0
network 192.168.13.0
neighbor 192.168.13.3 remote-as 10
router bgp 10
network 192.168.13.0
network 192.168.24.0
neighbor 192.168.13.1 remote-as 10單一自治系統內的鄰居是AS 10。在路由器(例如Router1)輸入資訊後,該路由器會嘗試與Router3 建立鄰接關係。 什麼也沒發生時的初始狀態稱為 空閒。 一旦在 Router1 上配置了 bgp,它將開始偵聽 TCP 連接埠 179 - 它將進入狀態 連結,當它嘗試與 Router3 開啟會話時,它將進入狀態 上架中.
Router1和Router3之間建立會話後,會互動Open訊息。 當Router1發送此訊息時,將呼叫此狀態 打開發送。 當它收到來自Router3的Open訊息時,它會進入狀態 打開確認。 讓我們仔細看看 Open 訊息:
該訊息傳達有關路由器使用的 BGP 協定本身的訊息。 透過交換 Open 訊息,Router1 和 Router3 會相互傳達有關其設定的訊息。 傳遞以下參數:
- 版本:這包括路由器正在使用的 BGP 版本。 BGP 的目前版本是 RFC 4 中所述的版本 4271。兩個 BGP 路由器將嘗試協商相容的版本,當不符時,將不會有 BGP 會話。
- 我的AS:這包括 BGP 路由器的 AS 編號,路由器必須就 AS 編號達成一致,並且還定義它們是否將執行 iBGP 還是 eBGP。
- 保持時間:如果 BGP 在保持時間內沒有收到來自另一端的任何 keepalive 或更新訊息,那麼它將聲明另一端“死亡”,並將拆除 BGP 會話。 預設情況下,Cisco IOS 路由器上的保持時間設定為 180 秒,每 60 秒發送一次保活訊息。 兩個路由器必須就保持時間達成一致,否則不會有 BGP 會話。
- BGP 標識符:這是本地 BGP 路由器 ID,就像 OSPF 一樣選舉:
- 使用透過 bgp router-id 指令手動設定的路由器 ID。
- 使用環回介面上最大的 IP 位址。
- 使用實體介面上最大的 IP 位址。
- 可選參數:在這裡您將找到 BGP 路由器的一些選用功能。 新增此欄位是為了可以將新功能新增至 BGP,而無需建立新版本。您可能會在此處找到以下內容:
- 支援 MP-BGP(多協定 BGP)。
- 支援路由刷新。
- 支援 4 位元組 AS 編號。
建立鄰裡必須符合以下條件:
- 版本號。 目前版本是4。
- AS編號必須與您設定的一致 鄰居 192.168.13.3 遠程-as 10.
- Router ID 必須與鄰居不同。
如果任何參數不滿足這些條件,路由器將發送 三回目の翻訳結果 指示錯誤的訊息。 發送和接收Open訊息後,鄰居關係進入狀態 ESTABLISHED。 此後,路由器可以交換有關路由的資訊並使用 更新狀態 消息。 這是 Router1 發送給 Router3 的 Update 訊息:
在這裡您可以看到 Router1 報告的網路和 Path 屬性,這些屬性類似於指標。 我們將更詳細地討論路徑屬性。 Keepalive 訊息也在 TCP 會話中發送。 預設情況下,它們每 60 秒傳輸一次。 這是一個保活定時器。 如果在保持定時器期間沒有收到保活訊息,則表示與鄰居的通訊遺失。 預設情況下,它等於 180 秒。
有用的標誌:
看起來我們已經弄清楚了路由器之間是如何傳遞訊息的,現在我們來嘗試BGP協定的邏輯。
將路由發佈到BGP表中,與IGP協定一樣,使用network指令,但操作邏輯不同。 如果在IGP中,在network指令中指定路由後,IGP會查看哪些介面屬於該子網路並將它們包含在其表中,那麼BGP中的network指令會檢視路由表並尋找 精確 與network指令中的路由相符。 如果找到,這些路由將出現在 BGP 表中。
在路由器目前的IP路由表中尋找與network指令的參數完全相符的路由; 如果IP路由存在,則將等效的NLRI放入本地BGP表中。
現在讓我們將 BGP 提升到所有剩餘的 AS,看看如何在一個 AS 內選擇路由。 BGP路由器收到鄰居寄來的路由後,開始選擇最佳路由。 在這裡,您需要了解可以有什麼類型的鄰居 - 內部和外部。 路由器是否透過設定了解設定的鄰居是內部鄰居還是外部鄰居? 如果在一個團隊中:
neighbor 192.168.13.3 remote-as 10 其中remote-as參數指定AS,該AS是在router bgp 10指令中在路由器本身上設定的,來自內部AS的路由被認為是內部的,來自外部AS的路由被認為是外部的。 對於每一個,接收和發送的邏輯都不同。 考慮這個拓撲:
每個路由器都有一個配置 ip 的環回介面: xxxx 255.255.255.0 - 其中 x 是路由器編號。 在 Router9 上,我們有一個環回接口,位址為 - 9.9.9.9 255.255.255.0。 我們將透過 BGP 公佈它,看看它如何傳播。 該路由將會傳送到Router8和Router12。 從 Router8 出發,該路由將到達 Router6,但到達 Router5 時不會出現在路由表中。 同樣,在 Router12 上,該路由將出現在表中,但在 Router11 上,它也不會出現在表中。 讓我們試著弄清楚這一點。 讓我們考慮 Router9 向其鄰居傳輸哪些資料和參數,報告該路由。 下面的資料包將從 Router9 傳送到 Router8。
路由資訊由Path 屬性組成。
路徑屬性分為4類:
- 眾所周知的強制性 - 所有執行 BGP 的路由器都必須識別這些屬性。 必須存在於所有更新中。
- 知名全權委託 - 所有執行 BGP 的路由器都必須識別這些屬性。 它們可能存在於更新中,但它們的存在不是必需的。
- 可選及物 - 可能無法被所有 BGP 實作辨識。 如果路由器無法識別該屬性,則會將更新標記為部分更新並將其轉發給其鄰居,同時儲存無法識別的屬性。
- 可選的非傳遞性 - 可能無法被所有 BGP 實作辨識。 如果路由器無法識別該屬性,則該屬性在傳遞給鄰居時將被忽略並丟棄。
BGP 屬性範例:
- 眾所周知的強制性:
- 自治系統路徑
- 下一跳
- 起源
- 知名全權委託:
- 當地偏好
- 原子聚合體
- 可選及物:
- 聚合器
- 社區
- 可選的非傳遞性:
- 多出口鑑別器 (MED)
- 發起者ID
- 集群列表
在這種情況下,現在我們將對起源、下一跳、AS 路徑感興趣。 由於該路由是在Router8和Router9之間傳輸的,即在一個AS內部,因此被認為是內部路由,我們要關注Origin。
Origin 屬性 - 指示更新中的路由是如何取得的。 可能的屬性值:
- 0 - IGP:原自治系統內收到的NLRI;
- 1 - EGP:NLRI 使用外部網關協定 (EGP) 獲知。 BGP 的前身,未使用
- 2 - 不完整:NLRI 是透過其他方式學習的
在我們的例子中,從資料包中可以看出,它等於0。當這條路由傳輸到Router12時,程式碼將具有代碼1。
下一步,下一跳。 下一跳屬性
- 這是通往目標網路的路徑所經過的 eBGP 路由器的 IP 位址。
- 當前綴發送到另一個AS時該屬性會發生變化。
在 iBGP 的情況下,即在一個 AS 內,下一跳將由獲悉或告知該路由的那個指示。 在我們的例子中,它將是 192.168.89.9。 但是當這條路由從Router8傳輸到Router6時,Router8會改變它並用自己的替換它。 下一跳將為 192.168.68.8。 這使我們得出兩條規則:
- 如果路由器將路由轉送到其內部鄰居,則不會變更下一跳參數。
- 如果路由器將路由傳輸到其外部鄰居,它會將 Next-hop 變更為該路由器傳輸的介面的 IP。
這就讓我們明白了第一個問題——為什麼Router5和Router11的路由表中不會有路由。 讓我們仔細看看。 這樣,Router6 收到了 9.9.9.0/24 路由的訊息,並成功將其新增至路由表:
Router6#show ip route bgp
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
a - application route
+ - replicated route, % - next hop override, p - overrides from PfR
Gateway of last resort is not set
9.0.0.0/24 is subnetted, 1 subnets
B 9.9.9.0 [20/0] via 192.168.68.8, 00:38:25<source>
Теперь Router6 передал маршрут Router5 и первому правилу Next-hop не изменил. То есть, Router5 должен добавить <b>9.9.9.0 [20/0] via 192.168.68.8</b> , но у него нет маршрута до 192.168.68.8 и поэтому данный маршрут добавлен не будет, хотя информация о данном маршруте будет храниться в таблице BGP:
<source><b>Router5#show ip bgp
BGP table version is 1, local router ID is 5.5.5.5
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
* i 9.9.9.0/24 192.168.68.8 0 100 0 45 i</b>Router11-Router12之間也會發生同樣的情況。 為了避免這種情況,需要設定Router6或Router12在向其內部鄰居傳遞路由時,將其IP位址替換為下一跳。 這是使用以下命令完成的:
neighbor 192.168.56.5 next-hop-self執行此命令後,Router6 將發送一條 Update 訊息,其中介面 Gi0/0 Router6 的 ip 將被指定為路由的下一跳 - 192.168.56.6,之後該路由將已包含在路由表中。
我們再進一步看看Router7和Router10上是否出現了這條路由。 它不會出現在路由表中,我們可能會認為問題與第一個帶有 Next-hop 參數的問題相同,但是如果我們查看 show ip bgp 命令的輸出,我們會看到即使下一跳錯誤,也沒有收到路由,這意味著該路由甚至沒有被傳輸。 這將導致我們存在另一個規則:
從內部鄰居接收的路由不會傳播到其他內部鄰居。
由於 Router5 收到了來自 Router6 的路由,因此不會將其轉送給其他內部鄰居。 為了進行傳輸,您需要配置該功能 ,或配置全連接鄰居關係(Full Mesh),即Router5-7每個人都會成為每個人的鄰居。 在這種情況下,我們將使用路由反射器。 在 Router5 上,您需要使用以下命令:
neighbor 192.168.57.7 route-reflector-client當將路由傳遞給內部鄰居時,路由反射器會改變 BGP 的行為。 如果內部鄰居指定為 路由反射器客戶端,然後內部路由將被通告給這些客戶端。
Router7上沒有出現該路由? 也不要忘記下一跳。 經過這些操作後,路由也應該到達 Router7,但這種情況並未發生。 這給我們帶來了另一條規則:
下一跳規則僅適用於外部路由。 對於內部路由,不替換下一跳屬性。
我們遇到這樣一種情況,有必要建立一個使用靜態路由或 IGP 協定的環境來向路由器通報 AS 內的所有路由。 讓我們在 Router6 和 Router7 上註冊靜態路由,然後我們將在路由器表中獲得所需的路由。 在 AS 678 中,我們的做法略有不同 - 我們將在 Router192.168.112.0 上註冊 24/10 的靜態路由,在 Router192.168.110.0 上註冊 24/12 的靜態路由。 接下來,我們將建立Router10和Router12之間的鄰居關係。 我們還將配置 Router12 將其下一跳發送到 Router10:
neighbor 192.168.110.10 next-hop-self結果是 Router10 將收到路由 9.9.9.0/24,該路由將從 Router7 和 Router12 收到。 讓我們看看 Router10 會做出什麼選擇:
Router10#show ip bgp
BGP table version is 3, local router ID is 6.6.6.6
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*>i 9.9.9.0/24 192.168.112.12 0 100 0 45 i
192.168.107.7 0 123 45 i 我們可以看到,兩條路由和一個箭頭 (>) 表示選擇了經過 192.168.112.12 的路由。
讓我們看看路由選擇過程是如何運作的:
- 接收路由時的第一步是檢查其下一跳的可用性。 這就是為什麼當我們在Router5上收到一條沒有設定Next-hop-self的路由時,這條路由沒有被進一步處理。
- 接下來是權重參數。 此參數不是路徑屬性 (PA),不會在 BGP 訊息中傳送。 它在每個路由器上本地配置,僅用於操作路由器本身的路由選擇。 讓我們來看一個例子。 就在上面,您可以看到 Router10 透過 Router9.9.9.0 (24) 選擇了 12/192.168.112.12 的路由。 若要變更Wieght參數,可以使用route-map設定特定路由,或使用下列指令為其鄰居指派權重:
neighbor 192.168.107.7 weight 200現在,來自該鄰居的所有路由都將具有此權重。 讓我們看看經過此操作後路線的選擇如何變化:
Router10#show bgp *Mar 2 11:58:13.956: %SYS-5-CONFIG_I: Configured from console by console BGP table version is 2, local router ID is 6.6.6.6 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *> 9.9.9.0/24 192.168.107.7 200 123 45 i * i 192.168.112.12 0 100 0 45 i如您所見,現在選擇了通過 Router7 的路由,但這不會對其他路由器產生任何影響。
- 第三位是本地偏好。 該參數是眾所周知的任意屬性,這意味著它的存在是可選的。 此參數僅在一個AS內部有效,並且僅影響內部鄰居的路徑選擇。 這就是為什麼它僅在發送到內部鄰居的更新訊息中傳輸的原因。 它不存在於外部鄰居的更新訊息中。 因此,它被歸類為知名全權委託。 我們嘗試在 Router5 上應用它。 在 Router5 上,我們應該有兩個通往 9.9.9.0/24 的路由 - 一條通過 Router6,另一條通過 Router7。
我們看:
Router5#show bgp BGP table version is 2, local router ID is 5.5.5.5 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *>i 9.9.9.0/24 192.168.56.6 0 100 0 45 i但正如我們看到的一條路由通過 Router6。 經過 Router7 的路由在哪裡? 也許Router7也沒有? 我們看看吧:
Router#show bgp BGP table version is 10, local router ID is 7.7.7.7 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *>i 9.9.9.0/24 192.168.56.6 0 100 0 45 i 192.168.107.10 0 678 45 i奇怪的是,一切似乎都很好。 為什麼沒有傳輸到Router5? 問題是 BGP 有規則:
路由器僅傳輸它所使用的那些路由。
Router7使用經過Router5的路由,因此經過Router10的路由不會被轉送。 讓我們回到本地偏好。 讓我們在 Router7 上設定本地首選項,看看 Router5 對此有何反應:
route-map BGP permit 10 match ip address 10 set local-preference 250 access-list 10 permit any router bgp 123 neighbor 192.168.107.10 route-map BGP in</b>因此,我們創建了一個包含所有路由的路由映射,並告訴 Router7 在收到時將本地首選項參數更改為 250,預設值為 100。讓我們看看 Router5 上發生了什麼:
Router5#show bgp BGP table version is 8, local router ID is 5.5.5.5 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *>i 9.9.9.0/24 192.168.57.7 0 250 0 678 45 i現在我們可以看到,Router5 更喜歡通過 Router7 的路由。 同樣的圖片將出現在 Router6 上,儘管選擇通過 Router8 的路由對他來說更有利可圖。 我們還補充說,更改此參數需要重新啟動鄰域才能使變更生效。 讀 。 我們整理了本地偏好。 讓我們繼續討論下一個參數。
- 優先選擇下一跳參數為0.0.0.0的路由,即本地路由或聚合路由。 輸入網路指令後,這些路由會自動分配一個等於最大值 32678 的權重參數:
Router#show bgp BGP table version is 2, local router ID is 9.9.9.9 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *> 9.9.9.0/24 0.0.0.0 0 32768 i - 通過 AS 的最短路徑。 選擇最短的 AS_Path 參數。 一條路由經過的AS越少越好。 考慮 Router9.9.9.0 上到 24/10 的路由:
Router10#show bgp BGP table version is 2, local router ID is 6.6.6.6 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path * 9.9.9.0/24 192.168.107.7 0 123 45 i *>i 192.168.112.12 0 100 0 45 i可以看到,Router10 選擇了 192.168.112.12 的路由,因為該路由的 AS_Path 參數只包含 45,而在另一種情況下則為 123 和 45。直覺上很清楚。
- 下一個參數是原點。 IGP(使用BGP獲得的路由)比EGP(使用BGP的前身所獲得的路由,不再使用)好,而EGP比Incomplete? (透過其他方法獲得,例如透過重新分配)。
- 下一個參數是 MED。 我們有 Wiegt,它只能在路由器上本地工作。 有本地偏好,它只在一個自治系統內起作用。 正如您可能猜到的,MED 是將在自治系統之間傳輸的參數。 非常好 關於這個參數。
不再使用更多的屬性,但如果兩條路由具有相同的屬性,則使用以下規則:
- 選擇經過最近的 IGP 鄰居的路徑。
- 為 eBGP 路徑選擇最舊的路由。
- 選擇經過具有最小 BGP 路由器 ID 的鄰居的路徑。
- 選擇一條經過 IP 位址最小的鄰居的路徑。
現在我們來看看BGP收斂的問題。
讓我們看看如果 Router6 遺失通過 Router9.9.9.0 的路由 24/9 會發生什麼情況。 讓我們禁用Router0的Gi1/6接口,這將立即了解到與Router8的BGP會話已終止並且鄰居已消失,這意味著從其接收的路由無效。 Router6立即發送Update訊息,在Withdrawn Routes欄位中指明網路9.9.9.0/24。 Router5一收到這樣的訊息,就會傳送給Router7。 但由於 Router7 有一條經過 Router10 的路由,因此它會立即以新路由的更新回應。 如果無法根據介面的狀態偵測到鄰居的故障,則必須等待保持計時器觸發。
聯盟。
如果您還記得,我們討論過您經常必須使用全連接拓撲的事實。 如果一個 AS 中有大量路由器,這可能會導致大問題,為了避免這種情況,您需要使用聯盟。 一個AS被劃分為多個子AS,這使得它們無需全連接拓撲即可運行。
這是一個連結 和 GNS3 的配置。
例如,使用這種拓撲,我們必須將 AS 2345 中的所有路由器相互連接,但使用聯盟,我們只能在直接相互連接的路由器之間建立鄰接關係。 我們來詳細談談這個問題。 如果我們只有 AS 2345,那麼 拉福吉 收到了來自的遊行 皮卡爾 會告訴路由器 數據 и WORF,但他們不會告訴路由器這件事 破碎機 。 還有路由器本身分配的路由 拉福吉, 不會被轉移 破碎機 或 WORF-不好了 數據.
您必須設定路由反射器或完全連接的鄰居關係。 透過將一個 AS 2345 分成 4 個子 AS(2,3,4,5、XNUMX、XNUMX、XNUMX)供每個路由器使用,我們最終得到不同的操作邏輯。 一切都被完美描述 .
來源:
- CCIE 路由與交換 v5.0 官方證書指南,第 2 卷,第五版,Narbik Kocharians,Terry Vinson。
- Сайт
- Сайт .
來源: www.habr.com
