BGP控制路由流向多樣化復雜化
BGP 協議是為自治系統間的路由選擇而設計,但它也可以用于自治系統內部,是一類雙重路由選擇協議。
兩個可以在自治系統之間進行通信的BGP相鄰結點必須存在于同一個物理鏈路上。
位于同一個自治系統內的BGP路由器可以互相通信,以確保它們對整個自治系統的所有信息都相同,而且通過信息交換后,它們將決定自治系統內哪個BGP路由器作為連接點來負責接收來自自治系統外部的信息。
一、BGP這個協議完全是一種策略性的路由協議,它的復雜并不是由于路由算法有多難學,最主要的是利用BGP來控制路由流向的手段多樣化復雜化,任何路由協議都要首先解決環路的問題,OSPFISIS利用了SPF算法來解決,EIGRP的算法比較新奇,是一種擴散算法,那么BGP在設計中使用了很多小手段,把精力精中在設計多樣化控制屬性。
二、BGP天生屬性重要屬性,ASPATH,BGP路由更新中,在經過的自冶域(AS)號添加到更新中,這樣,當BGP發現自己所在的AS也在其中,就可以認為發生了環路,EBGP可以這樣考慮沒有問題,在某些場景中,會有問題,不管是人工還是BGP的自動匯總屬性,匯總成10.233.40.0/17傳到AS300,再傳回AS100中,在AS100看來,這條路由的ASPATH是(300,200)自己并未在其中!!這就會致環路的形成。
三、解決方法是增加ASSET值,使得在路由匯總后(聚合)也保留其原來的aspath的屬性值,這樣就可以防止路由環路了,利用這種打標志的方法可以在AS間傳遞時不會發生環路,那么問題來了,如果在一個AS內怎么辦?
因為在IBGP中,至始至終都是在一個AS里打轉,ASPATH也沒有打的必要,所以,在BGP中,IBGP是不會添加ASPATH屬性的。那么怎么解決這樣問題呢?
四、開發者想到一個絕妙的思路,如果IBGP只是在鄰接相互傳遞,即是說一對一。打個比方,我認識A,A認識B,但是我與B是互不認識的,因為A是不會把我介紹給對方的。
在BGP如果這樣規定的話,IBGP鄰接學習來的路由不發布到其他IBGP鄰接,不就可以防止環路了,因為這根本就不可能有環生成,都是一條線。
五、這個時候就可以按照OSPF啊那樣的思路來考慮這個問題,找個人大代表不就解決了,就是DR+BDR.為了表示高新科技就起個拉風的名字:路由反射器,就是RR了。這樣就可以從邏輯上變成簡單的hub-spoke的結構了。其實這個想法就是部分放開了上面第3說的潛規則。即是產生了中間人,使其可以把它認識的客戶介紹給其他客戶。
為了防止環路,就要對中間人實行一定的公平法則,最重要一點,中間人不能改變客戶的發出的信息。
就算是環路信息傳遞回來也可以從更新中發現自己的RID,這也就是為什么配置LOOPBACK的原因了,那是多么重要的東西啊,在MPLS中還會要求必定要/32位的,不就可以發現環路了,通過把一個AS分成幾個小AS,小AS間用EBGP鄰接,在小AS內部用RR。