CCNP7:BGP的 【特點、數據包、工作過程、路由黑洞、防環機制、配置、MA網絡中下一跳問題】

CCNP7:BGP的【特點、數據包、工作過程、路由黑洞、防環機制、配置、MA網絡中下一跳問題】

一、BGP、AS概述:

BGP網關路由協議是無類別路徑矢量EGP協議。

在談BGP之前我們談一下AS自治系統,一個自治系統就是一個範圍。之所以會出現這麼一個東西,是因爲我們不能將全球的網絡運行在一個很大的網絡中。

因此我們需要將這個很大網絡劃分爲若干個小的區域,這個小區域就是AS,然後AS內部跑IGP協議,當需要訪問外部的其它區域時,這時EGP登場了,它負責每個AS之間的通信。

因此當AS號少的時候就會導致網絡面積大、網絡延時、卡頓。
在這裏插入圖片描述

要區別AS,那麼AS一定要有編號。編號範圍:0-65535,其中1-64511爲公有,64512-65535爲私有

這個網站每天都會更新,這個網站可以查出AS號、IPv4、IPv6部署、規劃情況:CIDR Report
最底下有一個搜索引擎,我們可以查出中國所擁有的AS號。
在這裏插入圖片描述
4134-中國第一個AS號,中國電信的第一個AS號。
9929-中國網通的第一個AS號。

EGP協議的三大特性
1、可控性:EGP協議共享其它協議產生的路由,正常不關注選路。
2、可靠性:EGP使用增量更新,依靠TCP的三次握手,使用單播非直連建鄰,EGP承載於IGP之上
3、AS-BY-AS,以一個AS爲一跳,一個條目在AS內部屬性不變(保證BGP無環的最大意義)

我們可以理解BGP協議是一個公平的重發布協議,它不生產路由,它只是路由的搬運工

這是有關IGP、EGP的協議:

IGP OSPF、EIGRP、RIP、ISIS、IGRP
EGP EGP、BGP

我們說EGP,EGP是最早的AS間的協議,擁有兩個版本,版本1、版本2。版本2之後就有了BGP,經過多年的使用,BGP已經到V4版本了。因此,我這裏講的也是BGPv4版。

二、BGP特點:

藍色字體比較重要:

BGP特點:
1、無類別路徑矢量,其實就是距離矢量(共享路由)的升級版,使用AS號作爲跳數
2、使用單播更新來發送所有信息,基於TCP179端口工作
3、使用增量更新——僅觸發無週期
4、具有豐富的屬性來取代IGP中度量進行選路,使用多個參數控制協議
5、可控性——可以在進項和出項對流量實施強大的策略
6、默認BGP不被用於負載均衡,通過各種選路規則僅僅產生一條最佳路徑
7、BGP支持認證和聚合(彙總)

三、BGP的數據包:

首先我們要知道的就是BGP所有的數據包是基於TCP傳輸。

包名 作用 詳細
Open 建鄰 存在hold time 和 RID,用於鄰居關係建立,默認僅收發一次即可
Keeplive 保活 保活週期 1分鐘,保活的是TCP會話,hold time 3分鐘
Update 更新 更新包:包含路由條目:目標網絡號+屬性
Notification 報錯 報錯包會在錯誤信息出現時發送

四、BGP的工作過程:

BGP的工作過程:
1、首先要IP可達,也就是建鄰設備間可以通訊
2、通過三次握手建立TCP的會話
3、收發BGP的Open報文,建立鄰居關係生成鄰居表
4、使用Update報文共享本地的路由信息給鄰居,生成BGP表表中包含所有本地發出及接收到的路由信息
5、默認將BGP表中最優路徑加載於路由表中,之後收斂完成,僅Keeplive週期保活即可。
6、若存在錯誤的配置或策略時,BP協議將使用Notification包來進行報錯。
結構突變 調整
新增 最先學習到新增網段的BGP設備,使用Update包共享條目即可。
斷開 最先知道斷開網段的BGP設備,使用Update包共享信息即可。
無法通訊
(設備斷電)
hold time 到時時,斷開鄰居關係和TCP會話,然後刪除所有從該鄰居學習到的信息。

