《TCP/IP详解 卷1:协议》第4章 ARP:地址解析协议
4.1 引言
本章我們要討論的問題是只對TCP/IP協議簇有意義的IP地址。數據鏈路如以太網或令牌環網都有自己的尋址機制(常常為48 bit地址),這是使用數據鏈路的任何網絡層都必須遵從的。一個網絡如以太網可以同時被不同的網絡層使用。例如,一組使用TCP/IP協議的主機和另一組使用某種PC網絡軟件的主機可以共享相同的電纜。
當一臺主機把以太網數據幀發送到位于同一局域網上的另一臺主機時,是根據48 bit的以太網地址來確定目的接口的。設備驅動程序從不檢查IP數據報中的目的IP地址。
地址解析為這兩種不同的地址形式提供映射:32 bit的IP32位Internet地址地址和數據鏈路層使用的任何類型的地址。RFC 826[Plummer 1982]是ARP規范描述文檔。
本章及下一章我們要討論的兩種協議如圖4-1所示:ARP(地址解析協議)和RARP(逆地址解析協議)。
圖4-1 地址解析協議:ARP和RARP
ARP為IP地址到對應的硬件地址之間提供動態映射。我們之所以用動態這個詞是因為這個過程是自動完成的,一般應用程序用戶或系統管理員不必關心。
RARP是被那些沒有磁盤驅動器的系統使用(一般是無盤工作站或X終端),它需要系統管理員進行手工設置。我們在第5章對它進行討論。
4.2一個例子
任何時候我們敲入下面這個形式的命令:
% ftp bsdi
都會進行以下這些步驟。這些步驟的序號如圖4-2所示。
第4章 ARP:地址解析協議39?
圖4-2 當用戶輸入命令“ftp主機名”時ARP的操作
在ARP背后有一個基本概念,那就是網絡接口有一個硬件地址(一個48 bit的值,標識不同的以太網或令牌環網絡接口)。在硬件層次上進行的數據幀交換必須有正確的接口地址。但是,TCP/IP有自己的地址:32 bit的IP地址。知道主機的IP地址并不能讓內核發送一幀數據給主機。內核(如以太網驅動程序)必須知道目的端的硬件地址才能發送數據。ARP的功能是在32 bit的IP地址和采用不同網絡技術的硬件地址之間提供動態映射。
點對點鏈路不使用ARP。當設置這些鏈路時(一般在引導過程進行),必須告知內核鏈路每一端的IP地址。像以太網地址這樣的硬件地址并不涉及。
40TCP/IP詳解,卷1:協議?
圖4-3 用于以太網的ARP請求或應答分組格式
以太網報頭中的前兩個字段是以太網的源地址和目的地址。目的地址為全1的特殊地址是廣播地址。電纜上的所有以太網接口都要接收廣播的數據幀。
兩個字節長的以太網幀類型表示后面數據的類型。對于ARP請求或應答來說,該字段的值為0x0806。
形容詞hardware(硬件)和protocol(協議)用來描述ARP分組中的各個字段。例如,一個ARP請求分組詢問協議地址(這里是IP地址)對應的硬件地址(這里是以太網地址)。
硬件類型字段表示硬件地址的類型。它的值為1即表示以太網地址。協議類型字段表示要映射的協議地址類型。它的值為0x0800即表示IP地址。它的值與包含IP數據報的以太網數據幀中的類型字段的值相同,這是有意設計的(參見圖2-1)。
接下來的兩個1字節的字段,硬件地址長度和協議地址長度分別指出硬件地址和協議地址的長度,以字節為單位。對于以太網上IP地址的ARP請求或應答來說,它們的值分別為6和4。
操作字段指出四種操作類型,它們是ARP請求(值為1)、ARP應答(值為2)、RARP請求(值為3)和RARP應答(值為4)(我們在第5章討論RARP)。這個字段必需的,因為ARP請求和ARP應答的幀類型字段值是相同的。
接下來的四個字段是發送端的硬件地址(在本例中是以太網地址)、發送端的協議地址(IP地址)、目的端的硬件地址和目的端的協議地址。注意,這里有一些重復信息:在以太網的數據幀報頭中和ARP請求數據幀中都有發送端的硬件地址。
第4章 ARP:地址解析協議41?
當我們在另一個系統(sun)上運行帶有-e選項的tcpdump命令時,顯示的是硬件地址(在我們的例子中是48 bit的以太網地址)。
圖4-4中的tcpdump的原始輸出如附錄A中的圖A-3所示。由于這是本書第一個tcpdump輸出例子,你應該去查看附錄中的原始輸出,看看我們作了哪些修改。
圖4-4 TCP連接請求產生的ARP請求和應答
我們刪除了tcpdump命令輸出的最后四行,因為它們是結束連接的信息(我們將在第18章進行討論),與這里討論的內容不相關。
在第1行中,源端主機(bsdi)的硬件地址是0:0:c0:6f:2d:40。目的端主機的硬件地址是ff:ff:ff:ff:ff:ff,這是一個以太網廣播地址。電纜上的每個以太網接口都要接收這個數據幀并對它進行處理,如圖4-2所示。
第1行中緊接著的一個輸出字段是arp,表明幀類型字段的值是0x0806,說明此數據幀是一個ARP請求或回答。
在每行中,單詞arp或ip后面的值60指的是以太網數據幀的長度。由于ARP請求或回答的數據幀長都是42字節(28字節的ARP數據,14字節的以太網幀頭),因此,每一幀都必須加入填充字符以達到以太網的最小長度要求:60字節。
42TCP/IP詳解,卷1:協議?
tcpdump命令的輸出如圖4-5所示。
第4章 ARP:地址解析協議43?
圖4-5 對不存在主機的ARP請求
這一次,我們沒有用-e選項,因為已經知道ARP請求是在網上廣播的。
令人感興趣的是看到多次進行ARP請求:第1次請求發生后5.5秒進行第2次請求,在24秒之后又進行第3次請求(在第21章我們將看到TCP的超時和重發算法的細節)。tcpdump命令輸出的超時限制為29.5秒。但是,在telnet命令使用前后分別用date命令檢查時間,可以發現Te lnet客戶端的連接請求似乎在大約75秒后才放棄。事實上,我們在后面將看到,大多數的BSD實現把完成TCP連接請求的時間限制設置為75秒。
在第18章中,當我們看到建立連接的TCP報文段序列時,會發現ARP請求對應于TCP試圖發送的初始TCPSYN(同步)段。
注意,在線路上始終看不到TCP的報文段。我們能看到的是ARP請求。直到ARP回答返回時,TCP報文段才可以被發送,因為硬件地址到這時才可能知道。如果我們用過濾模式運行tcpdump命令,只查看TCP數據,那么將沒有任何輸出。
4.5.3 ARP高速緩存超時設置
在ARP高速緩存中的表項一般都要設置超時值(在4.8小節中,我們將看到管理員可以用arp命令把地址放入高速緩存中而不設置超時值)。從伯克利系統演變而來的系統一般對完整的表項設置超時值為20分鐘,而對不完整的表項設置超時值為3分鐘(在前面的例子中我們已見過一個不完整的表項,即在以太網上對一個不存在的主機發出ARP請求。)當這些表項再次使用時,這些實現一般都把超時值重新設為20分鐘。
Host Requirements RFC表明即使表項正在使用時,超時值也應該啟動,但是大多數從伯克利系統演變而來的系統沒有這樣做—它們每次都是在訪問表項時重設超時值。
4.6 ARP代理
如果ARP請求是從一個網絡的主機發往另一個網絡上的主機,那么連接這兩個網絡的路由器就可以回答該請求,這個過程稱作委托ARP或ARP代理(Proxy ARP)。這樣可以欺騙發起ARP請求的發送端,使它誤以為路由器就是目的主機,而事實上目的主機是在路由器的“另一邊”。路由器的功能相當于目的主機的代理,把分組從其他主機轉發給它。
舉例是說明ARP代理的最好方法。如圖3-10所示,系統sun與兩個以太網相連。但是,我們也指出過,事實上并不是這樣,請把它與封內圖1進行比較。在sun和子網140.252.1之間實際存在一個路由器,就是這個具有ARP代理功能的路由器使得sun就好像在子網140.252.1上一樣。具體安置如圖4-6所示,路由器Telebit NetBlazer,取名為netb,在子網和主機sun之間。
當子網140.252.1(稱作gemini)上的其他主機有一份IP數據報要傳給地址為140.252.1.29的sun時,gemini比較網絡號(140.252)和子網號(1),因為它們都是相同的,因而在圖4-6上面的以太網中發送IP地址140.252.1.29的ARP請求。路由器netb識別出該IP地址屬于它的一個拔號主機,于是把它的以太網接口地址140.252.1作為硬件地址來回答。主機gemini通過以太網發送IP數據報到netb,netb通過撥號SLIP鏈路把數據報轉發到sun。這個過程對于所有140.252.1子網上的主機來說都是透明的,主機sun實際上是在路由器netb后面進行配置的。
44TCP/IP詳解,卷1:協議?
圖4-6 ARP代理的例子
如果在主機gemini上執行arp命令,經過與主機sun通信以后,我們發現在同一個子網140.252.1上的netb和sun的IP地址映射的硬件地址是相同的。這通常是使用委托ARP的線索。
圖4-6中的另一個需要解釋的細節是在路由器netb的下方(SLIP鏈路)顯然缺少一個IP地址。為什么在撥號SLIP鏈路的兩端只擁有一個IP地址,而在bsdi和slip之間的兩端卻分別有一個IP地址?在3.8小節我們已經指出,用ifconfig命令可以顯示撥號SLIP鏈路的目的地址,它是140.252.1.183。NetBlazer不需要知道撥號SLIP鏈路每一端的IP地址(這樣做會用更多的IP地址)。相反,它通過分組到達的串行線路接口來確定發送分組的撥號主機,因此對于連接到路由器的每個撥號主機不需要用唯一的IP地址。所有的撥號主機使用同一個IP地址140.252.1.183作為SLIP鏈路的目的地址。
ARP代理可以把數據報傳送到路由器sun上,但是子網140.252.13上的其他主機是如何處理的呢?選路必須使數據報能到達其他主機。這里需要特殊處理,選路表中的表項必須在網絡140.252的某個地方制定,使所有數據報的目的端要么是子網140.252.13,要么是子網上的某個主機,這樣都指向路由器netb。而路由器netb知道如何把數據報傳到最終的目的端,即通過路由器sun。
ARP代理也稱作混合ARP(promiscuousARP)或ARP出租(ARP hack)。這些名字來自于ARP代理的其他用途:通過兩個物理網絡之間的路由器可以互相隱藏物理網絡。在這種情況下,兩個物理網絡可以使用相同的網絡號,只要把中間的路由器設置成一個ARP代理,以響應一個網絡到另一個網絡主機的ARP請求。這種技術在過去用來隱藏一組在不同物理電纜上運行舊版TCP/IP的主機。分開這些舊主機有兩個共同的理由,其一是它們不能處理子網劃分,其二是它們使用舊的廣播地址(所有比特值為0的主機號,而不是目前使用的所有比特值為1 的主機號)。
第4章 ARP:地址解析協議45?
圖4-7 免費ARP的例子
(我們用-n選項運行tcpdump命令,打印出點分十進制的地址,而不是主機名)。對于ARP請求中的各字段來說,發送端的協議地址和目的端的協議地址是一致的:即主機bsdi的地址140.252.13.35。另外,以太網報頭中的源地址0:0:c0:6f:2d:40,正如tcpdump命令顯示的那樣,等于發送端的硬件地址(見圖4-4)。
免費ARP可以有兩個方面的作用:
文獻[Bhide、Elnozahy和Morgan 1991]中有一個應用例子,通過發送含有備份硬件地址和故障服務器的IP地址的免費ARP請求,使得備份文件服務器可以順利地接替故障服務器進行工作。這使得所有目的地為故障服務器的報文都被送到備份服務器那里,客戶程序不用關心原來的服務器是否出了故障。
?
不幸的是,作者卻反對這個做法,因為這取決于所有不同類型的客戶端都要有正確的ARP協議實現。他們顯然碰到過客戶端的ARP協議實現與規范不一致的情況。通過檢查作者所在子網上的所有系統可以發現,SunOS 4.1.3和4.4 BSD在引導時都發送免費ARP,但是SVR4卻沒有這樣做。?
4.8 arp命令
我們已經用過這個命令及參數-a來顯示ARP高速緩存中的所有內容。這里介紹其他參數的功能。
超級用戶可以用選項-d來刪除ARP高速緩存中的某一項內容(這個命令格式可以在運行一些例子之前使用,以讓我們看清楚ARP的交換過程)。
46TCP/IP詳解,卷1:協議
另外,可以通過選項-s來增加高速緩存中的內容。這個參數需要主機名和以太網地址:對應于主機名的IP地址和以太網地址被增加到高速緩存中。新增加的內容是永久性的(比如,它沒有超時值),除非在命令行的末尾附上關鍵字temp。
位于命令行末尾的關鍵字pub和-s選項一起,可以使系統起著主機ARP代理的作用。系統將回答與主機名對應的IP地址的ARP請求,并以指定的以太網地址作為應答。如果廣播的地址是系統本身,那么系統就為指定的主機名起著委托ARP代理的作用。
4.9 小結
在大多數的TCP/IP實現中,ARP是一個基礎協議,但是它的運行對于應用程序或系統管理員來說一般是透明的。ARP高速緩存在它的運行過程中非常關鍵,我們可以用arp命令對高速緩存進行檢查和操作。高速緩存中的每一項內容都有一個定時器,根據它來刪除不完整和完整的表項。arp命令可以顯示和修改ARP高速緩存中的內容。
我們介紹了ARP的一般操作,同時也介紹了一些特殊的功能:委托ARP(當路由器對來自于另一個路由器接口的ARP請求進行應答時)和免費ARP(發送自己IP地址的ARP請求,一般發生在引導過程中)。
習題
文章同步發布:?https://www.geek-share.com/detail/2752945344.html
?
《TCP/IP詳解 卷1:協議》在線整理版目錄導航
- 第1章 概述
- 第2章 鏈路層
- 第3章 IP:網際協議
- 第4章 ARP:地址解析協議
- 第5章 RARP:逆地址解析協議
- 第6章 ICMP:Internet控制報文協議
- 第7章 Ping程序
- 第8章 Traceroute程序
- 第9章 IP選路
- 第10章 動態選路協議
- 第11章 UDP:用戶數據報協議
- 第12章 廣播和多播
- 第13章 IGMP:Internet組管理協議
- 第14章 DNS:域名系統
- 第15章 TFTP:簡單文件傳送協議
- 第16章 BOOTP:引導程序協議
- 第17章 TCP:傳輸控制協議
- 第18章 TCP連接的建立與終止
- 第19章 TCP的交互數據流
- 第20章 TCP的成塊數據流
- 第21章 TCP的超時與重傳
- 第22章 TCP的堅持定時器
- 第23章 TCP的保活定時器
- 第24章 TCP的未來和性能
- 第25章 SNMP:簡單網絡管理協議
- 第26章 Telnet和Rlogin:遠程登錄
- 第27章 FTP:文件傳送協議
- 第28章 SMTP:簡單郵件傳送協議
- 第29章 網絡文件系統
- 第30章 其他的TCP/IP應用程序
- 附錄A tcpdump程序
- 附錄B 計算機時鐘
- 附錄C sock程序
- 附錄D 部分習題的解答
- 附錄E 配置選項
- 附錄F 可以免費獲得的源代碼
- 參考文獻
- 縮略語
- 《TCP/IP詳解》學習筆記(一):基本概念
- 《TCP/IP詳解》學習筆記(二):數據鏈路層
- 《TCP/IP詳解》學習筆記(三):IP協議、ARP協議
- 《TCP/IP詳解》學習筆記(四):ICMP 協議、ping 和 Traceroute
- 《TCP/IP詳解》學習筆記(五):IP選路、動態選路
- 《TCP/IP詳解》學習筆記(六):UDP 協議
- 《TCP/IP詳解》學習筆記(七):廣播和多播、IGMP協議
- 《TCP/IP詳解》學習筆記(八):DNS 域名系統
- 《TCP/IP詳解》學習筆記(九):TCP 協議概述
- 《TCP/IP詳解》學習筆記(十):TCP 連接的建立與中止
- 《TCP/IP詳解》學習筆記(十一):TCP 交互數據流、成塊數據流
百度網盤下載地址:?https://pan.baidu.com/s/1G0vHiGbE_JV-M73HRCSjFA?
轉載于:https://www.cnblogs.com/sohuhome/p/9956195.html
總結
以上是生活随笔為你收集整理的《TCP/IP详解 卷1:协议》第4章 ARP:地址解析协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows 之 删除文件出现“该项目
- 下一篇: [2018/11/14]关于学习的思考