RIP協議中,解決路由自環的毒性逆轉思想是什麼?
理解毒性逆轉首先要弄明白它的實現基礎,也就是距離向量(DV)演算法和路由毒化(Route poisoning)方法。
先說距離向量,這裡的向量並不是指數學/物理中那種真的有方向意義的向量,理解成統計學中n個特徵構造而成的n維向量,實際就是以這個節點為源節點,到其他節點的距離構成的一個1*n的表格。
DV路由演算法的核心思想是每個節點都要接收其鄰節點發來的距離向量,然後用Bellman-Ford方法根據收到其他節點的距離向量對自己的距離向量進行鬆弛(relax)更新。不同於LS演算法的地方在於DV演算法是分散式的,每個節點可以非同步的完成該節點距離向量和路由表的更新,然後再把距離向量發給鄰節點,再由其他節點完成它們各自的更新,由於演算法的迭代性,即使不知道全局網路的連通情況,每個節點也可以收到消息以後自己判斷一下,聽見風就是雨地更新路由表,靜態網路中很快可以收斂。動態網路中,一旦某個節點的連通情況發生變化(代價變化,連通情況變化),就立即向鄰節點發送新的距離向量,然後再進入這個迭代過程,直到每個節點都無可奉告了網路又進入靜止狀態。
正是因為DV的非同步和分散式的動態特性,使得路由毒化技術可以處理解決某個節點突然失效的問題。這個方法解決的問題是count-to-infinity的情況
- 一開始N(可以把一個子圖/網段看成節點/路由簡化處理)到的代價(跳數)是1,與之間僅有一跳的距離,所以到N的代價是2,下一跳指向
- 與N的連接發生故障
- 將自己關於N的路由信息毒化,更新設置距離向量中到N網段的距離為16(因為RIP協議中的TTL最大是15,圖論上的意義就是代價被續成了無窮大)
- 在自己更新完成後,把毒化的路由信息(距離向量)發給與其鄰接的路由,意義就是「N網段怎麼走我現在無可奉告了」,那麼也會同樣把自己關於N網段的路由信息毒化,設置為16。
如果失效後未及時毒化,那麼會發送它的路由表使更新到N的下一跳是,出現迴路(Loop),此後這兩個路由會一直交換信息增加距離向量至16。
而16正是這樣一個閾值,一旦到達了16就是無窮大,判定為N是不可達的。這時路由自身也知道它到N的路徑不可預料,所以這個迴路就被破除了。這就是毒性逆轉(poisoned reverse)技術解決迴路問題。
然而,這個單純(simple)的毒性逆轉方法僅僅對包含兩個鄰接節點的迴路有效,無法解決更複雜的迴路問題。
改天有時間我再詳細寫寫更複雜的迴路怎麼破,也順便寫寫水平分割。今天太睏,先去睡了,當給我明天考試攢點人品。
很慚愧,只做了一些微小的工作。
References[1] Kurose, James F. Computer Networking: A Top-Down Approach Featuring the Internet, 3/E. Pearson Education India, 2005.
[2] HENDRICK, C. "RFC 1058: Routing information protocol, June 1988."Status: Historical.
推薦閱讀:
※進行 Linux 網路編程的人需不需要看 TCP/IP 詳解這種書?
※IP地址為什麼是定長的?是什麼因素限制的?
※wifi非常不穩定且延遲高可能的原因是什麼?
※Zeta-TCP真的有效嗎?
※怎麼有效理解可靠數據傳輸?
TAG:TCPIP |