【計算機網絡】-邊界網關協議(BGP)

前言
本文作者:肉肉
本文鏈接:https://blog.csdn.net/Arouroua/article/details/106093877
更多源代碼請參考我的GitHub

bgp

  • 邊界網關協議( Border Gateway Protocol,BGP)是互聯網上一個核心的去中心化自治路由協議

  • bgp本身就是一個多地址的協議簇(mp-bgp,多協議bgp)–地址族(ipv4)

  • bgp刷新很慢,需要手工刷新,加快收斂

  • AS,自治性系統域(16位的號碼空間—>會擴展到32位)

1、bgp基本概述

bgp作用

  • AS內部使用IGP來計算和發現路由,如OSPF,ISIS,RIP等。
  • AS之間使用BGP來傳遞和控制路由。

bgp特點

  • 更新可靠,在tcp --179運行
  • 僅增量是、觸發更新
  • 定期提供存活消息以驗證tcp連接性
  • 豐富的度量標準(稱爲路徑矢量或屬性)
  • 專門爲大型互聯網絡設計
  • 優於距離矢量

bgp的理由

  • 大量路由需要承載,能容納上萬條

  • 支持mpls\vpn的應用,傳遞客戶vpn路由

  • 策略能力強,可以很好的實現路由策略與數據控制

2、bgp鄰居關係建立與配置

bgp鄰居概述

  • bgp speakers :運行bgp的路由器

  • bgp peers=bgp neighbor=bgp對等體\鄰居

  • 鄰居關係建立在tcp連接基礎上,因此鄰居不一定需要直連,可以通過igp(keepalive,60s)或靜態路由提供tcp連接的可靠性(區別於其他igp)

  • 鄰居必須手動指定,而非自動建立(區別於其他igp),所有的包都是單播

  • 一臺bgp路由器只能運行在一個as內(區別於其他igp)

鄰居類型

  • ibgp:內部bgp鄰居,位於相同as
  • ebgp:外部bgp鄰居,位於不同as

bgp報文

  • open:類似hello,只發一次,建立鄰居關係
  • keeplive:類似hello,維護鄰居關係
  • update:路由更新,包含屬性
  • notification:當檢測到錯誤,發送後關閉bgp連接
  • route-refresh:當路由策略發生變化時,觸發請求鄰居重新通告路由

bgp狀態機

  • idle:初始,路由器查找路由表,是否有到達鄰居的路由
  • connect:發起tcp連接,等待tcp連接完成
  • active:tcp連接失敗繼續嘗試tcp連接
  • open sent:tcp連接成功,已發送open包
  • open confirm:已收到對方正確的open包,如果沒有收到就會進入active
  • established:鄰居建立完成,開始傳遞

活躍狀態驗證

active:路由器已經發送一個open包,正在等待響應

  • 狀態可能會在活躍與空閒之間不斷循環
  • 原因,鄰居可能不知道如何返還到該路由器
    • 不存在只想bgp“打開”數據包源ip地址的路由
    • 鄰居與錯誤的地址建立對等關係
    • 不存在路由器的鄰居聲明
    • as配置錯誤

鄰居建立過程
鄰居建立
bgp鄰居建立的條件

  • 鄰居地址可達
  • 自身配置中的鄰居as號=鄰居配置中的聲明所在as號
  • 數據包源ip=對方配置的鄰居ip(這個源ip也叫更新源,也稱作路由的下一跳ip)

bgp鄰居建立配置命令

bgp 123  //聲明所在as號(創建進程)
router-id  1.1.1.1   //和ospf一樣,必須唯一
peer  12.0.0.2  asnumber   123  //配置鄰居的ip地址和所在as號
display bgp   peer  //查看鄰居

bgp鄰居優化

  • 建立EBGP鄰居關係時,一般使用直連接口的IP地址;建立IBGP鄰居關係時,一般使用Loopback接口的IP地址
router id 3.3.3.3
bgp 100
peer 10.1.35.5 as-number 300
peer 2.2.2.2 as-number 100
Peer 2.2.2.2 connect-interface loopback 0

  • 使用環回口建立bgp鄰居:爲了增強穩定性,通常建議使用環回口來建立鄰居

  • 更新源:建立鄰居和鄰居所學習都的路由下一跳

  • 多跳:ebgp鄰居建立默認需要直連,因爲TTL=1,如果非直連必須修改TTL(經過一個路由TTL會減一)

peer  x.x.x.x  connect-intterface   lo  1  //配置更新源
peer  xxxxx  ebgp-max-hop[2]  //配置TTL
  • ebgp鄰居建立一般採用直連接口建立鄰居

bgp身份驗證

  • 會在所有包內運行
peer  2.2.2.2  password   cipher  xxx  //配置身份驗證,md5形式

3、bgp路由生成方式

network

bgp xxx
network  xxxx  xxxx

import

bgp  xxx  
import-route xxx  route-policy import

4、bgp通告原則與路由處理

