內(nèi)部BGP協(xié)議(iBGP)的主要作用是向你的內(nèi)部路由器提供更多信息。上期關(guān)于BGP的講座中我們關(guān)注的是stub配置,即單獨(dú)一臺(tái)路由器為一個(gè)自治系統(tǒng)(AS)內(nèi)的所有BGP會(huì)話服務(wù)。這次我們將深入研究BGP的實(shí)際應(yīng)用:iBGP和怎樣實(shí)現(xiàn)多宿主(multi-homing)網(wǎng)絡(luò)。
如果你準(zhǔn)備又增加一臺(tái)BGP路由器,并把它與另一個(gè)對(duì)等互聯(lián)伙伴相連,那么你的網(wǎng)絡(luò)并不會(huì)得到多少改善,除非你自治系統(tǒng)的內(nèi)部網(wǎng)關(guān)協(xié)議(IGP)知道面對(duì)這種情況該做些什么。這時(shí)有幾種做法,而其中之一是嚴(yán)重錯(cuò)誤的。你不能簡單的把所有的Internet路由信息都發(fā)送給自治系統(tǒng)內(nèi)運(yùn)行內(nèi)部網(wǎng)關(guān)協(xié)議的路由器并指望得到最好的結(jié)果。實(shí)際上這樣做是很可笑的,因?yàn)橥ǔSPF的運(yùn)算過程會(huì)讓你的路由器死機(jī)。同樣,你必須讓一臺(tái)邊界路由器收到的路由信息也讓另一臺(tái)邊界路由器收到,但是除非兩臺(tái)邊界路由器都采用BGP協(xié)議,否則信息就會(huì)丟失。 解決辦法是在你的AS內(nèi)所有的邊界路由器之間建立一個(gè)內(nèi)部BGP對(duì)等互聯(lián)。傳統(tǒng)上明智的做法是,你的網(wǎng)絡(luò)要包含一個(gè)運(yùn)行iBGP的核心網(wǎng)絡(luò)(或者叫骨干網(wǎng)),并且在內(nèi)網(wǎng)采用的IGP協(xié)議(OSPF或其它)路由中指定一條缺省路由。只要內(nèi)部網(wǎng)關(guān)協(xié)議將數(shù)據(jù)包傳送給主干網(wǎng)絡(luò),那里的路由器就能選擇最佳的出口策略。 主干網(wǎng)絡(luò)可能十分復(fù)雜,并且BGP中提供的AS-Path屬性也不足以保證不會(huì)導(dǎo)致路由環(huán)回。這表示iBGP不會(huì)廣播任何它從對(duì)等互聯(lián)伙伴那里獲得的路由信息,這似乎令iBGP無用武之地?并不盡然:這一限制意味著每臺(tái)iBGP路由器都必須與其它所有iBGP路由器建立對(duì)等互聯(lián)關(guān)系。這也被稱為一個(gè)全網(wǎng)狀(full mesh)結(jié)構(gòu),但實(shí)現(xiàn)起來同樣困難重重。 當(dāng)網(wǎng)絡(luò)變得足夠龐大時(shí),每增添一臺(tái)BGP/iBGP會(huì)話路由器都意味著你必須為之與其它每一臺(tái)路由器都建立一個(gè)連接。為解決這些問題,我們的裝備庫為你提供了幾樣很便利的工具:路由反射器(route reflector)和聯(lián)盟(confederation)。 謝天謝地,這些術(shù)語都可以望文生義。一個(gè)路由聯(lián)盟其實(shí)就是一個(gè)單獨(dú)的內(nèi)部AS,其概念是將內(nèi)部AS分解成幾個(gè)小系統(tǒng),并且利用外部BGP把它們連接在一起。每個(gè)內(nèi)部小系統(tǒng)仍然是全網(wǎng)狀(full mesh)結(jié)構(gòu),不過它的規(guī)模是你可以控制的程序。要實(shí)現(xiàn)路由聯(lián)盟,配置起來相當(dāng)麻煩,所以大多數(shù)人都選擇另一種方案:路由反射器,這是一臺(tái)iBGP路由器,它可以向其它iBGP路由器廣播路由信息。具體做法是先創(chuàng)建幾個(gè)iBGP路由器簇(cluster),然后把它們與一臺(tái)路由反射器相連。 反射器并不會(huì)發(fā)送每一條路由信息,而只向其對(duì)等互聯(lián)伙伴發(fā)送最佳的路徑信息。當(dāng)采用路由反射器時(shí),存在一個(gè)收斂的問題,稱之為“收斂”意思是網(wǎng)絡(luò)中每一臺(tái)路由器都有相同的信息,或者更準(zhǔn)確地說,它們都對(duì)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)有一致的看法。 同步是BGP協(xié)議中一個(gè)重要的概念,特別是當(dāng)你處于一個(gè)在對(duì)等互聯(lián)伙伴之間傳送數(shù)據(jù)流的主干AS時(shí)。假如我們有兩臺(tái)路由器連接兩個(gè)AS對(duì)等互聯(lián)伙伴,同時(shí)建立了一個(gè)多跳(multi-hop)iBGP網(wǎng)絡(luò),那么我們就擁有兩臺(tái)路由器(A和B),它們與其它AS采用EBGP相連,而在它們之間采用iBGP,不過是間接的。如果一條關(guān)于如何到達(dá)路由器A相連的對(duì)等網(wǎng)絡(luò)的路由信息被發(fā)送到iBGP網(wǎng)狀結(jié)構(gòu)中,并且隨后路由器B又把它發(fā)送給B的伙伴網(wǎng)絡(luò),那么就會(huì)產(chǎn)生路由黑洞,為什么呢?這是因?yàn)槁酚善鰾另一側(cè)的對(duì)等互聯(lián)伙伴會(huì)立刻開始向A另一側(cè)的伙伴發(fā)送數(shù)據(jù),但是我們的iBGP可能還沒有收斂,一些內(nèi)部iBGP路由器也許還不知道通往A另一側(cè)AS的路徑。 當(dāng)你在一臺(tái)路由器上啟用了同步,就意味著在用到那些路由信息之前,IGP(這種情況下是iBGP)和EGP必須擁有同樣的信息。通道AS的基本設(shè)計(jì)原則是,你只有在能夠向某條路由發(fā)送數(shù)據(jù)時(shí),才能廣播這條信息。 現(xiàn)在有幾種不同的方法可以實(shí)現(xiàn)iBGP和同步。我們可以打開路由器上的同步選項(xiàng),等候IGP獲取通往目的地的路由信息,然后再向?qū)Φ然ヂ?lián)伙伴廣播。另一種方法是只要采用全網(wǎng)狀結(jié)構(gòu),這樣iBGP收斂就不成問題。顯然,當(dāng)網(wǎng)絡(luò)主干必須升級(jí)時(shí)是不會(huì)發(fā)生這種事的:它會(huì)提供諸如路由反射器等工具來打破iBGP的全網(wǎng)狀結(jié)構(gòu)。 如果實(shí)現(xiàn)不了同步,那么真正的解決方案是利用路由遞歸(recursion)。遞歸路由查找程序利用BGP的next-hop屬性,真正找到一條不同的路由。IGP可以通過目的網(wǎng)絡(luò)而不是AS-Path來決定向何處發(fā)送信息。即使iBGP還未收斂,路由器仍然知道如何到達(dá)目的網(wǎng)絡(luò),因?yàn)槁酚尚畔⒋嬖谟诎l(fā)送它的路由器中,而這臺(tái)路由器知道下一跳(next-hop)在哪里。 我們知道路由并不僅僅取決于協(xié)議,因?yàn)槲覀兪遣僮髡撸覀冇欣碛筛淖冞\(yùn)作方式。由于AS-Path長度是用于選擇路由的唯一外部因素,所以BGP受到了一定限制。然而這也表示BGP還有幾種屬性可以讓你改變數(shù)據(jù)包所挑選的路徑而無需插手BGP路由選擇算法,你還應(yīng)該知道BGP的另外幾種屬性。 MED,即多出口標(biāo)識(shí)(MultiExit Discriminator),用于指示首選路徑。MED本質(zhì)上是一個(gè)weight值,值最低的路徑獲勝。如果你有兩種路徑選擇,那么這是一種很簡單的方法可以確定你更喜歡的入口點(diǎn)。MED屬性告訴對(duì)等互聯(lián)伙伴應(yīng)該采用哪條路徑,并且只發(fā)送給與你直接對(duì)等互聯(lián)的伙伴。 LOCAL_PREF屬性則告知你的iBGP伙伴通往另一個(gè)AS的最佳路徑,它可以挑選出兩條在BGP看來差不多的路徑中更好的一條。 總而言之,iBGP其實(shí)就是以另一種方法應(yīng)用的BGP。我們希望關(guān)于iBGP的討論已經(jīng)幫你完全理解了BGP以及AS之間的路由原理。 小結(jié) iBGP是內(nèi)部使用的BGP,用以在多個(gè)BGP邊界路由器之間交換BGP信息。 iBGP路由器必須以全網(wǎng)狀結(jié)構(gòu)相連,以防止路由環(huán)回。 如果使用了路由反射器或路由聯(lián)盟,那么iBGP網(wǎng)狀結(jié)構(gòu)可能遭遇收斂問題,而導(dǎo)致路由黑洞。 |
|