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