今天海翎光電的小編為大家介紹一下BGP的相關(guān)基礎(chǔ)知識,文章淺顯易懂,適合對BGP完全沒有了解的同學(xué)。 BGP(邊界網(wǎng)關(guān)協(xié)議)是將互聯(lián)網(wǎng)聯(lián)合在一起的路由協(xié)議,海翎光電的小編將解釋在哪些情況下我們需要 BGP 以及它是如何工作的。在您繼續(xù)閱讀之前,我應(yīng)該告訴您“忘記”迄今為止您對RIP、OSPF和EIGRP等路由協(xié)議的了解……這三種路由協(xié)議有一個共同點:它們都是 IGP(內(nèi)部網(wǎng)關(guān)協(xié)議)。我們只在我們的自治系統(tǒng)中使用它們,但它們不可擴展以用于像 Internet 這樣大的網(wǎng)絡(luò)。 RIP、OSPF 和 EIGRP 都不同,但它們有一個共同點……它們都想找到到達(dá)目的地的最短路徑。當(dāng)我們查看 Internet 時,我們并不關(guān)心找到最短路徑,而是能夠操縱流量路徑更為重要,我們目前在 Internet 上使用的路由協(xié)議只有一種,即 BGP。 讓我們先看一些場景,以便了解為什么以及何時需要 BGP:

現(xiàn)在幾乎所有東西都連接到互聯(lián)網(wǎng),在上圖中,我們有一個連接到 ISP(Internet 服務(wù)提供商)的客戶網(wǎng)絡(luò),我們的 ISP 正在確保我們可以訪問 Internet,我們的 ISP 為我們提供了一個可用于訪問 Internet 的公共 IP 地址。為了確??蛻舴?LAN 上的每個人都可以訪問 Internet,我們使用NAT/PAT(網(wǎng)絡(luò)/端口地址轉(zhuǎn)換)將我們的內(nèi)部私有 IP 地址轉(zhuǎn)換為這個單一的公共 IP 地址。當(dāng)您只有需要訪問 Internet 的客戶端時,此方案非常適合。在我們的客戶 LAN 上,我們只需要一個指向 ISP 路由器的默認(rèn)路由,我們就完成了。對于這種情況,我們不需要 BGP...

也許客戶有幾個需要從 Internet 訪問的服務(wù)器……也許是郵件服務(wù)器或網(wǎng)絡(luò)服務(wù)器,我們可以使用端口映射并將正確的端口轉(zhuǎn)發(fā)到這些服務(wù)器,因此我們?nèi)匀恢恍枰粋€ IP 地址,另一種選擇是從我們的 ISP 獲取更多公共 IP 地址,并使用這些地址來配置不同的服務(wù)器。對于這種情況,我們?nèi)匀徊恍枰?BGP……

如果我想要更多的冗余怎么辦?出現(xiàn)單點故障并不是一個好主意,我們可以在客戶端添加另一個路由器并將其連接到 ISP,可以將主鏈接用于所有流量,并使用另一個鏈接作為備份,這種情況我們還是不需要BGP,可以用默認(rèn)路由解決: 1、在客戶主路由器上面配置低優(yōu)先級的默認(rèn)路由; 2、在客戶的備路由器上面配置高優(yōu)先級的默認(rèn)路由; 這將確保您的 IGP 使用主鏈路發(fā)送所有流量,一旦鏈路出現(xiàn)故障,您的 IGP 將確保所有流量都沿備用鏈路發(fā)送,你可以考慮一下......我們可以在這兩個鏈接之間做任何負(fù)載平衡嗎?會很難么? 除非出現(xiàn)故障,否則您的 IGP 將沿主鏈路發(fā)送所有流量,而不會沿備用鏈路發(fā)送任何流量。您可以使用相同的度量發(fā)布默認(rèn)路由,擁有 50/50% 的負(fù)載分擔(dān)。如果我想在主鏈路上發(fā)送 80% 的出向流量,在備用鏈路上發(fā)送 20% 怎么辦?上面的方法不會實現(xiàn)此需求,但使用 BGP 是可能的。

