章節回顧:
《TCP/IP詳解卷1:協議》第3章 IP:網際協議(1)-讀書筆記
《TCP/IP詳解卷1:協議》第3章 IP:網際協議(2)-讀書筆記
《TCP/IP詳解卷1:協議》第4章 ARP:地址解析協議-讀書筆記
《TCP/IP詳解卷1:協議》第5章 RARP:逆地址解析協議-讀書筆記
《TCP/IP詳解卷1:協議》第6章 ICMP:Internet控制報文協議-讀書筆記
《TCP/IP詳解卷1:協議》第11章 UDP:使用者資料包協議-讀書筆記
《TCP/IP詳解卷1:協議》第17、18章 TCP:傳輸控制協議(1)-讀書筆記
《TCP/IP詳解卷1:協議》第17、18章 TCP:傳輸控制協議(2)-讀書筆記
《TCP/IP詳解卷1:協議》第19章 TCP的互動資料流-讀書筆記
1、引言
當一臺主機把乙太網資料幀傳送到位於同一區域網上的另一臺主機時,是根據48 bit的乙太網地址來確定目的介面的。裝置驅動程式從不檢查IP資料包中的目的IP地址。地址解析為這兩種不同的地址形式提供對映:32 bit的IP地址和資料鏈路層使用的任何型別的地址。
說明:ARP為IP地址到對應的硬體地址之間提供動態對映。這個過程是自動完成的,一般應用程式使用者或系統管理員不必關心。
2、舉一個例子
當敲入以下命令時:ftp bsdi(主機名),會發生下列步驟:
(1)應用程式FTP客戶端呼叫函式gethostbyname把主機名(bsdi)轉換成32 bit的IP地址。這個轉換過程或者使用DNS,或者在較小網路中使用一個靜態的主機檔案(/etc/hosts)。
(2)FTP客戶端請求TCP用得到的IP地址建立連線。
(3)TCP傳送一個連線請求分段到遠端的主機,即用上述IP地址傳送一份IP資料包。
(4)如果目的主機在本地網路上(如乙太網、令牌環網或點對點連結的另一端),那麼IP資料包可以直接送到目的主機上。如果目的主機在一個遠端網路上,就通過IP選路函式來確定位於本地網路上的下一站路由器地址,並讓它轉發IP資料包。
(5)假定是一個乙太網,那麼傳送端主機必須把32 bit的IP地址變換成48 bit的乙太網地址。從邏輯Internet地址到對應的物理硬體地址需要進行翻譯,這是ARP的功能。
(6)ARP傳送一份稱作ARP請求的乙太網資料幀給乙太網上的每個主機,這個過程稱作廣播。ARP請求資料幀中包含目的主機的IP地址(主機名為bsdi),意思是“如果你是這個IP地址的擁有者,請回答你的硬體地址。”
(7)目的主機的ARP層收到這份廣播報文後,識別出這是傳送端在尋問它的IP地址,於是傳送一個ARP應答。這個ARP應答包含IP地址及對應的硬體地址。
(8)收到ARP應答後,使ARP進行請求-應答交換的IP資料包現在就可以傳送了。
(9)傳送IP資料包到目的主機。
說明:
(1)在ARP背後有一個基本概念,就是網路介面有一個硬體地址(一個48 bit的值,標識不同的乙太網或令牌環網路介面)。
(2)在硬體層次上進行的資料幀交換必須有正確的介面地址。但是,TCP/IP有自己的地址:32 bit的IP地址。知道主機的IP地址並不能讓核心傳送一幀資料給主機。核心(如乙太網驅動程式)必須知道目的端的硬體地址才能傳送資料。
(3)ARP的功能是在32 bit的IP地址和採用不同網路技術的硬體地址之間提供動態對映。
(4)點對點鏈路不使用ARP。當設定這些鏈路時(一般在引導過程進行),必須告知核心鏈路每一端的IP地址。像乙太網地址這樣的硬體地址並不涉及。
3、ARP快取記憶體
ARP高效執行的關鍵是由於每個主機上都有一個ARP快取記憶體。這個快取記憶體存放了最近Intern et地址到硬體地址之間的對映記錄。快取記憶體中每一項的生存時間一般為20分鐘,起始時間從被建立時開始算起。
可用arp命令來檢查ARP快取記憶體。-a的意思是顯示快取記憶體中所有的內容。
48 bit的乙太網地址用6個十六進位制的數來表示,中間以冒號隔開。
4、ARP的分組格式
在乙太網上解析IP地址時,ARP請求和應答分組的格式如圖4-3所示。
注意:ARP也可以用於其他型別的網路,可以解析IP地址以外的地址。
ARP分組說明:
(1)前兩個欄位是乙太網的源地址和目的地址。目的地址為全1的地址是廣播地址。電纜上的所有乙太網介面都要接收廣播的資料幀。
(2)乙太網幀型別表示後面資料的型別。對於ARP請求或應答來說,該欄位的值為0x0806。
(3)硬體型別欄位表示硬體地址的型別。它的值為1即表示乙太網地址。
(4)協議型別欄位表示要對映的協議地址型別。它的值為0x0800即表示IP地址。
(5)硬體地址長度和協議地址長度分別指出硬體地址和協議地址的長度,以位元組為單位。對於乙太網上IP地址的ARP請求或應答來說,它們的值分別為6和4。
(6)操作欄位指出四種操作型別,它們是ARP請求(值為1)、ARP應答(值為2)、RARP請求(值為 3)和RARP應答(值為4)。
對於一個ARP請求來說,除目的端硬體地址外的所有其他的欄位都有填充值。當系統收到一份目的端為本機的ARP請求報文後,它就把硬體地址填進去,然後用兩個目的端地址分別替換兩個傳送端地址,並把操作欄位置為2,最後把它傳送回去。
5、關於ARP請求的其他說明
(1)儘管ARP請求是廣播的,但ARP應答是直接送到請求端主機的,而不是廣播的。
(2)一般情況下,當系統收到ARP請求或傳送ARP應答時,都要把請求端的硬體地址和IP地址存入 ARP快取記憶體。在邏輯上可以假設,如果請求端要傳送IP資料包,那麼資料包的接收端將很可能會傳送一個應答。
(3)在ARP快取記憶體中的表項一般都要設定超時值。從伯克利系統演變而來的系統一般對完整的表項設定超時值為20分鐘,而對不完整的表項設定超時值為3分鐘。
6、ARP代理
如果ARP請求是從一個網路的主機發往另一個網路上的主機,那麼連線這兩個網路的路由器就可以回答該請求,這個過程稱作委託ARP或ARP代理。這樣可以欺騙發起ARP請求的傳送端,使它誤以為路由器就是目的主機,而事實上目的主機是在路由器的“另一邊”。
說明:路由器的功能相當於目的主機的代理,把分組從其他主機轉發給它。
ARP代理也稱作混合ARP或ARP出租(ARP hack)。這些名字來自於ARP代理的其他用途:通過兩個物理網路之間的路由器可以互相隱藏物理網路。在這種情況下,兩個物理網路可以使用相同的網路號,只要把中間的路由器設定成一個ARP代理,以響應一個網路到另一個網路主機的ARP請求。
7、免費ARP
它是指主機傳送ARP查詢自己的IP地址。通常,它發生在系統引導期間進行介面配置的時候。免費ARP有兩個作用:
(1)一個主機可以通過它來確定另一個主機是否設定了相同的IP地址。主機並不希望對此ARP請求有一個回答。
(2)如果傳送免費ARP的主機正好改變了硬體地址(很可能是主機關機了,並換了一塊介面卡,然後重新啟動),那麼這個分組就可以使其他主機快取記憶體中舊的硬體地址進行相應的更新。
說明:
一個比較著名的ARP協議事實是,如果主機收到某個IP地址的ARP請求,而且它已經在接收者的快取記憶體中,那麼就要用ARP請求中的傳送端硬體地址(如乙太網地址)對快取記憶體中相應的內容進行更新。主機接收到任何ARP請求都要完成這個操作(ARP請求是在網上廣播的,因此每次傳送ARP請求時網路上的所有主機都要這樣做)。
小結:
在大多數的TCP/IP實現中,ARP是一個基礎協議,但是它的執行對於應用程式或系統管理員來說一般是透明的。ARP快取記憶體在它的執行過程中非常關鍵,可以用arp命令對快取記憶體進行檢查和操作。快取記憶體中的每一項內容都有一個定時器,根據它來刪除不完整和完整的表項。