網路層:路由

計數至無窮問題(count-to-infinity problem)

兩個小孩面對面站著;你告訴其中一個下課了。他們不是一個乾脆地告訴另一個,而是各自不斷把剛從對方聽到的、略微改過的版本再回傳出去,於是這個訊息要花上好久才真的意味著『下課了』。距離向量路由器在壞消息(連結斷了)需要傳開時,會落入類似的陷阱:消息一次只爬升一個成本級距,而不是乾淨俐落地抵達。這種壞消息緩慢、繞圈的擴散,就是計數至無窮問題。

機制如下。假設 A 經由 B 以成本 1 抵達目的地 Z。A-Z 的直接連結(或 B-Z 連結)斷了。在 B 得知真相之前,A 仍通告『我能以成本 1 抵達 Z』。B 因為失去了自己的路由,就相信 A,現在說『我經由 A 以成本 2 抵達 Z』。A 接著聽到 B 的新宣稱,更新為『經由 B 到 Z,成本 3』,B 回覆 4,依此類推——每一回合加一,兩台路由器把這個無法抵達的目的地來回彈,估計值朝無窮攀升。在距離向量裡,好消息(連結上線了)傳得很快;壞消息卻傳得痛苦地慢。

這件事重要,是因為它讓天真的距離向量路由在你最需要正確性的時候——故障期間——收斂得很慢且形成短暫迴圈。為了限制損害,協定定義了一個小的有限『無窮』:RIP 用 16,所以一旦計數達到 16,這條路由就乾脆被宣告為無法抵達,至多幾個回合後就阻止了攀升。

一個誠實的提醒:部分療法——水平分割與毒性逆轉——能防範最簡單的兩台路由器迴圈,但無法防範全部;牽涉三台以上路由器的迴圈仍可能計數至無窮。正是這種根本性的脆弱(而非單純的偏好),是大型網路改採連結狀態路由(那裡每台路由器都握有完整地圖)的核心原因之一。

A 經由 B 以成本 1 抵達 Z。B-Z 連結掛掉。A 仍通告成本 1,於是 B 現在宣稱經由 A 成本 2,A 接著宣稱經由 B 成本 3,B 宣稱 4……一直爬升,直到 RIP 的上限 16 宣告 Z 無法抵達為止。

壞消息繞圈,每回合加一,直到一個有限的『無窮』(RIP 的 16)把它切斷。

RIP 的『無窮』是 16 跳,這意味著 RIP 無法為超過 15 跳寬的網路選路——一個小的有限上限,是阻止計數的代價。

又称
counting to infinityslow convergence problem慢收斂問題