1. 程式人生 > >《TCP/IP協議詳解 卷1》--- ARP:地址解析協議

《TCP/IP協議詳解 卷1》--- ARP:地址解析協議

當一臺主機把乙太網資料幀傳送到位於同一區域網上的另一臺主機時,是根據 48 bit的乙太網地址來確定目的介面的。裝置驅動程式從不檢查 IP資料報中的目的IP地址。
ARP為IP地址到對應的硬體地址之間提供動態對映。之所以用動態這個詞是因為這個過程是自動完成的,一般應用
程式使用者或系統管理員不必關心。
這裡寫圖片描述

一個例子
這裡寫圖片描述

敲入下面這個形式的命令:
% ftp bsdi
會進行以下這些步驟:
1、應用程式FTP客戶端呼叫gethostbyname把主機名轉為32bit的IP地址,用到DNS或在較小網路中使用一個靜態的主機檔案(/etc/hosts)。
2、FTP客戶端用獲得的IP地址發出建立TCP連線請求。
3、TCP傳送一個連線請求分段到遠端的主機,即用上述 IP地址傳送一份IP資料報。
4、主機在本地網路上(如乙太網、令牌環網或點對點連結的另一端),那麼IP資料報可以直接送到目的主機上。如果目的主機在一個遠端網路上,那麼就通過IP選路
函式來確定位於本地網路上的下一站路由器地址,並讓它轉發IP資料報。
5、假定是一個乙太網,那麼傳送端主機必須把 32bit的IP地址通過ARP變換成48bit的乙太網地址。
6、ARP傳送一份稱作ARP請求的乙太網資料幀給乙太網上的每個主機。這個過程稱作廣播,如圖4-2中的虛線所示。ARP請求資料幀中包含目的主機的IP地址(主機名為bsdi),其意思是“如果你是這個IP地址的擁有者,請回答你的硬體地址。”
7、目的主機的ARP層收到這份廣播報文後,識別出這是傳送端在尋問它的IP地址,於是傳送一個A R P應答。這個ARP應答包含IP地址及對應的硬體地址。
8、收到ARP應答後,使ARP進行請求—應答交換的IP資料報現在就可以傳送了。
9、傳送IP資料報到目的主機。

ARP高度快取
快取記憶體中每一項的生存時間一般為 20分鐘。
可用arp -a 命令檢視ARP快取。

ARP的分組格式
這裡寫圖片描述
兩個位元組長的乙太網幀型別表示後面資料的型別。ARP為0x0806。
硬體型別欄位表示硬體地址的型別。1表示乙太網地址。
協議型別欄位表示要對映的協議地址型別。0x0800表示IP地址。
硬體地址長度欄位、協議地址長度欄位,以位元組為單位,對於乙太網上IP地址的ARP請求或應答來說,它們的值分別為6和4。
操作欄位指出四種操作型別,它們是ARP請求(值為1)、ARP應答(值為2)、RARP請求(值為3)和RARP應答(值為4)。

ARP舉例:一般的例子
在終端1輸入

tcpdump -e

-e表示顯示硬體地址。

在終端2輸入

telnet www.baidu.com discard

可以在終端1看到(截取了一部分):
這裡寫圖片描述

ARP代理
如果ARP請求是從一個網路的主機發往另一個網路上的主機,那麼連線這兩個網路的路由器就可以回答該請求,這個過程稱作委託ARP或ARP代理(Proxy ARP)。
這裡寫圖片描述
sun和子網140.252.1之間之間實際存在一個路由器netb,就是這個具有ARP代理功能的路由器使得sun就好像在子網140.252.1上一樣。當子網140.252.1上的一個主機gemini有一份IP資料報要傳給140.252.1.29的sun時,gemini比較網路號(140.252)和子網號(1),因為它們都是相同的,乙太網中傳送IP地址140.252.1.29的ARP請求。路由器netb識別出該IP地址屬於它的一個拔號主機,於是把它的乙太網介面地址140.252.1作為硬體地址來回答。主機gemini通過乙太網傳送IP資料報到netb,netb通過撥號SLIP鏈路把資料報轉發到sun。這個過程對於所有140.252.1子網上的主機來說都是透明的,主機sun實際上是在路由器netb後面進行配置的。

如果在主機gemini上執行arp命令,經過與主機sun通訊以後,可發現在同一個子網140.252.1上的netb和sun的IP地址對映的硬體地址是相同的。這通常是使用委託ARP的線索。

gemini % arp -a
這裡是子網140.252.1上其他主機的輸出行
netb (140.252.1.183) at 0:80:ad:3:6a:80
sun (140.252.1.29) at 0:80:ad:3:6a:80

免費ARP
傳送自己IP地址的ARP請求,一般發生在引導過程中。
作用:
1、一個主機可以通過它來確定另一個主機是否設定了相同的 IP地址。
2、如果傳送免費ARP的主機正好改變了硬體地址,那麼這個分組就可以使其他主機快取記憶體中舊的硬體地址進行相應的
更新。