bgp數據庫:

  • 鄰居表:bgp鄰居名單

  • bgp路由表(轉發數據庫):列出從鄰居那裏多獲取的所有路由及屬性

  • ip路由表:列出最佳路由

  • adj-rib-in:鄰居宣告給本地的未處理的路由信息庫

  • adj-rib-out:本地宣告給指定鄰居的路由信息庫

宣告原則

  • 缺省情況下,bgp不發佈任何本地路由
  • 只有明確宣告的網絡纔會發送給鄰居
  • 宣告的網絡必須精確地在路由表中找到
  • 僅將自己最優的路由發佈給鄰居
  • 通過EBGP獲得的最優路由發佈給所有BGP鄰居
  • 通過IBGP獲得的最優路由不會發布給其他的IBGP鄰居
  • BGP與IGP同步
#
display  bgp   routing-table
#

路由信息處理

  • IP路由表(IP_RIB):全局路由信息庫,包括所有的IP路由信息。

  • BGP路由表(Local_RIB):BGP路由信息庫,包括本地BGP路由器選擇的路由信息,鄰居表,鄰居清單列表

bgp防環:

as內(ibgp):水平分割

  • 從ibgp收到的更新不會發布給備份(ibgp封信只傳一跳)

  • ibgp鄰居全互聯 :配置開銷太大

  • 路由反射器(route-reflector)

  • 聯盟(confederation)

as間(ebgp):AS-PATH

  • 經過路由器的as號=本地as 號,要丟棄
  • 號碼從近到遠

5、bgp常用屬性介紹

bgp

  • 公認必遵:所有bgp都可以識別,必須存在update中
  • 公認任意:所有bgp都可以識別,但不要求存在update中
  • 可選過渡:不能被所有bgp路由識別,如果無法識別,可以傳遞給鄰居
  • 非可選過渡:不能被所有bgp路由識別,如果無法識別,則丟棄該屬性

pre

  • 私有屬性
  • 定義本地路由的優先級,本地有效
  • 不傳播給鄰居
  • 越大越優先

origin

  • 起源屬性
  • 定義路由信息來源,標記一條路由是怎麼樣成爲bgp路由的
  • Origin的3種屬性:
    • i表明BGP路由通過network命令注入;
    • e表明BGP路由是從EGP學來的,EGP協議在現網中很難見到,但可以通過路由策略將路由的Origin屬性修改爲e;
    • ? 即Incomplete表明BGP路由通過其它方式學到路由信息,如使用import命令引入的路由。
  • 3種Origin屬性的優先級爲:i>e>Incomplete(?)。

AS_Path

  • as路徑屬性

  • 定義經過的s的序列,列出此路在傳遞過程中經過了那些as。可以防止環路,並用於路由的過濾和選擇

  • AS_Path的4種類型:

    • AS_Sequence
    • AS_Set
    • AS_Confed_Sequence
    • AS_Confed_Set

Next_hop

  • bgp在給鄰居傳遞路由是的下一跳=更新源

  • ebgp間傳遞是會修改下一跳爲自己的更新源

  • 在ibgp傳遞第不會改自己的下一跳

  • BGP路由器將本端始發路由發佈給IBGP鄰居時,會把該路由信息的Next_hop設爲本端建立鄰居關係所使用的接口IP。

  • BGP路由器在向EBGP鄰居發佈路由時,會把路由信息的Next_hop設置爲本端與對端建立BGP鄰居關係的接口IP。

  • BGP路由器在向IBGP鄰居通告從EBGP學來的路由時,不改變該路由下一跳屬性。

igbp間
#
peer  xxxx   next-hop-local //修改下一跳爲自己的更新源
#

Local_Preference

  • 本地優先級屬性
  • 用於在as內優選到達某一目的地路由。反映了bgp speaker 對每條bgp路由的偏好程度
  • 越大越優
  • Local_Pref屬性僅在IBGP鄰居之間有效,不通告給其他AS。它表明路由器的BGP優先級,值越大越優。
    Local_Pref屬性用於判斷流量離開AS時的最佳路由。當BGP路由器通過不同的IBGP鄰居獲得目的地址相同但下一跳不同的多條路由時,將優先選擇Local_Pref屬性值較高的路由,其默認值爲100。

MED

  • 當耨個as有多個入口時,可以用med屬性來幫助其外部的as選擇一個較好的入口路徑

  • 越小越優先

  • MED(Multi-Exit-Discriminator)屬性僅在相鄰兩個AS之間傳遞,收到此屬性的AS不會再將其通告給任何其他第三方AS,用於判斷流量進入AS時的最佳路由。

