详细了解BGP—边界网关协议
BGP
- 一、BGP基本概念
- 1.自治系統
- 2.BGP路由協議的特點
- 3.BGP分類
- 4.BGP工作原理
- 4.1.5種報文
- 4.2.BGP6種狀態機
- 4.3.BGP對等體之間的9個交互原則
- 5.建立對等體注意點
- 6.配置BGP
- 7.BGP路徑屬性
- 7.1路徑屬性分類
- 7.2分類
- 7.3BGP選路原則
- 7.4BGP屬性選路配置
一、BGP基本概念
1.自治系統
AS是指由同一個技術管理機構管理、使用統一選路策略的一些路由器的集合。
BGP網絡中的每個As都被分配一個唯一的AS號,用于區分不同的AS。
AS號分為2字節AS號和4字節AS號,其中2字節AS號的范圍為1至65535,其中1-64511是互聯網上注冊公有AS號,類似公網IP地址:64512-65535是私有AS號,類似私網IP地址。4字節AS號的范圍為1至4294967295,支持4字節AS號的設備能夠與支持2字節AS號的設備兼容。
IANA(互聯網數字分配機構)負責AS號的分發。
●中國電信163 AS號: 4134
●中國電信CN2 AS號:4809
●中國網通AS號:9929
2.BGP路由協議的特點
1.BGP能夠承載大量的路由信息,能夠支撐大規模網絡。
2.BGP使用TCP作為其傳輸層協議(監聽端口號為179),提高了協議的可靠性。
3.BGP是外部路由協議,用來在AS之間傳遞數據,對穩定性要求非常高。因此用TCP協議的高可靠性來保證BGP協議的穩定性。
4.BGP的對等體之間必須邏輯上連通,并進行TCP連接。目的端口號為179,本地端口號任意。
5.BGP對等體和IGP對等體不同,BGP對等體(Peer)是指使用TCP建立連接的兩端,而非與IGP同概念的直連鄰居,只要TCP能夠建立連接并不一定需要直連。
6.BGP本身只負責控制路由,數據轉發依然靠靜態或IGP路由。
7.BGP支持無類別域間路由CIDR。
8.路由更新時,BGP只發送更新的路由,大大減少了BGP傳播路由所占用的帶寬,適用于在Internet上傳播大量的路由信息。
9.BGP是一種增強的距離矢量路由協議,從設計上避免了環路的發生。
10.AS之間: BGP通過攜帶AS_Path信息標記途經的AS,帶有本地AS號的路由將被丟棄,從而避免了域間產生環路。
11.AS內部: BGP在AS內學到的路由不會再通告給AS內的BGP鄰居,避免了AS內產生環路。
12.BGP提供了豐富的路由策略,能夠對路由實現靈活的過濾和選擇。
13.BGP提供了防止路由振蕩的機制(路由衰減),有效提高了Internet網絡的穩定性。
14.BGP易于擴展,能夠適應網絡新的發展(ipv4單/組播、vpv4單/組播)。主要是通過TLV進行擴展。
3.BGP分類
BGP按照運行方式分為EBGP (External/Exterior BGP)和IBGP (Internal/Interior BGP)
●EBGP:運行于不同AS之間的BGP稱為EBGP。為了防止AS間產生環路,當BGP設備接收EBGP對等體發送的路由時,會將帶有本地AS號的路由丟棄。
●IBGP:運行于同一AS內部的BGP稱為IBGP。為了防止AS內產生環路,BGP設備不將從IBGP對等體學到的路由通告給其他IBGP對等體,并與所有IBGP對等體建立全連接。為了解決IBGP對等體的連接數量太多的問題,BGP設計了路由反射器和BGP聯盟。
4.BGP工作原理
BGP對等體的建立、更新和刪除等交互過程主要有5種報文、6種狀態機和9個原則。
4.1.5種報文
BGP對等體間通過以下5種報文進行交互,其中Keepalive報文為周期性發送,其余報文為觸發式發送:
Open報文:用于協商BGP對等體的各項參數,主要包括BGP版本(V4)、AS號等信息,建立BGP對等體連接。
Open是TCP連接建立后發送的第一個報文
Update報文:用于在對等體之間交換路由信息。
連接建立后,有路由需要發送或者路由變化時,發送Update通告對端可達或者撤銷路由信息及路徑屬性。
Notification報文:用于中斷BGP連接。
當BGP在運行中發現錯誤時,發送Notification報文通告BGP對端,隨后與之相關的鄰居關系將被關閉。
Keepalive報文:用于保持BGP連接。(保活)
定時發送Keepalive報文以保持BGP對等體關系的有效性。
響應收到的正確的open報文。
Route-refresh報文:用于在改變路由策略后軟復位BGP路由表請求對等體重新發送路由信息。
只有支持路由刷新(Route-refresh)能力的BGP設備會發送和響應此報文。
4.2.BGP6種狀態機
BGP對等體的交互過程中存在6種狀態機:空閑(Idle)、連接(Connect)、活躍(Active)、Open報文已發送(OpenSent)、Open報文已確認(OpenConfirm)和連接已建立(Established)。在BGP對等體建立的過程中,通常可見的3個狀態是: Idle、Active和Established。
(1)Idle狀態是BGP初始狀態。在Idle狀態下,BGP拒絕鄰居發送的連接請求。
只有在收到本設備的Start事件后,BGP才開始嘗試和其它BGP對等體進行TCP連接,并轉至Connect狀態。
(2)在Connect狀態下,BGP啟動連接重傳定時器(Connect Retry),等待TCP完成連接。
●如果TCP連接成功,那么BGP向對等體發送open報文,并轉至OpenSent狀態。
●如果TCP連接失敗,那么BGP轉至Active狀態,反復嘗試連接。
●如果連接重傳定時器超時,BGP仍沒有收到BGP對等體的響應,那么BGP繼續嘗試和其它BGP對等體進行TCP連接,停留在Connect狀態。
(3)在Active狀態下,BGP總是在試圖建立TCP連接。
●如果TCP連接成功,那么BGP向對等體發送Open報文,關閉連接重傳定時器,并轉至OpenSent狀態。
●如果TCP連接失敗,那么BGP停留在Active狀態。
●如果連接重傳定時器超時,BGP仍沒有收到BGP對等體的響應,那么BGP轉至Connect狀態。
(4)在OpenSent狀態下,BGP等待對等體的Open報文,并對收到的Open報文中的AS號、版本號、認證碼等進行檢查。
●如果收到的Open報文正確,那么BGP發送Keepalive報文,并轉至OpenConfirm狀態。
●如果發現收到的Open報文有錯誤,那么BGP發送Notification報文給對等體,并轉至Idle狀態。
(5)在OpenConfirm狀態下,BGP等待Keepalive或Notification報文。
如果收到Keepalive報文,則轉至Established狀態,如果收到Notification報文,則轉至Idle狀態。
(6)在Established狀態下,BGP可以和對等體交換Update、Keepalive、Route-refresh報文和Notification報文。
●如果收到正確的Update或Keepalive報文,那么BGP就認為對端處于正常運行狀態,將保持BGP連接。
●如果收到錯誤的Update或Keepalive報文,那么BGP發送Notification報文通知對端,并轉至Idle狀態。
●如果收到Notification報文,那么BGP轉至Idle狀態。
●如果收到TCP拆鏈通知,那么BGP斷開連接,轉至Idle狀態。
Route-refresh報文不會改變BGP狀態。
4.3.BGP對等體之間的9個交互原則
BGP設備將最優路由加入BGP路由表,形成BGP路由。BGP設備與對等體建立鄰居關系后,采取以下交互原則:
●從IBGP對等體獲得的BGP路由,BGP設備只發布給它的EBGP對等體
●從EBGP對等體獲得的BGP路由,BGP設備發布給它所有EBGP和IBGP對等體
●當存在多條到達同一目的地址的有效路由時,BGP設備只將最優路由發布給對等體
●路由更新時,BGP設備只發送更新的BGP路由
●所有對等體發送的路由,BGP設備都會接收
●所有EBGP對等體在傳遞過程中下一跳改變
●所有IBGP對等體在傳遞過程中下一跳不變
●默認EBGP傳遞時TTL值為1
●默認IBGP傳遞時TTL值為255
5.建立對等體注意點
●直連建立對等體需要注意的點
建立IBGP對等體時要讓下一跳可達,處于邊界的IBGP對等體需要將下一跳指向自己,這樣才能建立IBGP對等體
●用回環口建立鄰居需要注意的點
需要修改更新源,默認更新源是物理口,需要修改成回環口。建立IBGP對等體時要保障下一跳可達,處于邊界的IBGP對等體需要將下一跳指向自己,這樣才能建立IBGP對等體
建立EBGP對等體時因為EBGP只能傳一跳,因而,在建立EBGP對等體時,需要修改EBGP多跳的跳數為2以上(自己回環到對端回環是兩跳,默認一跳)
●關于為什么要用回環口建鄰居
原因是回環口穩定,只要路由器啟動著,回環口就不Down,而物理鏈路可能會受線路或者接口等因素的影響導致對等體關系有問題,因而一般BGP建立對等體都是回環口來建
6.配置BGP
R1 (ibgp)與R2、R3, R4,R5, R6建立鄰居關系(R2、R4、R5配置與其相似略) [R1]bgp 100 創建bgp編號為100 (也就是AS100)[R1-bgp]router-id 1.1.1.1 配置BGP的Router ID[R1-bgpl peer 2.2.2.2 as-number 100 指定對等體的回環網口IP地址及其所屬的AS編號[R1-bgp]peer 2.2.2.2 connect-interface LoopBack0 更新發送bgp報文的接口為Loopback0接口[R1-bgp] peer 3.3.3.3 as-number 100 [R1-bgp]peer 3.3.3.3 connect-interface LoopBack0 [R1-bgp]peer 4.4.4.4 as-number 100 [R1-bgp]peer 4.4.4.4 connect-interface LoopBack0 [R1-bgp]peer 5.5.5.5 as-number 100 [R1-bgp]peer 5.5.5.5 connect-interface LoopBack0 [R1-bgp]peer 6.6.6.6 as-number 100 [R1-bgp]peer 6.6.6.6 connect-interface LoopBack0[R3-bgp]peer 2.2.2.2 next-hop-local ASBR從ebgp鄰居學習到的路由傳遞給ibgp鄰居時,修改該命令[R3-bgp]peer 1.1.1.1 next-hop-local [R3-bgp]peer 6.6.6.6 next-hop-local[R3-bgp]peer 7.7.7.7 as-number 200 此為ebgp鄰居的AS編號[R3-bgp]peer 7.7.7.7 connect-interface LoopBack0[R3-bgp]peer 7.7.7.7 ebgp-max-hop 2 兩個AS之間用回環網口建的鄰居要將它們的鄰居的最大跳數改為2,默認的是1 (因為不是直連而是用Loopbacko接口,需要經過2個路由,而默認EBGP傳遞時TTL值為1)[R3-bgp]network 1.1.1.1 255.255.255.255 宣告指定的IGP、靜態、默認路由進BGP進程[R3-bgp]network 2.2.2.2 255.255.255.255[R3]ip route-static 7.7.7.7 255.255.255.255 12.1.1.2 兩個AS之間的ebgp對等體需要建立tcp連接,這里用靜態做底層的尋址,也可以使用IGP路由搭建底層尋址(比如RIP)[R3-bgp]network 7.7.7.7 255.255.255.255 ebgp用于配置靜態路由或IGP路由的網段或IP需要在兩端ebgp都宣告R7與R8,R3 (R3與R7互為EBGP)建立鄰居關系(R8配置與其相似略) [R7]bgp 200 創建AS200[R7-bgp] router-id 7.7.7.7 [R7-bgp]peer 3.3.3.3 as-number 100 此為ebgp鄰居的AS編號[R7-bgp]peer 3.3.3.3 connect-interface LoopBack0 [R7-bgp] peer 3.3.3.3 ebgp-max-hop 2 ebgp報文允許的最大跳數修改為2 (因為不是直連而是用Loopback0接口)[R7-bgp]peer 8.8.8.8 as-number 200 [R7-bgp]peer 8.8.8.8 connect-interface LoopBack0 [R7-bgp] peer 8.8.8.8 next-hop-local ASBR從ebgp鄰居學習到的路由傳遞給ibgp鄰居時,路由的下一跳修改為自己[R7-bgp] network 8.8.8.8 255.255.255.255 宣告指定的從本區域ibgp鄰居學到的路由給ebgp鄰居[R7] ip route-static 3.3.3.3 255.255.255.255 12.1.1.1 兩個AS之間運行靜態路由[R7-bgp] network 7.7.7.7 255.255.255.255 ebgp用于配置靜態路由或IGP路由的回環網口IP需要在兩端ebgp都宣告7.BGP路徑屬性
7.1路徑屬性分類
●公認屬性
●公認必遵屬性
●公認自由決定屬性
●可選屬性
●可選傳遞的
●可選非傳遞的
7.2分類
●公認強制屬性:所有的BGP的update消息都要包含該屬性
AS路徑(AS-path)
下一跳(next-hop)
起源(Origin)
●公認自由屬性:該屬性是可選可不選的,但是所有的BGP進程都能識別
本地優先級(local preferent)
●可選傳遞屬性:即使BGP進程不能識別該屬性,也會繼續傳遞下去
團體屬性(community)
●可選非傳遞屬性:如果BGP進程不能識別該屬性,可以忽略這條update,并且不傳遞下去
MED
7.3BGP選路原則
1.如果此路由的下一跳不可達,忽略此路由
2.Preferred-Value值數值越高越優先,華為私有屬性,僅本地有意義
3.Local-Preference值最高的路由優先
4.聚合路由優先于非聚合路由
5.本地手動聚合路由的優先級高于本地自動聚合的路由
6.本地通過Network命令引入的路由的優先級高于本地通過Import-route命令引入的路由
7.As-path的長度最短的路徑優先
8.比較Origin屬性,IGP優于EGP,EGP優于Incomplete
9.選擇MED較小的路由
10.EBGP路由優于IBGP路由
11.BGP優先選擇到BGP下一跳的IGP度量值最低的路徑
當以上全部相同,則為等價路由,可以負載分擔(注意:AS_Path必須一致,當負載分擔時,以下3條原則無效)
12.比較Cluster_list長度,短者優先
13.比較Originator_ID(如果沒有Originator_ID,則用Router_ID比較),選擇數值較小的路徑。
14.比較對等體的IP地址,選擇IP地址數值最小的路徑。
7.4BGP屬性選路配置
1.根據local-prefernce控制選路(越大越優)
●為公認自決屬性,用于告訴AS中的路由器,哪條路徑是離開AS的首選路徑
●Local_Preference屬性只能在IBGP對等體間傳遞(除非做了策略否則Local_Preference值在IBGP對等體間傳遞過程中不會丟失),而不能在EBGP對等體間傳遞,如果在EBGP對等體間收到的路由的路徑屬性中攜帶了Local_Preference,則會觸發Notifacation報文,造成會話中斷;
●但是可以在AS邊界路由器上使用Import方向的策略來修改Local_Preference屬性值。也就是在收到路由之后,在本地為路由賦予Local_Preference。
[R3]route-policy lop permit node 10 創建名為lop的路由策略[R3-route-policy]apply local-prefernce 222 設置本地優先級為222[R3-route-policy]quit[R3]bgp 200[R3-bgp]peer 4.4.4.4 route-policy lop export 在R3上對R1執行出站export方向的路由策略,使得其在收到對方通告的路由后,在路由的local-prefernce的屬性值改為222,使得R4優選R3通告的路由;如果此路由策略在R4配置則方向為入站import<R3>reset bgp all 重啟BGP<R3>refresh bgp all export2.使用AS-PATH屬性控制選路(越少越優)
●為公認必遵屬性,是前往目標網絡的路由經過的AS號列表
●作用:確保路由在EBGP對等體之間傳遞無環;另外也作為路由優選的衡量標準之一;
●路由在被通告給EBGP對等體時,路由器會在該路由的AS_Path中追加上本地的AS號;路由被通告給IBGP對等體時,AS-path不會發生改變
●使用route-policy修改BGP路由的AS_Path:
apply as-path xxx additive 在已有AS_Path基礎上追加xxx
apply as-path xxx overwrite 將已有AS_Path值替換(覆蓋)成xxx
apply as-path none overwrite 清空路由的AS_Path屬性
●使用route-policy修改BGP路由的AS_Path時,可以在EBGP對等體之間改變EBGP路由的AS_Path屬性,從而影響BGP路由的優選。在華為路由器上,在IBGP對等體之間,也可以使用route-policy修改BGP路由的AS_Path。無論何種場景,改變BGP路由的AS_Path都必須十分謹慎,建議跟上一個經過的AS號保持一直。
●Bestroute as-path-ignore命令 用來配置BGP在選擇最優路由時忽略AS路徑屬性。配置該命令后,BGP將不比較AS路徑的長度。缺省情況下,長度更小者優。
[R2]route-policy as permit node 10[R2-route-policy]apply as-path 123 123 123 additive 在已有AS_Path基礎上追加[R2-route-policy]quit[R2]bgp 200[R2-bgp]peer 1.1.1.1 route-policy as export<R2>reset bgp all<R2>refresh bgp all export3.通過MED屬性控制選路(越小越優)
●為可選非傳遞屬性,是一種度量值
●一般情況下,BGP設備只比較來自同一AS(不同對等體)的路由的MED屬性值。可以通過配置命令來允許BGP比較來自不同AS的路由的MED屬性值。執行compare-different-as-med命令后,系統將比較來自不同AS中的對等體的路由的MED值。
總結
以上是生活随笔為你收集整理的详细了解BGP—边界网关协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新型电脑内存x99:无法被识别的隐形杀手
- 下一篇: Linux配置最基础的命令