BGP
BGP建立鄰居采用有限狀態(tài)機(jī),有6種狀態(tài)(基于TCP協(xié)議)
1. IDLE狀態(tài):BGP協(xié)議初始時(shí)的狀態(tài),在這個(gè)狀態(tài)時(shí),系統(tǒng)不分配任何資源,也拒絕所有BGP接入。收到StraEven時(shí)開(kāi)始分配BGP資源,啟動(dòng)ConnectRetry計(jì)時(shí)器,同時(shí)偵聽(tīng)是否有來(lái)自其它對(duì)等體的連接請(qǐng)求
2. connect:這個(gè)狀態(tài)下,BGP等待TCP完成連接,若連接成功,本地清空計(jì)時(shí)器,并向?qū)Φ润w發(fā)送OPEN報(bào)文然后改變狀態(tài)為OpenSent狀態(tài),若連接不成功,本地重置計(jì)時(shí)器,偵聽(tīng)是否有對(duì)等體啟動(dòng)連接,并移至Active狀態(tài)
3. Active:BGP初始化TCP連接來(lái)獲得一個(gè)對(duì)等體,如果連接成功,清空本地清空計(jì)時(shí)器,并向?qū)Φ润w發(fā)送OPEN報(bào)文,并轉(zhuǎn)至OpenSent狀態(tài)
4. OpenSent:BGP等待對(duì)等體OPEN報(bào)文,收到報(bào)文后檢查報(bào)文,如果發(fā)現(xiàn)錯(cuò)誤,本地發(fā)送notification報(bào)文給對(duì)等體,并改狀態(tài)為IDLE。如果報(bào)文正確,BGP發(fā)送keepalive報(bào)文,并轉(zhuǎn)至OpenConfirm狀態(tài)
5.OpenConfirm:BGP等待Keepalive報(bào)文或NOTIFICCATION報(bào)文。如果收到keepalive報(bào)文,則進(jìn)入established狀態(tài),如果收到notification報(bào)文,則變?yōu)镮DLE狀態(tài)
6. Established:BGP可以和其它對(duì)等體交換update,NOTIFICATION,KEEPALIVE報(bào)文。
如果收到正確的update或keepalive報(bào)文就認(rèn)為對(duì)端正常運(yùn)行,本地重置Hold Timer
如果收到錯(cuò)誤的UPDATE,本地發(fā)送notification報(bào)文通知對(duì)端,并改變狀態(tài)為IDLE
如果收到notification報(bào)文,本地轉(zhuǎn)IDLE狀態(tài)
如果收到TCP拆鏈通知,本地關(guān)閉BGP連接,轉(zhuǎn)回IDLE狀態(tài)
BGP對(duì)等體間通過(guò)5種報(bào)文進(jìn)行交互:(keepalive報(bào)文為周期性發(fā)送,其余為觸發(fā)式發(fā)送)
Open報(bào)文:用于建立BGP對(duì)等體連接
Update報(bào)文:用于在對(duì)等體之間交換路由信息
Notification報(bào)文:用于終端BGP連接
Keepalive報(bào)文:用于保持BGP連接
Route-refresh報(bào)文:用于在改變路由策略后請(qǐng)求對(duì)等體重新發(fā)送路由信息,只有支持路由刷新能力的BGP設(shè)備才會(huì)發(fā)送和響應(yīng)此報(bào)文
BGP對(duì)等體之間的交互原則:
1. 從IBGP對(duì)等體獲得的BGP路由,BGP設(shè)備只發(fā)布給它的EBGP對(duì)等體
2. 從EBGP對(duì)等體獲得的BGP路由,BGP設(shè)備發(fā)布給它的所有EBGP和IBGP對(duì)等體
3. 當(dāng)存在多條到同一目的地路由時(shí),只選最優(yōu)路由發(fā)布給對(duì)等體
4. 路由更新時(shí),路由設(shè)備只發(fā)送更新的BGP路由
5. 所有對(duì)等體發(fā)送的路由,BGP設(shè)備都會(huì)接收
缺省情況下Keepalive報(bào)文時(shí)間間隔為60s,timeout為180s
Notification報(bào)文錯(cuò)誤碼:
-1:消息頭錯(cuò)誤? ?-2:open消息錯(cuò)誤? ? -3:update消息錯(cuò)誤? ? -4:hold計(jì)時(shí)器溢出? -5:FSM錯(cuò)誤? ?-6:終止
錯(cuò)誤子碼:
(消息頭錯(cuò)誤子碼)
1? - 連接未同步? 2 - 錯(cuò)誤消息長(zhǎng)度? 3 -錯(cuò)誤消息類(lèi)型
(open 消息錯(cuò)誤子碼)
1 - 不支持版本號(hào)? 2 - 錯(cuò)誤對(duì)端AS? 3 - 壞的BGP標(biāo)示? 4 - 不支持的選項(xiàng)參數(shù)? 5 - 認(rèn)證失敗? 6 - 不支持的hold時(shí)間
(update消息錯(cuò)誤子碼)
1 - 畸形屬性鏈表? 2 -不認(rèn)識(shí)公認(rèn)屬性? 3 - 缺少公認(rèn)屬性? 4 - 屬性標(biāo)志錯(cuò)誤? 5 -屬性長(zhǎng)度錯(cuò)誤? 6 - 無(wú)效origion屬性? 7 - AS路由環(huán)路? 8 - 無(wú)效的next-hop? 9 - 可選參數(shù)錯(cuò)誤? 10 - 無(wú)效網(wǎng)絡(luò)域? 11 - 畸形AS_PATH
BGP屬性分類(lèi):
公認(rèn)屬性:1. 公認(rèn)必遵? ? 2. 公認(rèn)可選
可選屬性:1. 可選過(guò)渡? ? 2.可選非過(guò)渡
origin: 標(biāo)示路徑信息的來(lái)源,是公認(rèn)必遵屬性(三種值:IGP-EGP-INCOMPLETE)
AS_PATH: 由一系列AS路徑組成,是公認(rèn)必遵屬性
next_hop: 它定義了到達(dá)目的地的下一跳的設(shè)備IP地址,是公認(rèn)必遵屬性
LOCAL_PREF: 用來(lái)通告路由優(yōu)先程度,是公認(rèn)可選屬性
ATOMIC_AGGREGATE: 用來(lái)通告路由接收者,該路由是經(jīng)過(guò)聚合的,是公認(rèn)可選屬性
aggregator: 是atomic_aggregate屬性的補(bǔ)充,是可選過(guò)渡屬性
community: 是一組共享相同屬性的目的地集合,是可選過(guò)渡屬性
originator_id: 用于標(biāo)識(shí)路由反射器,是可選非過(guò)渡屬性
cluster_id: 用于標(biāo)識(shí)路由反射器組,是可選非過(guò)渡屬性
multi_exit_disc: 用來(lái)區(qū)分同一個(gè)鄰接AS的多個(gè)接口,是可選非過(guò)渡屬性(MED)
BGP公認(rèn)團(tuán)體屬性:
1. NO-Export? ?2. No_advertise? ?3. Internet? ?4. Local_AS
BGP的MED屬性值,類(lèi)似于ospf的cost值,默認(rèn)值為0,值越小越優(yōu)先,只能是對(duì)于同一個(gè)AS來(lái)說(shuō),不同AS無(wú)法比較,可以傳遞出AS,控制數(shù)據(jù)進(jìn)入AS
Local-preference默認(rèn)本地優(yōu)先級(jí)為100,值越大越優(yōu)先,只能在AS內(nèi)傳遞,控制數(shù)據(jù)出AS
BGP Speaker 從EBGP獲得的路由會(huì)向它所有的BGP對(duì)等體通告(包括EBGP,IBGP)
peer 10.1.12.1 next-hop-local? ? 當(dāng)BGP路由下一跳不可達(dá)是使用
peer 1.1.1.1 connect-interface loopback 0 本設(shè)備使用loopback 0 接口做為更新源地址
IBGP一般使用Loopback 建立對(duì)等體關(guān)系
EBGP一般使用直連鏈路建立對(duì)等體關(guān)系
缺省時(shí),EBGP對(duì)等體間的BGP報(bào)文的TTL值為1,所有缺省EBGP使用Loopback 建立對(duì)等體將失敗
使用peer ebgp-max-hop 改變TTL值,值必須大于1
路由反射器:
從非客戶對(duì)等體學(xué)到的IBGP路由將會(huì)反射給所有客戶
從客戶對(duì)等體學(xué)到的IBGP路由將會(huì)反射給所有非客戶,以及除了該客戶之外的其他客戶(華為路由器支持關(guān)閉路由在客戶之間的反射行為,使用undo reflect between-clients)
執(zhí)行路由反射時(shí),只會(huì)將自己使用的最優(yōu)的BGP路由進(jìn)行反射
peer 2.2.2.2 reflect-client 將自己配置為路由反射器, 2.2.2.2 配置為客戶(只需在反射器配置)