TCP/IP學習筆記之七 --- IP選路

選路IP是最重要的功能之一。下圖爲IP層處理過程的簡單流程。需要進行選路的數據報可以由本地主機產生,也可以由其他主機產生。在後一種情況下,主機必須配置成一個路由器,否則通過網絡接口接收到的數據報,如果目的地址不是本機就要被丟棄。
 
IP搜索路由表的幾個步驟:
1) 搜索必配的主機地址;
2) 搜索匹配的網絡地址;
3) 搜索默認表項(一般在路由表中被指定爲一個網絡表項,其網絡號爲0);
 
對於一個給定的路由器,可以打印出五種不同的標誌(flag):
U 該路由可以使用。
G 該路由是到一個網關(路由器)。如果沒有設置該標誌,說明目的地是直接相連的。
H 該路由是到一個主機,也就是說,目的地址是一個完整的主機地址。如果沒有設置該標誌,說明該路由是到一個網絡,而目的地址是一個網絡地址:一個網絡號,或者網絡號與子網號的組合。
D 該路由是由重定向報文創建的。
M 該路由已被重定向報文修改。
標誌G是非常重要的,因爲由它區分了間接路由和直接路由(對於直接路由來說是不設置標誌G的)。其區別在於,發往直接路由的分組中不但具有指明目的端的IP地址,還具有其鏈路層地址。當分組被髮往一個間接路由時,IP地址指明的是最終的目的地,但是鏈路層地址指明的是網關(即下一站路由器)
 
主機路由表的複雜性取決於主機所在網絡的拓撲結構。
1)最簡單的(也是最不令人感興趣的)情況是主機根本沒有與任何網絡相連。TCP/IP協議仍然能用於這樣的主機,但是隻能與自己本身通信!這種情況下的路由表只包含環回接口一項。
2)接下來的情況是主機連在一個局域網上,只能訪問局域網上的主機。這時路由表包含兩項:一項是環回接口,另一項是局域網(如以太網)。
3)如果主機能夠通過單個路由器訪問其他網絡(如Internet)時,那麼就要進行下一步。一般情況下增加一個默認表項指向該路由器。
4)如果要新增其他的特定主機或網絡路由,那麼就要進行最後一步。
 
每當初始化一個接口時(通常是用ifconfig命令設置接口地址),就爲接口自動創建一個直接路由。對於點對點鏈路和環回接口來說,路由是到達主機(例如,設置H標誌)。對於廣播接口來說,如以太網,路由是到達網絡。
 
如果一份IP數據報沒有路由的默認項和匹配項,那麼要看該IP數據報是由主機產生的還是被轉發的(例如,我們就充當一個路由器)。如果數據報是由本地主機產生的,那麼就給發送該數據報的應用程序返回一個差錯,或者是“主機不可達差錯”或者是“網絡不可達差錯”。如果是被轉發的數據報,那麼就給原始發送端發送一份ICMP主機不可達的差錯報文。
 
當IP數據報應該被髮送到另一個路由器時,收到數據報的路由器就要發送ICMP重定向差錯報文給IP數據報的發送端。
1)我們假定主機發送一份IP數據報給R1。這種選路決策經常發生,因爲R1是該主機的默認路由。
2)R1收到數據報並且檢查它的路由表,發現R2是發送該數據報的下一站。當它把數據報發送給R2時,R1檢測到它正在發送的接口與數據報到達接口是相同的(即主機和兩個路由器所在的LAN)。這樣就給路由器發送重定向報文給原始發送端提供了線索。
3)R1發送一份ICMP重定向報文給主機,告訴它以後把數據報發送給R2而不是R1。
 
ICMP重定向報文:
 
ICMP重定向報文的不同代碼值
 
ICMP重定向報文的規則:首先,重定向報文只能由路由器生成,而不能由主機生成。另外,重定向報文是爲主機而不是爲路由器使用的。假定路由器和其他一些路由器共同參與某一種選路協議,則該協議就能消除重定向的需要。
 
初始化路由表的新方法:利用ICMP路由器通告和請求報文。
一般認爲,主機在引導以後要廣播或多播傳送一份路由器請求報文。一臺或更多臺路由器響應一份路由器通告報文。另外,路由器定期地廣播或多播傳送它們的路由器通告報文,允許每個正在監聽的主機相應地更新它們的路由表。
RFC1256[Deering1991]確定了這兩種ICMP報文的格式。
 
 
ICMP路由器發現報文的路由器操作:
當路由器啓動時,它定期在所有廣播或多播傳送接口上發送通告報文。準確地說,這些通告報文不是定期發送的,而是隨機傳送的,以減小與子網上其他路由器發生衝突的概率。一般每兩次通告間隔450秒和600秒。一份給定的通告報文默認生命週期是30分鐘。
使用生命週期域的另一個時機是當路由器上的某個接口被關閉時。在這種情況下,路由器可以在該接口上發送最後一份通告報文,並把生命週期值設爲0。
除了定期發送主動提供的通告報文以外,路由器還要監聽來自主機的請求報文,併發送路由器通告報文以響應這些請求報文。
如果子網上有多臺路由器,由系統管理員爲每個路由器設置優先等級。
 
ICMP路由器發現報文的主機操作:
主機在引導期間一般發送三份路由器請求報文,每三秒鐘發送一次。一旦接收到一個有效的通告報文,就停止發送請求報文。
主機也監聽來自相鄰路由器的請求報文。這些通告報文可以改變主機的默認路由器。另外,如果沒有接收到來自當前默認路由器的通告報文,那麼默認路由器會超時。
只要有一般的默認路由器,該路由器就會每隔10分鐘發送通告報文,報文的生命週期是30分鐘。這說明主機的默認表項是不會超時的,即使錯過一份或兩份通告報文。
 
ICMP路由器發現報文的實現
路由器發現報文一般由用戶進程(守護程序)創建和處理。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章