BGP協議的學習及一些特性


寫一點最近開始接觸的BGP一點知識(部分截取自網絡)
RFC4271 定義一個路由器只屬於一個as,as取值範圍1-65535   64521-65535是私有as號
BGP協議是提供一種區域間的路由選擇協議,自助系統能夠無環的交換路由選擇信息,BGP路由交換有去往目標網絡的路徑信息。
BGP在選路的時候考慮的不是速度,而是讓AS能夠根據多種BGP屬性來控制數據流的傳輸。

1,BGP 靠TCP進行連接,所以要保證三層ip的可達性;端口號TCP179(目標端口)
2,BGP以到單播的形式建鄰居,所以通告之後要手工指定鄰居;類似於OSPF和Isis路由協議的hello報文,而BGP使用keeplive週期性發送維持
鄰接存活信息(60s)來維持鄰居關係,BGP0使用的是觸發更新機制不需要使用定期更新機制
3,BGP有源檢測特性,所以鄰居地址要和發送更新地址保持一致,在接受更新分組的時候,TCP使用滑動窗口機制,接受方達到一半的時候進行
確認,不同與OSPF的1-to-1窗口
4,EBGP鄰居open包的TTL值爲1,如果環回接口建鄰居需將它改大;bgp具有豐富的屬性值,組建可擴展的巨大的網絡
5,BGP 默認是關自動彙總的,因爲自將某臺路由器通告給自己的鄰居對等體時,不像RIP等主類路由那樣,邊界彙總
6,BGP的同步規則,傳輸AS不傳輸路由條目,(從外部AS傳過來的條目不在傳向其他AS)如果關了此同步會造成路由黑洞
7,BGP有水平分割,在同一AS內路由條目只傳一跳,所以如果IBGP全互聯的話要做路由反射;
8,BGP 的下一跳是以AS計數的,爲了保證數據包能夠正確的封裝,應該把嚇一跳改成物理上的下一跳

BGP的三張表
鄰居關係表(所有bgp的鄰居)
轉發數據庫(記錄每一個鄰居的網絡信息,路徑去往同一目的通過不同屬性的最優路徑)
路由表(最佳路徑)ebgp路由AD爲20  ibgp路由AD爲200

