引言
本章我們要討論的問題是只對 T C P / I P 協議簇有意義的 I P 地址,資料鏈路如以太網或令牌
環網都有自己的尋址機制(常常為 48 bit 地址),這是使用資料鏈路的任何網路層都必須遵從
的,一個網路如以太網可以同時被不同的網路層使用,例如,一組使用 T C P / I P 協議的主機和
另一組使用某種 P C 網路軟體的主機可以共享相同的電纜,
當一臺主機把以太網資料幀發送到位于同一局域網上的另一臺主機時,是根據 48 bit 的以
太網地址來確定目的介面的,設備驅動程式從不檢查 I P 資料報中的目的 I P 地址,
地址決議為這兩種不同的地址形式提供映射: 32 bit 的 I P
地址和資料鏈路層使用的任何型別的地址, RFC 826 [Plummer
1 9 8 2 ]是 A R P 規范描述檔案,
A R P 為 I P 地址到對應的硬體地址之間提供動態映射,我們
之所以用動態這個詞是因為這個程序是自動完成的,一般應用
程式用戶或系統管理員不必關心,
R A R P 是被那些沒有磁盤驅動器的系統使用(一般是無盤作業站或 X 終端),它需要系統
管理員進行手工設定,

在 A R P 背后有一個基本概念,那就是網路介面有一個硬體地址(一個 48 bit 的值,標識不
同的以太網或令牌環網路介面),在硬體層次上進行的資料幀交換必須有正確的介面地址,但
是,T C P / I P 有自己的地址:32 bit 的 I P 地址,知道主機的 I P 地址并不能讓內核發送一幀資料給
主機,內核(如以太網驅動程式)必須知道目的端的硬體地址才能發送資料, A R P 的功能是
在 32 bit 的 I P 地址和采用不同網路技術的硬體地址之間提供動態映射,
點對點鏈路不使用 A R P,當設定這些鏈路時(一般在引導程序進行),必須告知內核鏈路
每一端的 I P 地址,像以太網地址這樣的硬體地址并不涉及,
ARP 高速快取
A R P 高效運行的關鍵是由于每個主機上都有一個 A R P 高速快取,這個高速快取存放了最
近 I n t e r n e t 地址到硬體地址之間的映射記錄,高速快取中每一項的生存時間一般為 2 0 分鐘,起
始時間從被創建時開始算起,
我們可以用 a r p(8)命令來檢查 ARP 高速快取,引數-a 的意思是顯示高速快取中所有的內容
ARP 的分組格式
在以太網上決議 I P 地址時,A R P 請求和應答分組的格式如圖 4 - 3 所示(A R P 可以用于其他
型別的網路,可以決議 I P 地址以外的地址,緊跟著幀型別欄位的前四個欄位指定了最后四個
欄位的型別和長度),

一般情況下,當系統收到 A R P 請求或發送 A R P 應答時,都要把請求端的硬體地址和 I P 地
址存入 A R P 高速快取,在邏輯上可以假設,如果請求端要發送 I P 資料報,那么資料報的接收
端將很可能會發送一個應答
ARP 高速快取超時設定
在 A R P 高速快取中的表項一般都要設定超時值(在 4 . 8 小節中,我們將看到管理員可以用
a r p 命令把地址放入高速快取中而不設定超時值),從伯克利系統演變而來的系統一般對完整
的表項設定超時值為 2 0 分鐘,而對不完整的表項設定超時值為 3 分鐘(在前面的例子中我們已
見過一個不完整的表項,即在以太網上對一個不存在的主機發出 A R P 請求,)當這些表項再次
使用時,這些實作一般都把超時值重新設為 2 0 分鐘,
Host Requirements RFC 表明即使表項正在使用時,超時值也應該啟動,但是大多數從伯
克利系統演變而來的系統沒有這樣做 — 它們每次都是在訪問表項時重設超時值
ARP 代理
如果 A R P 請求是從一個網路的主機發往另一個網路上的主機,那么連接這兩個網路的路
由器就可以回答該請求,這個程序稱作委托 A R P 或 A R P 代理(Proxy ARP),這樣可以欺騙發起
A R P 請求的發送端,使它誤以為路由器就是目的主機,而事實上目的主機是在路由器的“另
一邊”,路由器的功能相當于目的主機的代理,把分組從其他主機轉發給它

