理解子網掩碼、閘道器與ARP協議的作用
首先對子網掩碼,閘道器與ARP協議的基本知識進行概述。
子網掩碼(Subnet Mask)
子網掩碼的主要功能是告知網路裝置,一個特定的IP地址的哪一部分是包含網路地址與子網地址,哪一部分是主機地址。網路的路由裝置只要識別出目的地址的網路號與子網號即可作出路由定址決策,IP地址的主機部分不參與路由器的路由定址操作,只用於在網段中唯一標識一個網路裝置的介面。本來,如果網路系統中只使用A、B、C這三種主類地址,而不對這三種主類地址作子網劃分或者進行主類地址的彙總,則網路裝置根據IP地址的第一個位元組的數值範圍即可判斷它屬於A、B、C中的哪一個主類網,進而可確定該IP地址的網路部分和主機部分,不需要子網掩碼的輔助。
但為了使系統在對A、B、C這三種主類網進行了子網的劃分,或者採用無類別的域間選路技術(Classless Inter-Domain Routing,CIDR)對網段進行彙總的情況下,也能對IP地址的網路及子網部分與主機部分作正確的區分,就必須依賴於子網掩碼的幫助。
子網掩碼使用與IP相同的編址格式,子網掩碼為1的部分對應於IP地址的網路與子網部分,子網掩碼為0的部分對應於IP地址的主機部分。將子網掩碼和IP地址作“與”操作後,IP地址的主機部分將被丟棄,剩餘的是網路地址和子網地址。例如,一個IP分組的目的IP地址為:10.2.2.1,若子網掩碼為:255.255.255.0,與之作“與”運算得:10.2.2.0,則網路裝置認為該IP地址的網路號與子網號為:10.2.2.0。
閘道器(Gateway)
在Internet中的閘道器一般是指用於連線兩個或者兩個以上網段的網路裝置,通常使用路由器(Router)作為閘道器。在TCP/IP網路體系中,閘道器的基本作用是根據目的IP地址的網路號與子網號,選擇最佳的出口對IP分組進行轉發,實現跨網段的資料通訊。在Semester 1中只需要對閘道器的基本作用有所瞭解,在Semester 2中還將對路由器的工作機理和配置過程作詳細的論述。
ARP協議(Address Resolution Protocol)
在乙太網(Ethernet)中,一個網路裝置要和另一個網路裝置進行直接通訊,除了知道目標裝置的網路層邏輯地址(如IP地址)外,還要知道目標裝置的第二層實體地址(MAC地址)。ARP協議的基本功能就是通過目標裝置的IP地址,查詢目標裝置的MAC地址,以保證通訊的順利進行。
當一個網路裝置需要和另一個網路裝置通訊時,它首先把目標裝置的IP地址與自己的子網掩碼進行“與”操作,以判斷目標裝置與自己是否位於同一網段內。如果目標裝置在同一網段內,並且源裝置沒有獲得與目標IP地址相對應的MAC地址資訊,則源裝置以第二層廣播的形式(目標MAC地址為全1)傳送ARP請求報文,在ARP請求報文中包含了源裝置與目標裝置的IP地址。同一網段中的所有其他裝置都可以收到並分析這個ARP請求報文,如果某裝置發現報文中的目標IP地址與自己的IP地址相同,則它向源裝置發回ARP響應報文,通過該報文使源裝置獲得目標裝置的MAC地址資訊。
如果目標裝置與源裝置不在同一網段,則源裝置首先把IP分組發向自己的預設閘道器(Default Gateway),由預設閘道器對該分組進行轉發。如果源裝置沒有關於預設閘道器的MAC資訊,則它同樣通過ARP協議獲取預設閘道器的MAC地址資訊。
為了減少廣播量,網路裝置通過ARP表在快取中儲存IP與MAC地址的對映資訊。在一次ARP的請求與響應過程中,通訊雙方都把對方的MAC地址與IP地址的對應關係儲存在各自的ARP表中,以在後續的通訊中使用。ARP表使用老化機制,刪除在一段時間內沒有使用過的IP與MAC地址的對映關係。
實驗設計
我們通過設計一個簡單的實驗來幫助學員更深入直觀地理解上述三個知識點所涉及的基本概念與原理。在實驗中,我們利用ping命令來檢驗主機間能否進行正常的雙向通訊。在“ping”的過程中,源主機向目標主機發送ICMP的Echo Request報文,目標主機收到後,向源主機發回ICMP的Echo Reply報文,從而可以驗證源與目標主機能否進行正確的雙向通訊。
A與B為實驗用的PC機,使用Windows2000 Professional作作業系統。
實驗方案:
步驟1:
設定兩臺主機的IP地址與子網掩碼:
A: 10.2.2.2 255.255.254.0
B: 10.2.3.3 255.255.254.0
兩臺主機均不設定預設閘道器。
用arp -d命令清除兩臺主機上的ARP表,然後在A與B上分別用ping命令與對方通訊,在A與B上分別顯示,
A: Reply from 10.2.3.3: bytes=32 time<10ms TTL=128
B: Reply from 10.2.2.2: bytes=32 time<10ms TTL=128
用arp -a命令可以在兩臺PC上分別看到對方的MAC地址。
分析:由於主機將各自通訊目標的IP地址與自己的子網掩碼相“與”後,發現目標主機與自己均位於同一網段(10.2.2.0),因此通過ARP協議獲得對方的MAC地址,從而實現在同一網段內網路裝置間的雙向通訊。
步驟2:
將A的子網掩碼改為:255.255.255.0,其他設定保持不變。
操作1:用arp -d命令清除兩臺主機上的ARP表,然後在A上ping B,在A上顯示結果為:Destination host unreachable
用arp -a命令在兩臺PC上均不能看到對方的MAC地址。
分析1:A將目標裝置的IP地址(10.2.3.3)和自己的子網掩碼(255.255.255.0)相“與”得10.2.3.0,和自己不在同一網段(A所在網段為:10.2.2.0),則A必須將該IP分組首先發向預設閘道器。由於A的預設閘道器沒有配置,無法對分組進行正確傳送,因此顯示“目標主機不可到達”。
操作2:接著在B上ping A,在B上顯示結果為:Request timed out 此時用arp -a命令可以在兩臺PC上分別看到對方的MAC地址。
分析2:B將目標裝置的IP地址(10.2.2.2)和自己的子網掩碼(255.255.254.0)相“與”,發現目標主機與自己均位於同一網段(10.2.2.0),因此,B通過ARP協議獲得A的MAC地址,並可以正確地向A傳送Echo Request報文。但由於A不能向B正確地發回Echo Reply報文(原因見分析1),故B上顯示ping的結果為“請求超時”。在該實驗操作中,通過觀察A與B的ARP表的變化,可以驗證:在一次ARP的請求與響應過程中,通訊雙方就可以獲知對方的MAC地址與IP地址的對應關係,並儲存在各自的ARP表中。
步驟3:
在前面實驗的基礎上,把A的預設閘道器設為:10.2.2.1,閘道器的子網掩碼為:255.255.0.0。
在A與B上分別用ping命令與對方通訊,各自的顯示結果為:
A: Reply from 10.2.3.3: bytes=32 time<10ms TTL=128
B: Reply from 10.2.2.2: bytes=32 time<10ms TTL=127
在A與B上分別用tracert命令追蹤資料的傳輸路徑,結果分別為:
A: tracert 10.2.3.3
Tracing route to 10.2.3.3 over a maximum of 30 hops:
1 <10 ms <10 ms <10 ms 10.2.2.1
2 <10 ms <10 ms <10 ms 10.2.3.3
Trace complete.
B: tracert 10.2.2.2
Tracing route to 10.2.2.2 over a maximum of 30 hops:
1 <10 ms <10 ms <10 ms 10.2.2.2
Trace complete.
分析:如步驟2中的分析,由於A認為B與其不在同一個網段,故從A發向B的報文需要經過閘道器轉發;而B認為A與其在同一個網段,故B不需要經過閘道器直接向A傳送報文,從而可以觀察到A與B雙向通訊時傳輸路徑的不對稱性。由於ping命令結果顯示的是從目標主機返回的Echo Reply報文的TTL的值,而B收到從A返回的Echo Reply報文經過了閘道器的轉發,所以在B中顯示該IP報文的TTL值降為了127(從A發出的IP分組的TTL的初始值為128,每經過一個閘道器,TTL值減1)。
步驟4:
用arp -d命令清除A中的ARP表,在A上ping一臺外網段的主機,如中大的WWW Server(202.116.64.8),再用arp -a可觀察到A的ARP表中只有預設閘道器的MAC地址資訊。
分析:當源主機要和外網段的主機進行通訊時,它並不需要獲取遠端主機的MAC地址,而是把IP分組發向預設閘道器,由閘道器IP分組的完成轉發過程。如果源主機沒有預設閘道器MAC地址的快取記錄,則它會通過ARP協議獲取閘道器的MAC地址,因此在A的ARP表中只觀察到閘道器的MAC地址記錄,而觀察不到遠端主機的MAC地址。