- 論壇徽章:
- 0
|
邊界網(wǎng)關(guān)協(xié)議(Border Gateway Protocol,BGP)是Internet的路由協(xié)議。BGP本身并不太復(fù)雜,但初次涉足這一領(lǐng)域的人可能會(huì)對(duì)這個(gè)隱藏在基于自治系統(tǒng)路由背后的概念感到陌生。我們希望借助本文你能簡要了解BGP的工作原理,以及它所產(chǎn)生和能夠解決的問題。
通過上一期對(duì)Internet路由的講座,你應(yīng)該認(rèn)識(shí)到Internet中的路由分為兩部分:由內(nèi)部網(wǎng)關(guān)協(xié)議(IGP)如OSPF所控制的自治系統(tǒng)內(nèi)部路由,以及將各自治系統(tǒng)(AS)互相連接起來的邊界路由(現(xiàn)在是使用BGP)。
Internet上每個(gè)ISP都至少擁有一個(gè)唯一的AS號(hào),并且通過BGP向其對(duì)等互聯(lián)伙伴廣播其網(wǎng)絡(luò)信息。BGP是一種路徑向量協(xié)議,因?yàn)樗鶑V播的是到達(dá)某一特定目的地所需的路徑信息。BGP并不會(huì)告訴我們數(shù)據(jù)包是如何在自治區(qū)域內(nèi)傳送的,也不會(huì)象OSPF那樣知道整個(gè)網(wǎng)絡(luò)的情況。BGP也可以被稱之為一種距離向量協(xié)議,因?yàn)槌藥讉(gè)不大的變化,其它都與距離向量協(xié)議類似。
BGP本身是一種第4層協(xié)議,運(yùn)行在TCP協(xié)議之上。因?yàn)锽GP無需關(guān)心TCP要處理的事情,所以要比OSPF簡單得多。無論如何,BGP是以連接為導(dǎo)向的,它需要兩個(gè)手動(dòng)配置路由器的對(duì)等互聯(lián)伙伴,而這兩個(gè)伙伴分別配置自己的路由器,然后交換路由信息。通過BGP對(duì)等互聯(lián)的兩端(鄰居)通常直接相連,不過也有一些受虐狂喜歡在多跳對(duì)等互聯(lián)伙伴之間建立BGP會(huì)話,這也完全沒有問題,因?yàn)锽GP使用TCP端口179,并且不依賴廣播或本地鏈路多點(diǎn)傳送。
BGP-4(BGP-3不支持無類別域間路由CIDR)更新數(shù)據(jù)包中包含以下信息:一個(gè)網(wǎng)絡(luò)、一個(gè)子網(wǎng),還有一些屬性。我們根據(jù)屬性值(主要是AS-Path)做出路由決策,比如BGP更新數(shù)據(jù)包可能會(huì)說:“我可以經(jīng)由號(hào)碼為8、19、2000和5的AS到達(dá)地址為1.1.1.0/12的網(wǎng)絡(luò)! 關(guān)于BGP非常重要的一點(diǎn)是,AS-Path本身采用一種防止產(chǎn)品路由循環(huán)的機(jī)制,路由器不會(huì)導(dǎo)入任何已經(jīng)在AS-Path屬性中所包含的路由。
對(duì)路由器來說,如果你導(dǎo)入一條路由,然后想把它告訴對(duì)等互聯(lián)關(guān)系中的一個(gè)伙伴,你就必須在宣布這條路由之前,首先把自己的AS號(hào)追加到這條AS-Path中。無疑,隨著這條路由的信息被傳播得越來越遠(yuǎn)離源AS,它就提供了一條可行的到達(dá)源AS的“路徑”。路由器通常(而不是總是)會(huì)選擇距離AS最短的路徑。BGP僅僅是根據(jù)它所收到的更新信息知道這些路徑的。與同為距離向量協(xié)議的RIP不同,BGP并不發(fā)布整個(gè)路由表。在引導(dǎo)之時(shí),你的對(duì)等互聯(lián)伙伴會(huì)移交其整個(gè)路由表,不過在此之后一切就要靠所收到的更新信息了。
路由更新信息儲(chǔ)存在路由信息庫(RIB)中。路由表只為每個(gè)目的地存儲(chǔ)一條路由,而RIB通常包含通往一個(gè)目的地的多條路徑信息。至于將哪條路由存儲(chǔ)到路由表中,也就是實(shí)際會(huì)用到哪條路徑,則取決于該路由器,當(dāng)某條路由被撤消時(shí),可以從RIB中取出另一條通往同一目的地的路由。RIB僅用于記錄我們可能用到的路由,我們決不會(huì)把一條未被使用的路由告知對(duì)等互聯(lián)的伙伴,因?yàn)槟强赡苁菞l錯(cuò)誤信息。我們只會(huì)發(fā)布路由表中存在的路由。如果RIB收到了某條路由被撤消的信息并且該路由僅存在于RIB中,那么我們就無需向?qū)Φ然ヂ?lián)的伙伴發(fā)送更新信息,而只需要把它從RIB中悄悄刪除。RIB的路由條目永遠(yuǎn)不會(huì)過期,它會(huì)一直保留直到我們確定該路由已經(jīng)無效。
在Internet上有大量路由是基于策略的。有時(shí)你會(huì)購買一條昂貴的鏈路,僅當(dāng)必要時(shí)候才會(huì)使用;或者你會(huì)有一條只向特定對(duì)象發(fā)送數(shù)據(jù)的鏈路。BGP的“Community”屬性很多時(shí)候被用于識(shí)別一組路由。如果你想讓你的鄰居知道關(guān)于某條路由的秘密信息,你可以在導(dǎo)出這些路由之前設(shè)置一個(gè)Community號(hào),這些號(hào)碼完全是隨意的,所以不管你發(fā)送什么,都必須事先和伙伴商定好這個(gè)號(hào)碼所具有某種特殊意義。
BGP另外一個(gè)重要屬性是多出口標(biāo)識(shí)(Multi-Exit Discriminator,MED)。該屬性用于告知遠(yuǎn)程AS說,我們喜歡一個(gè)指定的出口點(diǎn),盡管我們可能有很多出口點(diǎn),這對(duì)iBGP非常重要。iBGP是BGP協(xié)議的內(nèi)部網(wǎng)絡(luò)協(xié)議版本,我們將在下一期知識(shí)講座中介紹。
要想真正理解BGP的工作原理,我們要花點(diǎn)時(shí)間講講困擾著Internet的一些問題,這很重要。
首先,我們會(huì)遇到一個(gè)關(guān)于路由表快速增長的大問題。如果有人決定將一個(gè)原來的16位網(wǎng)絡(luò)分解為許多更小的的網(wǎng)絡(luò),他們可能會(huì)先廣播數(shù)百條新路由。這時(shí)Internet上每臺(tái)路由器都會(huì)獲得每條新路由。人們常常會(huì)迫于壓力將多條路由匯總或合并一次發(fā)布出去。但匯總路由并不總是行得通的,特別是你想把一個(gè)19位網(wǎng)絡(luò)分解成兩個(gè)地理位置上分離的20位網(wǎng)絡(luò)。目前路由表內(nèi)的路由數(shù)將近200,000條,并且曾經(jīng)一度以指數(shù)級(jí)速度增長。
其次,我們總會(huì)擔(dān)心有人會(huì)“向Internet廣播”。如果某個(gè)大型ISP客戶突然決定把它所有信息都廣播出去,并且ISP接收了這些路由,那么Internet上所有數(shù)據(jù)都會(huì)被發(fā)送到ISP客戶的小型AS上。對(duì)此有一個(gè)簡單的解決方案,稱為路由過濾。設(shè)置路由器易如反掌,這樣你的路由器就不會(huì)接收那些不請(qǐng)自來的路由了,但是很多大型ISP還是會(huì)接收來自對(duì)等互聯(lián)伙伴的“缺省”路由,而這些伙伴似乎并不能提供通路互聯(lián)服務(wù)。
最后,我們來談?wù)劼酚煞瓌?dòng)(flapping)。BGP有一種機(jī)制可以限制那些看起來不太正常的路由。翻動(dòng)(即出現(xiàn)又消失)的路由通常不夠可靠,如果路由翻動(dòng)頻繁,Internet上所有路由的負(fù)載就會(huì)增加,因?yàn)槁酚擅看蜗в种匦鲁霈F(xiàn)時(shí)都要花時(shí)間更新。路由翻動(dòng)抑制(Dampening)使BGP對(duì)等互聯(lián)的伙伴忽略所有的來自于正處于翻動(dòng)狀態(tài)的對(duì)等互聯(lián)路由器的更新信息。這個(gè)路由器被忽略時(shí)間隨每一次翻動(dòng)呈指數(shù)級(jí)增加。鏈路有缺陷是很惱人的,很多Internet站點(diǎn)有可能要花一個(gè)多小時(shí)才能進(jìn)入,不過這非常必要。
這次我們非常扼要地闡述了BGP的原理,這些知識(shí)足夠讓你正確地理解該協(xié)議,不過還是根本不夠全面。如果你的工作是操作BGP路由器,那就花點(diǎn)時(shí)間閱讀RFC文檔,你的同等互聯(lián)伙伴會(huì)很感激你的。
小結(jié)
BGP是路徑向量協(xié)議,在Internet上通過其AS-Path屬性提供自治系統(tǒng)的路由信息。
對(duì)等互聯(lián)伙伴通過手動(dòng)配置路由器來交換路由信息,這將建立一個(gè)TCP連接并且采用BGP協(xié)議來對(duì)話。BGP沒有什么秘密。
中型企業(yè)采用BGP通常是為了讓其整個(gè)網(wǎng)絡(luò)成為真正的多宿主(multi-homing)網(wǎng)絡(luò)。
本文來自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u2/72255/showart_2010496.html |
|