我們知道知道在一個區域網路內,需要透過 MAC 地址來定位而找到鄰居;再遠一點到跨越子網域的情況,就需要 IP 位置來定位了,而在封包送往目標的過程中,會有很多個 Switch 或 Router 作為中間節點,最終將封包成功轉送到目的地。
而我們今天就來聊聊 Layer 3 的路由(Routing),探究一下基本的路由協定,看看一個 Router 該怎麼知道收到的封包,要往哪邊送去的。
路由協定有蠻多種的,現在比較常用的協定包含 OSPF、EIGRP 等等,但有一個很古老的協定稱作 RIP,全名不是 Rest In Peace,而是 Routing Information Protocol,中文翻譯成路由資訊協定。
RIP 最早是在 1988 年被提出來的,距今已經 30 多年了。當時的計算機網路還不像現在這麼的發達,因此缺陷蠻多的,例如無法支援 CIDR(一種分配 IP 位置的方式,像是 192.168 開頭的就屬一種 Class,這些 Classes 被保留而不能作為公開 IP 位置),所以在 6、7 年後的 1994 又出了 RIPv2 的版本。
雖然 RIP 已經相當舊了,但是當作認識路由的入門協定,因為比較簡單,所以算是不錯的起手式。
而不論什麼路由協定,都會在 Router 上維護一張路由表(Routing Table),只不過形式有所不同罷了,目的就是讓收到的封包可以對照這張路由表,知道要往哪一個節點傳送。
RIP 也不例外,其作法就是每隔 30 秒向相鄰的 Router 交換資訊,動態的更新自己的路由表。
我們來看看一個例子,假設有 A、B、C、D 共 4 個 Routers,分別都有自己的子網域。
*RIP 交換路由資訊
剛開始只有綠框中 A 自己的子網域,他會和 B 及 D 交換各自的路由資訊
在 B 路由器中,假設他已經和 D 做過交換了,B 就會把兩者的路由資訊一併傳給 A,這樣就能把 192.168.2.0/24 及 192.168.3.0/24 的資訊更新在 A 的路由表上了;同樣的 D 也會讓 A 將自己的路由資訊更新到路由表上面
就是這樣每 30 秒的動態更新,A 最終可以得到一份有了這 4 個 Routers 的路由表,假設 A 的子網路之內有個設備想傳送資料到 192.168.3.100,A 就會查著這份路由表,發現下一個要轉送的節點為 B,並且透過 Interface 0(0 和 1 都分別為 Router A 的網路孔),要跳轉 2 次(從 Metric 欄位看)。
看似好像不錯的 RIP,為何現在會很少路由器在使用呢?這是因為 RIP 有一些難以在現在的網路架構下避免的缺陷。
例如 Hops(跳耀次數),這是在上面 Routing Table 中 Metric 所記錄的一個數值,根據 RIP 的定義,最大數值為 15。這代表兩個路由器之間如果要轉送超過 15 次,RIP 就會將其視為不可達的目的地,因此不適合大型的網路。
而每 30 秒才更新一次的頻率,以及一些內建的 Timer 等等行為,也會造成「收斂」的速度較慢,也就是說動態更新路由表最終趨於穩定的速度相較其他協定來說比較慢。
更甚者,由於網路上的節點是呈現網狀的,在互相交換路由資訊的過程中就會出現「迴路」的情形發生,雖然 RIP 也有機制來避免迴路,但是並沒有其他協定處理得好。
這也就是為何現在的路由設備大多不使用 RIP 的緣故,但雖如此,RIP 依舊是個適合理解路由的一種入門級協定。