BGP(border gateway protocol,邊界閘道協定)
在internet通告,學習,選擇路徑協定
所有ISP大都透過BGP交換internet路由表
EGP(exterior gateway protocol,外部閘道協定)中用途較廣的路由協定
BGP擁有最佳最穩定的路徑演算法
rfc1771為BGP4
使用BGP的理由
在兩個以上連外線路下,選出到外網的最佳路徑:
若組織網路有2個以上邊界介面可離開到達internet的某個點時,可透過BGP決定由那個邊界介面離開會較快
ps:連接isp的方式常見的有以下幾種
Single Homed:連接1家isp,每家isp使用1條鏈路
Dual Homed:連接1家isp,每家isp使用2條以上鏈路
Single Multihomed:連接2家以上isp,每家isp使用1條以上鏈路
Dual Multihomed:連接2家以上isp,每家isp使用2條以上鏈路
規格
使用規則方式選路徑,不同於IGP使用權值選路徑
採Path vector(路徑向量),類似距離向量的邏輯
使用TCP 179與鄰居通訊
iBGP管理距離為200,eBGP管理距離為20
與IGP差異
需明確指定鄰居IP位置,鄰居可以不用在相同子網路上
鄰居之間使用TCP 179,不同於IGP使用IP協定
通告PA(path attributes,路徑屬性),不同於IGP通告權值
強調穩定性,不同於IGP強調快速收斂
ps:
BGP route table通常都比IGP table大的多,甚至可能有超過100,000筆route
ps:
MPBGP(Multiprotocol BGP),RFC2858
支援IPv6,IPX等多種網路層協定的路由訊息
ps:
一般BGPv4只支援IPv4
…
peer
BGP的鄰居,可分為
iBGP:在同一個ASN,不會將自己的ASN記錄在AS_PATH
eBGP:在不同ASN,會將自己的ASN記錄在AS_PATH
ASN(自治系統編號)
由IANA負責控制,並分配到不同組織
ASN範圍
0 保留
1-64495 IANA指派的public ASN
64496-64511 保留作為文件用途 (RFC5398)
64512-65534 指派給private ASN
65535 保留
…
BGP路徑更新有三種可選
1只更新預設路徑,ISP利用BGP通告預設路徑
2完整更新,會用到大量記憶體及CPU資源
3部份更新,只更新指定的路徑
選出BGP RID順序
1直接指定
2最大迴路介面
3最大非回路介面
…
鄰居間容錯問題
bgp鄰居關係需在關聯的介面都處於up狀態時才可維持
若發生問題,有以下解決方案
1.在每個router上使用兩個neighbor指令,即使其中一個鏈路失效,還有另一個,但該方案會消耗很多運算資源
2,在迴路介面上使用neighbor指令,即使鏈路失敗,迴路介面仍不受影響,而該方案較無效能負擔問題
ps:為了讓其他router可到達迴路介面上的位置,可透過IGP學習或設定靜態路由
BGP鄰居建立步驟
1.router根據指定鄰居以tcp 179進行三向交握,以建立tcp連線
2.傳送bgp open訊息,類似IGP的HELLO訊息
3.比對鄰居open訊息內的參數
ps:
IBGP鄰居不一定要直接相連
BGP鄰居狀態
idle:BGP程序被關閉或等待下一次重試
connect:等待與對方的tcp連線完成
active:tcp連線完成
opensent:bgp open訊息已傳送到鄰居
openconfirm:已接收到鄰居bgp open回覆,並等待keepalive訊息(參數一致)或notification訊息(參數不一致)
established:比對鄰居參數一致,鄰居關係建立完成,可開始傳送update訊息
BGP訊息類型
HELLO:1用來建立鄰居關係,2交換基本參數
keepalive:用來維護鄰居關係,在hold timer內未收到該訊息則中斷鄰居關係
notification:用來通知bgp錯誤訊息
update:用來交換PA及NLRI(network layaer reachability information,網路層可達性)/pa屬性的prefix
ps:
update訊息會列出一組pa及使用該組pa的prefix/NLRI
用途:1進行通告,2withdraw route(撤除路徑)
…
通告路徑規則
1任何bgp update只通告最佳路徑
2不會將學到的ibgp路徑通告給ibgp peer(類似split horizon概念)
換句話說就是iBGP通告route到iBGP peer不會修改route的next hop(一般IGP會)
bgp next hop問題
路徑通告到eBGP peer時會修改route的next hop(ebgp的鄰居位置),但通告到iBGP peer不會修改route的next hop
所以bgp的next hop有時會在不同網路中,也因此可能會有到不了next hop的問題
為到達next hop,主要有兩種做法
1建好ip路徑,使該設備可以到next hop
2透過設備的指令 ex:cisco的next-hop-self
BGP迴圈問題
若連接internet的2台bgp router沒有互相連接時就會產生loop
主要有以下3種解法
1.iBGP fully mesh:在組織連接bgp router的內部設備上執行iBGP,並將這些設備連接在一起
主要原理:讓iBGP A通告route到iBGP peer時修改route的next hop為iBGP A(預設不會)
2.將BGP路徑redistribute到IGP,不建議
優點:內部每個router到internet可以有最佳路徑
缺點:會出現大量路徑,所以會使用極大的運算資源
3.BGP synchronization:當iBGP學到的route和IGP學到的route一致時,才要使用該route
但若IGP沒學到(未redistribute到IGP),則該route永遠都不會被使用
ps:
其他方法還有bgp confederation(同盟)和bgp route reflectors(路徑反射)
…
PA路徑屬性
有以下幾種
next_hop:指出到達目地的下一站ip位址
as_path:
根據最短的AS_PATH選出最佳路徑
會記錄經過的ASN
可防迴圈,因為可看經過那些AS得知是否發生重覆
local_pref:
數值介於0~4294967295(2^32-1)之間,預設為100
用來調整通告該路徑的權重
propagated within as(只作用在相同as)
origin:值有I(從IGP學的),E(從BGP學的),”?”(未知)
weight:
數值介於0~65535(2^16-1)之間,
預設學到的路徑為0,router本身存入的路徑為32768,
cisco專屬功能,因此不會在bgp update中
MED(multi exit discriminator);
數值介於0~4294967295(2^32-1)之間,預設值為0
讓組織AS告訴相鄰AS,使用那一條最佳route連進組織AS內
propagated between as(只會作用在指定的相鄰AS)
BGP路徑的決定順序
0.next hop可否到達,若無法到達則不使用該路徑
1.weight:越大越優先
2.local_pref:越大越優先
3.originate route(從router本身存入bgp的route):本身存入的路徑大於學到的BGP路徑
4.as path:越小越優先
5.origin:優先順序為I(IGP)>E(EGP)>?(incomplete/undetermined)
6.MED:越小越優先
7.neighbor type:優先順序為eBGP>iBGP
8.IGP next_hop weight:越小越優先
9學到最久的eBGP路徑
10最小的鄰居BGP RID
11最小的鄰居IP
ps:
BGP只允許一條最佳路徑,不同於IGP可擁有多條
但若在步驟8仍未選出最佳路徑,可允許將路徑一起放入route table,放入的數量取決於該設備限制
ex:cisco的maximum-paths指令
常用來決定BGP最佳路徑的4個PA
可以用途分為2類
控制組織的連出路徑(當有多個出口時)
1.weight
2.local_pref
4.as_path
控制組組織的連入路徑
6.MED
ps:
其他較常用來決定BGP最佳路徑的項目
3.從router本身存入bgp的route:
5.origin:
7.neighbor type:BGP預設使用neighbor type決定最佳路徑
8.IGP next_hop weight: