重讀Route Print路由表的一些心得

重讀Route Print路由表的一些心得 
 
版權聲明:原創作品,允許轉載,轉載: http://jeffyyko.blog.51cto.com/28563/140006
      (首發在bbs.winos.cn,若轉載請說明出處,謝謝) 
     拜讀了yansy老師的有關route print的一篇帖子,當時只是粗略的看了一下,也從中瞭解了不少東西,但自己沒有細想,最近在做一些rras的測試時,添加靜態路由那一部分我被卡住了,於是想把這部分再仔細琢磨一下,這些是我昨天和今天的學習成果和感悟,寫出來和大家分享,同時,如果其間有錯誤請各位不吝指正,謝謝。

     我們先看一個單一宿主tcp/ip主機上路由表的例子,這裏首先介紹一個概念,什麼是宿主機,宿主機就是執行編譯、鏈接、定址等任務的計算機(當然在別的領域可能有另外的含義,這裏不再多述)。如果這臺計算機上同時運行tcp/ip協議,就成爲tcp/ip宿主主機,“單一”這裏就很明確的表明單獨的一臺計算機,並未接入任何網絡,包括局域網等。英文表述即爲single-homed,這個詞在微軟的相關技術文章裏出現過多次。相對的,還有多宿主主機,也就是mulit-homed。
OK,下面我們來逐步分析路由表裏的各個條目,準確說應該是逐層分析。

環境:純淨xp sp3客戶端
內網網段:192.168.0.X-192.168.7.X 網關:192.168.0.1 掩碼:255.255.248.0
由ISA2006代理上網
 
測試步驟:
1、新裝一臺乾淨的XP SP3系統,注意,這裏我們先不安裝網卡驅動,如圖:
2、進入命令行程序,輸入route print ,我們查看一下當前的路由表,如圖:

從上圖我們可以看出,127.0.0.1和物理的網卡沒有任何關係,此時通過查看本機的路由表,會得到以下條目:
Network Destination        Netmask       Gateway    Interface   Metric
       127.0.0.0        255.0.0.0        127.0.0.1    127.0.0.1    1
關於各個值及含義,後面會講到,這裏先提一下
3、現在我們將XP的網卡驅動裝上並停用,並再次運行route print 命令,如圖

圖中已經添加了一塊網卡,如果網卡是停用的狀態,此時的路由表和沒有網卡結果一樣。
4、啓用這塊網卡,大家請看圖

很明顯,多了下面一條記錄:
Network Destination        Netmask             Gateway       Interface    Metric
       127.0.0.0                255.0.0.0        127.0.0.1        127.0.0.1       1
255.255.255.255    255.255.255.255 255.255.255.255    20003       1
此時,出現了一種較特殊的情況,儘管已經啓用網卡,但沒有配置IP地址,現在這塊網卡處於孤立的狀態,
瓷實運行ipconfig,則得到 “Media State . . . . . . . . . . . : Media disconnected”這樣的迴應。
255.255.255.255這個地址原本是一個有限廣播,屬於廣播地址的一種,但在這種情況下爲什麼會給出全255的地址,我有點不明白。
    OK,現在我們就知道了,127.0.0.1這個特殊的地址,不僅僅是127.0.0.1,這個127.X.X.X 都是如此,它是預先一已定義在系統中,也就是內置的迴環地址,這個和硬件網絡設備的地址沒有什麼關係,它的存在是爲了測試本機的tcp/ip協議工作是否正常,假設你想用抓包工具抓包,你會發現無法抓取到任何數據包,因爲在對127.0.0.1進行測試的時候,產生的流量併爲經過網卡,所以可以說明完全是系統內部的一個測試過程,但,通過route print還是可以看到127.0.0.1相關的幾條路由,因爲這些路由條目是必須存在的,以保證最基本的網絡穩定性,同時也是很重要的網絡調試信息。
    我們現在還原正常的測試環境,無論是手動設置IP或者是從dhcp服務器中獲取IP地址,當地址輸入正確,何謂“正確”,系統是從這幾個方面來判定的:
1、IP地址的首個字段十進制數字必須在1-223之間(不含127),爲什麼?因爲0開頭的地址,無法當作一個IP地址來使用,其次,大於223後的地址均作爲保留或測試只用,不能用在實際的網絡環境中。
2、IP地址只能輸入有效範圍的整數,首位1-223之間,其餘位0-255,當然廣播地址也不行。
3、還有一些限定,在我們輸入完IP後,系統內部會做一些基本的判斷,以此保證IP地址合理。
當然,你在設定IP的時候也要依據當前網絡地址規劃而定,否則任意輸入的地址,儘管邏輯上有效,如果無用,那也是沒有任何實際意義的。
設置好IP,系統會根據設置的IP地址很快計算出一張路由表,也就是route print命令顯示出的部分。這些是系統的內部機制,我們不用理會。這裏不僅有內部127段的路由條目,還有我們新加入地址的相應路由條目。
我們打開cmd,運行route print ,來查看一下當前的路由表,如下:
Active Routes:
Network Destination    Netmask       Gateway             Interface       Metric
0.0.0.0                      0.0.0.0             192.168.0.1    192.168.5.20    20
127.0.0.0                   255.0.0.0          127.0.0.1           127.0.0.1              1
192.168.0.0                 255.255.248.0     192.168.5.20    192.168.5.20    20
192.168.5.20             255.255.255.255   127.0.0.1           127.0.0.1          20
192.168.5.255              255.255.255.255 192.168.5.20    192.168.5.20    20
224.0.0.0                   240.0.0.0          192.168.5.20    192.168.5.20    20
255.255.255.255       255.255.255.255   192.168.5.20     192.168.5.20       1
Default Gateway:    192.168.0.1
=======================================================
Persistent Routes:
   None
大家也可以打開自己當前網絡的路由表對照起來看,會更清晰些。
初看這個路由表,讓人感覺有點怪,怎麼一開始就目的地了呢?   源在那????? 爲了更容易理解,我把這個路由表的格式稍微改了一下:
------
Interface       Network Dest.    Netmask                      Gateway                 Metric
127.0.0.1             127.0.0.0           255.0.0.0             127.0.0.1                    1
127.0.0.1              192.168.5.20        255.255.255.255 127.0.0.1                20
-------
192.168.5.20       192.168.5.255    255.255.255.255 192.168.5.20          20
192.168.5.20       192.168.0.0       255.255.248.0    192.168.5.20          20
192.168.5.20       0.0.0.0              0.0.0.0                192.168.0.1             20
192.168.5.20       224.0.0.0          240.0.0.0          192.168.5.20          20
192.168.5.20       255.255.255.255 255.255.255.255   192.168.5.20              1
Default Gateway:     192.168.0.1
-------------------------
請大家注意,我把interface調到了第一列,並根據interface一列,將表分爲2部分,一部分是127的路由條目,一部分是和物理網卡ip 192.168.5.20相關的路由條目。

下面我們來分析這些路由條目:
第一部分
127.0.0.1很特殊,但畢竟也是一個IP地址,它也有自己的網絡地址和廣播地址,儘管我們幾乎用不到。所以,就存在1條經接口127.0.0.1到127.0.0.0 這個網絡的路由,掩碼自然是255.0.0.0,網關呢? 網關簡單說就是路由的下一跳的出口地址,你想訪問127.0.0.0/8的任意一個地址,顯然這個地址和自己在一個網段上,沒有必要跨網段,就像你想從自己家的廚房到客廳一樣,不用出門就可以直接到達,因此最終的出口(下一跳)就是自己了,metric 表示跳躍數,用於確定最佳路由,在某些情況下越小越好,但也不是絕對的。


第二條可以這樣理解,如果想讓tcp/ip和網卡良好的通訊,就需要有一條路由可以讓系統內部路由到物理網卡上,如此,纔可以保證在本機上設置的任意IP均可以順利與環回地址通訊,同時這也是系統自身網絡機制必須實現的一部分。

剩下的都和網卡設置的地址有關了。
第二部分
第三條,接口爲本機IP,目標爲192.168.5.255,這是一個直接廣播地址,也就是廣播地址的另一種類型,指代一個特定網絡中的所有主機。顯然這裏是指192.168.5.X的某一個目標地址。ping命令其實就是用的這條路由。

第四條呢,可以理解爲如果某個地址和掩碼255.255.248.0進行與運算後結果都是192.168.0.0,則本機地址可以與之通訊,這條路由的作用其實是代替了這個計算過程,和上一條相比,不僅僅侷限與192.168.5.x網段的地址,而是符合上面條件的所有地址。比如我可以ping通192.168.0.x-192.166.7.x 的任意一個IP,就是因爲這條路由在起作用。

第五條,如果訪問地址並非本地,則系統會將目標地址當作0.0.0.0 掩碼是0.0.0.0,也就是除本地、127地址之外的所有地址均通過192.168.0.1這個網關出去,這條路由通常被稱爲默認路由,說白了,你上外網就是依靠此條路由策略。就是因爲有了這條路由,纔可以將訪問外網的請求都發給網關192.168.0.1,之後就由0.1主機上的isa2006代理去處理這些請求了。

第六條,224開頭的是多播地址,這個是在某些情況下給多地址發廣播時用的,因此這裏會單獨作爲一條路由策略列出。我們平時不會直接用到這條策略,但也不可或缺。

最後一條,255.255.255.255的地址已提到過,它是廣播地址的另一種被稱爲有限廣播,同時也叫本地廣播。我想經常用抓包工具的朋友對這個地址應該不會陌生,MAC地址是全F的就是目標廣播地址了,arp協議會用到此地址對全部主機發送廣播以實現查詢特定主機的請求,由於不知道對方mac地址,所以就用全F,也就是FF-FF-FF-FF-FF-FF 來表示。

    從上面我們可以看出,下一條的指定很重要,因爲它會指引系統或程序等訪問請求下一個要去的地方在哪裏,這點至關重要。
大致說完了,有的地方說的有點亂,請見諒。
如果有錯誤的地方,請大家指正,謝謝。
本文出自 “許一君的原創技術博客” 博客,請務必保留此出處http://jeffyyko.blog.51cto.com/28563/140006
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章