BGP的起源
不同自治系統(路由域)間路由交換與管理的需求推動了EGP的發展,但是EGP的算法簡單,無法選路,從而被BGP取代。
IGP:自治系統內部協議,ospf,rip,is-is,發現和計算路由信息
EGP:自治系統外部協議,傳遞路由信息,缺點:只負責傳路由信息,不進行路由控制。
與其他協議的區別:作用在AS之間,IGP是自治系統學習路由信息和計算路由信息,BGP傳遞路由信息的,本身沒有學習和計算路由表的功能。
- BGP是自治系統外部路由協議,用來在AS之間傳遞路由信息。
- 路徑矢量路由協議(DV算法),從設計上避免了環路的發生(AS編號)
- 由TCP協議承載,端口號為179
- 支持CIDR(超網)和路由聚合
- 路由附帶豐富的屬性
- 只發送增量路由更新
- 路由過濾和路由策略

- BGP發言者(BGP Speaker):發送BGP消息的路由器稱為BGP發言者(起了BGP協議就是BGP發言者)
- BGP對等體(BGP peer):相互交換消息的BGP發言者互稱為BGP對等體
- EBGP對等體:處於不同AS的BGP對等體為EBGP對等體,通常情況下EBGP對等體是物理上直連。(RTA和RTB、RTD和RTE)

RTA發送路由(100.10.1.0/24)給RTB,RTB給RTD發,如果不考慮其他因素,RTD會講路由發給RTE。。RTE發送數據包給RTA后,到RTD上后查BGP路由表,有路由,但是下一跳是RTB,再查RTD的IGP路由表沒有下一跳給RTC,但是RTC沒有100.10.1.0的路由,所以數據包被丟棄。為什么RTC學不到路由呢?因為BGP是單播傳的,從RTB發給RTC,發現目的地址不是自己,而是RTD的,根本就不會解包

BGP同步是指IBGP和IGP之前的同步,目的是為了防止在某種情況下轉發"黑洞"的出現。。
開啟同步后,只有在IGP也知道這條IBGP路由時,才會被發布給EBGP對等體。
Open:用於建立BGP對等體之間的連接關系(ospf的hello包),Open報文只發一次(建立鄰居關系)(類型1)
Keepalive:周期性的向BGP對等體發出Keepalive消息,用來保持連接的有效性和對收到的Open消息進行回應,(保活的)發送周期60s,老化時間180s(類型4)
Update:攜帶的是路由更新(刪減、增加)信息 (NLRI(更新的),Withdraw(刪除該路由))(類型2)
Notification:當BGP檢測到錯誤狀態時,就向對等體發出Notifition消息,之后BGP連接會立即被關閉。(類型3)
Route-refresh:用於在改變路由策略后請求對等體重新發送路由信息(類型5)
refresh bgp all import|export ipv4 //BGP路由更新觸發命令
open消息中的hold time是根據keepalive時間來的,如果兩邊Hold time時間不一致,會依據小的一邊。

- Idle狀態(空閑狀態):此狀態為初始狀態,不接受任何BGP連接,等待start事件產生。如果start事件(TCP連接)產生則系統開啟ConnectRetry定時器,向鄰居發起TCP連接,並將狀態改為Connect。
- Connect狀態(連接狀態):在Connect狀態,系統會等待TCP的連接建立完成。如果TCP狀態為Established(已完成),則拆除ConnectRetry定時器,並發送Open信息,將狀態變為Opensent;如果TCP建立失敗則重置ConnectRetry定時器,轉為Active狀態。如果定時器超時,重新連接。
- Active狀態(活躍狀態):如果已經啟動事件但TCP未完成,則處於Active狀態
- Open-sent狀態(Open消息已發送):此狀態 表明系統已經發出Open消息,在等待BGP鄰居發給自己的Open消息。
- Open-confirm(Open消息確定):此狀態表明系統已經發出keepalive消息,並等待BGP鄰居的Keepalive消息。
- Established狀態(連接建立):如果處於Established狀態,則說明BGP連接建立完成,可以發送Update消息交換路由信息。

