BGP理解之防止環(huán)路
BGP這個協(xié)議完全是一種策略性的路由協(xié)議,它的復(fù)雜并不是由于路由算法有多難學(xué),最主要的是利用BGP來控制路由流向的手段多樣化復(fù)雜化。
任何路由協(xié)議都要首先解決環(huán)路的問題,OSPFISIS利用了SPF算法來解決,EIGRP的算法比較新奇,是一種擴散算法,那么BGP在設(shè)計中使用了很多小手段,把精力精中在設(shè)計多樣化控制屬性。(IGRPRIP見鬼去吧,在中國你想找到他們都難)
1.BGP天生屬性重要屬性,ASPATH,BGP路由更新中,在經(jīng)過的自冶域(AS)號添加到更新中,這樣,當(dāng)BGP發(fā)現(xiàn)自己所在的AS也在其中,就可以認為發(fā)生了環(huán)路。
2.EBGP可以這樣考慮沒有問題,在某些場景中,會有問題。
如上圖,AS100的10.233.40.0/19更新傳到AS200,在AS200中,不管是人工還是BGP的自動匯總屬性,匯總成10.233.40.0/17傳到AS300,再傳回AS100中,在AS100看來,這條路由的ASPATH是(300,200)自己并未在其中?。∵@就會致環(huán)路的形成。
解決方法是增加ASSET值,使得在路由匯總后(聚合)也保留其原來的aspath的屬性值,這樣就可以防止路由環(huán)路了。
利用這種打標(biāo)志的方法可以在AS間傳遞時不會發(fā)生環(huán)路,那么問題來了,如果在一個AS內(nèi)怎么辦?因為在IBGP中,至始至終都是在一個AS里打轉(zhuǎn),ASPATH也沒有打的必要,所以,在BGP中,IBGP是不會添加ASPATH屬性的。那么怎么解決這樣問題呢?
3.開發(fā)者想到一個絕妙的思路,如果IBGP只是在鄰接相互傳遞,即是說一對一。打個比方,我認識A,A認識B,但是我與B是互不認識的,因為A是不會把我介紹給對方的。在BGP如果這樣規(guī)定的話,IBGP鄰接學(xué)習(xí)來的路由不發(fā)布到其他IBGP鄰接,不就可以防止環(huán)路了,因為這根本就不可能有環(huán)生成,都是一條線。
這方法很絕,但是這樣一來就會要求全網(wǎng)二二之間建立鄰接關(guān)系。
4.這個時候就可以按照OSPF啊那樣的思路來考慮這個問題,找個人大代表不就解決了,就是DR+BDR.為了表示高新科技就起個拉風(fēng)的名字:路由反射器,就是RR了。這樣就可以從邏輯上變成簡單的hub-spoke的結(jié)構(gòu)了。其實這個想法就是部分放開了上面第3說的潛規(guī)則。即是產(chǎn)生了中間人,使其可以把它認識的客戶介紹給其他客戶。為了防止環(huán)路,就要對中間人實行一定的公平法則,最重要一點,中間人不能改變客戶的發(fā)出的信息,這樣就算是環(huán)路信息傳遞回來也可以從更新中發(fā)現(xiàn)自己的RID(這也就是為什么配置LOOPBACK的原因了,那是多么重要的東西啊,在MPLS中還會要求必定要/32位的)不就可以發(fā)現(xiàn)環(huán)路了。聰明!
5.但是RR一帶多的情況在大量路由器的時候也是體力而有所不支,一夫多妻,搞不了多少的,要不就會精竭人亡了。所以,還要想辦法分擔(dān)一下,怎么分擔(dān)呢?能不能像OSPF那樣,分成幾個區(qū),各管各的然后區(qū)區(qū)之間保持必要聯(lián)系呢?肯定可以了,我的程序我作主,于是BGP開發(fā)人員就想到了,通過把一個AS分成幾個小AS,小AS間用EBGP鄰接,在小AS內(nèi)部用RR,哇多好的設(shè)計。拉風(fēng)的名字是少不了的--->"聯(lián)盟"confederation,(我在想為什么不叫部落呢?)AS內(nèi)的多個聯(lián)盟,在別的AS看來是不可見的。那么這樣把結(jié)構(gòu)又搞復(fù)雜了一點(怎么越簡化越復(fù)雜了呢?)。
在發(fā)明聯(lián)盟后,怎么解決聯(lián)盟間的環(huán)路問題呢?其實這個問題很好解決了,聰明的你肯定想到了,做個山寨的ASPATH不就可以了,對,正是這樣,修正BGP的ASPATH的屬性,讓它在聯(lián)盟中的場景中生效不就可以了。
環(huán)路的形成目前總結(jié)到這里,還有一個未寫到,就是BGP同步規(guī)則,這個也是為了防止環(huán)路以及路由黑洞,打斷這個規(guī)則的方法就是讓全網(wǎng)建立全鄰接結(jié)構(gòu)。這個算不談了,我直接寫到可以更好理解。
【編輯推薦】