用個圖來說明一下:
在這裏插入圖片描述
有關名詞註解:
對等體:peers,在BGP中因爲可以非直連建鄰,故鄰居也被稱爲對等體。
EBGP:不同AS間的BGP鄰居關係,管理距離爲20

在這裏插入圖片描述
IBGP:同一AS內部建立的BGP鄰居關係,管理距離爲200
在這裏插入圖片描述

五、BGP的路由黑洞:

1、路由黑洞:

從這個圖中,我們可以看到總共有3個AS自治系統,中間的自治系統中:B、E兩臺設備運行了BGP,而D、C並沒有運行BGP。B和E之間通過非直連建鄰,它們之間的關係是IBGP。
在這裏插入圖片描述
接下來說說路由黑洞是怎樣產生的:
在這裏插入圖片描述
上圖在說明一個問題:當A新出現一個環回(X網段)的時候,該環回被B學習到,B通過TCP單播發給E,進而被E學習到,之後F就有了去X的路由。

當F要訪問X網段的時候,比如說F要ping X網段。F的下一跳是E,在BGP中E的下一跳是B,但是路由器查表的規則是遞歸查詢,實際流量的下一跳是C、D,接着E把流量交給C、D。

但是問題來了,C、D根本沒有學習到去往X的路由,流量就會被C、D所扔掉。此時路由黑洞出現,而C、D的存在就是造成路由黑洞的主要原因。

總結一下BGP的路由黑洞的出現原因:
因爲BGP協議可以非直連建鄰,這樣在一個AS內部就運行出現不運行BGP協議的路由,導致BGP可以鄰居間正常傳遞路由,實現控制層面可達,但數據層面在未運行BGP協議的設備上不可達。

2、解決方案:

序號 解決方案 評價
1 最佳方案:MPLS多協議標籤交換
2 物理鏈路全連:所有BGP設備間直連,不存在非直連建鄰(直接相連倆BGP設備) 如果可以,就可以
3 鄰居關係全連:所有設備運行BGP 不現實
4 將BGP路由條目重發布到IGP(純實驗環境可以考慮) 更不現實
5 tunnel:在公網中,所有走BGP的時候加上一個包頭,但這就會導致整個網絡很差勁。 原理上可講通,但實際不可行

六、BGP防環機制(水平分割):

1、EBGP水平分割:

EBGP水平分割,防止EBGP鄰居間的環路。它在BGP協議的屬性中存在一個AS-path屬性,記錄經過的每一個AS號。接收到的路由條目中,若存在本地的AS號將拒絕接收。
在這裏插入圖片描述

2、IBGP水平分割:

基於AS-BY-AS規則,一條路由在一個AS內部傳遞時,默認屬性無變化。
IBGP水平分割規則:從一臺IBGP鄰居處學習到的路由不得傳遞給另一個IBGP鄰居。
在這裏插入圖片描述
或者是下面這種情況:
在這裏插入圖片描述
注:該規則迫使全網所有BGP設備間均需要進行鄰居關係建立配置,配置量幾何增長,可以使用聯邦、和路由反射器來打破。

七、BGP的配置:

下面的配置我會以這個圖爲依據,所有設備都有環回,均運行OSPF,且同在一個區域0。R5~R6之間有兩根網線。
在這裏插入圖片描述

1、BGP建立鄰居關係:

(1)直連的EBGP鄰居關係建立:

因爲單播建鄰,因此建立鄰居關係和宣告路由是分開進行的。

建鄰是雙向的,兩邊都要配置
//啓動協議時攜帶真實的AS號,無多進程概念,一個設備只能配置一個AS
R1(config)#router bgp 1
//配置RID,如果不配置,則使用環回接口,最後爲物理接口作爲RID
R1(config-router)#bgp router-id 1.1.1.1
//直連的EBGP鄰居關係建立:鄰居接口的IP,及所在AS
R1(config-router)#neighbor 12.1.1.2 remote-as 2

建鄰配置完成後,鄰居間通過三次握手建立TCP會話:

