动态路由选择协议(二)距离矢量路由选择协议
大多數(shù)的路由選擇協(xié)議屬于下面二者之一:
距離矢量(distance vector)和鏈路狀態(tài)(link state)。
本篇學(xué)習(xí)的是距離矢量路由選擇協(xié)議的基礎(chǔ)。
?
大多數(shù)的距離矢量算法是R.E.Bellman、L.R.Ford和D.R.Fulkerson所做的工作為基礎(chǔ)的,所有有時(shí)距離矢量算法又稱(chēng)為Bellman-Ford或者Ford-Fulkerson算法。
值得注意的是EIGRP是一個(gè)例外,它是基于J.J.Garcia Luna Aceves開(kāi)發(fā)的算法實(shí)現(xiàn)的。
?
距離矢量名稱(chēng)的由來(lái)是因?yàn)槁酚善魇且允噶?#xff08;距離、方向)的方式被通告出去的,其中距離是根據(jù)度量定義的,方向是根據(jù)下一跳路由器定義的。
?
例如,"目標(biāo)A在下一跳路由器X的方向,距離5跳之遠(yuǎn)"。這個(gè)表述隱含了每臺(tái)路由器向鄰接路由器學(xué)習(xí)它們所觀察到的路由器信息,然后在向外通告自己觀察到的路由器的信息,而每臺(tái)路由器的信息又是根據(jù)鄰接的路由器,所以所有距離矢量路由選擇有時(shí)又被認(rèn)為是"依據(jù)傳聞進(jìn)行路由選擇"。
?
?
下面列舉的都屬于距離矢量路由協(xié)議:
IP路由選擇信息協(xié)議(RIP);
Xerox網(wǎng)絡(luò)系統(tǒng)的XNS RIP;
Novell的IPX RIP;
Cisco Systems的Internet網(wǎng)關(guān)路由選擇協(xié)議(IGRP)和增強(qiáng)型Internet網(wǎng)管路由選擇協(xié)議(EIGRP);
DEC的DNA階段4;
Apple Talk的路由選擇表維護(hù)協(xié)議(RTMP)。
通用屬性
典型的距離矢量路由選擇協(xié)議通常會(huì)使用一個(gè)路由選擇算法,算法中路由器通過(guò)廣播整個(gè)路由表,定期地向所有鄰居發(fā)送路由更新信息(EIGRP不是這樣的)。
?
上面表述包含了大量信息。
?
1. 定期更新
?
2. 鄰居
?
3. 廣播更新
?
4. 全路由選擇表更新
?
?
?
依照傳聞進(jìn)行路由選擇
?
在圖中正在進(jìn)行一個(gè)距離矢量算法,其中使用跳數(shù)作為度量。
?
在T0時(shí)刻,路由器A到路由器D正好可用,而且T0時(shí)刻4臺(tái)路由器所具有的惟一信息就是它們的直連網(wǎng)絡(luò)。
路由表標(biāo)識(shí)了這些網(wǎng)絡(luò),并且指明了它們沒(méi)有經(jīng)過(guò)下一跳路由器,是直接連接到路由器上的,所以跳數(shù)為0。
每臺(tái)路由器都將在它所有的鏈路上廣播這些信息。
?
在T1時(shí)刻,路由器接受并處理第1個(gè)更新信息。
?
查看此時(shí)路由器A的路由表,路由器B發(fā)給路由器A的更新信息發(fā)現(xiàn)路由器B能夠到達(dá)網(wǎng)絡(luò)10.1.2.0和10.1.3.0,而且距離都為0跳。
如果這些目標(biāo)網(wǎng)絡(luò)距離路由器B為0跳,那么距離路由器A則為1跳。
所以路由器A將跳數(shù)增加1,然后檢查自己的路由表。
路由表中顯示網(wǎng)絡(luò)10.1.2.0已知,且距離為0跳,小于路由器B通告的跳數(shù),所以路由器A忽略此信息。
?
圖 距離矢量協(xié)議逐跳收斂
?
由于網(wǎng)絡(luò)10.1.3.0對(duì)于路由器A來(lái)說(shuō)是新信息,所以路由器A將其輸入到路由表中。更新數(shù)據(jù)包的源地址是路由器B的接口地址(10.1.2.2),因此該地址連同計(jì)算的跳數(shù)一起被保存到路由表中。
?
注意T1時(shí)刻,其他路由器也進(jìn)行了類(lèi)似操作。
在T2時(shí)刻,隨著更新周期的再次到期,另一組更新消息被廣播,路由器C告知路由器B的路由信息。
路由器B發(fā)送了最新的路由表,路由器A更新此時(shí)的路由信息。
在T3時(shí)刻,網(wǎng)絡(luò)已經(jīng)收斂。每臺(tái)路由器都已經(jīng)知道了每個(gè)網(wǎng)絡(luò)以及達(dá)到每個(gè)網(wǎng)絡(luò)的下一跳路由器的地址和距離跳數(shù)。
?
距離矢量算法提供了指向網(wǎng)絡(luò)的路標(biāo)。該算法給出了方向和距離,但沒(méi)有給出沿著這條路徑行走的細(xì)節(jié)。就像交叉路口一樣,很容容易受到意外或故意的誤導(dǎo)。
?
下面給出的是距離矢量算法的困境以及一些改進(jìn)的措施。
?
路由失效計(jì)數(shù)器
?
如果網(wǎng)絡(luò)已經(jīng)收斂,那么當(dāng)部分網(wǎng)絡(luò)的拓?fù)浒l(fā)生變化時(shí),它怎樣處理重新收斂問(wèn)題呢?
如果網(wǎng)絡(luò)10.1.5.0發(fā)生故障,答案很簡(jiǎn)單——在下一個(gè)周期中,路由器D將這個(gè)網(wǎng)絡(luò)標(biāo)記為不可達(dá)并且發(fā)送該信息。
?
如果網(wǎng)絡(luò)10.1.5.0沒(méi)有發(fā)生故障,而是路由器D發(fā)生故障了?
路由器A、B、C的路由表中仍然保存著關(guān)于網(wǎng)絡(luò)10.1.5.0的信息,雖然該信息不再有用,但是卻沒(méi)有路由器通知它們。
它們將不知不覺(jué)地向一個(gè)不可達(dá)網(wǎng)絡(luò)轉(zhuǎn)發(fā)著數(shù)據(jù)包——即在網(wǎng)絡(luò)中打開(kāi)了一個(gè)黑洞。
?
處理這個(gè)問(wèn)題的方式是為路由表中的每個(gè)表項(xiàng)設(shè)置一個(gè)失效計(jì)時(shí)器。
例如,當(dāng)路由器C首次知道10.1.5.0并將其輸入到路由表中時(shí),路由器C將為該路由器設(shè)置計(jì)時(shí)器。
每隔一定時(shí)間間隔路由器C都會(huì)收到路由器D的更新信息,路由器C在丟棄有關(guān)10.1.5.0的信息的同時(shí)復(fù)位該路由的計(jì)時(shí)器。
?
如果路由器D發(fā)生故障,路由器C將不能接收到關(guān)于10.1.5.0的更新信息。這時(shí)計(jì)時(shí)器將會(huì)超時(shí),路由器C將把該路由標(biāo)記為不可達(dá),并將在下一個(gè)更新周期時(shí)傳遞該信息。
?
路由器超時(shí)的典型周期范圍是3~6個(gè)更新周期。路由器在丟失單個(gè)更新信息之后將不會(huì)使路由器無(wú)效的,因?yàn)閿?shù)據(jù)包的損壞、丟失或者某種網(wǎng)絡(luò)延遲都會(huì)造成這種事件的發(fā)生。但是如果路由失效周期太長(zhǎng),網(wǎng)絡(luò)收斂速度將會(huì)非常慢。
?
水平分隔
?
目前,每個(gè)路由器在每個(gè)更新周期都要向每個(gè)鄰居發(fā)送它的整個(gè)路由表。但是并沒(méi)有必要,如果路由器A將學(xué)自路由器B的網(wǎng)絡(luò)再?gòu)V播給路由器B,那么這是一種浪費(fèi),因?yàn)锽已經(jīng)知道這些網(wǎng)絡(luò)。
?
路由的指向與數(shù)據(jù)包流動(dòng)方向相反的路由被稱(chēng)為逆向路由(reverse route)。水平分隔(split horizon)是一種在兩臺(tái)路由器之間阻止逆向路由的技術(shù)。
?
這樣除了不會(huì)浪費(fèi)資源,還因?yàn)椴粫?huì)把從路由器學(xué)習(xí)的可達(dá)性信息再返回給這臺(tái)路由器。
動(dòng)態(tài)路由選擇協(xié)議最重要的功能就是監(jiān)測(cè)和補(bǔ)償拓?fù)渥兓绻W(wǎng)絡(luò)的最優(yōu)路徑不可用,協(xié)議必須尋找下一個(gè)最優(yōu)路徑。
?
假設(shè)路由器監(jiān)測(cè)到網(wǎng)絡(luò)10.1.5.0發(fā)生故障,將網(wǎng)絡(luò)標(biāo)記為不可達(dá)并且在下一個(gè)更新周期通知路由器C。然后在路由器D更新計(jì)時(shí)器觸發(fā)更新之前,意外的事情發(fā)生了。路由器C的更新消息到達(dá)了路由器D,聲明路由器C可以到達(dá)網(wǎng)絡(luò)10.1.5.0,距離為1跳!
?
但是路由器D并不知道路由器C通告的下一條最優(yōu)路徑并不合理,因而路由器D將跳數(shù)加1并在路由表中記錄一下信息:通過(guò)路由器C的接口(10.1.4.1)可以到達(dá)網(wǎng)絡(luò)10.1.5.0,距離為2條。
?
這樣路由器D查詢(xún)路由表又將數(shù)據(jù)包轉(zhuǎn)發(fā)給路由器C,路由器C再轉(zhuǎn)回給路由器D,一直無(wú)窮無(wú)盡地進(jìn)行下去,因而導(dǎo)致路由環(huán)路的發(fā)生。
?
執(zhí)行水平分隔可以阻止路由環(huán)路的發(fā)生。有兩類(lèi)水平分隔方法:簡(jiǎn)單水平分隔法和毒性逆轉(zhuǎn)水平分隔法。
?
簡(jiǎn)單水平分隔的規(guī)則是:從某接口發(fā)送的更新消息不能包含從該接口收到的更新所包含的網(wǎng)絡(luò)。
?
簡(jiǎn)單水平分隔采用的抑制信息的工作方式。毒性逆轉(zhuǎn)水平分隔法是一種改進(jìn)方法,可以提供更積極的信息。
?
毒性逆轉(zhuǎn)水平分隔法的規(guī)則是:當(dāng)更新信息被發(fā)送出某接口時(shí),信息中將指定從該接口的更新信息中獲取的網(wǎng)絡(luò)是不可達(dá)的。
?
毒性逆轉(zhuǎn)水平分隔法被認(rèn)為比簡(jiǎn)單水平分隔法更安全更健壯——一種"壞信息總比沒(méi)有消息好"的方法。
?
大部分現(xiàn)代距離矢量算法的實(shí)現(xiàn)都是用了毒性逆轉(zhuǎn)水平分隔法。缺點(diǎn)是使路由器更新數(shù)據(jù)包更大了,可能會(huì)加劇鏈路的擁塞問(wèn)題。
?
計(jì)數(shù)到無(wú)窮大
?
水平分隔法切斷的是鄰居路由器之間的環(huán)路,但是它不能隔斷網(wǎng)絡(luò)中的環(huán)路。可達(dá)網(wǎng)絡(luò)的距離在不斷地在路由器信息增大的時(shí)候會(huì)到無(wú)窮大。減輕計(jì)數(shù)到無(wú)窮大影響的方法是定義無(wú)窮大。大多數(shù)距離矢量協(xié)議定義無(wú)窮大為16跳。
?
隨著更新消息在路由器中轉(zhuǎn)圈,到某個(gè)不可達(dá)網(wǎng)絡(luò)的跳數(shù)會(huì)達(dá)到16,那時(shí)網(wǎng)絡(luò)被認(rèn)為是不可達(dá)。
?
這也是路由器如何通告一個(gè)網(wǎng)絡(luò)不可達(dá)的方法。
設(shè)置最大跳數(shù)15有助于解決計(jì)數(shù)到無(wú)窮大的問(wèn)題,但是收斂速度仍舊非常慢。假設(shè)更新周期為30s,網(wǎng)絡(luò)可能花7.5min達(dá)到收斂,在這期間容易受到路由錯(cuò)誤的影響。觸發(fā)更新可以用于減少網(wǎng)絡(luò)收斂時(shí)間。
?
?
觸發(fā)更新
?
觸發(fā)更新(Triggered Update)又叫快速更新,非常簡(jiǎn)單:如果一個(gè)度量變好或者變壞,那么路由器將立即發(fā)送更新信息,而不等更新計(jì)時(shí)超時(shí)。
?
?
抑制計(jì)時(shí)器
?
如果到一個(gè)目標(biāo)的距離增加,那么路由器將為該路由設(shè)置抑制計(jì)時(shí)器。直到計(jì)時(shí)器超時(shí),路由器才可以接受有關(guān)此路由的更新信息。
?
?
異步更新
?
?
一組連接在以太骨干網(wǎng)上的路由器,將不會(huì)同時(shí)廣播更新信息,因?yàn)闀?huì)導(dǎo)致數(shù)據(jù)包發(fā)生碰撞。但是幾個(gè)路由器共享一個(gè)廣播網(wǎng)絡(luò)時(shí)可能會(huì)發(fā)生這種情況。
?
以下兩種方法維持異步更新(Asynchronous Update):
- 每臺(tái)路由器的更新計(jì)時(shí)器獨(dú)立于路由選擇進(jìn)程,因而不會(huì)受到路由器處理負(fù)載的影響
- 每個(gè)更新周期中加入一個(gè)小的隨機(jī)時(shí)間或定時(shí)抖動(dòng)作為偏移
轉(zhuǎn)載于:https://www.cnblogs.com/tuhooo/p/7471548.html
總結(jié)
以上是生活随笔為你收集整理的动态路由选择协议(二)距离矢量路由选择协议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android 四大组件之Activit
- 下一篇: ResultMap和ResultType