1. 程式人生 > >理解Windows中的路由表和預設閘道器

理解Windows中的路由表和預設閘道器

每一個Windows系統中都具有IP路由表,它儲存了本地計算機可以到達的網路目的地址範圍和如何到達的路由資訊。路由表是TCP/IP通訊的基礎,本地計算機上的任何TCP/IP通訊都受到路由表的控制。

理解路由表

你可以執行 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的預設路由;

推薦大家總是使用前一種方式。