A R P 代理也稱作混合 A R P(p r o m i s c u o u s A R P)或 ARP 出租(ARP hack),這些名字來自于
A R P 代理的其他用途:通過兩個物理網路之間的路由器可以互相隱藏物理網路,在這種情況
下,兩個物理網路可以使用相同的網路號,只要把中間的路由器設定成一個 A R P 代理,以響
應一個網路到另一個網路主機的 A R P 請求,這種技術在過去用來隱藏一組在不同物理電纜上
運行舊版 T C P / I P 的主機,分開這些舊主機有兩個共同的理由,其一是它們不能處理子網劃分,
其二是它們使用舊的廣播地址(所有位元值為 0 的主機號,而不是目前使用的所有位元值為 1
的主機號),
免費 ARP
我們可以看到的另一個 A R P 特性稱作免費 ARP (gratuitous ARP),它是指主機發送 A R P 查
找自己的 I P 地址,通常,它發生在系統引導期間進行介面配置的時候
免費 A R P 可以有兩個方面的作用: 1) 一個主機可以通過它來確定另一個主機是否設定了相同的 I P 地址,主機 b s d i 并不希望
對此請求有一個回答,但是,如果收到一個回答,那么就會在終端日志上產生一個錯誤訊息
“以太網地址:a : b : c : d : e : f 發送來重復的 I P 地址”,這樣就可以警告系統管理員,某個系統有不
正確的設定, 2) 如果發送免費 A R P 的主機正好改變了硬體地址(很可能是主機關機了,并換了一塊接
口卡,然后重新啟動),那么這個分組就可以使其他主機高速快取中舊的硬體地址進行相應的
更新,一個比較著名的 A R P 協議事實[Plummer 1982]是,如果主機收到某個 I P 地址的 A R P 請求,
而且它已經在接收者的高速快取中,那么就要用 A R P 請求中的發送端硬體地址(如以太網地
址)對高速快取中相應的內容進行更新,主機接收到任何 A R P 請求都要完成這個操作( A R P
請求是在網上廣播的,因此每次發送 A R P 請求時網路上的所有主機都要這樣做)
文獻[ B h i d e、E l n o z a h y 和 M o rgan 1991]中有一個應用例子,通過發送含有備份硬體地址和
故障服務器的 I P 地址的免費 A R P 請求,使得備份檔案服務器可以順利地接替故障服務器進行
作業,這使得所有目的地為故障服務器的報文都被送到備份服務器那里,客戶程式不用關心
原來的服務器是否出了故障,
不幸的是,作者卻反對這個做法,因為這取決于所有不同型別的客戶端都要有正
確的 ARP 協議實作,他們顯然碰到過客戶端的 ARP 協議實作與規范不一致的情況
arp 命令
我們已經用過這個命令及引數- a 來顯示 A R P 高速快取中的所有內容,這里介紹其他引數
的功能,
超級用戶可以用選項- d 來洗掉 A R P 高速快取中的某一項內容(這個命令格式可以在運行
一些例子之前使用,以讓我們看清楚 A R P 的交換程序),
另外,可以通過選項- s 來增加高速快取中的內容,這個引數需要主機名和以太網地址:
對應于主機名的 I P 地址和以太網地址被增加到高速快取中,新增加的內容是永久性的(比如,
它沒有超時值),除非在命令列的末尾附上關鍵字 t e m p,
位于命令列末尾的關鍵字 p u b 和- s 選項一起,可以使系統起著主機 A R P 代理的作用,系統
將回答與主機名對應的 I P 地址的 A R P 請求,并以指定的以太網地址作為應答,如果廣播的地
址是系統本身,那么系統就為指定的主機名起著委托 A R P 代理的作用,
小結
在大多數的 T C P / I P 實作中,A R P 是一個基礎協議,但是它的運行對于應用程式或系統管
理員來說一般是透明的, A R P 高速快取在它的運行程序中非常關鍵,我們可以用a r p 命令對高
速快取進行檢查和操作,高速快取中的每一項內容都有一個定時器,根據它來洗掉不完整和
完整的表項,a r p 命令可以顯示和修改A R P 高速快取中的內容,
我們介紹了 A R P 的一般操作,同時也介紹了一些特殊的功能:委托 A R P(當路由器對來
自于另一個路由器介面的 A R P 請求進行應答時)和免費 A R P(發送自己 I P 地址的 A R P 請求,
一般發生在引導程序中)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/91851.html
標籤:其他
下一篇:Git的基本使用 -- 遠程倉庫
