今天海翎光電的小編為大家介紹一下BGP的相關基礎知識,文章淺顯易懂,適合對BGP完全沒有了解的同學。 BGP(邊界網關協議)是將互聯網聯合在一起的路由協議,海翎光電的小編將解釋在哪些情況下我們需要 BGP 以及它是如何工作的。在您繼續閱讀之前,我應該告訴您“忘記”迄今為止您對RIP、OSPF和EIGRP等路由協議的了解……這三種路由協議有一個共同點:它們都是 IGP(內部網關協議)。我們只在我們的自治系統中使用它們,但它們不可擴展以用于像 Internet 這樣大的網絡。 RIP、OSPF 和 EIGRP 都不同,但它們有一個共同點……它們都想找到到達目的地的最短路徑。當我們查看 Internet 時,我們并不關心找到最短路徑,而是能夠操縱流量路徑更為重要,我們目前在 Internet 上使用的路由協議只有一種,即 BGP。 讓我們先看一些場景,以便了解為什么以及何時需要 BGP:
現在幾乎所有東西都連接到互聯網,在上圖中,我們有一個連接到 ISP(Internet 服務提供商)的客戶網絡,我們的 ISP 正在確保我們可以訪問 Internet,我們的 ISP 為我們提供了一個可用于訪問 Internet 的公共 IP 地址。為了確保客戶方 LAN 上的每個人都可以訪問 Internet,我們使用NAT/PAT(網絡/端口地址轉換)將我們的內部私有 IP 地址轉換為這個單一的公共 IP 地址。當您只有需要訪問 Internet 的客戶端時,此方案非常適合。在我們的客戶 LAN 上,我們只需要一個指向 ISP 路由器的默認路由,我們就完成了。對于這種情況,我們不需要 BGP...
也許客戶有幾個需要從 Internet 訪問的服務器……也許是郵件服務器或網絡服務器,我們可以使用端口映射并將正確的端口轉發到這些服務器,因此我們仍然只需要一個 IP 地址,另一種選擇是從我們的 ISP 獲取更多公共 IP 地址,并使用這些地址來配置不同的服務器。對于這種情況,我們仍然不需要 BGP……
如果我想要更多的冗余怎么辦?出現單點故障并不是一個好主意,我們可以在客戶端添加另一個路由器并將其連接到 ISP,可以將主鏈接用于所有流量,并使用另一個鏈接作為備份,這種情況我們還是不需要BGP,可以用默認路由解決: 這將確保您的 IGP 使用主鏈路發送所有流量,一旦鏈路出現故障,您的 IGP 將確保所有流量都沿備用鏈路發送,你可以考慮一下......我們可以在這兩個鏈接之間做任何負載平衡嗎?會很難么? 除非出現故障,否則您的 IGP 將沿主鏈路發送所有流量,而不會沿備用鏈路發送任何流量。您可以使用相同的度量發布默認路由,擁有 50/50% 的負載分擔。如果我想在主鏈路上發送 80% 的出向流量,在備用鏈路上發送 20% 怎么辦?上面的方法不會實現此需求,但使用 BGP 是可能的。
一、BGP 含義
Border Gateway Protocol,邊界網關協議,協議優先級為 255,目前所使用的版本為 v4。邊界網關路由協議,EGP 網關協議,適用于大型路由網絡結構,以 AS 為一個節點,每個 AS 有唯一確定的 AS-ID 用于標識。
二、BGP 版本
① 2006 年定義單播 IPV4 網絡 MP-BGP
② MP-BGP 在 IPv6 單播網絡上的應用稱為 BGP4+
③ 在 IPv4 組播網絡上的應用稱為 MBGP(Multicast BGP)
① IBGP:Internal Border Gateway Protocol ,內部邊界網關協議,用于在 AS 內部的 BGP協議 ② EBGP:External Border Gateway Protocol,外部邊界網關協議,用于在 AS 之間的 BGP協議,默認數據包中的 TTL 值為 1 跳,鄰居建立使用直連端口建立,通常兩個 AS 之間是不存在 IGP 路由協議的,所以 AS 之間使用直連鏈路建立鄰居 BGP 使用 TCP 進行路由更新,保證路由傳遞的可靠性,源端口號隨機,目的端口號為179。 BGP 使用 TCP 進行路由更新,保證路由傳遞的可靠性,源端口號隨機,目的端口號為179。 IBGP 使用水平分割,EBGP 使用 AS-Path 屬性。 路由信息攜帶不同的 BGP 路由屬性,為 BGP 選路提供了多種多樣的方式。 BGP 支持無類域間(CIDR)路由,支持手工匯總和自動匯總。 (1)、自動聚合:默認情況下,自動聚合時關閉的。自動匯總不會自動匯總 BGP 鄰居發送的路由以及使用 Network 命令通告的路由,只能聚合自身 import 注入的路由條目。當開啟自動聚合后,BGP 路由默認會以主類路由進行聚合。此時聚合路由的屬性為 Aggregate 屬性使用以下命令進行自動聚合:[H******-bgp]summary automaticØ [H*****-bgp]network 1.1.1.1 32 (2)、手動匯總:BGP 手動路由聚合時,可以手動控制聚合路由的掩碼長度,修改聚合路由屬性等,手動路由聚合又有 兩種方式: 首先創建靜態路由將網段聚合并指向 null0,BGP 采用 network 方式通告出去,由于直連優先級高于靜態,優先選擇直連的下一跳接口,當直連網段出現問題,匹配靜態送往 Null0。 在 R1 上配置靜態路由:[Huawei]ip route-static 172.16.0.0 255.255.0.0 NULL 0preference 254 使用 network 宣告出去:[Huawei-bgp]network 172.16.0.0 16[H****-bgp]aggregate 172.16.0.0 255.255.0.0 detail-suppressed 注 1:默認聚合路由只繼承 Community 屬性和起源屬性(如果明細都為 i,則為 i,有一個為?,則為?) 注 2:默認聚合后的路由不會攜帶任何的 AS-path 屬性,為了防止環路,如果想要攜帶 AS-path 屬性,后面增加命令 as-set,此時匯總路由會繼承所有明細路由的 AS 號,為無序的AS 號,如果增加了 AS-SET 之后,聚合路由會將明細路由的 AS-Path 放入 AS-SET 屬性中,如果明細路由消失或屬性修改都會造成聚合路由的抖動增加;如果明細路由的AS-PATH id 完全一致,此時聚合路由的 AS-PATH 類型為 AS-Sequence 注 3:如果不加 detail-suppressed,會將明細路由和匯總路由全部發送出去,使用detail-suppressed 命令只通告匯總路由,此時匯總路由的屬性為ATOMIC_Aggregate,用于通告下游的路由器成員信息被抑制,此時的匯總路由不會攜帶 Community 屬性 注 4:為了讓聚合后的路由繼承明細路由的路由屬性,聚合命令后面增加attribute-policy 1,此時在定義 Route-policy,規劃屬性值 注 5:origin-policy 的作用,定義 route-policy,當滿足 if 條件中的路由條目時,聚合路由才會生效,如果定義的路由消失,則聚合路由為 ATOMIC_Aggregate 注 6:suppress-policy 的作用是用于過濾掉某些明細路由,定義 route-policy,當滿足 if 條件中的路由條目,明細路由就會被過濾掉,如果只抑制了一部分明細路由,屬性依舊為 Aggregate;如過抑制了全部的明細路由,屬性為 ATOMIC_Aggregate 注 7:同 IGP 路由手動聚合對比,BGP 路由聚合,默認明細匯總都發布,IGP 只發布匯總路由;匯總之后 IGP 不會自動生成一條指向 Null0 的路由,而 BGP 路由匯總之后會自動生成一條指向 Null0 的匯總路由 在 peer 對等體的時候,可以使用命令發布默認路由給對端鄰居:[H******-bgp]peer 192.168.1.1 default-route-advertiseBGP 攜帶了大量的屬性信息,并支持 13 種選路規則。 BGP 支持 MD5 認證方式,如果是 MD5 方式,路由器會根據 BGP 報文的某些字段和密鑰計算出一個 128bit 的散列值,然后將 BGP 報文連同散列值發送給鄰居。鄰居路由器收到以后,會在本地基于收到的 BGP 報文和相同的密鑰在進行一次 HASH 運算。如果計算出的散列值與接收到的散列值相同,則認證通過。[H******-bgp]peer 192.168.1.1 password cipher h******/h***** BGP 默認不使用附載分擔,即使存在多條路徑也會使用選路規則選出一條“最優路由”將其放入路由表中。開啟附載分擔方式:① 選路規則前 9 條一模一樣(AS ID 順序也一樣),可以使用命令 maximumload-balancing bgp 進行附載分擔,當比較到下一跳的 IGP 開銷值一樣時,會進行流量的負載分擔② 當 BGP 路由中的下一跳地址在 IGP 路由表中存在附載分擔,此時流量會附載分擔① 在通告給 EBGP 鄰居時會將 NEXT_Hop 屬性設置為自身的接口 IP 地址③ 在 AS_PATH 屬性中增加自己的 AS-ID BGP 擴展性強,在承載多協議路由時,在 MP NLRI 中增加屬性值(TLV)進行擴展。
上面海翎光電的小編介紹了BGP的含義、BGP版本、BGP分類、BGP 特性等,接下來咱們繼續這個話題。
① Idle 初始狀態
② Connect 連接狀態
③ Active 失敗等待狀態
④ Open Sent 協商狀態
⑤ Open confirm 連接確立狀態
⑥ Established 確定建立狀態
BGP 初始狀態。在 Idle 狀態下,BGP 拒絕鄰居發送的連接請求。只有在收到本設備的Start 事件后,BGP 才開始嘗試和其它 BGP 對等體進行 TCP 連接,并轉至 Connect狀態。Start 事件是由一個操作者配置一個 BGP 過程,或者重置一個已經存在的過程或者路由器軟件重置 BGP 過程引起的。連接狀態,雙方配置命令后,誰先配置完成誰先主動發起建立 TCP,源端口隨機,目標端口 179,在 Connect 狀態下,BGP 啟動連接重傳定時器,等待 TCP 完成連接Ø 如果 TCP 連接成功,那么 BGP 向對等體發送 Open 報文,并轉至 OpenSent 狀態Ø 如果對方無響應,則 5S 后發送第二份組播報文,依舊沒有響應,等待大約 25S 時候周期后開始下一輪的 TCP 報文發送,對方一直無響應,則停留在 Connect(對端沒有去往本端的路由)Ø 如果對方回應拒絕建立 TCP 連接,則不在繼續發送 TCP 報文,在大約 25S 后進入Active 狀態注:如果控制 TCP 的主動端和被動端可以使用命令 peer listen-only,此時設備只偵聽對端,而不主動建立;或者控制主動端的連接端口地址失敗等待狀態,huawei 設備依舊為主動建立連接,Active 狀態一個時間周期(大約25S)只發送一次 TCP 報文。Ø 如果收到拒絕建立 TCP 報文(沒有啟用 BGP),則一個時間周期只發送一次,并停留在此狀態Ø 如果對方無響應(無本端路由,比如進入 Active 狀態,對端路由撤銷掉了),一個時間周期后回到 Connect 狀態協商狀態,TCP 連接建立成功后,發送 open 報文后,進入 OPENSENT 狀態,開始等待對端接收對端的 Open 報文Ø 根據 Open 報文中的 AS 號、版本號、認證碼等進行檢查。當接收到對端的 Open報文后,發現 Open 報文無誤,會立刻發送 Keep alive 報文,并進入下一狀態 。Ø 如果發現收到的 Open 報文有錯誤,那么 BGP 發送 Notification 報文給對等體,并轉至 Idle 狀態OPEN 檢測不通過的原因:注:BGP Hold-Timer 時間不一致不影響鄰居的建立等待對端的 keep alive 報文,當收到對端的 keep alive,進入下一狀態。當成功接收對端 Keep Alive 報文后,進入 Established 狀態,是一種穩態,并周期的發送 Keep Alive 報文。BGP 協議中,連接一旦建立,BGP Speaker 將把自己產生的所有 BGP 路由通告給對等體,有多條路徑時,BGP Speaker 只會選最優的給自己使用放入 IP 路由表中,BGPSpeaker 只會選最優的給鄰居對等體。用來查看當前的鄰居,使用 display bgp peer 查看:⑧ Pref Rcv:從鄰居學到多少 BGP 路由條數② EBGP 路由,發布給所有 EBGP 和 IBGP 對等體② IGP 同步開啟,無相應的 IGP 路由(不加入 IP 路由表中)③ 存在相同的 IGP 路由(不加入 IP 路由表中)⑤ Cluster List 中包含本 RR 的簇 ID(不接受此 BGP 路由)⑥ Originator ID 和本路由器的 Router ID 相同(不接受此 BGP 路由)⑦ 使用 BGP 命令 bgp-rib-only(最優 BGP 路由不會放入 IP 路由表中)① >為最佳路由,存在多條路徑時,BGP 會選擇最佳路由放入路由表并傳遞給鄰居② *為最優化路由,表示當前路由有效,當沒有*標明此路 由不是最優③ i 為 IBGP 鄰居學到的路由條目,如果位空表示本地產生或 EBGP 學到的路由