2009年1月19日 星期一

[TCP/IP Illustrated] IP Routing

簡介

IP 在 TCP/IP protocol suit 中是非常重要的一個協定,有多重要呢? 以下用一張圖來簡單說明 IP 所負責的事情:

在圖中的 routing table 是最常被 IP 存取的部份,可能每秒數百次;而 routing daemon 則是在背景執行的程序,大約半分鐘會更新 routing table 的資訊一次,而更新的資訊可能來自鄰近的 router,或甚至是 ICMP redirect 的封包都可以用來作為更新 routing table 的依據。


Routing 原則

基本上,routing 的規則如下:
  1. 搜尋有無符合的 host

  2. 搜尋有無符合的 network

  3. 搜尋 default gateway (預設閘道)

以上的 routing 工作是由 IP 負責處理;而上面的規則都是去搜尋 routing table 中的資訊,而這些資訊(也稱為 routing policy)都是由 routing daemon 所負責提供。

routing table 長什麼樣呢? 以下截圖說明:

其中兩條被框起來的規則(Flags 的部份有大寫「G」)為 gateway,而 Flags 說明如下:
  • U:表示此規則路徑是正常運作的

  • G:將封包導向 gateway

  • H:將封包導向特定的主機

  • D:表示此規則是由 ICMP Redirect 訊息所新增的

  • M:表示此規則是由 ICMP Redirect 訊息所修改的



關於 routing 時會發生的錯誤種類

ICMP Host & Network Unreachable Errors

當 router 收到 IP datagram 卻無法將其繼續傳送時,就會發生此錯誤,通常此種錯誤出現的原因為網路設定上的錯誤,或是硬體線路沒接好。

ICMP Redirect Errors

此錯誤訊息是由 router 所發,目的是用來告知發送 IP datagram 的主機,應該要將封包送到另外一個 router 上。

以下用圖片來說明一下發生 ICMP Redirect Error 的情境:

  1. 其中 host 將 IP datagram 送給 R1,因為 R1 是 host 的 default gateway。

  2. R1 收到封包,檢查 routing table 規則後,發現其實 R2 才是正確的路徑,因此將封包導向 R2。

  3. 除了將封包導向外,R1 也額外發送了 ICMP Redirect Error 的訊息給 host,通知它要修改自己本身的 routing table。

由這個功能可以瞭解到,若是在複雜一點的 topology 中,要每個 host 都清楚知道封包 routing 的路徑是很難的,但有了這功能後,就可以僅設定 default gateway,接著送封包後就會由 router 通知來改變自身的 routing table 了。

【備註】
  1. 此種錯誤訊息僅有 router 能發送,host 是不能發送的。

  2. router 僅能送出 host redirect 而不是 network redirect,理由是因為 router 要掌握 topology 所有的網段資訊不是很容易,而且也有可能覆蓋原本 host 的 routing table 中不需要修改的設定。



ICMP Router Discovery Messages

此種訊息是用來讓 host 動態取得 routing 資訊用,透過發送此訊息(solicitation),周遭收到此訊息的 router 便會進行回應(advertisement);此外,router 還會定期的廣播 router advertisement,讓 host 可以即時更新 routing table 中的資訊。

從上面的運作方式可以瞭解到:
ICMP Router Discovery Message = ICMP Router Solicitation Message +
ICMP Router Advertisement Message
接著是兩種 message 的格式:

ICMP Router Solicitation Message
ICMP Router Advertisement Message

Router 在做哪些事情?

在 routing 資訊的傳送中,router 做了哪些事情呢?

router 會固定每一段時間(約 450~600 秒不等)都發送 advertisement 訊息,若是 router 中有網路介面準備要關閉停用時,會發送一個 lifetime = 0 的 advertisement 訊息通知周圍的 host 與 router 此網路介面將要失效,必須要更新 routing table 中的資訊。

若是同時有多台 router 在同一個網段中,preference level 的部份就是要由網路管理者來決定了,才有辦法讓 routing policy 有先後順序之分。

Host 在做哪些事情?

host 就跟 router 相反了,開機時送出 router solicitation 訊息,以便接收 router 的回應來更新 routing table;當然,也會隨時監聽來自 router 的 advertisement 訊息,以便取得 routing 的最新資訊。

一般來說,router advertisement 訊息每 10 分鐘就會發送一次,而 lifetime 為 30 分鐘,只要在 30 分鐘之內有收到 router advertisement,就可以一直保持著有 routing 資訊了!

沒有留言:

張貼留言