理解路由表
你可以運行 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 |
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 |
127.0.0.1 |
1 |
|
3 |
192.168.1.0 |
255.255.255.0 |
192.168.1.6 |
192.168.1.6 |
30 |
|
4 |
192.168.1.240 |
255.255.255.240 |
192.168.1.8 |
192.168.1.6 |
20 |
|
5 |
192.168.1.240 |
255.255.255.240 |
192.168.1.7 |
192.168.1.6 |
15 |
|
6 |
192.168.1.6 |
255.255.255.255 |
127.0.0.1 |
127.0.0.1 |
30 |
|
7 |
192.168.1.255 |
255.255.255.255 |
192.168.1.6 |
192.168.1.6 |
30 |
|
8 |
224.0.0.0 |
240.0.0.0 |
192.168.1.6 |
192.168.1.6 |
30 |
|
9 |
255.255.255.255 |
255.255.255.255 |
192.168.1.6 |
192.168.1.6 |
1 |
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地址;
-
目的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 來添加對應目的網絡的匹配路由,而不是設置多個默認網關。
浙公網安備 33010602011771號