| 在cmd命令列下輸入:netstat -r 或者 route print 就可以查看原生路由資訊了, 路由表中的每一個路由項具有五個屬性,在此我將它們分為四個部分: 1、網路地址(Network Destination)、網路遮罩(Netmask):網路地址和網路遮罩相與的結果用於定義本機電腦可以到達的網路目的位址範圍。通常情況下,網路目的位址範圍包含以下四種: 主機地址;某個特定主機的網路地址,網路遮罩為255.255.255.255,如上表中的6、7、9; 子網地址,某個特定子網的網路地址,如上表中的4、5; 網路地址;某個特定網路的網路地址,如上表中的2、3、8; 預設路由;所有未在路由表中指定的網路地址,如上表中的1,在後文將詳細描述; 在添加路由時,Windows要求輸入的網路地址和網路遮罩相與後的結果必須等於網路地址,否則路由添加會失敗。 2、網關(Gateway,又稱為下一跳伺服器):在發送IP資料包時,網關定義了針對特定的網路目的地址,資料包發送到的下一跳伺服器。如果是本機電腦直接連接到的網路,網關通常是本機電腦對應的網路介面,但是此時介面必須和網關一致;如果是遠程網路或預設路由,網關通常是本機電腦所串連到的網路上的某個伺服器或路由器。 3、介面(Interface):介面定義了針對特定的網路目的地址,本機電腦用於發送資料包的網路介面。網關必須位於和介面相同的子網,否則造成在使用此路由項時需調用其他路由項,從而可能會導致路由死結。 4、躍點數(Metric):躍點數用於指出路由的成本,通常情況下代表到達目標地址所需要經過的躍點數量,一個躍點代表經過一個路由器。躍點數越低,代表路由成本越低;躍點數越高,代表路由成本越高。當具有多條到達相同目的網路的路由項時,TCP/IP會選擇具有更低躍點數的路由項。 路由確定過程 當TCP/IP需要向某個IP地址發起通訊時,它會對路由表進行評估,以確定如何發送資料包。評估過程如下: TCP/IP使用需要通訊的目的IP地址和路由表中每一個路由項的網路遮罩進行相與計算,如果相與後的結果匹配對應路由項的網路地址,則記錄下此路由項; 當計算完路由表中所有的路由項後,TCP/IP選擇記錄下的路由項中的最長相符路由(網路遮罩中具有最多“1”位的路由項)來和此目的IP地址進行通訊。如果存在多個最長相符路由,那麼選擇具有最低躍點數的路由項;如果存在多個具有最低躍點數的最長相符路由,那麼: 如果是發送響應資料包,並且資料包的源IP地址是某個最長相符路由的介面的IP地址,那麼選擇此最長相符路由; 其他情況下均根據最長相符路由所對應的網路介面在網路連接的進階設定中的綁定優先順序來決定,如所示: 網關和介面確定過程 在確定使用的路由項後,網關和介面通過以下方式確定: 如果路由項中的網關地址為空白或者為本機電腦上的某個網路介面,那麼在發送資料包時: 通過路由項中對應的網路介面發送; 源IP地址為此網路介面的IP地址; 源MAC地址為此網路介面的MAC地址; 目的IP地址為接收此資料包的目的主機的IP地址; 目的MAC地址為接收此資料包的目的主機的MAC地址; 如果路由項中的網關地址並不屬於本機電腦上的任何網路介面,那麼在發送資料包時: 通過路由項中對應的網路介面發送; 源IP地址為路由項中對應網路介面的IP地址; 源MAC地址路由項中對應網路介面的MAC地址; 目的IP地址為接收此資料包的目的主機的IP地址; 目的MAC地址為網關的MAC地址; 在此我以上面的路由表為基礎,舉例進行說明:
和單播IP地址 192.168.1.8 的通訊:在進行相與計算時,1、3 項匹配,但是3項為最長相符路由,因此選擇3項。3項的網關地址為本機電腦的網路介面192.168.1.6,因此發送資料包時,目的IP地址為192.168.1.8、目的MAC地址為192.168.1.8的MAC地址(通過ARP解析獲得)。 和單播IP地址 192.168.1.6 的通訊:在進行相與計算時,1、3、6 項匹配,但是6項為最長相符路由,因此選擇6項。6項的網關地址為本地迴路位址127.0.0.1,因此直接將資料包發送至本地迴路位址。 和單播IP地址 192.168.1.245 的通訊:在進行相與計算時,1、3、4、5 項匹配,但是4、5項均為最長相符路由,所以此時根據躍點數進行選擇,5 項具有更低的躍點數,因此選擇5項;在發送資料包時,目的IP地址為192.168.1.254、目的MAC地址為192.168.1.7的MAC地址(通過ARP解析獲得)。 和單播IP地址 10.1.1.1 的通訊:在進行相與計算時,只有 1 項匹配;在發送資料包時,目的IP地址為10.1.1.1、目的MAC地址為192.168.1.1的MAC地址(通過ARP解析獲得)。 和子網廣播位址 192.168.1.255 的通訊:在進行相與計算時,1、3、4、5、7 項匹配,但是7項為最長相符路由,因此選擇7項。7項的網關地址為本機電腦的網路介面,因此在發送資料包時,目的IP地址為192.168.1.255,目的MAC地址為乙太網路廣播位址FF:FF:FF:FF:FF:FF。 預設路由與預設閘道 由於在路由表中儲存針對每個主機或子網的路由項不可行,因此提出了預設路由的概念,預設路由中的網關稱為預設閘道。預設路由的網路地址為0.0.0.0,網路遮罩為0.0.0.0,它匹配任何網路通訊,因此當到達特定主機或特定子網的路由並未在路由表中指定時,均可以通過預設路由來進行轉寄。如果沒有設定預設路由,那麼無法到達未在路由表中指定路由項的網路目的地址。 設定預設路由後,把資料包的路由責任移交到了路由器,優點是簡化了本機電腦上的路由表和配置,缺點則是電腦無法明確目的地址是否可達,從而可能發送針對不可到達地址的流量。雖然位於路由路徑上的路由器知道目的地址不可達時會使用ICMP目的地址不可達資訊來通知原始發送主機,但是這個過程中,已經佔用了額外的網路流量。 在Windows系統中,建立預設路由可以通過以下兩種方式實現: 在網路介面的TCP/IP選項中設定預設閘道,從而建立預設路由; 使用 route add 命令添加網路地址為0.0.0.0、網路遮罩為0.0.0.0的預設路由; 推薦大家總是使用前一種方式。 配置多個預設閘道 你可以在單個網路介面、多個網路介面上同時配置多個預設閘道,但是TCP/IP同時只會使用一個預設閘道(預設路由),這個當前使用的預設閘道稱為活動預設閘道(活動預設路由)。當不同網路介面所串連的網路之間沒有串連性時(如一個網路介面串連到Internet,而一個網路介面串連到內部網路),在多個網路介面上同時配置預設閘道可能會帶來串連性問題(具體的問題我將在後文描述),因此微軟不推薦大家在多個網路介面上同時配置預設閘道,並且當你進行這種配置時會進行警告,不過不會阻止你的操作。 當在配置多個預設閘道時,將根據以下條件來選擇活動預設閘道: 當路由表中具有多個預設閘道時,TCP/IP根據躍點數來進行選擇,躍點數最低的預設閘道具有最高的優先順序; 如果路由表中具有多個具有最低躍點數的預設閘道,那麼TCP/IP根據預設閘道對應的網路介面在網路連接的進階設定中的綁定優先順序來決定,如所示: 死網關檢測 TCP/IP會通過死網關檢測演算法來檢測當前活動的預設閘道是否存活,如果活動預設閘道發生故障,則TCP/IP會及時調整路由表,選擇使用下一個預設閘道,選擇方式與原方式一致,只是排除了發生故障的原活動預設閘道。 死網關檢測演算法的完整描述如下: 當TCP/IP在通過活動預設閘道向某個目標IP地址進行TCP通訊時,如果失敗的嘗試次數達到TcpMaxDataRetransmissions註冊表值(預設為5)的一半(即3次)還沒有收到響應,TCP/IP將到達該目標IP地址的通訊改為使用列表中的下一預設閘道。當超過25%的TCP串連轉向下一預設閘道時,TCP/IP將活動預設閘道修改為這些串連當前使用的預設閘道。 如果此時原始預設閘道從故障中回複,TCP/IP將繼續使用當前的活動預設閘道,而不會轉移到原始預設閘道,除非重啟電腦。如果當前的活動預設閘道也出現故障,那麼TCP/IP就會繼續嘗試使用列表中的下一個預設閘道,在嘗試完整個列表後將返回到列表的開始,又從第一個預設閘道開始進行嘗試。 死網關檢測僅監視TCP流量,如果其他類型的流量串連失敗,不會切換預設閘道。另外TCP是端到端的協議,因此即使當前預設閘道完全正常,本機電腦的TCP通訊失敗也可能會導致切換預設閘道。 當不同網路介面所串連的網路之間沒有串連性時(如一個網路介面串連到Internet,而一個網路介面串連到內部網路),如果在多個網路介面上同時配置預設閘道,在活動預設閘道出現故障導致切換預設閘道時,就可能會引起串連性故障。比如活動預設閘道為Internet串連,當它出現問題時,此時預設閘道切換為內部串連,此時,本機電腦將無法再訪問位於Internet串連上的主機。對於這種情況,微軟建議使用 route add 來添加對應目的網路的匹配路由,而不是設定多個預設閘道。 |