網絡層:IP選路和動態選路協議

IP選路

    選路是IP最重要的功能之一。需要進行選路的數據報可以由本地主機產生,也可以由其他主機產生。在後一種情況下,主機必須配置成一個路由器,否則通過網絡接口接收到的數據報,如果目的地址不是本機就要被丟棄。
    IP層工作流程如圖所示:
圖1

選路的原理

    路由表中包含的信息決定了IP層所做的所有決策。
    IP搜索路由表的幾個步驟:
1. 搜索匹配的主機地址;
2. 搜索匹配的網絡地址;
3. 搜索默認表項。
    匹配主機地址步驟始終發生在匹配網絡地址步驟之前。
IP層進行的選路實際上是一種選路機制,它搜索路由表並決定向哪個網絡接口發送分組。這區別於選路策略,它只是一組決定把哪些路由放入路由表的規則。IP執行選路機制,而路由守護程序則一般提供選路策略。

典型的路由表

    路由表內容一般如下:
    Destination | Gateway | Flags | Refcnt | Use | Interface
    第一項和第二項是目的地址和網關地址。
    對於一個給定的路由器,可以打印出五種不同的標誌(flag):
- U:該路由可以使用。
- G:該路由是到一個網關(路由器)。如果沒有設置該標誌,說明目的地是直接相連的。
- H:該路由是到一個主機,也就是說,目的地址是一個完整的主機地址。如果沒有設置該標誌,說明該路由是到一個網絡,而目的地址是一個網絡地址:一個網絡號,或者網絡號與子網號的組合。
- D:該路由是由重定向報文創建的。
- M:該路由已被重定向報文修改。
    參考記數Refcnt(Referencecount)列給出的是正在使用路由的活動進程個數。
    use顯示的是通過該路由發送的分組數。
    interface是本地接口的名字。

沒有到達目的地路由

    如果路由表中沒有默認項,而又沒有找到匹配項,結果取決於該IP數據報是由主機產生的還是被轉發的。如果數據報是由本地主機產生的,那麼就給發送該數據報的應用程序返回一個差錯,或者是“主機不可達差錯”或者是“網絡不可達差錯”。如果是被轉發的數據報,那麼就給原始發送端發送一份ICMP主機不可達的差錯報文。

ICMP重定向差錯

    當IP數據報應該被髮送到另一個路由器時,收到數據報的路由器就要發送ICMP重定向差錯報文給IP數據報的發送端。重定向一般用來讓具有很少選路信息的主機逐漸建立更完善的路由表。主機啓動時路由表中可以只有一個默認表項。一旦默認路由發生差錯,默認路由器將通知它進行重定向,並允許主機對路由表作相應的改動。ICMP重定向允許TCP/IP主機在進行選路時不需要具備智能特性,而把所有的智能特性放在路由器端。
    ICMP重定向報文的格式如圖所示。
圖2
    有四種不同類型的重定向報文,有不同的代碼值,如圖所示。
圖3
    ICMP重定向報文的接收者必須查看三個IP地址:
- 導致重定向的IP地址(即ICMP重定向報文的數據位於IP數據報的首部);
- 發送重定向報文的路由器的IP地址(包含重定向信息的IP數據報中的源地址);
- 應該採用的路由器IP地址(在ICMP報文中的4~7字節)。
    關於ICMP重定向報文有很多規則。首先,重定向報文只能由路由器生成,而不能由主機生成。另外,重定向報文是爲主機而不是爲路由器使用的。假定路由器和其他一些路由器共同參與某一種選路協議,則該協議就能消除重定向的需要。
    關於重定向最後要指出的是,路由器應該發送的只是對主機的重定向(代碼1或3),而不是對網絡的重定向。子網的存在使得難於準確指明何時應發送對網絡的重定向而不是對主機的重定向。只當路由器發送了錯誤的類型時,一些主機才把收到的對網絡的重定向當作對主機的重定向來處理。

ICMP路由器發現報文

    一般認爲,主機在引導以後要廣播或多播傳送一份路由器請求報文。一臺或更多臺路由器響應一份路由器通告報文。另外,路由器定期地廣播或多播傳送它們的路由器通告報文,允許每個正在監聽的主機相應地更新它們的路由表。路由器在一份報文中可以通告多個地址。地址數指的是報文中所含的地址數。地址項大小指的是每個路由器地址32bit字的數目,始終爲2。生存期指的是通告地址有效的時間(秒數)。
    ICMP路由器請求報文格式如下圖所示。
