了解路由表
你可以運作 route print 或 netstat -r 顯示本地計算機上的路由表,如下圖所示:
C:\Documents and Settings\administrator>route print
===========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0x10003 ...00 50 8d 4f 5f c5 ...... Realtek RTL8139/810x Family Fast Ethernet NIC
Active Routes:
Network Destination
Netmask
Gateway
Interface
Metric
1
0.0.0.0
192.168.1.1
192.168.1.6
30
2
127.0.0.0
255.0.0.0
127.0.0.1
3
192.168.1.0
255.255.255.0
4
192.168.1.240
255.255.255.240
192.168.1.8
20
5
192.168.1.7
15
6
255.255.255.255
7
192.168.1.255
8
224.0.0.0
240.0.0.0
9
Default Gateway: 192.168.1.1
Persistent Routes:
None
路由表中的每一個路由項具有五個屬性,在此我将它們分為四個部分:
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位址;
目的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 來添加對應目的網絡的比對路由,而不是設定多個預設網關。
本文轉自 jary3000 51CTO部落格,原文連結:http://blog.51cto.com/jary3000/122510,如需轉載請自行聯系原作者