一、BGP 含義
Border Gateway Protocol,邊界網(wǎng)關(guān)協(xié)議,協(xié)議優(yōu)先級為 255,目前所使用的版本為 v4。邊界網(wǎng)關(guān)路由協(xié)議,EGP 網(wǎng)關(guān)協(xié)議,適用于大型路由網(wǎng)絡(luò)結(jié)構(gòu),以 AS 為一個節(jié)點,每個 AS 有唯一確定的 AS-ID 用于標(biāo)識。
二、BGP 版本
① 2006 年定義單播 IPV4 網(wǎng)絡(luò) MP-BGP
② MP-BGP 在 IPv6 單播網(wǎng)絡(luò)上的應(yīng)用稱為 BGP4+
③ 在 IPv4 組播網(wǎng)絡(luò)上的應(yīng)用稱為 MBGP(Multicast BGP)
① IBGP:Internal Border Gateway Protocol ,內(nèi)部邊界網(wǎng)關(guān)協(xié)議,用于在 AS 內(nèi)部的 BGP協(xié)議 ② EBGP:External Border Gateway Protocol,外部邊界網(wǎng)關(guān)協(xié)議,用于在 AS 之間的 BGP協(xié)議,默認(rèn)數(shù)據(jù)包中的 TTL 值為 1 跳,鄰居建立使用直連端口建立,通常兩個 AS 之間是不存在 IGP 路由協(xié)議的,所以 AS 之間使用直連鏈路建立鄰居③ 從設(shè)計上避免了環(huán)路的發(fā)生 BGP 使用 TCP 進(jìn)行路由更新,保證路由傳遞的可靠性,源端口號隨機,目的端口號為179。 BGP 使用 TCP 進(jìn)行路由更新,保證路由傳遞的可靠性,源端口號隨機,目的端口號為179。 IBGP 使用水平分割,EBGP 使用 AS-Path 屬性。 路由信息攜帶不同的 BGP 路由屬性,為 BGP 選路提供了多種多樣的方式。 BGP 支持無類域間(CIDR)路由,支持手工匯總和自動匯總。 (1)、自動聚合:默認(rèn)情況下,自動聚合時關(guān)閉的。自動匯總不會自動匯總 BGP 鄰居發(fā)送的路由以及使用 Network 命令通告的路由,只能聚合自身 import 注入的路由條目。當(dāng)開啟自動聚合后,BGP 路由默認(rèn)會以主類路由進(jìn)行聚合。此時聚合路由的屬性為 Aggregate 屬性使用以下命令進(jìn)行自動聚合:[H******-bgp]summary automaticØ [H*****-bgp]network 1.1.1.1 32 (2)、手動匯總:BGP 手動路由聚合時,可以手動控制聚合路由的掩碼長度,修改聚合路由屬性等,手動路由聚合又有 兩種方式: 首先創(chuàng)建靜態(tài)路由將網(wǎng)段聚合并指向 null0,BGP 采用 network 方式通告出去,由于直連優(yōu)先級高于靜態(tài),優(yōu)先選擇直連的下一跳接口,當(dāng)直連網(wǎng)段出現(xiàn)問題,匹配靜態(tài)送往 Null0。 在 R1 上配置靜態(tài)路由:[Huawei]ip route-static 172.16.0.0 255.255.0.0 NULL 0preference 254 使用 network 宣告出去:[Huawei-bgp]network 172.16.0.0 16 使用以下命令進(jìn)行 aggregate 匯總:[H****-bgp]aggregate 172.16.0.0 255.255.0.0 detail-suppressed 注 1:默認(rèn)聚合路由只繼承 Community 屬性和起源屬性(如果明細(xì)都為 i,則為 i,有一個為?,則為?) 注 2:默認(rèn)聚合后的路由不會攜帶任何的 AS-path 屬性,為了防止環(huán)路,如果想要攜帶 AS-path 屬性,后面增加命令 as-set,此時匯總路由會繼承所有明細(xì)路由的 AS 號,為無序的AS 號,如果增加了 AS-SET 之后,聚合路由會將明細(xì)路由的 AS-Path 放入 AS-SET 屬性中,如果明細(xì)路由消失或?qū)傩孕薷亩紩斐删酆下酚傻亩秳釉黾樱蝗绻骷?xì)路由的AS-PATH id 完全一致,此時聚合路由的 AS-PATH 類型為 AS-Sequence 注 3:如果不加 detail-suppressed,會將明細(xì)路由和匯總路由全部發(fā)送出去,使用detail-suppressed 命令只通告匯總路由,此時匯總路由的屬性為ATOMIC_Aggregate,用于通告下游的路由器成員信息被抑制,此時的匯總路由不會攜帶 Community 屬性 注 4:為了讓聚合后的路由繼承明細(xì)路由的路由屬性,聚合命令后面增加attribute-policy 1,此時在定義 Route-policy,規(guī)劃屬性值 注 5:origin-policy 的作用,定義 route-policy,當(dāng)滿足 if 條件中的路由條目時,聚合路由才會生效,如果定義的路由消失,則聚合路由為 ATOMIC_Aggregate 注 6:suppress-policy 的作用是用于過濾掉某些明細(xì)路由,定義 route-policy,當(dāng)滿足 if 條件中的路由條目,明細(xì)路由就會被過濾掉,如果只抑制了一部分明細(xì)路由,屬性依舊為 Aggregate;如過抑制了全部的明細(xì)路由,屬性為 ATOMIC_Aggregate 注 7:同 IGP 路由手動聚合對比,BGP 路由聚合,默認(rèn)明細(xì)匯總都發(fā)布,IGP 只發(fā)布匯總路由;匯總之后 IGP 不會自動生成一條指向 Null0 的路由,而 BGP 路由匯總之后會自動生成一條指向 Null0 的匯總路由 在 peer 對等體的時候,可以使用命令發(fā)布默認(rèn)路由給對端鄰居:[H******-bgp]peer 192.168.1.1 default-route-advertiseBGP 攜帶了大量的屬性信息,并支持 13 種選路規(guī)則。 BGP 支持 MD5 認(rèn)證方式,如果是 MD5 方式,路由器會根據(jù) BGP 報文的某些字段和密鑰計算出一個 128bit 的散列值,然后將 BGP 報文連同散列值發(fā)送給鄰居。鄰居路由器收到以后,會在本地基于收到的 BGP 報文和相同的密鑰在進(jìn)行一次 HASH 運算。如果計算出的散列值與接收到的散列值相同,則認(rèn)證通過。[H******-bgp]peer 192.168.1.1 password cipher h******/h***** BGP 默認(rèn)不使用附載分擔(dān),即使存在多條路徑也會使用選路規(guī)則選出一條“最優(yōu)路由”將其放入路由表中。開啟附載分擔(dān)方式:① 選路規(guī)則前 9 條一模一樣(AS ID 順序也一樣),可以使用命令 maximumload-balancing bgp 進(jìn)行附載分擔(dān),當(dāng)比較到下一跳的 IGP 開銷值一樣時,會進(jìn)行流量的負(fù)載分擔(dān)② 當(dāng) BGP 路由中的下一跳地址在 IGP 路由表中存在附載分擔(dān),此時流量會附載分擔(dān)③ 使用屬性值對多個目標(biāo)流量對半分流實現(xiàn)附載分擔(dān)① 在通告給 EBGP 鄰居時會將 NEXT_Hop 屬性設(shè)置為自身的接口 IP 地址③ 在 AS_PATH 屬性中增加自己的 AS-ID BGP 擴展性強,在承載多協(xié)議路由時,在 MP NLRI 中增加屬性值(TLV)進(jìn)行擴展。
上面海翎光電的小編介紹了BGP的含義、BGP版本、BGP分類、BGP 特性等,接下來咱們繼續(xù)這個話題。
BGP 收斂主要經(jīng)過以下幾種狀態(tài):
① Idle 初始狀態(tài)
② Connect 連接狀態(tài)
③ Active 失敗等待狀態(tài)
④ Open Sent 協(xié)商狀態(tài)
⑤ Open confirm 連接確立狀態(tài)
⑥ Established 確定建立狀態(tài)
BGP 初始狀態(tài)。在 Idle 狀態(tài)下,BGP 拒絕鄰居發(fā)送的連接請求。只有在收到本設(shè)備的Start 事件后,BGP 才開始嘗試和其它 BGP 對等體進(jìn)行 TCP 連接,并轉(zhuǎn)至 Connect狀態(tài)。Start 事件是由一個操作者配置一個 BGP 過程,或者重置一個已經(jīng)存在的過程或者路由器軟件重置 BGP 過程引起的。連接狀態(tài),雙方配置命令后,誰先配置完成誰先主動發(fā)起建立 TCP,源端口隨機,目標(biāo)端口 179,在 Connect 狀態(tài)下,BGP 啟動連接重傳定時器,等待 TCP 完成連接Ø 如果 TCP 連接成功,那么 BGP 向?qū)Φ润w發(fā)送 Open 報文,并轉(zhuǎn)至 OpenSent 狀態(tài)Ø 如果對方無響應(yīng),則 5S 后發(fā)送第二份組播報文,依舊沒有響應(yīng),等待大約 25S 時候周期后開始下一輪的 TCP 報文發(fā)送,對方一直無響應(yīng),則停留在 Connect(對端沒有去往本端的路由)Ø 如果對方回應(yīng)拒絕建立 TCP 連接,則不在繼續(xù)發(fā)送 TCP 報文,在大約 25S 后進(jìn)入Active 狀態(tài)注:如果控制 TCP 的主動端和被動端可以使用命令 peer listen-only,此時設(shè)備只偵聽對端,而不主動建立;或者控制主動端的連接端口地址失敗等待狀態(tài),huawei 設(shè)備依舊為主動建立連接,Active 狀態(tài)一個時間周期(大約25S)只發(fā)送一次 TCP 報文。Ø 如果建立成功,進(jìn)入 OPENSENT 狀態(tài)Ø 如果收到拒絕建立 TCP 報文(沒有啟用 BGP),則一個時間周期只發(fā)送一次,并停留在此狀態(tài)Ø 如果對方無響應(yīng)(無本端路由,比如進(jìn)入 Active 狀態(tài),對端路由撤銷掉了),一個時間周期后回到 Connect 狀態(tài)④ Open Sent 協(xié)商狀態(tài)協(xié)商狀態(tài),TCP 連接建立成功后,發(fā)送 open 報文后,進(jìn)入 OPENSENT 狀態(tài),開始等待對端接收對端的 Open 報文Ø 根據(jù) Open 報文中的 AS 號、版本號、認(rèn)證碼等進(jìn)行檢查。當(dāng)接收到對端的 Open報文后,發(fā)現(xiàn) Open 報文無誤,會立刻發(fā)送 Keep alive 報文,并進(jìn)入下一狀態(tài) 。Ø 如果發(fā)現(xiàn)收到的 Open 報文有錯誤,那么 BGP 發(fā)送 Notification 報文給對等體,并轉(zhuǎn)至 Idle 狀態(tài)OPEN 檢測不通過的原因:注:BGP Hold-Timer 時間不一致不影響鄰居的建立⑤ Open confirm 連接確立狀態(tài)等待對端的 keep alive 報文,當(dāng)收到對端的 keep alive,進(jìn)入下一狀態(tài)。⑥ Established 確定建立狀態(tài)當(dāng)成功接收對端 Keep Alive 報文后,進(jìn)入 Established 狀態(tài),是一種穩(wěn)態(tài),并周期的發(fā)送 Keep Alive 報文。BGP 協(xié)議中,連接一旦建立,BGP Speaker 將把自己產(chǎn)生的所有 BGP 路由通告給對等體,有多條路徑時,BGP Speaker 只會選最優(yōu)的給自己使用放入 IP 路由表中,BGPSpeaker 只會選最優(yōu)的給鄰居對等體。用來查看當(dāng)前的鄰居,使用 display bgp peer 查看:⑤ MsgSent:發(fā)出了幾條 BGP 消息⑧ Pref Rcv:從鄰居學(xué)到多少 BGP 路由條數(shù)① IBGP 路由,只發(fā)送給 EBGP 對等體② EBGP 路由,發(fā)布給所有 EBGP 和 IBGP 對等體① 下一跳不可達(dá)(不加入到 IP 路由表中)② IGP 同步開啟,無相應(yīng)的 IGP 路由(不加入 IP 路由表中)③ 存在相同的 IGP 路由(不加入 IP 路由表中)⑤ Cluster List 中包含本 RR 的簇 ID(不接受此 BGP 路由)⑥ Originator ID 和本路由器的 Router ID 相同(不接受此 BGP 路由)⑦ 使用 BGP 命令 bgp-rib-only(最優(yōu) BGP 路由不會放入 IP 路由表中)① >為最佳路由,存在多條路徑時,BGP 會選擇最佳路由放入路由表并傳遞給鄰居② *為最優(yōu)化路由,表示當(dāng)前路由有效,當(dāng)沒有*標(biāo)明此路 由不是最優(yōu)③ i 為 IBGP 鄰居學(xué)到的路由條目,如果位空表示本地產(chǎn)生或 EBGP 學(xué)到的路由