本章咱們要討論的問題是隻對 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 終端),它須要系統
管理員進行手工設置。ui
在 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 地址。像以太網地址這樣的硬件地址並不涉及。命令行
A R P 高效運行的關鍵是因爲每一個主機上都有一個 A R P 高速緩存。這個高速緩存存放了最
近 I n t e r n e t 地址到硬件地址之間的映射記錄。高速緩存中每一項的生存時間通常爲 2 0 分鐘,起
始時間從被建立時開始算起。
咱們能夠用 a r p(8)命令來檢查 ARP 高速緩存。參數-a 的意思是顯示高速緩存中全部的內容代理
在以太網上解析 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 數據報,那麼數據報的接收
端將極可能會發送一個應答blog
在 A R P 高速緩存中的表項通常都要設置超時值(在 4 . 8 小節中,咱們將看到管理員能夠用
a r p 命令把地址放入高速緩存中而不設置超時值)。從伯克利系統演變而來的系統通常對完整
的表項設置超時值爲 2 0 分鐘,而對不完整的表項設置超時值爲 3 分鐘(在前面的例子中咱們已
見過一個不完整的表項,即在以太網上對一個不存在的主機發出 A R P 請求。)當這些表項再次
使用時,這些實現通常都把超時值從新設爲 2 0 分鐘。
Host Requirements RFC 代表即便表項正在使用時,超時值也應該啓動,可是大多數從伯
克利系統演變而來的系統沒有這樣作 — 它們每次都是在訪問表項時重設超時值接口
若是 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
的主機號)。
咱們能夠看到的另外一個 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 協議實現與規範不一致的狀況
咱們已經用過這個命令及參數- 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 請求, 通常發生在引導過程當中)