網路層:路由

距離向量路由(distance-vector routing)

想像你在一座沒有地圖的城市裡迷路,但你可以問站在每個路口的人。你問一個鄰居:『從這裡到火車站有多遠,往哪個方向走?』每個鄰居都用自己的最佳猜測回答。你選那個答案(再加上走到他那裡的路程)最小的鄰居,並隨著大家更新估計而不斷修正。距離向量路由(distance-vector routing)就是這種『問鄰居』的做法——沒有任何路由器看得到整張地圖。

具體地說,每台路由器保有一個向量(一份清單),記著它目前已知到每個目的地的最佳成本,並週期性地把整個向量告訴每個鄰居。當路由器 x 聽到鄰居 v 宣稱它到目的地 y 的成本是 D_v(y),x 就推理:我經由 v 到 y 的成本是 c(x, v) + D_v(y),也就是抵達 v 的成本加上 v 從那裡算起的成本。x 取所有鄰居 v 之中的最小值——這就是 Bellman-Ford 更新。隨著通告陸續到來反覆執行,估計值就會收斂到真正的最低成本距離。關鍵在於,路由器只學到距離與一個方向(該往哪個鄰居送),從不知道完整拓樸。

它的吸引力在於簡單與狀態小:路由器只和它的直接鄰居對話,且只儲存距離,而非全域地圖。RIP 是一個古老但至今仍可見的內部閘道協定,它是用跳數當成本的距離向量協定。

一個誠實的提醒:距離向量的口耳相傳可能讓壞消息傳得很慢,還會繞圈。當一條連結故障,路由器們可能持續相信彼此那些已過時的承諾,慢慢把距離估計往上累加——這就是惡名昭彰的計數至無窮問題。部分療法(水平分割、毒性逆轉)與一個小小的『無窮』(RIP 上限是 16)能馴服它,卻無法徹底根治,這也是大型網路偏好連結狀態的原因之一。

x 有鄰居 v 與 w,c(x,v)=1、c(x,w)=5。v 通告到目的地 y 的距離為 2;w 通告到 y 的距離為 1。x 算出 min(1+2, 5+1) = 3,經由 v,所以 x 到 y 的最佳路由是穿過 v、成本 3。

每台路由器挑選使(到鄰居的成本+鄰居通告的距離)最小的那個鄰居——這就是 Bellman-Ford 更新。

跑距離向量的路由器只知道『多遠、經由哪個鄰居』,從不知道完整路徑或拓樸。這份無知既是它的簡單之處,也是它的弱點(計數至無窮)。

又称
DV routingBellman-Ford routing距離矢量路由