前提概念
AS
AS(Autonomous System):自治系統/路由選擇域
AS是指由同一技術機構管理,使用同一選路策略的一些路由器的集合。
一般來說,一個公司、一個企業、一所大學就可以說是一個自治系統
AS內部使用IGP來計算和發現路由,同一個AS內部的路由器之間是相互信任的,因此IGP的路由計算和信息泛洪完全處於開放狀態,人工干預很少。
不同的AS之間,使用EGP來進行通信。BGP作爲EGP中的一種協議,用於在AS之間進行路由控制和優先
ASN
ASN:自治系統號
一個自治系統將會分配一個全局的唯一的16位號碼,有時我們把這個號碼叫做自治系統號(ASN)。
自治系統號由IANA分配,範圍爲:1-65535,最開始大小爲2B(0~65535)。
自治系統號分爲(可類比共有IP地址、私有IP地址)
公有ASN:1~64511
私有ASN:64512~65535
後來由於不夠用,長度升級到了4B(45536~4294967295)
IGP與EGP
IGP:內部網關路由協議:
包含有:OSPF、RIP、IS-IS等
注重於發現和計算路由。執行在AS內部
EGP:外部網關路由協議:
包含有:EGP(目前不使用)、BGP:外部網絡路由協議代表(目前AS間路由協議或者說的EGP協議一般都指的是BGP協議)
由於BGP的前身EGP由於設計簡單,只能簡單的傳遞路由信息,不會對路由進行優選,會造成環路等問題,所以就有了BGP代替了EGP。
BGP的基本概述
基本作用
)
AS之間的路由我們可以將一個AS看成一個大路由器
BGP協議特點
- 可靠的路由更新機制(有變化才發)(沒有組播,只有單播的連接。建立在TCP之上。只有在路由信息發生更新的時候纔會發送增量路由。不會釋放掉TCP連接:keep alive機制,保證TCP連接不會斷掉)(注意:建立BGP連接首先要建立TCP連接)
- 豐富的度量方式
- 避免環路
- 路由附帶屬性信息(AS之間的路由器是不完全互相信任的,爲了實現路由按需求控制和優選,BGP設置了諸多屬性)
- 支持CIDR、VLSM
- 豐富的路由選擇和路由控制
- 增量更新計算
- 可以跨越多跳路由器建立鄰居關係
BGP鄰居關係和配置
建立TCP連接
BGP協議被設計運行在AS之間傳遞路由,AS之間是廣域網鏈路,數據包在廣域網上傳遞是可能出現不可預測的鏈路擁塞或丟失等情況,因此BGP使用TCP作爲其承載協議來保證可靠性。
相當於TCP連接一直存在,BGP通過Keep alive機制(不斷、定時發送keepalive報文)時TCP連接不會斷掉
BGP使用TCP封裝建立鄰居關係,端口號爲179,TCP採用單播建立連接,因此BGP協議並不像RIP和OSPF一樣使用組播發現鄰居。單播建立連接也使BGP只能手動指定鄰居。(配置的時候需要自己手動指定鄰居)
先看起BGP的一端發起TCP的連接。
TCP連接(三次握手)簡單介紹:
一下圖爲例:RTB向RTA發起建立TCP連接請求,RTA收到之後,返回一個連接請求和確認消息,RTB收到之後返回一個確認消息。連接建立完成。
)
BGP鄰居類型
)
BGP鄰居類型分爲兩種:
EBGP(External BGP):運行在不同AS之間的BGP路由器建立的鄰居關係爲EBGP鄰居關係
IBGP(Inter BGP):運行在相同AS內的BGP路由器建立的鄰居關係爲IBGP鄰居關係
EBGP只用於不同AS之間傳遞路由。如圖,AS 100內的RTB與BTC分別從AS 200與AS 300學習到不同的路由,怎麼實現AS 200與AS 300之間路由在AS 100內的交換?
在AS 100內實現將學到的AS 200和AS 300路由進行交換,可以在拓撲中的RTB與RTC路由器上將BGP的路由引入IGP協議(圖中爲OSPF協議),再將IGP協議的路由在RTB與RTC路由器上引入回BGP協議,實現AS 200與AS 300路由的交換。
上述方法存在以下幾個缺點:
公網上BGP承載的路由數目非常大,引入IGP協議後,IGP協議無法承載大量的BGP路由;
BGP路由引入IGP協議時,需要做嚴格的控制,配置複雜,不易維護;
BGP攜帶的屬性在引入IGP協議時,由於IGP協議不能識別,可能會丟失。
因此我們用IBGP來鄰居關係來解決上述問題:如上圖,因爲BGP使用TCP作爲其承載協議,所以可以跨設備建立鄰居關係。如圖所示,RTB與RTC之間建立IBGP鄰居關係,並各自將從其他AS學到的路由傳遞給對端,實現BGP路由在AS內的傳遞。
注意:建立IBGP鄰居關係建立一般使用Loopback口IP地址,因爲Loopback口爲邏輯接口,且不會down,非常穩定,這樣鄰居關係一直處於穩定狀態。EBGP鄰居關係建立使用直連接口IP地址。
BGP簡單鄰居關係配置
)
第一步
搭建拓撲,規劃網段並配置各個接口IP地址。
以RTB舉例:
[RTB]int g0/0/0
[RTB-GigabitEthernet0/0/0]ip ad 10.1.24.2 24
[RTB-GigabitEthernet0/0/0]int g0/0/1
[RTB-GigabitEthernet0/0/1]ip ad 10.1.12.2 24
[RTB-GigabitEthernet0/0/1]int lo0
[RTB-LoopBack0]ip ad 22.22.22.22 32
[RTB-LoopBack0]quit
[RTB]
第二步
AS 100內部使用IGB:OSPF協議通信。配置OSPF協議
注意:不要忘記宣告Loopback接口所在網段。
以RTB爲例其餘路由器相同:
[RTB]ospf
[RTB-ospf-1]a 0
[RTB-ospf-1-area-0.0.0.0]network 22.22.22.22 0.0.0.0
[RTB-ospf-1-area-0.0.0.0]network 10.0.12.0 0.0.0.255
驗證RTB環回口是否能與RTC環回口通信,若正確則進行下一步:
<RTB>ping -a 22.22.22.22 33.33.33.33
PING 33.33.33.33: 56 data bytes, press CTRL_C to break
Reply from 33.33.33.33: bytes=56 Sequence=1 ttl=254 time=40 ms
Reply from 33.33.33.33: bytes=56 Sequence=2 ttl=254 time=30 ms
Reply from 33.33.33.33: bytes=56 Sequence=3 ttl=254 time=30 ms
Reply from 33.33.33.33: bytes=56 Sequence=4 ttl=254 time=30 ms
Reply from 33.33.33.33: bytes=56 Sequence=5 ttl=254 time=30 ms
--- 33.33.33.33 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 30/32/40 ms
第三步
配置BGP鄰居關係:
1. 配置Router ID:標識路由器
2. 配置EBGP鄰居關係:AS之間傳遞路由
以RTB、RTD之間建立EBGP關係爲例:
[RTB]
[RTB]bgp 100
[RTB-bgp]peer 10.1.24.4 as-number 200 //BGP鄰居關係的類型主要靠配置的AS號區別,peer關鍵字後面是對端鄰居的接口IP地址,as-number後面是鄰居路由器所在的AS號,AS號相同則爲IBGP鄰居關係;AS號不同,則爲EBGP鄰居關係。
[RTD]
[RTD]bgp 200
[RTD-bgp]peer 10.1.24.2 as-number 100
第四步
配置IBGP鄰居關係:
本例中RTB和RTC建立IBGP鄰居關係(本例使用邏輯接口建立IBGP鄰居關係):
[RTB]
[RTB]bgp 100
[RTB-bgp]peer 33.33.33.33 as-number 100 //AS號相同則爲IBGP鄰居關係
[RTB-bgp]peer 33.33.33.33 connect-interface LoopBack 0
[RTC]
[RTC]bgp 100
[RTC-bgp]peer 22.22.22.22 as-number 100
[RTC-bgp]peer 22.22.22.22 connect-interface LoopBack 0
[RTC-bgp]
額外提供直連接口配置方法:
[RTB-bgp]peer 10.1.12.1 as-number 100
查看鄰居關係display bgp peer
:
以RTB爲例:
[RTB]display bgp peer
BGP local router ID : 2.2.2.2
Local AS number : 100
Total number of peers : 2 Peers in established state : 2
Peer V AS MsgRcvd MsgSent OutQ Up/Down State Pre
fRcv
10.1.24.4 4 200 41 42 0 00:39:16 Established 0
33.33.33.33 4 100 37 37 0 00:35:27 Established 0
注意:此時BGP鄰居關係已經建立,但是由於沒有路由引入所以沒有路由表,查看BGP路由表命令:display bgp routing-table
。路由引入命令下一遍文章介紹
報文類型
BGP通過報文的交互完成鄰居建立、路由更新等操作,共有Open、Update、Notification、Keepalive和Route-refresh等5種報文類型。
Open報文:是TCP連接建立後發送的第一個報文,用於建立BGP鄰居之間的連接關係。BGP鄰居在接收到Open報文並協商成功後,將發送Keepalive報文確認並保持連接的有效性。確認後,BGP鄰居間可以進行Update、Notification、Keepalive和Route-refresh報文的交換。
Keepalive報文:BGP路由器會週期性的向鄰居發出Keepalive報文,用來保持連接的有效性。(該報文內容少,無意義,只是爲了保證連接不中斷)
Update報文:用於在BGP鄰居之間交換路由信息。Update報文可以發佈多條屬性相同的可達路由信息,也可以撤銷多條不可達路由信息。
Notification報文:當BGP路由器(BGP speaker)檢測到錯誤狀態時,就向鄰居發出Notification報文,之後BGP連接會立即中斷。
Route-refresh報文:Route-refresh用於在改變路由策略後請求對等體重新發送路由信息。
鄰居關係的建立
lBGP路由器報文交互過程:
- Idle狀態是BGP初始狀態。在Idle狀態下,BGP路由器拒絕鄰居發送的連接請求。只有在收到本設備的Start事件後,BGP路由器纔開始嘗試與其鄰居進行TCP連接,並轉至Connect狀態。
- 在Connect狀態下,BGP路由器啓動連接重傳定時器(Connect Retry),等待TCP完成連接。
- 如果TCP連接成功,那麼BGP路由器向鄰居發送Open報文,並轉至OpenSent狀態。
- 如果TCP連接失敗,那麼BGP路由器轉至Active狀態。
- 如果連接重傳定時器超時,BGP路由器仍沒有收到鄰居的響應,那麼BGP路由器繼續嘗試與其鄰居進行TCP連接,停留在Connect狀態。
在Active狀態下,BGP路由器總是在試圖建立TCP連接。
- 如果TCP連接成功,那麼BGP路由器向鄰居發送Open報文,關閉連接重傳定時器,並轉至OpenSent狀態。
- 如果TCP連接失敗,那麼BGP路由器停留在Active狀態。
- 如果連接重傳定時器超時,BGP路由器仍沒有收到鄰居的響應,那麼BGP路由器轉至Connect狀態。
-
在OpenSent狀態下,BGP路由器等待鄰居的Open報文,並對收到的Open報文中的AS號、版本號、認證碼等進行檢查。
-
如果收到的Open報文正確,那麼BGP路由器發送Keepalive報文,並轉至OpenConfirm狀態。
-
如果發現收到的Open報文有錯誤,那麼BGP路由器發送Notification報文給鄰居,並轉至Idle狀態。
-
在OpenConfirm狀態下,BGP路由器等待Keepalive或Notification報文。如果收到Keepalive報文,則轉至Established狀態,如果收到Notification報文,則轉至Idle狀態。
-
在Established狀態下,BGP路由器可以和鄰居交換Update、Keepalive、Route-refresh報文和Notification報文。