1. 什么是BGP?
邊界網關(guan)協(xie)議(Border Gateway Protocol,BGP)是(shi)一種(zhong)路由選擇協(xie)議,用于(yu)在路由選(xuan)擇域之間交(jiao)換(huan)網絡層可達(da)性(xing)信息。路由選(xuan)擇域經常被(bei)稱為自治(zhi)系統(tong)AS(Autonomous System)。
2. 為什么(me)需(xu)要(yao)BGP?
與BGP相對的路(lu)由選擇(ze)協議是IGP(Interior Gateway Protocol,內(nei)部網關協議),用(yong)于在路由選(xuan)擇域(yu)內交(jiao)換網絡層可(ke)達性信息。
IGP有:
- 距離矢量協議,例如路由信息協議(Routing Information Protocol, RIP)。
- 鏈路狀(zhuang)態(tai)協議,例如(ru)開放式最短路徑優先(Open Shortest Path First, OSPF)協議和中(zhong)間系統到中(zhong)間系統(Intermediate System to Intermediate System, IS-IS)協(xie)議。
上述(shu)協議的共同(tong)目標(biao)是解(jie)決(jue)路(lu)由選擇域(yu)內路(lu)徑最優化的問(wen)題,而不(bu)同(tong)的域(yu)通常(chang)需(xu)要不(bu)同(tong)的路(lu)由選擇策(ce)略和管理策(ce)略,BGP的目標(biao)是提供策(ce)略控制能力(li)和可擴展性。
根據BGP作用(yong)域的不(bu)同(tong)可分(fen)為(wei)IBGP和EBGP,當BGP運行于同(tong)一AS內部時(shi),為(wei)IBGP(Internel BGP,內部邊界(jie)網關(guan)協(xie)(xie)議),當BGP運行于不(bu)同(tong)AS之間時(shi),稱(cheng)為(wei)EBGP(Externel BGP,外部邊界(jie)網關(guan)協(xie)(xie)議)。

3. BGP的(de)工作方式
Speaker角色:發(fa)送(song)BGP報文(wen)的路由設備稱為BGP發(fa)言者(Speaker),主要工(gong)作為接收(shou)或產生新的路由信息(xi),并(bing)發(fa)布(Advertise)給其它(ta)BGP Speaker。
BGP的運行方(fang)式是(shi)通過報文(wen)實現的(de),共有五種報文(wen)類型。
- Open:TCP連(lian)接建立(li)后發送的第一個報文(wen),用于建立(li)BGP對等體之間的連(lian)接關(guan)系;
- Update:用于在對等體之間(jian)交(jiao)換路由信息(xi)。
- Notification:檢測到錯誤(wu)狀態時,就向對等體(ti)發出Notification報文,之后BGP連接會立即中斷。
- Keepalive:BGP會周期性地(di)向(xiang)對等體發出Keepalive報文,用來保持連接的有效性。
- Route-refresh:Route-refresh報文用(yong)來(lai)請求(qiu)對等體重新發送所有(you)的可(ke)達(da)路由信息(xi)。
整體流(liu)程(cheng)圖:
- BGP傳輸層協議是基于(yu)TCP實現的,在建立BGP對等體之(zhi)前,會進行TCP連(lian)接;
- BGP鄰居間(jian)會通(tong)過Open報文協商相(xiang)關參數,建立起BGP對(dui)等(deng)體關系。
- 建立連接后,BGP鄰居之(zhi)間(jian)交換(huan)整個BGP路由表。
- BGP會(hui)發(fa)送Keepalive報文(wen)(wen)來(lai)維(wei)持鄰居間的BGP連接,BGP協(xie)議不會(hui)定期(qi)更(geng)新(xin)路(lu)(lu)由(you)(you)表,但(dan)當BGP路(lu)(lu)由(you)(you)發(fa)生變化時,會(hui)通(tong)過Update報文(wen)(wen)增(zeng)量地更(geng)新(xin)路(lu)(lu)由(you)(you)表。
- 當BGP檢測到網(wang)絡(luo)中的錯誤(wu)狀態(tai)時(shi)(例如(ru)收到錯誤(wu)報文時(shi)),BGP會發送Notification報文進(jin)行報錯,BGP連接會隨即中斷。


BGP的有限狀態機總共有六種,對等體(ti)建立過程中,常見的有Idle、Active、Established。
- Idle狀態下,BGP拒絕任何進入(ru)的連(lian)接請求,是BGP初始狀態。
- Connect狀態(tai)下,BGP等待TCP連接的建立完(wan)成后再(zai)決(jue)定(ding)后續操作(zuo)。
- Active狀(zhuang)態(tai)下,BGP將嘗試進行(xing)TCP連接(jie)的(de)建立,是BGP的(de)中間狀(zhuang)態(tai)。
- Open-Sent狀態下,BGP等(deng)待對(dui)等(deng)體(ti)的Open報文(wen)。
- Open-Confirm狀態下,BGP等待一(yi)個Notification報文(wen)或Keepalive報文(wen)。
- Established狀態下,BGP對等體間可以交換Update報(bao)(bao)文(wen)、Route-refresh報(bao)(bao)文(wen)、Keepalive報(bao)(bao)文(wen)和Notification報(bao)(bao)文(wen)。
BGP對(dui)等體(ti)雙方的狀態(tai)必須都為Established,BGP鄰居關系(xi)才能成立,雙方通過(guo)Update報(bao)文交換路由信息。

