【太閣課堂】BGP理論難理解?別怕,這篇文章給你總結(jié)的明明白白!
一、BGP簡介
1.BGP概述
邊界網(wǎng)關(guān)協(xié)議(BGP)是運行于 TCP 上的一種自治系統(tǒng)的路由協(xié)議
BGP(Border Gateway Protocol),我們稱之為邊界網(wǎng)關(guān)路由協(xié)議,用于自治系統(tǒng)(Autonomous System)之間交換路由信息(交換網(wǎng)絡可達信息)
這些信息有效地構(gòu)造了 AS 互聯(lián)的拓撲圖,并由此清除了路由環(huán)路
同時在 AS 級別上可實施策略決策(選擇最佳路由的矢量協(xié)議)
2.AS概述
自治系統(tǒng)(AS),指的是在同一個組織管理下、使用相同策略的設(shè)備的集合(也就是說,對于互聯(lián)網(wǎng)來說,一個AS是一個獨立的整體網(wǎng)絡)
每個AS有自己唯一的編號,不同AS通過AS號區(qū)分
AS號取值范圍:1-65535,其中64512-65535是私有AS號,IANA(互聯(lián)網(wǎng)數(shù)字分配機構(gòu))負責AS號的分發(fā)
二、BGP分類
1.EBGP
運行于不同AS之間的BGP稱為EBGP(自治系統(tǒng)之間交換路由信息)
為了防止AS間產(chǎn)生環(huán)路,當BGP設(shè)備接收EBGP對等體發(fā)送的路由時,會將帶有本地AS號的路由丟棄
2.IBGP
運行于同一AS內(nèi)部的BGP稱為IBGP(在自治系統(tǒng)內(nèi)部路由器之間來同步路由信息)
為了防止AS內(nèi)產(chǎn)生環(huán)路,BGP設(shè)備不將從IBGP對等體學到的路由通告給其他IBGP對等體,并與所有IBGP對等體建立全連接
三、BGP的路由器號(Router-ID)
BGP的Router-ID是一個用于標識BGP設(shè)備的32位值,通常是IPv4地址的形式,在BGP會話建立時發(fā)送的Open報文中攜帶
對等體之間建立BGP會話時,每個BGP設(shè)備都必須有唯一的Router ID,否則對等體之間不能建立BGP連接BGP的Router-ID在BGP網(wǎng)絡中必須是唯一的,可以采用手工配置,也可以讓設(shè)備自動選取
缺省情況下,BGP選擇設(shè)備上的Loopback接口的IPv4地址作為BGP的Router-ID
如果設(shè)備上沒有配置Loopback接口,系統(tǒng)會選擇接口中最大的IPv4地址作為BGP的Router-ID
一旦選出Router-ID,除非發(fā)生接口地址刪除等事件,否則即使配置了更大的地址,也保持原來的Router-ID
四、BGP的特點
BGP使用TCP作為其傳輸層協(xié)議(監(jiān)聽端口號為179),提高了協(xié)議的可靠性
BGP是外部路由協(xié)議,用來在AS之間傳遞數(shù)據(jù),對穩(wěn)定性要求非常高。因此用TCP協(xié)議的高可靠性來保證BGP協(xié)議的穩(wěn)定性
BGP的對等體之間必須邏輯上連通,并進行TCP連接(目的端口號為179,本地端口號任意)
BGP對等體和IGP對等體不同,BGP對等體(Peer)是指使用TCP建立連接的兩端,而非與IGP同概念的直連鄰居,只要TCP能夠建立連接并不一定需要直連
BGP本身只負責控制路由,數(shù)據(jù)轉(zhuǎn)發(fā)依然靠靜態(tài)或IGP路由
BGP支持無類別域間路由CIDR
路由更新時,BGP只發(fā)送更新的路由,大大減少了BGP傳播路由所占用的帶寬,適用于在Internet上傳播大量的路由信息
BGP是一種增強的距離矢量路由協(xié)議,從設(shè)計上避免了環(huán)路的發(fā)生
AS之間:BGP通過攜帶AS_Path信息標記途經(jīng)的AS,帶有本地AS號的路由將被丟棄,從而避免了域間產(chǎn)生環(huán)路
AS內(nèi)部:BGP在AS內(nèi)學到的路由不會再通告給AS內(nèi)的BGP鄰居,避免了AS內(nèi)產(chǎn)生環(huán)路
BGP提供了豐富的路由策略,能夠?qū)β酚蓪崿F(xiàn)靈活的過濾和選擇
BGP提供了防止路由振蕩的機制(路由衰減),有效提高了Internet網(wǎng)絡的穩(wěn)定性
BGP易于擴展,能夠適應網(wǎng)絡新的發(fā)展(ipv4單/組播、vpv4單/組播),主要是通過TLV進行擴展
五、BGP的工作原理
BGP對等體的建立、更新和刪除等交互過程主要有5種報文、6種狀態(tài)機和9個原則
1.BGP的5種報文
BGP對等體間通過以下5種報文進行交互,其中Keepalive報文為周期性發(fā)送,其余報文為觸發(fā)式發(fā)送:
Open報文:用于協(xié)商BGP對等體的各項參數(shù),主要包括BGP版本(V4)、AS號等信息,建立BGP對等體連接
Open是TCP連接建立后發(fā)送的第一個報文Update報文:用于在對等體之間交換路由信息
連接建立后,有路由需要發(fā)送或者路由變化時,發(fā)送Update通告對端可達或者撤銷路由信息及路徑屬性Notification報文:用于中斷BGP連接
當BGP在運行中發(fā)現(xiàn)錯誤時,發(fā)送Notification報文通告BGP對端,隨后與之相關(guān)的鄰居關(guān)系將被關(guān)閉Keepalive報文:用于保持BGP連接(?;睿?br>定時發(fā)送Keepalive報文以保持BGP對等體關(guān)系的有效性
響應收到的正確的Open報文Route-refresh報文:用于在改變路由策略后軟復位(刷新)BGP路由表請求對等體重新發(fā)送路由信息
只有支持路由刷新(Route-refresh)能力的BGP設(shè)備會發(fā)送和響應此報文
2.BGP的6種狀態(tài)機
BGP對等體的交互過程中存在6種狀態(tài)機:空閑(Idle)、連接(Connect)、活躍(Active)、Open報文已發(fā)送(OpenSent)、Open報文已確認(OpenConfirm)和連接已建立(Established)
在BGP對等體建立的過程中,通??梢姷?個狀態(tài)是:Idle、Active和Established
Idle狀態(tài)是BGP初始狀態(tài),在Idle狀態(tài)下,BGP拒絕鄰居發(fā)送的連接請求
只有在收到本設(shè)備的Start事件后,BGP才開始嘗試和其它BGP對等體進行TCP連接,并轉(zhuǎn)至Connect狀態(tài)在Connect狀態(tài)下,BGP啟動連接重傳定時器(Connect Retry),等待TCP完成連接
●如果TCP連接成功,那么BGP向?qū)Φ润w發(fā)送Open報文,并轉(zhuǎn)至OpenSent狀態(tài)
●如果TCP連接失敗,那么BGP轉(zhuǎn)至Active狀態(tài),反復嘗試連接
●如果連接重傳定時器超時,BGP仍沒有收到BGP對等體的響應,那么BGP繼續(xù)嘗試和其它BGP對等體進行TCP連接,停留在Connect狀態(tài)在Active狀態(tài)下,BGP總是在試圖建立TCP連接
●如果TCP連接成功,那么BGP向?qū)Φ润w發(fā)送Open報文,關(guān)閉連接重傳定時器,并轉(zhuǎn)至OpenSent狀態(tài)。
●如果TCP連接失敗,那么BGP停留在Active狀態(tài)。
●如果連接重傳定時器超時,BGP仍沒有收到BGP對等體的響應,那么BGP轉(zhuǎn)至Connect狀態(tài)在OpenSent狀態(tài)下,BGP等待對等體的Open報文,并對收到的Open報文中的AS號、版本號、認證碼等進行檢查
●如果收到的Open報文正確,那么BGP發(fā)送Keepalive報文,并轉(zhuǎn)至OpenConfirm狀態(tài)
●如果發(fā)現(xiàn)收到的Open報文有錯誤,那么BGP發(fā)送Notification報文給對等體,并轉(zhuǎn)至Idle狀態(tài)在OpenConfirm狀態(tài)下,BGP等待Keepalive或Notification報文
如果收到Keepalive報文,則轉(zhuǎn)至Established狀態(tài),如果收到Notification報文,則轉(zhuǎn)至Idle狀態(tài)在Established狀態(tài)下,BGP可以和對等體交換Update、Keepalive、Route-refresh報文和Notification報文。
●如果收到正確的Update或Keepalive報文,那么BGP就認為對端處于正常運行狀態(tài),將保持BGP連接。
●如果收到錯誤的Update或Keepalive報文,那么BGP發(fā)送Notification報文通知對端,并轉(zhuǎn)至Idle狀態(tài)
●Route-refresh報文不會改變BGP狀態(tài)
●如果收到Notification報文,那么BGP轉(zhuǎn)至Idle狀態(tài)
●如果收到TCP拆鏈通知,那么BGP斷開連接,轉(zhuǎn)至Idle狀態(tài)
3.BGP的9個原則(對等體之間的交互原則)
BGP設(shè)備將最優(yōu)路由加入BGP路由表,形成BGP路由。BGP設(shè)備與對等體建立鄰居關(guān)系后,采取以下交互原則:
從IBGP對等體獲得的BGP路由,BGP設(shè)備只發(fā)布給它的EBGP對等體
從EBGP對等體獲得的BGP路由,BGP設(shè)備發(fā)布給它所有EBGP和IBGP對等體
當存在多條到達同一目的地址的有效路由時,BGP設(shè)備只將最優(yōu)路由發(fā)布給對等體
路由更新時,BGP設(shè)備只發(fā)送更新的BGP路由
所有對等體發(fā)送的路由,BGP設(shè)備都會接收
所有EBGP對等體在傳遞過程中下一跳改變
所有IBGP對等體在傳遞過程中下一跳不變
默認EBGP傳遞時TTL值為1
默認IBGP傳遞時TTL值為255
4.建立對等體注意點
直連建立對等體需要注意的點
建立IBGP對等體時要讓下一跳可達,處于邊界的IBGP對等體需要將下一跳指向自己,這樣才能建立IBGP對等體用環(huán)回口建立鄰居需要注意的點
需要修改更新源,默認更新源是物理口,需要修改成環(huán)回口,建立IBGP對等體時要保障下一跳可達,處于邊界的IBGP對等體需要將下一跳指向自己,這樣才能建立IBGP對等體
建立EBGP對等體時因為EBGP只能傳一跳,因而,在建立EBGP對等體時,需要修改EBGP多跳的跳數(shù)為2以上(自己環(huán)回到對端環(huán)回是兩跳,默認一跳)關(guān)于為什么要用環(huán)回口建鄰居
原因是環(huán)回口穩(wěn)定,只要路由器啟動著,環(huán)回口就不DOWN,而物理鏈路可能會受線路或者接口等因素的影響導致對等體關(guān)系有問題,因而一般BGP建立對等體都是環(huán)回口來(文章來自網(wǎng)絡技術(shù)干貨圈)