「聽說就拿出來講?」這是前一陣子筆者同事和世界某知名智慧型手機製造商洽談時,所聽到的用語。到底「聽說」來的資訊,是否可以拿出來講?這可能要看情況,以網路路由器來說,把聽說來的資訊(也就是可能不準確的資訊)拿出來與其他路由器設備分享,可能就會造成很大的問題,因為出現了「路由?圈」。
路由迴圈(Routing Loop)是網路世界中知名的問題之一,通常是因為路由演算法內沒有及時更新並且反應網路現況所造成。
而路由迴圈的問題,是指網路封包一直沒有辦法送達目的地,可能在某些路由器之間一直互相傳遞瞂,每個路由器都以為其他路由器可以送達目的地,而導致像是無限迴圈一樣,無窮無盡互相傳遞瞂。
如同各位讀者可能了解的,路由演算法分為Link-State和Distance-Vector兩大類型。基本上,Link-State中的OSPF路由演算法和IS-IS路由演算法都已經沒有這樣的問題。
Distance-Vector類型中像是EIGRP、IGRP、BGP等等也已經內建一些解決方案。但是,RIP路由演算法並沒有內建一些比較新型的解決方案,而是透過本文所要介紹的解決方案來抑制這個問題的發生。底下來看看到底什麼是路由迴圈,而解決方案的原理又是什麼。
路由迴圈簡單案例介紹
在開始看這篇文章之前,先說明到底什麼是一個路由迴圈?先用一個最簡單的案例讓大家了解個大概。假設目前有一個簡單網路,如圖1所示。
|
▲圖1 簡單網路示意圖。 |
假設路由器A想要傳遞資料給C,但路由器B和路由器D之間的網路斷線了。而路由器A知道傳遞資料到路由器C需要透過路由器B,所以傳遞給路由器B。但是,路由器B知道要傳遞給路由器C必須透過路由器A,於是這個網路封包不斷地在路由器A與路由器B之間相互傳遞,永無止盡。這種情況就是經典的路由迴圈問題。
其實,除了RIP路由協定,大多數的路由協定都已經內建了很進階的解決方案。為什麼RIP比較不一樣呢?RIP路由協定屬於Distance Vector路由的一種,想知道為什麼,必須先了解Distance Vector路由演算法是如何運作的。
Distance Vector路由演算法
對於內部路由協定而言,其所採用的路由演算法大致分為以下三種:
- 1. Distance Vector
- 2. Link State
- 3. Balanced Hybrid
簡單來說,Distance Vector是用方向與所必須經過的設備數目(Hops)來決定路徑,並會在鄰近的路由器設備之間將這些路徑資料互相分享,而Link State則是使用最短路徑演算法(Shortest Path First)。
Distance Vector路由演算法與Link State路由演算法最大的不同就是,Link State演算法只會傳遞少部分更新的路由資料,而且會把這樣的更新資料傳遞到各個路由器設備內,而Distance Vector路由演算法會傳遞整份的資料,而且只會傳遞給鄰近的路由器設備。
不過,即使路由資料沒有任何的改變,Distance Vector也會將整份路由資料發送出來,這裡所謂的整份路由資料指的就是發送端路由器設備內Routing Table的完整資料。
當鄰近的路由器設備收到這整份路由資料之後,會開始比較已知的路由路徑,並把有更新過的資料同步至本地端路由器設備,因為這種方式都會假設接收到的資料一定是比自己還要新的資料,所以這種方式通常也被稱為「謠言路由方式」(Routing by rumor)。
就是因為這樣類似「以訛傳訛」的運作方式,所以會產生很多問題,接著一一介紹這些問題及解決方案。
基本上,Distance Vector路由演算法也是Classful路由演算法之一。RIPv1、RIPv2、IGRP以及EIGRP等路由協定都是採用這類型的路由演算法,不過EIGRP也會有部分Link State路由演算法的特徵。
由於Distance Vector路由演算法會根據必須經過的設備數目(Hops)來衡量路徑的好壞,因此對於那些直接連接的路由器設備而言,其Hops Count的值為0。
之後,隨著Distance Vector路由演算法開始運作,路由器設備會開始根據鄰近路由器設備所提供的路由資料,來尋找那些並不是直接連接的最佳路徑,因為鄰近路由器設備所提供的路由資料中,對自己這台路由器設備來說,有些並不是直接連接的,所以可以從這些資料中學習到其他網路部分的路徑情況,圖2就是一個簡單的例子。