R1#show tcp brief
TCB			Local Address		Foreign Address		(state)
6427FFF0	12.1.1.1.179		12.1.1.2.36113		ESTAB

兩端均爲向另一端發起TCP會話建立請求,但將隨機斷開一條,上面的信息說明R2是找R1建的鄰。

TCP會話建立後,BGP協議將發出open報文,建立BGP的鄰居關係生成鄰居表

//查看BGP鄰居表
R1#show ip bgp neighbors

在這裏插入圖片描述
但是由於此表過大,因此我們需要查看簡表:

//查看bgp彙總信息
R1#show ip bgp summary

在這裏插入圖片描述
從圖中可以看出它包含本地bgp RID,本地AS號,BGP的表版本爲1,bgp 版本爲4。
最右側的State/PfxRcd表示狀態:
此處的阿拉伯數字標識從該鄰居處學習到的路由條目數量,此處(數字、Idle、active)若爲數字也同時標識已經建立了鄰居關係。

(2)IBGP鄰居關係建立:

在實際網絡中,IBGP鄰居間一般存在多條路徑,使用環回接口地址作爲源、目標地址來建立鄰居關係,可以同時基於多條路徑傳輸,且鄰居關係更穩定。

建鄰是雙向的,兩邊都需要配置:
R2(config)#router bgp 2 
R2(config-router)#neighbor 3.3.3.3 remote-as 2
//一旦將目標地址修改爲對端環回接口,本地也需要將源地址修改爲本地的環回接口。
R2(config-router)#neighbor 3.3.3.3 update-source loopback 0

比如說下圖,如果以兩臺邊界設備的接口來建立IBGP,一旦物理鏈路一斷,它們的鄰居關係就會斷開。
在這裏插入圖片描述
而使用環回,就是穩定。雖然bgp的下一跳只有一個,但是流量遞歸以後實際走的是兩條鏈路,還提升了鏈路利用率。即使斷一條也沒有關係,鄰居關係還存在。

(3)EBGP鄰居間多條鏈路建鄰:

爲了保證EBGP鄰居間關係的穩定,EBGP鄰居間也會存在多條鏈路,爲了同時使用這些鏈路,建議使用環回接口作爲源、目IP地址建立鄰居關係。
在這裏插入圖片描述
建鄰過程分2步:
①IP可達:
但是這裏存在一個問題,使用兩臺設備的環回建鄰,但是大家都不在相同的AS中,一般爲了使IP可達,常使用靜態路由。

兩邊都要配置靜態:
R5(config)#ip route 6.6.6.0 255.255.255.0 56.1.1.2
R5(config)#ip route 6.6.6.0 255.255.255.0 65.1.1.2

②使用環回建立BGP鄰居關係:

兩邊都需要配置:
R5(config-router)#neighbor 6.6.6.6 remote-as 3
R5(config-router)#neighbor 6.6.6.6 update-source loopback 0

③修改TTL值:
默認IBGP鄰居間數據包TTL=255,EBGP鄰居間TTL=1,故一旦使用環回地址建立EBGP鄰居關係,那麼必須修改TTL值。

//後面的數字2即表示TTL值,如果不設置則默認爲255
R5(config-router)#neighbor 5.5.5.5 ebgp-multihop 2

2、BGP的路由宣告:

R1(config)#router bgp 1 
R1(config-router)#network 1.1.1.0 mask 255.255.255.0

切記:BGP協議只能逐條宣告本地路由表中的內容(不關注路由條目的產生方式),宣告時必須和表中的記錄完全一致

一旦進行了路由條目的宣告,本地就生成BGP表。BGP表中包含本地收發到的所有路由條目,基於Update發送

//查看BGP表
R1#show ip bgp

在這裏插入圖片描述
關於狀態的想詳細解釋:

* 的位置顯示 註解:
* 條目可用,可以加到路由表
r 條目不可用,不裝載:標識本地路由表已經通過更好的方式獲取路由。
s 條目不可用,被抑制:人爲的策略限制條目的傳遞

在這裏插入圖片描述

其他位置 註解:
> 標識條目優秀:可以加載到路由表,可以傳遞給鄰居。
i 該條目是從IBGP處學習到的路由。

