章節回顧:
《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命令對高速緩存進行檢查和操作。高速緩存中的每一項內容都有一個定時器,根據它來刪除不完整和完整的表項。