深入探究BGP路由協(xié)議同步問題
目前BGP路由協(xié)議的應(yīng)用也很多,于是我研究了一下BGP路由協(xié)議中的同步問題,在這里拿出來(lái)和大家分享一下,希望對(duì)大家有用。BGP協(xié)議規(guī)定:一個(gè)運(yùn)行BGP協(xié)議的路由器不會(huì)把從內(nèi)部對(duì)等體(IBGP鄰居)得知的路由信息通告給外部對(duì)等體(EBGP鄰居),除非該路由信息也能通過IGP得知。若BGP路由器能通過IGP得知該路由信息,則可認(rèn)為路由能在AS之間傳播,內(nèi)部通達(dá)已有保證。
首先,RTB通過EBGP鄰居關(guān)系,獲得了去往AS100的路由信息,例如,去往AS100中的10.1.1.1/24,RTB會(huì)把這樣的路由信息通告給RTE,RTE收到從RTB通告來(lái)的去往自治系統(tǒng)AS100的路由信息10.1.1.1/24。對(duì)于RTE來(lái)說(shuō),她在考慮是否把這樣的路由信息通告給她的EBGP鄰居RTF時(shí),就需要考慮同步問題。這里的同步是指:RTE如果能通過IGP(內(nèi)部網(wǎng)關(guān)協(xié)議,如OSPF協(xié)議)獲得去往10.1.1.1/24的路由,我們就認(rèn)為EGP(外部網(wǎng)關(guān)協(xié)議,如BGP協(xié)議)和IGP同步。在同步情況下,RTE可以將路由信息10.1.1.1/24通告給RTF。否則,不能通告。通過上面的敘述,相信大家應(yīng)該知道什么是BGP同步了。那么BGP的設(shè)計(jì)者們?yōu)槭裁匆鲞@樣一個(gè)規(guī)定呢?為什么要引入BGP同步的概念呢?下面我們來(lái)說(shuō)說(shuō)BGP同步存在的重要性和她所解決的關(guān)鍵問題。
BGP路由同步的重要性
依然用上面的例子來(lái)解釋,如果RTE不考慮同步問題,直接將路由信息10.1.1.1/24 通告給RTF,那么RTF的路由表中就會(huì)記錄一條去往10.1.1.1/24的路由信息,下一跳是指向RTE的。這樣問題就會(huì)出現(xiàn):RTF有一去往10.1.1.1/24的數(shù)據(jù)包,RTF通過查看路由表,把這一數(shù)據(jù)包轉(zhuǎn)發(fā)給RTE。如果沒有同步,RTE的路由表中也會(huì)有去往10.1.1.1/24的表項(xiàng),但是這一表項(xiàng)的下一跳是直接指向RTA的S0接口的(這里的原因參見BGP的下一跳屬性)。在不同步的情況下,RTE是無(wú)法直接去往此路由的下一跳的(因?yàn)槁窂街型镜穆酚善鱎TD、RTC都沒有去往10.1.1.1/24的路由)。這里有個(gè)概念叫下一跳不可達(dá),就是指這種情況。
那么,講到這里,聰明的讀者是不是明白了呢?BGP強(qiáng)調(diào)同步的原因就是要保證下一跳可達(dá)。用上面的例子來(lái)說(shuō),就是RTE在考慮把去往10.1.1.1/24的路由信息通告給RTF時(shí),就需要考慮她去往10.1.1.1/24的下一跳是否可達(dá)(這里的下一跳就是指RTA的S0接口,此接口是AS200和AS300去往AS100的入口)。如果這個(gè)入口都不可達(dá),更不要說(shuō)訪問其內(nèi)部了。
所以下一跳是否可達(dá)的問題是一個(gè)關(guān)鍵性問題,BGP強(qiáng)調(diào)同步,就是要求RTE所在自治系統(tǒng)的IGP協(xié)議能夠?qū)崿F(xiàn)下一跳可達(dá)。如果IGP找到了去往下一跳的路由,那么RTE就得到了兩個(gè)去往10.1.1.1/24的路由。一個(gè)是:通過BGP獲得的,這個(gè)路由的下一跳不可達(dá)。另一個(gè)是:通過IGP獲得的,這一個(gè)下一跳可達(dá)(關(guān)于為什么BGP獲得的路由下一跳不可達(dá),而IGP獲得的路由下一跳可達(dá),這個(gè)問題需要大家對(duì)BGP的下一跳屬性做進(jìn)一步了解,這里不再敘述)。
BGP的路由可達(dá)和不可達(dá)問題
關(guān)于下一跳可達(dá)和不可達(dá)問題,下面做進(jìn)一步說(shuō)明。依然用上面的例子。因?yàn)樵贐GP系統(tǒng)中的下一跳是以自治系統(tǒng)為單位的(這一點(diǎn)在BGP的下一跳屬性中,有詳細(xì)敘述)。這樣,就會(huì)有這樣的問題存在,RTE的路由表中有去往10.1.1.1/24的路由,但是下一跳卻在很遠(yuǎn)的地方,以至于下一跳不可達(dá)。但是對(duì)于IGP來(lái)說(shuō)就不會(huì)有這樣的問題出現(xiàn)。這都是因?yàn)楦髯韵乱惶亩x不同造成的(關(guān)于下一跳的定義,我們就不討論了,BGP的設(shè)計(jì)者這樣定義,也是經(jīng)過綜合考慮和選擇的)。既然BGP發(fā)現(xiàn)的路由有下一跳不可達(dá)的問題存在,我們就要解決這樣的問題,BGP同步就是解決的方法。
當(dāng)然同步是可以選擇的。在華為3Com3Com路由器上,同步是可以被取消的。取消了同步之后,路由器通告路由時(shí),就不再考慮同步問題了,直接將自己的路由信息通告給EBGP鄰居。但是這樣就會(huì)出現(xiàn)下一跳不可達(dá)的問題。所以,我們?cè)谌∠街熬鸵紤]好如何處理可能出現(xiàn)的下一跳不可達(dá)問題。對(duì)于上面例子中的情況來(lái)說(shuō):RTE所在的自治系統(tǒng)里所有的路由器都要知道如何去往RTA的S0接口。只要滿足了下一跳可達(dá),取消同步也是可以的。
取消同步以后,滿足下一跳可達(dá)的方法有很多,需要視具體網(wǎng)絡(luò)拓?fù)淝闆r而定。就上面例子來(lái)說(shuō),可以由RTB將BGP路由引入IGP中,當(dāng)然這樣的做法一般不采用,應(yīng)為BGP的路由信息量很大,對(duì)于IGP來(lái)說(shuō)負(fù)擔(dān)太重。另外,我們可以在RTC、RTD、RTE上增加靜態(tài)路由,同時(shí)在RTA上也增加靜態(tài)路由。這種辦法看起來(lái)很笨,也不是最理想的辦法。最后,BGP可以通過命令來(lái)強(qiáng)制修改下一跳,在RTE上將去往10.1.1.1/24的下一跳強(qiáng)制修改為RTE自身的接口,同時(shí),需要RTD、RTC的路由表中有去往10.1.1.1/24的路由。
這也不是最理想的解決方法。因?yàn)榭赡苓€是需要借助于靜態(tài)路由。其實(shí),對(duì)于上面例子的拓?fù)浣Y(jié)構(gòu),主要是:IBGP鄰居不是直接的連接關(guān)系,而是TCP連接。BGP路由協(xié)議在這樣的拓?fù)浣Y(jié)構(gòu)上的下一跳可達(dá)問題,一直沒有理想的解決方案。如果這種情況的網(wǎng)絡(luò)不是很復(fù)雜,還是可以勉強(qiáng)解決的(上面已經(jīng)介紹了幾種解決方法)。但是一旦網(wǎng)絡(luò)復(fù)雜了,解決起來(lái)就很困難了。所以,在網(wǎng)絡(luò)設(shè)計(jì)時(shí),一定要注意避開這種情況。IBGP鄰居盡量直接連接。這個(gè)問題的徹底解決是在BGP和MPLS聯(lián)手以后的事情。以后有機(jī)會(huì)大家再學(xué)習(xí)!
小結(jié)
BGP下一跳屬性規(guī)定:BGP路由的下一跳是以自治系統(tǒng)為單位的。這樣就引出了BGP路由下一跳不可達(dá)的問題,為解決路由下一跳不可達(dá)的問題,BGP協(xié)議引入了同步概念。同步也是可以通過命令取消的,只要能保證路由的下一跳可達(dá),就可以了。