Community

  • Community屬性分爲兩類:一類是公認團體屬性,另一類是擴展的團體屬性。
  • 公認團體屬性分爲4類:
    • Internet:缺省屬性,所有路由都屬於Internet,此屬性的路由可以通告給所有BGP鄰居;
    • No_Export:收到此屬性的路由後,不將該路由發佈到其他AS。如圖,RTB上希望10.1.11.0/24的路由發佈給AS 12之後,不再發布給其他AS,則可將10.1.11.0/24的Community屬性設置爲No_Export;
    • No_Advertise:收到此屬性的路由後,不將該路由通告給任何其他的BGP鄰居。如圖,RTB上希望只將10.1.11.0/24的路由發佈給RTC,並且不再通告給任何其他的BGP鄰居,則可將10.1.11.0/24的Community屬性設置爲No_Advertise;
    • No_Export_Subconfed:在聯盟中使用,這裏不做介紹。
      擴展的團體屬性用一組4字節爲單位的列表來表示,路由器中擴展的團體屬性格式爲aa:nn或團體號:
      aa:nn中,aa通常爲AS編號,nn是管理員定義的團體屬性標識;
      團體號範圍爲0-4294967295,在RFC1997中,0-65535與4294901760-4294967295爲預留值。

6、bgp選路原則

  • BGP路由器將路由通告給鄰居後,每個BGP鄰居都會進行路由優選,路由選擇有三種情況:

    • 該路由是到達目的地的唯一路由,直接優選。
    • 對到達同一目的地的多條路由,優選優先級最高的。
  • 對到達同一目的地且具有相同優先級的多條路由,必須用更細的原則去選擇一條最優的。一般來說,BGP計算路由優先

    級的規則如下:

    • 丟棄下一跳不可達的路由。
    • 優選Preference_Value值最高的路由(私有屬性,僅本地有效)。
    • 優選本地優先級(Local_Preference)最高的路由。
      優選手動聚合>自動聚合>network>import>從對等體學到的。
    • 優選AS_Path的路由。
    • 起源類型IGP>EGP>Incomplete。
    • 對於來自同一AS的路由,優選MED值的。
    • 優選從EBGP學來的路由(EBGP>IBGP)。
    • 優選AS內部IGP的Metric最小的路由。
    • 優選Cluster_List最短的路由。
    • 優選Orginator_ID最小的路由。
    • 優選Router_ID最小的路由器發佈的路由。
    • 優選具有較小IP地址的鄰居學來的路由。

7、bgp路由聚合

靜態聚合

  • 靜態路由彙總用network
#
ip   route-s  xxxx xxxx   null o
#
bgp  xx
net   xxxxx   xxxx
#

自動聚合

  • 引入的igp,主類掩碼的聚合
  • 原先路由表上的最優路由不會被顯示
  • 自動聚合只對引入BGP的路由進行聚合,聚合到自然網段後發送給鄰居
#
bgp  xx
summary  automaticl   //開自動,缺省關了
#

手動聚合

  • 手動聚合對BGP本地路由表裏存在的路由進行聚合,並且能指定聚合路由的掩碼。
  • 手動聚合>自動聚合
  • 命令可選項
    • detail-supperssed:抑制明細
    • as-set:保留as-path屬性,可以防環
#
bgp  xxx
  aggregate xxxx xxxx detail-suppressed 
   aggregate xxxx xxxx  as-path
#

8、實驗演示

bgp實驗

實驗要求

1、所有設備配置基本的ip地址(略)

2、在AS12中配置igp

3、在AS間和AS內配置bgp,使得不同的AS間可以通信

r1
#
ospf  1   router-id  1.1.1.1
a 0
net  10.1.1.0   0.0.0.255
net  1.1.1.1   0.0.0.0
#
ip router-s  3.3.3.3   32    20.1.1.1 
#
bgp  12
route-id   1.1.1.1
peer   2.2.2.2  as  12
peer   2.2.2.2   con  loop  0
peer   3.3.3.3   as  3
peer    3.3.3.3   con   loop  0
#
r2
#
ospf  1  route-id  2.2.2.2
a  0
net   10.1.1.0  0.0.0.255
net   30.1.1.0   0.0.0.255
net    2.2.2.2   0.0.0.0
#
bgp  12
route-id    2.2.2.2
peer    1.1.1.1   as   12
peer    1.1.1.1   con  lo  0
peer   4.4.4.4   as   12
peer   4.4.4.4   con  lo   0
#


r3
#
bgp  3
route-id   3.3.3.3
peer    1.1.1.1   as   12
peer    1.1.1.1   con  lo  0
#
r4
#
ospf  1  route-id  4.4.4.4
a  0
net   30.1.1.0   0.0.0.255
net   4.4.4.4   0.0.0.0
#
bgp  12
route-id    4.4.4.4
peer    2.2.2.2  as   12
peer    2.2.2.2   con  lo  0
#

本文均屬肉肉原創,閱讀過程中如有錯誤歡迎指出!


往期文章
最最最能測出你數通hcia基礎扎不紮實的實驗
stp始終學不會?這份思維導圖,猛男必點,猛女必看!
華爲交換機中hybrid、access、trunk的區別
數通HCIP-ospf知識點

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章