圖4
    ICMP路由器通告報文格式如下圖所示。
圖5
    當路由器啓動時,它定期在所有廣播或多播傳送接口上發送通告報文。除了定期發送主動提供的通告報文以外,路由器還要監聽來自主機的請求報文,併發送路由器通告報文以響應這些請求報文。
    主機在引導期間一般發送三份路由器請求報文,每三秒鐘發送一次。一旦接收到一個有效的通告報文,就停止發送請求報文。主機也監聽來自相鄰路由器的請求報文。這些通告報文可以改變主機的默認路由器。另外,如果沒有接收到來自當前默認路由器的通告報文,那麼默認路由器會超時。

動態選路協議

    當相鄰路由器之間進行通信,以告知對方每個路由器當前所連接的網絡,這時就出現了動態選路。路由器之間必須採用選路協議進行通信,這樣的選路協議有很多種。路由器上有一個進程稱爲路由守護程序(routing daemon),它運行選路協議,並與其相鄰的一些路由器進行通信。

RIP:選路信息協議

    RIP報文格式如下圖所示。
圖6
    命令字段爲1表示請求,2表示應答。還有兩個捨棄不用的命令(3和4),兩個非正式的命令:輪詢(5)和輪詢表項(6)。請求表示要求其他系統發送其全部或部分路由表。應答則包含發送者全部或部分路由表。
    版本字段通常爲1,而第2版RIP將此字段設置爲2。緊跟在後面的20字節指定地址系列(address family)(對於IP地址來說,其值是2)、IP地址以及相應的度量,RIP的度量是以跳計數的。採用這種20字節格式的RIP報文可以通告多達25條路由。上限25是用來保證RIP報文的總長度爲20×25+4=504,小於512字節。由於每個報文最多攜帶25個路由,因此爲了發送整個路由表,經常需要多個報文。
    採用RIP協議的路由器運行的過程如下:
- 初始化:在啓動一個路由守護程序時,它先判斷啓動了哪些接口,並在每個接口上發送一個請求報文,要求其他路由器發送完整路由表。在點對點鏈路中,該請求是發送給其他終點的。如果網絡支持廣播的話,這種請求是以廣播形式發送的。這種請求報文的命令字段爲1,但地址系列字段設置爲0,而度量字段設置爲16。這是一種要求另一端完整路由表的特殊請求報文。
- 接收到請求。如果這個請求是剛纔提到的特殊請求,那麼路由器就將完整的路由表發送給請求者。否則,就處理請求中的每一個表項:如果有連接到指明地址的路由,則將度量設置成我們的值,否則將度量置爲16(度量爲16是一種稱爲“無窮大”的特殊值,它意味着沒有到達目的的路由)。然後發回響應。
- 接收到響應。使響應生效,可能會更新路由表。可能會增加新表項,對已有的表項進行修改,或是將已有表項刪除。
- 定期選路更新。每過30秒,所有或部分路由器會將其完整路由表發送給相鄰路由器。發送路由表可以是廣播形式的,或是發送給點對點鏈路的其他終點的。
- 觸發更新。每當一條路由的度量發生變化時,就對它進行更新。不需要發送完整路由表,而只需要發送那些發生變化的表項。

RIP版本2

    RIP-2的報文格式如下圖所示,對於RIP-2來說,其版本字段爲2。
圖7
    選路域(routingdomain)是一個選路守護程序的標識符,它指出了這個數據報的所有者。該域允許管理者在單個路由器上運行多個RIP實例,每個實例在一個選路域內運行。
    選路標記(routingtag)是爲了支持外部網關協議而存在的。它攜帶着一個EGP和BGP的自治系統號。
    每個表項的子網掩碼應用於相應的IP地址上。下一站IP地址指明發往目的IP地址的報文該發往哪裏。該字段爲0意味着發往目的地址的報文應該發給發送RIP報文的系統。
    RIP-2提供了一種簡單的鑑別機制。可以指定RIP報文的前20字節表項地址系列爲0xffff,路由標記爲2。表項中的其餘16字節包含一個明文口令。
    最後,RIP-2除了廣播外,還支持多播。這可以減少不收聽RIP-2報文的主機的負載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章