查看鄰居表  show ip bgp summary
查看轉發表 show ip bgp(從鄰居獲取的路由條目都會加入BGP轉發表中

路由表bgp調用選擇進程選取前往每個網絡的最佳路徑加入路由表中 使用 show ip route bgp查看

BGP報文消息類型
open 報文  用來建立最初的BGP連接
keeplive 對等體之間週期性的交換這個消息來保持回話有效(60s)
update 更新報文對等體之間使用這個消息交換網絡層可達信息
notification 通告出錯信息
 建鄰居關係的幾種狀態
idle 不分配網絡資源,不允許傳入的bgp 連接(此狀態會設置連接重置定時器,到期時纔會重新啓動BGP 初始重試時間60s,而以後每次
重置的時間都是指數上漲,之前時間的兩倍
connect 已經建立完成TCP 三次握手BGP BGP 等待TCP連接,如果連接成功,bgp發送open分組給對方以後狀態機變爲opensent狀態,如果失敗會
變到active 或者保持connect 或是返回idle狀態
active
在這個狀態下初始一個TCP連接來建立bgp的鄰接關係,如果成功則發送open分組給對方狀態變爲opensent狀態如果失敗則仍處於active或idle狀態
opensent 等待open的迴應迴應收到狀態變爲openconfirm並給對方發送一個keeplive分組沒有接收到這個分組則狀態變外idle或 active
established 這是bgp對等體之間的交換信息狀態包括update分組 keepalive分組和notification分組(connect和active是TCP連接active是發起方
connect是應答方

IBGP 運行在AS內部,不需要直連,有水品分割,建議使用 full mesh,full mesh 不具有擴展性,解決ibgp full mesh問題,使用路由反射器和聯邦
來解決,主要解決backbone igp中的路由
neighbor 後指的是地址可達
建立IGP鄰居的兩種方式
鄰居之間的物理接口建立對等關係,是通過他們共享相同的子網建立的
使用換回接口建立對等關係,如果ibgp在物理連接上直連的可能性不大,設置TTL值爲255
 
EBGP 建立鄰居

運行在AS 與AS 之間邊界路由器上默認使用直連或靜態路由,如果不是直連必須指定多跳,  neighbor x.x.x.x ebpg-multihop (1-255)
鄰居之間可以通過各自的一個物理接口建立對等關係
也可使用通告環回接口建立對等關係
neighboriP-address remote-as number命令  :指定對方屬於哪一個AS 所指的neighbor ip address 地址必須在igp中可達
允許更新源地址來訪問我的179端口,但沒有指明訪問本路由器的那個地址,只檢測源地址,
本路由器以更新源地址去訪問neighbor後面的這個地址179端口,是否可以建立TCP連接,要看對反是否允許我更新源來訪問它
例:
neighbor192.168.1.1 remote-as 1      R1
neighbor 10.0.0.1 remote-as 1        R2
雙方都沒有更新源,neighborx.x.x.x updade-soure lo0 代表本路由器的更新源爲l0o口 bgp的包以這個接口地址爲源地址發送出去
一邊指環回口,一邊指直連接口 可以建立鄰居,這裏兩個tcp的session,只有r1去訪問R2的環回接口的179 端口的TCP session可以建立
使用show TCP brief 查看
這時在r2上寫上更新源命令 neighbor10.0.0.1 update-source lo0 即可建立兩個TCPsession  當一條establish之後 另一條會消失,建立
兩條是爲了冗餘


ibgp同步
bgp路由默認不使用ibgp獲取的路由或將其通告給外部的鄰居,除非路由器是本地的或是igp獲悉的
同步開啓,意味着從一個ibgp鄰居學來的路由,除非從igp中也同樣學習到,否者不可能被選爲最優
如果igp爲OSPF 那麼前綴的router-id與bgp的router-id匹配纔有可能選爲最優

所以關閉同步的條件
將ebgp 的路由重分發進igp
本as不爲其他as提供穿越服務(stub as)
穿越路徑上所以懂得路由器都運行bgp
 

BGP 的屬性

公認強制的、公認自由決定的、可選傳遞的、可選非傳遞的
可選屬性不要求所以的bgp都實現支持
對於不支持的可選傳遞屬性,路由器將原封不懂得傳遞給其他的bgp路由器,這種情況標記爲部分的
對於可選非傳遞屬性,路由器將其刪除,不將其傳遞給其他bgp路由


AS路徑屬性 (as-path)
as_path 是公認必選屬性,用as好的順序來描述AS間的路徑或到NLRI所明確的目的地的路由,
當每個運行BGP的路由器發起一跳路由,(當他在自己的AS域內公佈一個有關的目的地的NLRI他將自己的AS附加到as-path中)
當後續的運行BGP的路由器向外部的對端公佈路由時他將自己的AS 號附加到AS-path中as可以描述所以他經過的自治系統,以最近的
AS開始,以發起者的AS結束,只有將更新消息發送在另一個AS域內的鄰居是BGP纔將他的as 添加到他的as-path中
可以脛骨哦使用as附加改變其公佈的路由的as-path來影響數據流的流向
as-path的另一個屬性是避免環路,如果BGP從它的外部鄰居收到一條路由,而該路由as-path包含這個bgp路由器自己的as號,於是改
路由器就知道是條環路路由,方法似是將私有AS隱藏  命令  neighbor x.x.x.x remove-private-as  當路由器在發送的更新的時候
剝奪私有as號並且不將它的路由發送給其他路由器
iP as-path access-list 1deny ^100$
ip as-path access-list 1 deny *
neighbor x.x.x.x gilter-list 1 out

增加as-path 的長度 可用route-map 裏面的set as-path prepend

bgp bestpath as-path ignore(隱藏命令) 這條命令可以使我們在選路的時候跳過as-path的選路直接往下繼續選擇最優的路徑。
 

源頭屬性 (origin)
公認強制屬性 (定義路徑源頭信息)
igp 在起始as的內部,使用bgp 通告network時,通常屬於這種情況  在bgp表中 有i表示
egp 路由是通告egp獲悉的,在bgp表中用e 表示
不完全 路由的源頭未知或其他方法獲悉的,在頭上顯示?

下一跳屬性
公認必選屬性,描述了到股部路徑的下一跳路由器iP地址
使用靜態路由和next-hop-self 防止目標不可達或者ibgp鄰居處所在的igp宣告、將於EGP直連的網絡重分發進igp
建議用環回口建鄰居


本地優先級屬性
公認自由決定屬性,告訴as中的路由器,那條路徑離開as的首選路徑,本地優先級越高,路徑被選擇的可能性就越大,注意優先級
屬性只能在AS中的路由器之間交換,只適用於內部鄰居,用於鄰居對等體之間的update消息

本地優先級可以再本AS和大聯盟內傳遞,越大越優先,影響路由器的出站流量 默認情況下 local-preference爲100


權重屬性
Cisco私有的參數本地有效,缺省條件下本地始發的路徑具有相同的weight值,(即32768)所有其他的路徑weight值爲零,越大越優先
權重隻影響當前路由器,指定鄰居的權重用 neighbor iP address | peer-group-name wiight weight可以再neighbor的入方向設置範圍0-65535


MED屬性
被稱爲度量值,是可選的非傳遞屬性,承載EBGP的update消息中用於向外部鄰居指出進入的AS的首選路徑 越小越優先


共同體屬性
是一組共享某些共同特性的目的地,用於簡化路由策略的執行
community 屬性石一組4個8位組的數值,前兩個8位組表示自治系統,後兩個8位組表示出於管理的標示符,格式爲NN:AA
團體屬性是一個可傳遞屬性 類型代碼爲8


BGP的路由彙總
2種
summary
靜態路由手工彙總指向null 0 在network 引入BGP(缺乏靈活性)
明細路由斷了彙總仍然會被引入
aggregate 聚合
聚合路由在本路由器上哪生成一條聚合路由下一跳爲0.0.0.0
配置:

aggregate-address 172.16.12.0 255.255.252.0 ?

advertise-map Set condition to advertise attribute

as-set Generate AS set path information

attribute-map Set attributes of aggregate

route-map Set parameters of aggregate

summary-only Filter more specific routes from updates

suppress-map Conditionally filter more specific routes from updates

nlri
Advertise-map

BGP路由決策
bgp的rib包括3部分
adj-RIBs-in 存儲從對等體學習到的路由更新中爲處理的路由信息, 在adj中被認爲是可行路由
LOC-RIB 包含BGP發言者對ADJ-RIBS-IN 中的路由應用本地策略之後選定的路由
adj-RIBs-OUT 包含了BGP 發言者向對等體宣告路由
路由選擇3個階段
一計算每條可行路由的優先級
二從所以可用路由中爲特定目的地選出最佳路由,並將其安裝到LOC-RIB中
三將相應的路由加入到ADJ-RIBS-OUT 中,以便向對等體進行宣告
選路原則13條
weight (cisco私有)本地有效
local-preference 本地優先級 用於本AS和大聯盟內傳遞默認100
本地起源  路由器本地始發的路徑優先,在fib中顯示0.0.0.0
as-path 評估as-path的長度,最短的路徑優先
起源代碼
評估路由的origin code屬性越小越優先
MED metric 傳遞不能傳出AS 例外始發路由器尅呀metric可以傳給鄰居可以是IBGP/EBP但ebgpbu 再傳不出去
ebgp優與ibgp
最近的igp鄰居  這裏指peer的更新源在我的路由器裏顯示,那個最近那個最優
OSPF是否考慮O,OIA,OE1,OE2只看cost不看O,OI,OE
如果配置了maximum-path(ibgp) 如果存在多條等價的路徑會插入多條路徑,默認爲1
最老的,與本端最早建立鄰居關係的【peer 被有優選,因爲最穩定
最優的route-id
多跳路徑的始發路由器id相同,那麼選擇cluster-list 長度短的
優選來着最低鄰居地址的路徑


路由翻動(route flaps) 和路由懲罰 (route dampening)
路由翻轉原因很多,如鏈路不穩定,接口不穩定,接口故障,ISP工程施工,配置錯誤
 解決辦法 ebgp建立鄰居似乎不要將環回口引入BGP  network+backdoor
路由反射器
由於RIP的水平分割問題所以ibgp需要full mesh 由於整個ibgp full mesh的話需要建立的session數爲N*(n-1)/2,
不具有擴展性,一種是路由反射器,另一種是聯邦(具有ebgp特性)

今後抽出時間寫一些更詳細的一些知識分享給大家,部分內容來自其他朋友分享的,學習BGP此理解必備並一定要透徹。


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