C:\>route print
IPv4 Route Table
===========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0x10003 ...00 03 ff 25 88 8c ...... Intel 21140-Based PCI Fast Ethernet Adapter
(Generic)
===========================================================================
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 172.16.11.1 172.16.11.30 20
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
172.16.11.0 255.255.255.0 172.16.11.30 172.16.11.30 20
172.16.11.30 255.255.255.255 127.0.0.1 127.0.0.1 20
172.16.255.255 255.255.255.255 172.16.11.30 172.16.11.30 20
224.0.0.0 240.0.0.0 172.16.11.30 172.16.11.30 20
255.255.255.255 255.255.255.255 172.16.11.30 172.16.11.30 1
Default Gateway: 172.16.11.1
===========================================================================
Persistent Routes:
None
路由表中每一個路由表項(或路由)都由五個字段組成:
網絡目標地址(Network Destination):代表某個可能的目的地址,它是一個IP地址或子網,即表示IP數據包被轉發到何處的地址。
掩碼(Netmask):一個用於將某數據包中的IP地址中的目標地址字段與上面可能的網絡地址匹配起來的位模式。
網關(Gateway):下一跳的IP地址,數據包必須被轉發到此,才能到達特定的目的網絡。
接口(Interface):下一跳的接口,這個接口必須用於將數據包進行轉發,以達到特定的目的網絡。
跳數(metric):表示到達目的的過程中經過了多少跳數(路由器數),即路由的成本。
示例一:目標主機在本地子網上
假設這個服務器(172.16.11.30)要將數據包發往同一子網內的另一臺主機(IP地址爲172.16.11.80)。那麼這個數據包的源地址爲172.16.11.30,目標地址爲172.16.11.80。下面我們將展示Windows是如何用其路由表來決定選擇使用哪條路由的:
1. Windows首先依次從路由表中取出每一個路由,並將數據包的目標地址(172.16.11.80)與選中路由的掩碼執行邏輯“與”運算。下面展示結果,這裏,路由表中的每一個路由是通過其網絡目的地址確定的:
Route Netmask 172.16.11.80 AND Netmask
0.0.0.0 0.0.0.0 0.0.0.0
127.0.0.0 255.0.0.0 172.0.0.0
172.16.11.0 255.255.255.0 172.16.11.0
172.16.11.30 255.255.255.255 172.16.11.80
172.16.255.255 255.255.255.255 172.16.11.80
224.0.0.0 224.0.0.0 160.0.0.0
255.255.255.255 255.255.255.255 172.16.11.80
2. 對每一個路由來說,這個“與”運算的結果要與路由的網絡目標地址比較,二者的一次匹配意味着這條路由可用於將數據包轉發到其目標地址。如果發現不只有一個匹配,Windows就會選用擁有最長匹配的路由(即1的位數最高的路由)。如果這並沒有產生唯一的路由,Windows就任意地選用一個作爲路由。從上面的列表中,這個“與”運算的結果導致了兩個匹配(路由1和3),因此Windows選擇了擁有最長匹配的路由,即第三行的那個。其結果是Windows知道了使用哪個路由將數據包傳送到目的地。下面是這條路由在服務器的路由表中看起來的樣子:
Network Destination Netmask Gateway Interface Metric
172.16.11.0 255.255.255.0 172.16.11.30 172.16.11.30 20
3. Windows現在要使用下面的算法來決定下一步做什麼:
a) 如果路由的網關字段與服務器上的一個網絡接口的地址相匹配(或者如果網關是空的話),那麼Windows就會用在路由中指定的接口將數據包直接發送到目標地址。
b) 如果路由的網關字段並不與服務器上網絡接口的任意地址相匹配,Windows將會把數據包轉發給路由中的網關字段的地址。
很明顯,這裏符合條件a,路由的網關字段(172.16.11.30)即爲分配給服務器單個網卡的地址。Windows因此會作出決定認爲目標地址位於本地子網上,這也就是說Windows不需要將數據包發送到任何路由器,而是直接發送給其目的地址。在此例中,Windows使用服務器的172.16.11.30的網絡接口,簡單地將數據包發送給172.16.11.80,接收主機得到了數據包。
示例二:目標主機在遠程子網上
現在,讓我們繼續同樣的過程,不過這次我們假定服務器想把數據包發往一個不同子網上的一臺主機(IP地址爲172.16.10.200)。換句話說,數據包的源地址爲172.16.11.30,目標地址爲172.16.10.200。下面我們看一下Windows是如何利用路由表決定選擇哪條路由的: 網管網bitsCN_com
1. Windows從路由表中取出每一條路由,將數據包的目標地址(172.16.10.200)與路由中的掩碼進行“與” 運算。運算結果如下:
Route Netmask 172.16.10.200 AND Netmask
0.0.0.0 0.0.0.0 0.0.0.0
127.0.0.0 255.0.0.0 172.0.0.0
172.16.11.0 255.255.255.0 172.16.10.0
172.16.11.30 255.255.255.255 172.16.10.200
172.16.255.255 255.255.255.255 172.16.10.200
224.0.0.0 224.0.0.0 160.0.0.0
255.255.255.255 255.255.255.255 172.16.10.200
2. 對於每一條路由來說,“與”運算的結果要與路由中網絡目標地址相比較,二者匹配意味着這條路由可被用於將數據包轉發到其目標地址。從我們上面的第二張路由表,你可以看出這次只有一個匹配,也就是說是第一行,這個路由的網絡目地字段(0.0.0.0)與“與”運算的結果匹配。因此Windows用來將數據包轉發到其目標地址的路由即爲下面的路由:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 172.16.11.1 172.16.11.30 20
3. 然後Windows就會使用前述的算法來決定下一步做什麼,這次符合條件b,因爲路由的網關字段(172.16.11.1)與分配給服務器的單獨網卡的地址(172.16.11.30)並不匹配。Windows因此會決定目標地址位於一個遠程子網上,將數據包轉發給路由器,路由器通過繼續轉發數據包將其傳送到目的地。在此例中,Windows使用服務器的172.16.11.30網絡接口,將數據包發送到在網關字段中所顯示的地址。一旦位於172.16.11.1的路由器收到了數據包,它會決定下一步需要採取什麼步驟,才能將數據包轉發到其最後的目標地址172.16.10.200,而這又依賴於172.16.11.10/24網絡是172.16.11.11/24(由單個路由器連接)或一個遠程網絡的鄰近子網(由幾個中間網絡之間的路由器連接)。