配置router ID(如果運行了ospf兩個ID號盡量保持一致)
默認情況下建立TCP的接口是出接口,當建立BGP連接的路由器存在冗余鏈路時,如果路由器上的接口發生故障,建立tcp連接的源接口就會發生改變,導致BGP需要建立tcp連接。
所以將tcp的源地址配置成loopback接口,而真實的tcp連接的源地址就是出接口,所以要指定建立tcp連接的源接口:(用loopback建立鄰居關系時)
[RT2-bgp]peer 4.4.4.4 connect-interface loo 0 (只需要在一邊配,tcp是單向認證)
當建立EBGP關系時,非直連,用loopback口建立鄰居關系時(不建議)
[RT1-bgp]peer 2.2.2.2 ebgp-max-hop 2
[RT2-bgp]peer 1.1.1.1 ebgp-max-hop 2 //改變EBGP連接的最大路由器跳數
[RT1-bgp]peer 2.2.2.2 connect-interface loo 0 //指定建立鄰居的源接口
[RT1-bgp]netw 1.1.1.1 32 //公布的是路由表中的路由,且屬性必須是IGP,sys
[RT1-bgp]dis bgp routing-table
BGP Local router ID is 1.1.1.1
Status codes: * - valid(有效), ^ - VPN best, > - best(最好的), d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin(屬性) : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
[RT2-bgp]peer 4.4.4.4 next-hop-local //將發出的路由的下一跳指向本地(從EBGP學來的路由發給IBGP時)
[RT2-bgp]import-route ospf //路由引入(引入的路由相當於本地通告的路由)
- 被引入的路由必須存在於本地IP路由表中且為有效路由
- 通過引入方式的路由的ORIGIN屬性Incomplete
- 可以通過策略來對引入的路由進行過濾及改變路由屬性
- 當引入ospf和rip時,引入前的cost作為BGP的med值,也就是開銷。
[RT2-bgp]synchronization //打開同步(默認是關閉的)
BGP路由屬性是路由信息所攜帶的一組參數,它對路由進行了進一步的描述,表達了每一條路由的各種特性。
- 公認必遵屬性(必須遵守):所有BGP路由器都必須能夠識別這種屬性,且必須存在於Update消息中。ORIGIN屬性、AS_PATH屬性(選路、防環)、NECT_HOP屬性。
- 公認可選屬性:所有BGP路由器都可以識別,但不要求必須存在於Update消息中,可根據情況來選擇。LOCAL_PREF屬性、ATOMIC_AGGREGATE屬性.
- 可選傳遞屬性:在AS之間具有可傳遞性的屬性。BGP路由器可以不支持此屬性,但它仍然會接收帶由此屬性的路由,並通告給其他對等體。COMMUNITY屬性、AGGREGATE屬性(聚合者)。
- 可選非傳遞屬性:如果BGP路由器不支持此屬性,該屬性被忽略,且不會通告給其他對等體。MED屬性、CLUSTER_LIST屬性(簇列表)、ORIGINATOR_ID屬性(起始者ID)。
傳遞:必遵的三個,community(團體)、聚合(aggregate)
1、AS_PATH屬性(防環):只給EBGP鄰居發的時,才修改該屬性。
- 公認必遵
- 是路由到底一個目的地所經過的一系列自治系統號碼的有序列表
- 當BGP將一條路由通告到其他AS時,便會把自己的AS號添加在AS_PATH列表的最前面(只看AS的個數,不考慮AS的大小)
- AS個數越少越好
- AS可以防環
- 普通的有兩種記錄類型:AS_SEQUENCE(序列號),AS_SET(聚合防環的)
3、ORIGIN屬性:定義路由信息的來源,標記一條路由是怎么成為BGP路由的
a.IGP:表明路由信息產生於AS內部,一般是聚合路由或者通過Network命令引入的路由,標識符:"i"
b.EGP:路由信息是通過EGP協議引入的(已淘汰)標識符:"e"
c.Incomplete:路由信息是通過其他方式學來的,一般是通過Import引入的IGP路由或者靜態路由。標識符"?"
4、LOCAL_PREF屬性:(數據怎么出去)只能在自治系統內傳遞(離開AS域)

- 公認可選屬性,非傳遞屬性,只能在本AS內傳遞
- 用於AS內IBGP鄰居選擇離開本AS時最佳路由,它表明BGP路由器的優先級
- 僅在IBGP對等體之間交換,不傳遞或通告給其他EBGP對等體
- 值越大,優先級越高,默認情況下LOCAL_PREF屬性值為100
5、MED屬性:(數據怎么進來)只在相鄰的EBGP之間傳遞,只能比較來自同一自治系統的MED。(進入AS域)

- 可選非傳遞屬性 (運用在AS之間的那台路由器上 )
- 相當於IGP路由協議使用的度量值metric,當一個AS有多個入口點時,用於判斷流量進入AS時的最優路徑
- 僅在相鄰兩個AS之間傳遞(EBGP),收到此屬性的AS一方不會再將其通告給任何其他第三方AS。
- 值越小越優
6、Preferred_value屬性(首選項值)(本地屬性)


BGP的路由優選:(選路前提是兩條路由都是最優的,有可比性)
- 首先丟棄下一跳(NEXT_HOP)不可達的路由
- 優選Prefrerred_value值最大的路由
- 優選本地優先級(LOCAL_PREF)最高的路由
- 優選生成路由(聚合路由,發布的、import)
- 優選AS路徑(AS_PATH)最短的路由
- 依次選擇ORIGIN屬性為IGP、EGP、Incomplete的路由
- 優選MED值最小的路由
❤IGP是通過協議自身定義的路由算法,對到達同一目的地址的不同路由,將度量值相等的路由進行負載分擔
❤BGP本身並沒有路由計算的算法,但BGP有豐富的選路原則,可以在對路由進行一定的選擇后,有條件地進行負載分擔。