注意:條目必須 即優且可用 纔可以加表,僅優 便可傳遞。前提爲不能被s抑制,就是沒有做策略。

成爲優秀的條件:
①同步問題:
本地IGP已經學習到了該BGP路由才能優,該規則的目的在於避免路由黑洞,但條件苛刻故在IOS版本12.2(8)T以上默認關閉

R3(config)#router bgp 2 
R3(config-router)#no synchronization

②下一跳可達問題:
因爲AS-BY-AS,條目在傳遞給IBGP鄰居時,屬性默認不變,故從IBGP鄰居學習到的路由,下一跳不變。當路由傳遞給EBGP鄰居時,下一跳自動修改爲本地。
在這裏插入圖片描述
當存在這個問題時,R3看到的路由的下一跳是12.1.1.1,但問題是R3根本沒有去往該網段的路由。
在這裏插入圖片描述
此時我們就需要讓R2把路由傳遞給鄰居R3時,修改屬性中的下一跳地址爲本地R2。

R2(config)#router bgp 2  
R2(config-router)#neighbor 3.3.3.3 next-hop-self

這樣R3就可以加表了。
注意:這樣修改下一跳爲本地,只是單方向的(R2給R3),如果是從R3給R2則需要在R3上配置到R2修改下一跳爲本地。
在這裏插入圖片描述
它的路由表如下:注意IBGP的度量爲200。
在這裏插入圖片描述
由於存在IBGP水平分割,因此雖然R3加了表,有了路由,但是它不會給R4。因此我們需要R2和R4之間建立一個IBGP

R2、R4之間建立了IBGP鄰居後,同樣的需要在R2上進行配置,告訴R4修改下一跳爲本地。
在這裏插入圖片描述
同理,除之前所建鄰居外,還有這張圖中的其他鄰居也要建鄰,然後也要修改下一跳爲本地。而R5和R6是不受水平分割限制的,R6肯定會優,因爲R5會自動修改下一跳爲自己,它們之間的關係是EBGP。

八、BGP在MA網絡中的下一跳問題:

這張圖中,黑色線條表明了物理鏈路,R3、R4之間使用串線,而R1、R2、R3之間使用以太網線,它們處在MA網段。綠色線條表明IBGP關係,而藍色線條表明了EBGP關係。
在這裏插入圖片描述
R4把它的環回傳給R3、R3再傳給R2、R2再傳給R1,根據水平分割來講,R1去往R4的環回下一跳是R2,因爲是R2給的。

但是我們將所有配置配置好後,然後發現R1的下一跳不是R2,而是R3,這就是MA網段中下一跳問題。
在MA網絡中,ICMP重定向將幫助BGP學習到最佳的下一跳。

九、其他

1、軟、硬重啓:

配置 註解
R1#debug ip bgp updates 動態查看BGP更新包
R1#clear ip bgp * 硬重啓(慎用),重啓本地所有鄰居間的TCP會話,重建TCP會話會很慢。
R1#clear ip bgp * soft [in/out] 軟重啓,僅和本地所有鄰居間重新收發路由,不斷開任何關係,做策略很有用。

後面加in表示收路由,而out表示發路由
R1#clear ip bgp 3.3.3.3 僅和3.3.3.3鄰居進行硬重啓
R1#clear ip bgp 3.3.3.3 soft 僅和3.3.3.3鄰居進行軟重啓

2、查看本地發送、接收的路由信息:

之前我們也看到,BGP的表格過大,因此需要篩選,可以使用以下配置進行篩選。

//僅查看本地發送給鄰居123.1.1.2的路由信息
R1#show ip bgp neighbors 123.1.1.2 advertised-routes  
//要想查看本地從xxx.x.x.x的接收的路由,也可以。但是我們知道路由會很多的,因此我們需要配置專門的儲存空間來裝載,建議查看完成後刪除該空間
R1(config-router)#neighbor 123.1.1.2 soft-reconfiguration inbound
//查看本地從xxx.x.x.x的接收的路由
R1#show ip bgp neighbors 123.1.1.2 received-routes

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