4.1 引言
本章我們要討論的問題是只對TCP/IP協(xié)議簇有意義的IP地址梗掰。數(shù)據(jù)鏈路如以太網(wǎng)或令牌環(huán)網(wǎng)都有自己的尋址機制(常常為48 bit地址),這是使用數(shù)據(jù)鏈路的任何網(wǎng)絡(luò)層都必須遵從的掰茶。一個網(wǎng)絡(luò)如以太網(wǎng)可以同時被不同的網(wǎng)絡(luò)層使用封锉。例如冯痢,一組使用TCP/IP協(xié)議的主機和另一組使用某種PC網(wǎng)絡(luò)軟件的主機可以共享相同的電纜凳宙。
當一臺主機把以太網(wǎng)數(shù)據(jù)幀發(fā)送到位于同一局域網(wǎng)上的另一臺主機時桑驱,是根據(jù)48 bit的以太網(wǎng)地址來確定目的接口的鳖粟。設(shè)備驅(qū)動程序從不檢查IP數(shù)據(jù)報中的目的IP地址缕贡。
地址解析為這兩種不同的地址形式提供映射:32 bit的IP32位Internet地址地址和數(shù)據(jù)鏈路層使用的任何類型的地址曙强。RFC 826[Plummer 1982]是ARP規(guī)范描述文檔福稳。
本章及下一章我們要討論的兩種協(xié)議如圖4-1所示:ARP(地址解析協(xié)議)和RARP(逆地址解析協(xié)議)涎拉。
ARP為IP地址到對應(yīng)的硬件地址之間提供動態(tài)映射。我們之所以用動態(tài)這個詞是因為這個過程是自動完成的的圆,一般應(yīng)用程序用戶或系統(tǒng)管理員不必關(guān)心鼓拧。
RARP是被那些沒有磁盤驅(qū)動器的系統(tǒng)使用(一般是無盤工作站或X終端),它需要系統(tǒng)管理員進行手工設(shè)置越妈。我們在第5章對它進行討論季俩。
4.2一個例子
任何時候我們敲入下面這個形式的命令:
% ftp bsdi
都會進行以下這些步驟。這些步驟的序號如圖4-2所示梅掠。
1:應(yīng)用程序FTP客戶端調(diào)用函數(shù)gethostbyname(3)把主機名(bsdi)轉(zhuǎn)換成32 bit的IP地址酌住。這個函數(shù)在DNS(域名系統(tǒng))中稱作解析器,我們將在第14章對它進行介紹阎抒。這個轉(zhuǎn)換過程或者使用DNS酪我,或者在較小網(wǎng)絡(luò)中使用一個靜態(tài)的主機文件(/etc/hosts)。
2:FTP客戶端請求TCP用得到的IP地址建立連接且叁。
3:TCP發(fā)送一個連接請求分段到遠端的主機都哭,即用上述IP地址發(fā)送一份IP數(shù)據(jù)報(在第18章我們將討論完成這個過程的細節(jié))。
4:如果目的主機在本地網(wǎng)絡(luò)上(如以太網(wǎng)、令牌環(huán)網(wǎng)或點對點鏈接的另一端)欺矫,那么IP數(shù)據(jù)報可以直接送到目的主機上纱新。如果目的主機在一個遠程網(wǎng)絡(luò)上,那么就通過IP選路函數(shù)來確定位于本地網(wǎng)絡(luò)上的下一站路由器地址穆趴,并讓它轉(zhuǎn)發(fā)IP數(shù)據(jù)報脸爱。在這兩種情況下,IP數(shù)據(jù)報都是被送到位于本地網(wǎng)絡(luò)上的一臺主機或路由器毡代。
5:假定是一個以太網(wǎng)阅羹,那么發(fā)送端主機必須把32 bit的IP地址變換成48 bit的以太網(wǎng)地址。從邏輯Internet地址到對應(yīng)的物理硬件地址需要進行翻譯教寂。這就是ARP的功能。ARP本來是用于廣播網(wǎng)絡(luò)的执庐,有許多主機或路由器連在同一個網(wǎng)絡(luò)上酪耕。
6:ARP發(fā)送一份稱作ARP請求的以太網(wǎng)數(shù)據(jù)幀給以太網(wǎng)上的每個主機。這個過程稱作廣播轨淌,如圖4-2中的虛線所示迂烁。ARP請求數(shù)據(jù)幀中包含目的主機的IP地址(主機名為bsdi),其意思是“如果你是這個IP地址的擁有者递鹉,請回答你的硬件地址盟步。”
7:目的主機的ARP層收到這份廣播報文后躏结,識別出這是發(fā)送端在尋問它的IP地址却盘,于是發(fā)送一個ARP應(yīng)答。這個ARP應(yīng)答包含IP地址及對應(yīng)的硬件地址媳拴。
8:收到ARP應(yīng)答后黄橘,使ARP進行請求—應(yīng)答交換的IP數(shù)據(jù)報現(xiàn)在就可以傳送了。
9:發(fā)送IP數(shù)據(jù)報到目的主機屈溉。
在ARP背后有一個基本概念塞关,那就是網(wǎng)絡(luò)接口有一個硬件地址(一個48 bit的值,標識不同的以太網(wǎng)或令牌環(huán)網(wǎng)絡(luò)接口)子巾。在硬件層次上進行的數(shù)據(jù)幀交換必須有正確的接口地址帆赢。但是,TCP/IP有自己的地址:32 bit的IP地址线梗。知道主機的IP地址并不能讓內(nèi)核發(fā)送一幀數(shù)據(jù)給主機椰于。內(nèi)核(如以太網(wǎng)驅(qū)動程序)必須知道目的端的硬件地址才能發(fā)送數(shù)據(jù)。ARP的功能是在32 bit的IP地址和采用不同網(wǎng)絡(luò)技術(shù)的硬件地址之間提供動態(tài)映射缠导。
點對點鏈路不使用ARP廉羔。當設(shè)置這些鏈路時(一般在引導(dǎo)過程進行),必須告知內(nèi)核鏈路每一端的IP地址。像以太網(wǎng)地址這樣的硬件地址并不涉及憋他。
4.3 ARP高速緩存
ARP高效運行的關(guān)鍵是由于每個主機上都有一個ARP高速緩存孩饼。這個高速緩存存放了最近Internet地址到硬件地址之間的映射記錄。高速緩存中每一項的生存時間一般為20分鐘竹挡,起始時間從被創(chuàng)建時開始算起镀娶。
我們可以用arp(8)命令來檢查ARP高速緩存。參數(shù)-a的意思是顯示高速緩存中所有的內(nèi)容揪罕。
bsdi %arp -a
sun (140.252.13.33) at 8:0:20:3:f6:42
svr4 (140.252.13.34) at 0:0:c0:c2:9b:26
48 bit的以太網(wǎng)地址用6個十六進制的數(shù)來表示梯码,中間以冒號隔開。在4.8小節(jié)我們將討論arp命令的其他功能好啰。
4.4 ARP的分組格式
在以太網(wǎng)上解析IP地址時轩娶,ARP請求和應(yīng)答分組的格式如圖4-3所示(ARP可以用于其他類型的網(wǎng)絡(luò),可以解析IP地址以外的地址框往。緊跟著幀類型字段的前四個字段指定了最后四個字段的類型和長度)鳄抒。
以太網(wǎng)報頭中的前兩個字段是以太網(wǎng)的源地址和目的地址。目的地址為全1的特殊地址是廣播地址椰弊。電纜上的所有以太網(wǎng)接口都要接收廣播的數(shù)據(jù)幀许溅。
兩個字節(jié)長的以太網(wǎng)幀類型表示后面數(shù)據(jù)的類型。對于ARP請求或應(yīng)答來說秉版,該字段的值為0x0806贤重。
形容詞hardware(硬件)和protocol(協(xié)議)用來描述ARP分組中的各個字段。例如清焕,一個ARP請求分組詢問協(xié)議地址(這里是IP地址)對應(yīng)的硬件地址(這里是以太網(wǎng)地址)并蝗。
硬件類型字段表示硬件地址的類型。它的值為1即表示以太網(wǎng)地址耐朴。協(xié)議類型字段表示要映射的協(xié)議地址類型借卧。它的值為0x0800即表示IP地址。它的值與包含IP數(shù)據(jù)報的以太網(wǎng)數(shù)據(jù)幀中的類型字段的值相同筛峭,這是有意設(shè)計的(參見圖2-1)铐刘。
接下來的兩個1字節(jié)的字段,硬件地址長度和協(xié)議地址長度分別指出硬件地址和協(xié)議地址的長度影晓,以字節(jié)為單位镰吵。對于以太網(wǎng)上IP地址的ARP請求或應(yīng)答來說,它們的值分別為6和4挂签。
操作字段指出四種操作類型疤祭,它們是ARP請求(值為1)、ARP應(yīng)答(值為2)饵婆、RARP請求(值為3)和RARP應(yīng)答(值為4)(我們在第5章討論RARP)勺馆。這個字段必需的,因為ARP請求和ARP應(yīng)答的幀類型字段值是相同的。
接下來的四個字段是發(fā)送端的硬件地址(在本例中是以太網(wǎng)地址)草穆、發(fā)送端的協(xié)議地址(IP地址)灌灾、目的端的硬件地址和目的端的協(xié)議地址。注意悲柱,這里有一些重復(fù)信息:在以太網(wǎng)的數(shù)據(jù)幀報頭中和ARP請求數(shù)據(jù)幀中都有發(fā)送端的硬件地址锋喜。
對于一個ARP請求來說,除目的端硬件地址外的所有其他的字段都有填充值豌鸡。當系統(tǒng)收到一份目的端為本機的ARP請求報文后嘿般,它就把硬件地址填進去,然后用兩個目的端地址分別替換兩個發(fā)送端地址涯冠,并把操作字段置為2炉奴,最后把它發(fā)送回去。
4.5 ARP舉例
在本小節(jié)中蛇更,我們用tcpdump命令來看一看運行像Te lnet這樣的普通TCP工具軟件時ARP會做些什么盆佣。附錄A包含tcpdump命令的其他細節(jié)。
4.5.1 一般的例子
為了看清楚ARP的運作過程械荷,我們執(zhí)行telnet命令與無效的服務(wù)器連接。
當我們在另一個系統(tǒng)(sun)上運行帶有-e選項的tcpdump命令時虑灰,顯示的是硬件地址(在我們的例子中是48 bit的以太網(wǎng)地址)吨瞎。
圖4-4中的tcpdump的原始輸出如附錄A中的圖A-3所示。由于這是本書第一個tcpdump輸出例子穆咐,你應(yīng)該去查看附錄中的原始輸出颤诀,看看我們作了哪些修改。
我們刪除了tcpdump命令輸出的最后四行对湃,因為它們是結(jié)束連接的信息(我們將在第18章進行討論)崖叫,與這里討論的內(nèi)容不相關(guān)。
在第1行中拍柒,源端主機(bsdi)的硬件地址是0:0:c0:6f:2d:40心傀。目的端主機的硬件地址是ff:ff:ff:ff:ff:ff,這是一個以太網(wǎng)廣播地址拆讯。電纜上的每個以太網(wǎng)接口都要接收這個數(shù)據(jù)幀并對它進行處理脂男,如圖4-2所示。
第1行中緊接著的一個輸出字段是arp种呐,表明幀類型字段的值是0x0806宰翅,說明此數(shù)據(jù)幀是一個ARP請求或回答。
在每行中爽室,單詞arp或ip后面的值60指的是以太網(wǎng)數(shù)據(jù)幀的長度汁讼。由于ARP請求或回答的數(shù)據(jù)幀長都是42字節(jié)(28字節(jié)的ARP數(shù)據(jù),14字節(jié)的以太網(wǎng)幀頭),因此嘿架,每一幀都必須加入填充字符以達到以太網(wǎng)的最小長度要求:60字節(jié)瓶珊。
請參見圖1-7,這個最小長度60字節(jié)包含14字節(jié)的以太網(wǎng)幀頭眶明,但是不包括4個字節(jié)的以太網(wǎng)幀尾艰毒。有一些書把最小長度定為64字節(jié),它包括以太網(wǎng)的幀尾搜囱。我們在圖1-7中把最小長度定為46字節(jié)丑瞧,是有意不包括14字節(jié)的幀首部,因為對應(yīng)的最大長度(1500字節(jié))指的是MTU—最大傳輸單元(見圖2-5)蜀肘。我們使用MTU經(jīng)常是因為它對IP數(shù)據(jù)報的長度進行限制绊汹,但一般與最小長度無關(guān)。大多數(shù)的設(shè)備驅(qū)動程序或接口卡自動地用填充字符把以太網(wǎng)數(shù)據(jù)幀充滿到最小長度扮宠。第3西乖,4和5行中的IP數(shù)據(jù)報(包含TCP段)的長度都比最小長度短,因此都必須填充到60字節(jié)坛增。
第1行中的下一個輸出字段arp who-has表示作為ARP請求的這個數(shù)據(jù)幀中获雕,目的IP地址是svr4的地址,發(fā)送端的IP地址是bsdi的地址收捣。tcpdump打印出主機名對應(yīng)的默認IP地址(在4.7節(jié)中届案,我們將用-n選項來查看ARP請求中真正的IP地址。)
從第2行中可以看到罢艾,盡管ARP請求是廣播的楣颠,但是ARP應(yīng)答的目的地址卻是bsdi(0:0:c0:6f:2d:40)。ARP應(yīng)答是直接送到請求端主機的咐蚯,而是廣播的童漩。
tcpdump打印出arp reply的字樣,同時打印出響應(yīng)者的主機名和硬件地址春锋。
第3行是第一個請求建立連接的TCP段矫膨。它的目的硬件地址是目的主機(svr4)。我們將在第18章討論這個段的細節(jié)內(nèi)容看疙。
在每一行中豆拨,行號后面的數(shù)字表示tcpdump收到分組的時間(以秒為單位)。除第1行外能庆,其他每行在括號中還包含了與上一行的時間差異(以秒為單位)施禾。從這個圖可以看出,發(fā)送ARP請求與收到ARP回答之間的延時是2.2ms搁胆。而在0.7ms之后發(fā)出第一段TCP報文弥搞。在本例中邮绿,用ARP進行動態(tài)地址解析的時間小于3ms。
最后需要指出的一點攀例,在tcpdump命令輸出中船逮,我們沒有看到svr4在發(fā)出第一段TCP報文(第4行)之前發(fā)出的ARP請求。這是因為可能在svr4的ARP高速緩存中已經(jīng)有bsdi的表項粤铭。一般情況下挖胃,當系統(tǒng)收到ARP請求或發(fā)送ARP應(yīng)答時,都要把請求端的硬件地址和IP地址存入ARP高速緩存梆惯。在邏輯上可以假設(shè)酱鸭,如果請求端要發(fā)送IP數(shù)據(jù)報,那么數(shù)據(jù)報的接收端將很可能會發(fā)送一個應(yīng)答垛吗。
4.5.2 對不存在主機的ARP請求
如果查詢的主機已關(guān)機或不存在會發(fā)生什么情況呢凹髓?為此我們指定一個并不存在的Internet地址—根據(jù)網(wǎng)絡(luò)號和子網(wǎng)號所對應(yīng)的網(wǎng)絡(luò)確實存在,但是并不存在所指定的主機號怯屉。從圖3-10可以看出蔚舀,主機號從36到62的主機并不存在(主機號為63是廣播地址)。這里锨络,我們用主機號36來舉例赌躺。
tcpdump命令的輸出如圖4-5所示。
這一次羡儿,我們沒有用-e選項寿谴,因為已經(jīng)知道ARP請求是在網(wǎng)上廣播的。
令人感興趣的是看到多次進行ARP請求:第1次請求發(fā)生后5.5秒進行第2次請求失受,在24秒之后又進行第3次請求(在第21章我們將看到TCP的超時和重發(fā)算法的細節(jié))。tcpdump命令輸出的超時限制為29.5秒咏瑟。但是拂到,在telnet命令使用前后分別用date命令檢查時間,可以發(fā)現(xiàn)Te lnet客戶端的連接請求似乎在大約75秒后才放棄码泞。事實上兄旬,我們在后面將看到,大多數(shù)的BSD實現(xiàn)把完成TCP連接請求的時間限制設(shè)置為75秒余寥。
在第18章中领铐,當我們看到建立連接的TCP報文段序列時,會發(fā)現(xiàn)ARP請求對應(yīng)于TCP試圖發(fā)送的初始TCPSYN(同步)段宋舷。
注意绪撵,在線路上始終看不到TCP的報文段。我們能看到的是ARP請求祝蝠。直到ARP回答返回時音诈,TCP報文段才可以被發(fā)送幻碱,因為硬件地址到這時才可能知道。如果我們用過濾模式運行tcpdump命令细溅,只查看TCP數(shù)據(jù)褥傍,那么將沒有任何輸出。
4.5.3 ARP高速緩存超時設(shè)置
在ARP高速緩存中的表項一般都要設(shè)置超時值(在4.8小節(jié)中喇聊,我們將看到管理員可以用arp命令把地址放入高速緩存中而不設(shè)置超時值)恍风。從伯克利系統(tǒng)演變而來的系統(tǒng)一般對完整的表項設(shè)置超時值為20分鐘,而對不完整的表項設(shè)置超時值為3分鐘(在前面的例子中我們已見過一個不完整的表項誓篱,即在以太網(wǎng)上對一個不存在的主機發(fā)出ARP請求朋贬。)當這些表項再次使用時,這些實現(xiàn)一般都把超時值重新設(shè)為20分鐘燕鸽。
Host Requirements RFC表明即使表項正在使用時兄世,超時值也應(yīng)該啟動,但是大多數(shù)從伯克利系統(tǒng)演變而來的系統(tǒng)沒有這樣做—它們每次都是在訪問表項時重設(shè)超時值啊研。
4.6 ARP代理
如果ARP請求是從一個網(wǎng)絡(luò)的主機發(fā)往另一個網(wǎng)絡(luò)上的主機御滩,那么連接這兩個網(wǎng)絡(luò)的路由器就可以回答該請求,這個過程稱作委托ARP或ARP代理(Proxy ARP)党远。這樣可以欺騙發(fā)起ARP請求的發(fā)送端削解,使它誤以為路由器就是目的主機,而事實上目的主機是在路由器的“另一邊”沟娱。路由器的功能相當于目的主機的代理氛驮,把分組從其他主機轉(zhuǎn)發(fā)給它。
舉例是說明ARP代理的最好方法济似。如圖3-10所示矫废,系統(tǒng)sun與兩個以太網(wǎng)相連。但是砰蠢,我們也指出過蓖扑,事實上并不是這樣,請把它與封內(nèi)圖1進行比較台舱。在sun和子網(wǎng)140.252.1之間實際存在一個路由器律杠,就是這個具有ARP代理功能的路由器使得sun就好像在子網(wǎng)140.252.1上一樣。具體安置如圖4-6所示竞惋,路由器Telebit NetBlazer柜去,取名為netb,在子網(wǎng)和主機sun之間拆宛。
當子網(wǎng)140.252.1(稱作gemini)上的其他主機有一份IP數(shù)據(jù)報要傳給地址為140.252.1.29的sun時嗓奢,gemini比較網(wǎng)絡(luò)號(140.252)和子網(wǎng)號(1),因為它們都是相同的浑厚,因而在圖4-6上面的以太網(wǎng)中發(fā)送IP地址140.252.1.29的ARP請求蔓罚。路由器netb識別出該IP地址屬于它的一個拔號主機椿肩,于是把它的以太網(wǎng)接口地址140.252.1作為硬件地址來回答。主機gemini通過以太網(wǎng)發(fā)送IP數(shù)據(jù)報到netb豺谈,netb通過撥號SLIP鏈路把數(shù)據(jù)報轉(zhuǎn)發(fā)到sun郑象。這個過程對于所有140.252.1子網(wǎng)上的主機來說都是透明的,主機sun實際上是在路由器netb后面進行配置的茬末。
如果在主機gemini上執(zhí)行arp命令厂榛,經(jīng)過與主機sun通信以后,我們發(fā)現(xiàn)在同一個子網(wǎng)140.252.1上的netb和sun的IP地址映射的硬件地址是相同的丽惭。這通常是使用委托ARP的線索击奶。
圖4-6中的另一個需要解釋的細節(jié)是在路由器netb的下方(SLIP鏈路)顯然缺少一個IP地址。為什么在撥號SLIP鏈路的兩端只擁有一個IP地址责掏,而在bsdi和slip之間的兩端卻分別有一個IP地址柜砾?在3.8小節(jié)我們已經(jīng)指出,用ifconfig命令可以顯示撥號SLIP鏈路的目的地址换衬,它是140.252.1.183痰驱。NetBlazer不需要知道撥號SLIP鏈路每一端的IP地址(這樣做會用更多的IP地址)。相反瞳浦,它通過分組到達的串行線路接口來確定發(fā)送分組的撥號主機担映,因此對于連接到路由器的每個撥號主機不需要用唯一的IP地址。所有的撥號主機使用同一個IP地址140.252.1.183作為SLIP鏈路的目的地址叫潦。
ARP代理可以把數(shù)據(jù)報傳送到路由器sun上蝇完,但是子網(wǎng)140.252.13上的其他主機是如何處理的呢?選路必須使數(shù)據(jù)報能到達其他主機矗蕊。這里需要特殊處理短蜕,選路表中的表項必須在網(wǎng)絡(luò)140.252的某個地方制定,使所有數(shù)據(jù)報的目的端要么是子網(wǎng)140.252.13傻咖,要么是子網(wǎng)上的某個主機忿危,這樣都指向路由器netb。而路由器netb知道如何把數(shù)據(jù)報傳到最終的目的端没龙,即通過路由器sun。
ARP代理也稱作混合ARP(promiscuousARP)或ARP出租(ARP hack)缎玫。這些名字來自于ARP代理的其他用途:通過兩個物理網(wǎng)絡(luò)之間的路由器可以互相隱藏物理網(wǎng)絡(luò)硬纤。在這種情況下,兩個物理網(wǎng)絡(luò)可以使用相同的網(wǎng)絡(luò)號赃磨,只要把中間的路由器設(shè)置成一個ARP代理筝家,以響應(yīng)一個網(wǎng)絡(luò)到另一個網(wǎng)絡(luò)主機的ARP請求。這種技術(shù)在過去用來隱藏一組在不同物理電纜上運行舊版TCP/IP的主機邻辉。分開這些舊主機有兩個共同的理由溪王,其一是它們不能處理子網(wǎng)劃分腮鞍,其二是它們使用舊的廣播地址(所有比特值為0的主機號,而不是目前使用的所有比特值為1 的主機號)莹菱。
4.7 免費ARP
我們可以看到的另一個ARP特性稱作免費ARP(gratuitous ARP)移国。它是指主機發(fā)送ARP查找自己的IP地址。通常道伟,它發(fā)生在系統(tǒng)引導(dǎo)期間進行接口配置的時候迹缀。
在互聯(lián)網(wǎng)中,如果我們引導(dǎo)主機bsdi并在主機sun上運行tcpdump命令蜜徽,可以看到如圖4-7所示的分組祝懂。
(我們用-n選項運行tcpdump命令,打印出點分十進制的地址拘鞋,而不是主機名)砚蓬。對于ARP請求中的各字段來說,發(fā)送端的協(xié)議地址和目的端的協(xié)議地址是一致的:即主機bsdi的地址140.252.13.35盆色。另外灰蛙,以太網(wǎng)報頭中的源地址0:0:c0:6f:2d:40,正如tcpdump命令顯示的那樣傅事,等于發(fā)送端的硬件地址(見圖4-4)缕允。
免費ARP可以有兩個方面的作用:
1:一個主機可以通過它來確定另一個主機是否設(shè)置了相同的IP地址。主機bsdi并不希望對此請求有一個回答蹭越。但是障本,如果收到一個回答,那么就會在終端日志上產(chǎn)生一個錯誤消息“以太網(wǎng)地址:a:b:c:d:e:f發(fā)送來重復(fù)的IP地址”响鹃。這樣就可以警告系統(tǒng)管理員驾霜,某個系統(tǒng)有不正確的設(shè)置。
2:如果發(fā)送免費ARP的主機正好改變了硬件地址(很可能是主機關(guān)機了买置,并換了一塊接口卡粪糙,然后重新啟動),那么這個分組就可以使其他主機高速緩存中舊的硬件地址進行相應(yīng)的更新忿项。一個比較著名的ARP協(xié)議事實[Plummer 1982]是蓉冈,如果主機收到某個IP地址的ARP請求,而且它已經(jīng)在接收者的高速緩存中轩触,那么就要用ARP請求中的發(fā)送端硬件地址(如以太網(wǎng)地址)對高速緩存中相應(yīng)的內(nèi)容進行更新寞酿。主機接收到任何ARP請求都要完成這個操作(ARP請求是在網(wǎng)上廣播的,因此每次發(fā)送ARP請求時網(wǎng)絡(luò)上的所有主機都要這樣做)脱柱。
文獻[Bhide伐弹、Elnozahy和Morgan 1991]中有一個應(yīng)用例子,通過發(fā)送含有備份硬件地址和故障服務(wù)器的IP地址的免費ARP請求榨为,使得備份文件服務(wù)器可以順利地接替故障服務(wù)器進行工作惨好。這使得所有目的地為故障服務(wù)器的報文都被送到備份服務(wù)器那里煌茴,客戶程序不用關(guān)心原來的服務(wù)器是否出了故障。
不幸的是日川,作者卻反對這個做法蔓腐,因為這取決于所有不同類型的客戶端都要有正確的ARP協(xié)議實現(xiàn)。他們顯然碰到過客戶端的ARP協(xié)議實現(xiàn)與規(guī)范不一致的情況逗鸣。通過檢查作者所在子網(wǎng)上的所有系統(tǒng)可以發(fā)現(xiàn)合住,SunOS 4.1.3和4.4 BSD在引導(dǎo)時都發(fā)送免費ARP,但是SVR4卻沒有這樣做撒璧。
4.8 arp命令
我們已經(jīng)用過這個命令及參數(shù)-a來顯示ARP高速緩存中的所有內(nèi)容透葛。這里介紹其他參數(shù)的功能。
超級用戶可以用選項-d來刪除ARP高速緩存中的某一項內(nèi)容(這個命令格式可以在運行一些例子之前使用卿樱,以讓我們看清楚ARP的交換過程)僚害。
另外,可以通過選項-s來增加高速緩存中的內(nèi)容繁调。這個參數(shù)需要主機名和以太網(wǎng)地址:對應(yīng)于主機名的IP地址和以太網(wǎng)地址被增加到高速緩存中萨蚕。新增加的內(nèi)容是永久性的(比如,它沒有超時值)蹄胰,除非在命令行的末尾附上關(guān)鍵字temp岳遥。
位于命令行末尾的關(guān)鍵字pub和-s選項一起,可以使系統(tǒng)起著主機ARP代理的作用裕寨。系統(tǒng)將回答與主機名對應(yīng)的IP地址的ARP請求浩蓉,并以指定的以太網(wǎng)地址作為應(yīng)答。如果廣播的地址是系統(tǒng)本身宾袜,那么系統(tǒng)就為指定的主機名起著委托ARP代理的作用捻艳。
4.9 小結(jié)
在大多數(shù)的TCP/IP實現(xiàn)中,ARP是一個基礎(chǔ)協(xié)議庆猫,但是它的運行對于應(yīng)用程序或系統(tǒng)管理員來說一般是透明的认轨。ARP高速緩存在它的運行過程中非常關(guān)鍵,我們可以用arp命令對高速緩存進行檢查和操作月培。高速緩存中的每一項內(nèi)容都有一個定時器嘁字,根據(jù)它來刪除不完整和完整的表項。arp命令可以顯示和修改ARP高速緩存中的內(nèi)容杉畜。
我們介紹了ARP的一般操作纪蜒,同時也介紹了一些特殊的功能:委托ARP(當路由器對來自于另一個路由器接口的ARP請求進行應(yīng)答時)和免費ARP(發(fā)送自己IP地址的ARP請求,一般發(fā)生在引導(dǎo)過程中)寻行。