1. 概述
BGPv4(Border gateway protocol Version 4)——邊緣網關協議(定義于RFC1771),是現行因特網的實施标準,就是用來連接自治系統,實現自治系統間的路由選擇功能的。
2. IGP與EGP
所有的路由選擇協議可以被分成IGP和EGP兩種。要了解IGP和EGP的概念,應該首先了解自治系統(AS)的概念。傳統的AS定義(RFC1771):AS是同一個技術管理下的一組路由器,它們使用一種内部網關協議和一緻的度量尺度來對數據包進行AS内部的路由,而使用外部網關協議來對發向其它AS的數據包進行路由選擇。發展到現在,已經允許并且時常采用在一個自治系統AS中使用多個内部網關協議,甚至多個路由選擇的度量标準。所以,現在的自治系統被擴展的定義為:共享同一路由選擇策略的一組路由器。
IGP(Interior gateway protocols)——内部網關協議,定義為在一個自治系統内部使用的路由協議(包括動态路由協議和靜态路由)。IGP的功能是完成數據包在AS内部的路由選擇,或者說,是講述數據包如何穿過本地AS的。RIPv1&v2,IGRP,EIGRP,OSPF,ISIS都是典型的IGP。
EGP(Exterior gateway protocols)——外部網關協議,定義為在多個自治系統之間使用的路由協議。它主要完成數據包在AS間的路由選擇,或者說,講述數據包為了到達目的IP,需要通過哪些AS。BGP4就是一種EGP。
IGP隻作用于本地AS内部,而對其他AS一無所知。它負責将數據包發到主機所在的網段(segment)。EGP作用于各AS之間,它隻了解AS的整體結構,而不了解各個AS内部的拓撲結構。它隻負責将數據包發到相應的AS中,餘下的工作便交給IGP來做。
每個自治系統AS都有唯一的标識,稱為AS号(AS number),由IANA(Internet Assigned Numbers Authority)來授權分配。這是一個16位的二進制數,範圍為1~65535,其中65412~65535為AS專用組(RFC2270)。
3.BGP-4的基本概念
BGP-4是典型的外部網關協議,是現行的因特網實施标準。它完成了在自治系統AS間的路由選擇。可以說,BGP協議是現代整個網絡的支架。
BGP-4在RFC1771中作出了規定,并且還涉及其他很多的RFC文檔。在這一新版本中,BGP開始支持CIDR(Classless interdomains routing)和AS路徑聚合(Aggregation),這種新屬性的加入,可以減緩BGP表中條目的增長速度。
BGP協議是一種距離矢量(Distance vector)的路由協議,但是比起RIP等典型的距離矢量協議,又有很多增強的性能。BGP使用TCP作為傳輸協議,使用端口号179。在通信時,要先建立TCP會話,這樣數據傳輸的可靠性就由TCP協議來保證,而在BGP的協議中就不用再使用差錯控制和重傳的機制,從而簡化了複雜的程度。另外,BGP使用增量的、觸發性的路由更新,而不是一般的距離矢量協議的整個路由表的、周期性的更新,這樣節省了更新所占用的帶寬。BGP還使用“保留”信号(Keepalive)來監視TCP會話的連接。而且,BGP還有多種衡量路由路徑的度量标準(稱為路由屬性),可以更加準确的判斷出最優的路徑。
與傳統的内部路由協議相比,BGP還有一個有趣的特性,就是使用BGP的路由器之間,可以被未使用BGP的路由器隔開。這是因為BGP在獨立的内部路由協議之上工作,所以通過BGP會話連接的路由器能被多個運行内部路由協議的路由器分開。
建立了BGP會話連接的路由器被稱作對等體(peers or neighbors),對等體的連接有兩種模式:IBGP(Internal BGP)和EBGP(External BGP)。IBGP是指單個AS内部的路由器之間的BGP連接,而EBGP則是指AS之間的路由器建立BGP會話。
前面已經提到,BGP是用來完成AS之間的路由選擇的,所以對于BGP來說,每一個AS都是一個原子的跳度。那麼,IBGP又起什麼樣的作用呢?IBGP是用來在AS内部完成BGP更新信息的交換。雖然這種功能也可以由“再分布” (Redistribution)技術來完成——将EBGP傳送來的其他AS的路由“再分布”到IGP中,然後将其“再分布”到EBGP傳送到其他AS。但是相比之下,IBGP提供了更高的擴展性、靈活性和管理的有效性。比如,IBGP提供了選擇本地AS外出點的方式。
IBGP的功能是維護AS内部連通性。BGP規定,一個IBGP的路由器不能将來自另一IBGP路由器的路由發送給第三方IBGP路由器。這也可以理解為通常所說的Split-horizon規則。當路由器通過EBGP接收到更新信息時,它會對這個更新信息進行處理,并發送到所有的IBGP及餘下的EBGP對等體;而當路由器從IBGP接收到更新信息時,它會對其進行處理并僅通過EBGP傳送,而不會向IBGP傳送。所以,在AS中,BGP路由器必須要通過IBGP會話建立完全連接的網狀連接,以此來保持BGP的連通性。如果沒有在物理上實現全網狀(full meshed)的連接,就會出現連通性上的問題(這在大型網絡中會遇到擴展性的問題,将在下面“擴展性”一節中作讨論。)
AS在BGP看來是一個整體,AS内部的BGP路由器都必須将相同的路由信息發送給邊界的EBGP路由器。路由信息在通過IBGP鍊路時不會發生改變,隻有通過EBGP鍊路時,路由信息才會發生變化。在AS内部,通過IBGP連接的路由器都有相同的BGP路由表(BGP路由表(BGP Routing Table)用于存放BGP路由信息,不同于IGP路由表,兩個表之間的信息可以通過“再分布”(Redistribution)技術進行交換)。
4. BGP的路由選擇
BGP的消息報頭由三個部分組成:标記、長度和類型。标記段占16個字節,用于安全檢測和同步檢測;長度段占2個字節,标明整個BGP消息的長度;類型段占一個字節,标明消息的類型。報頭的後面可以不接數據部分,如Keepalive消息。
BGP消息有四種類型:OPEN,UPDATE,NOTIFICATION和KEEPALIVE,分别用于建立BGP連接,更新路由信息,差錯控制和檢測可到達性。
OPEN消息是在建立TCP連接後,向對方發出的第一條消息,它包括版本号、各自所在AS的号碼(AS Number)、BGP标識符(BGP Identifier)、協議參數、會話保持時間(Hold timer)以及可選參數、可選參數長度。其中,BGP标識符用來标識本地路由器,在連接的所有路由器中應該是唯一的。這個标識符一般都使用接口上的最大的IP地址(常常使用loopback接口來防止地址失效)。而會話保持時間,是指在收到相繼的Keepalive或者Update信号之間的最大間隔時間。如果超過這個時間路由器仍然沒有收到信号,就會認為對應的連接中斷了。如果把這個保持時間的值設為0,那麼表示認為連接永遠存在。UPDATE消息由不可到達路由(Withdrawn Route)、路由屬性(Route Attributes)和網絡層可到達性(Network Layer Reachability Information—NLRI)組成。
BGP路由屬性是BGP 路由的核心概念。它是一組參數,在UPDATE消息中被發給連接對等體。這些參數記錄了BGP路由信息,用于選擇和過濾路由。它可以被看作選擇路由的度量尺度(metric)。路由屬性被分為四類:公認強制(Well-known mandatory attributes)、公認自由選擇(Well-known discretionary attributes)、可選傳遞(Optional transitive attributes)和可選非傳遞(Optional nontransitive attributes)。公認的(Well-known)屬性對于所有的BGP路由器來說都是可辨别的;每個UPDATE消息中都必須包含強制(mandatory)屬性,而自由選擇的(discretionary)屬性則是可選的,可包括也可不包括。對于可選的(Optional)屬性,不是所有的BGP工具都支持它。當BGP不支持這個屬性時,如果這個屬性是過渡性的(transitive),則會被接受并傳給其他的BGP對等體;如果這個屬性是非傳遞性的(nontransitive),則被忽略,不傳給其他對等體。
在技術文檔RFC1771定義了1~7号的BGP路由屬性,依次是:1,ORIGIN(産生該路由信息的AS);2,AS_PATH(包已通過的AS集或序列);3,NEXT_HOP(要到達該目的下一跳的IP地址,IBGP連接不會改變從EBGP發來的NEXT_HOP);4,MULTI_EXIT_DISC(本地路由器使用,區别到其他AS的多個出口);5,LOCAL-PREF(在本地AS内傳播,标明各路徑的優先級);6,ATOMIC_AGGREGATE;7,AGGREGATOR。RFC1997還定義了8,COMMUNITY。其中,1、2号屬性是公認強制;3、5、6是公認可選;7、8是可選過渡;4是可選非過渡。這些屬性在路由的選擇中,考慮的優先級是不同的,僅就這8個屬性來說,其中優先級最高的是LOCAL-PREF,接下來是ORIGIN和AS_PATH。
BGP所使用到的路由屬性并不僅僅是這8個,其他的具體内容可以參閱RFC文檔(RFC1771、1996、1997、1966、1863、2283)。
網絡層可到達性(NLRI)包含了<長度,前綴>這樣的二維數組,使用CIDR(Classless Interdomain Routing)技術,來聚合路由,以減緩BGP表的增長速度。
BGP工作流程如下:首先,在要建立BGP會話的路由器之間建立TCP會話連接,然後通過交換OPEN信息來确定連接參數,如運行版本等。建立對等體連接關系後,最開始的路由信息交換将包括所有的BGP路由,也就是交換BGP表中所有的條目。初始化交換完成以後,隻有當路由條目發生改變或者失效的時候,才會發出增量的觸發性的路由更新。所謂增量,就是指并不交換整個BGP表,而隻更新發生變化的路由條目;而觸發性,則是指隻有在路由表發生變化時才更新路由信息,而并不發出周期性的路由更新。比起傳統的全路由表的定期更新,這種增量觸發的更新大大節省了帶寬。路由更新都是由UPDATE消息來完成。UPDATE包含了發送者可到達的目的列表和路由屬性。當沒有路由更新傳送時,BGP會話用KEEPALIVE消息來驗證連接的可用性。由于KEEPALIVE包很小,這也可以大量節省帶寬。在協商發生錯誤時,BGP會向雙方發送NOTIFICATION消息來通知錯誤。
5.BGP與IGP的互操作
BGP路由表是獨立于IGP路由表的,但是這兩個表之間可以進行信息的交換,這就是前面提到的“再分布”技術(Redistribution)。
信息的交換有兩個方向:從BGP注入IGP,以及從IGP注入BGP。前者是将AS外部的路由信息傳給AS内部的路由器,而後者是将AS内部的路由信息傳到外部網絡,這也是路由更新的來源。
把路由信息從BGP注入IGP涉及到一個重要概念——同步(Synchronization)。同步規則,是指當一個AS為另一個AS提供了過渡服務時,隻有當本地AS内部所有的路由器都通過IGP的路由信息的傳播收到這條路由信息以後,BGP才能向外發送這條路由信息。當路由器從IBGP收到一條路由更新信息時,在轉發給其他EBGP對等體轉之前,路由器會對同步性進行驗證。隻有IGP認識這個更新的目的時(即IGP路由表中有相應的條目),路由器才會将其通過EBGP轉發;否則,路由器不會轉發該更新信息。
同步規則的主要目的是為了保證AS内部的連通性,防止路由循環的黑洞。但是在實際的應用中,一般都會将同步功能禁用,而使用AS内IBGP的全網狀連接結構來保證連通性,這樣即可以避免向IGP中注入大量BGP路由,加快路由器處理速度,又可以保證數據包不丢失。要安全的禁用同步,需要滿足以下兩個條件之一:1,所處的AS是單口的,或者說是末端AS(Stub AS)――即是指隻有一個點與外界網絡連接。2,雖然所處的AS是過渡型的(指一個AS可以通過本地AS,與第三方AS建立連接的),但是在AS内部的所有路由器都運行BGP。第2種情況是很常見的,因為AS内所有的路由器都有BGP信息,所以IGP隻需要為本地AS 傳送路由信息。大部分的網絡設備在實現BGP時,都提供了禁用同步的開關。
将IGP路由信息注入BGP,是路由更新的來源。它直接影響到因特網的路由穩定性。信息注入有兩種方式:動态和靜态。
動态注入又分為完全注入和選擇性注入。完全動态注入是指将所有的IGP路由再分布(Redistribution)到BGP中。這種方式的優點是配置簡單,但是可控性弱,效率低。選擇性的動态注入則是将IGP路由表中的一部分路由信息注入BGP(如使用CiscoIOS中的network子命令)。這種方式會先驗證地址及掩碼,大大增強了可控性,提高了效率,可以防止錯誤的路由信息注入。
但是無論哪種動态注入方式,都會造成路由的不穩定。因為動态注入完全依賴于IGP信息,當IGP路由發生路由波動時,不可避免的會影響到BGP的路由更新。這種路由的不穩定會發出大量的更新信息,浪費大量的帶寬。對于這種缺陷,可以使用在邊界處使用路由衰減和聚合(BGP4的新增特性CIDR)來改善。
靜态注入就可以有效解決路由不穩定的問題。它是将靜态路由的條目注入到BGP中去。靜态路由存在于IGP路由表中。由于靜态路由條目是人為的加入的,不會受到IGP波動的影響,所以很穩定。它的穩定性防止了路由波動引起的反複更新。但是,靜态注入也會産生數據流阻塞等問題。
所以,在選擇注入方式時,需要根據網絡的實際狀況來作出選擇。
BGP還提供選擇不同路由策略(Policy)的方法來控制BGP更新信息的數據流。具體的說,可以改變管理距離(Administrative distance)來确定使用哪一個路由協議的更新信息;可以使用BGP過濾(如route maps)來控制更新數據流;還可以用CIDR和地址聚合來改變更新信息;也可以使用路由反射器(Route Reflectors)來改變路由更新信息的轉發方式,從而改變對BGP内部網絡的物理拓撲的全網狀要求。
6.針對大型網絡的擴展特性
前面已經提到,由于IBGP的Split-horizon特性,為了保證連續性,就必須在AS内實現全網狀的(full meshed)連接。但是,對于一個X個節點的網絡來說,全網狀的拓撲要求((X-1)X/2)個連接。當X的值很大的時候,就會帶來過多的花費,以及龐大的配置任務。這是很不經濟和低效的。
為了減少對IBGP鍊路的要求,在RFC1966、RFC1965中,分别提出了路由反射器(Route Reflection)和聯盟(Confederations)技術。
路由器可以配置成路由反射器,路由反射器允許将一個IBGP傳來的BGP路由傳到另一個IBGP鍊路上。這樣就緩解了對全網狀拓撲的需求。但是并不是所有情況下,路由反射器都是一種最佳選擇,因為這樣會加大作為反射器的路由器的系統開銷,從而減慢處理速度,甚至造成數據丢失。而且,如果路由反射器出現問題,那麼所有的連接都會被中斷。為了防止中斷出現,增加冗餘度,一般可以配置多個路由反射器。
聯盟則是将AS再劃分成子AS(sub AS),在sub AS中運行IBGP,使用全網狀結構;而在sub AS之間使用EBGP,這樣也可減少對IBGP連接的需求。聯盟同樣也存在缺陷,如路由選擇等。所以和路由反射器一樣,一般隻在存在很多IBGP連接時才會使用聯盟技術。
7.BGP的使用
BGP的功能是在各AS之間完成路由選擇。它主要用于ISP(Internet Service Provider)之間的連接和數據交換。
但是,并不是所有情況下BGP都适用。使用BGP會大大增加路由器的開銷,并且大大增加規劃和配置的複雜性。所以,使用BGP協議需要先做好需求分析。
一般來說,如果本地的AS與多個外界AS建立了連接,并且有數據流從外部AS通過本地AS到達第三方的AS,那麼可以考慮使用BGP來控制數據流。
如果本地AS與外界隻有一個連接(通常說的stub AS),而且并不需要對數據流進行嚴格控制,那就不必使用BGP協議,而可以簡單的使用靜态路由(Static route)來完成與外部AS的數據交換。另外,硬件和線路的原因也會影響到BGP的選擇。如前所說,使用BGP會加大路由器的開銷,并且BGP路由表也需要很大的存儲空間,所以當路由器的CPU或者存儲空間有限時,或者帶寬太小時,不宜使用BGP路由協議。
8.總結
BGP的主要功能是連接各個AS,提供AS之間的信息交換。各個BGP系統之間交換路由信息,來保證得到一個無環路的路由結構。BGP還提供了在AS的水平上的路由策略的選擇方式,以優化路由選擇。
作為整個互聯網的整體支架,BGP提供了一個功能強大的連接AS的工具,但是它在使用中也存在一定的局限性,所以在決定使用之前一定要作認真分析,以确定是否使用BGP以及具體實施方案。
分享不易,如果對你有幫助請點個贊或者關注,謝謝!!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!