地址解析協議

維基百科,自由的百科全書
(重新導向自Address Resolution Protocol
跳至導覽 跳至搜尋

地址解析協議(英語:Address Resolution Protocol,縮寫:ARP)是一個通過解析網絡層地址來找尋數據鏈路層地址的網絡傳輸協議,在IPv4中極其重要。ARP最初在1982年的RFC 826(徵求意見稿)[1]中提出,並納入互聯網標準STD 37。ARP也可能指在多數操作系統中管理其相關地址的一個進程。

ARP允許主機通過提供協議來取得與IP地址關聯的MAC地址,從而將IPv4封包傳送到本地網絡中的另一個節點。主機利用廣播包含目標節點IP地址的請求,而具有該IP地址的節點以其MAC地址回應請求。

ARP通過網絡地址來定位MAC地址。ARP已在多種網絡層和數據鏈路層之間得以實現,包括IPv4、Chaosnet英語ChaosnetDECnet英語DECnet和Xerox PARC Universal Packet英語PARC Universal Packet(PUP)。使用IEEE 802標準、光纖分布式數據接口X.25幀中繼異步傳輸模式(ATM)時,IEEE 802.3IEEE 802.11標準上IPv4占用了多數流量。

IPv6中,鄰居發現協議(NDP)可用於代替地址解析協議。

基本功能[編輯]

TCP/IP協議中,傳輸層只關心目標主機的IP地址端口,因為只需確認傳輸層的數據包所要交互的目的地,即目標主機上的目標應用程序。網絡層會對傳輸層的包進行封裝,形成IP包。網絡層只關心目標機器的IP地址,並根據此地址尋址到網絡上的目標機器。

以太網中,IP數據包又被封裝在以太網幀中,經物理層(即網卡)發送到網絡上。以太網幀根據MAC地址來尋址到目的機器的網卡。局域網中的所有機器的網卡都會接收到這個幀,只有幀頭部中的目的MAC地址與自己網卡的MAC地址匹配時,才會向網絡協議棧交付該幀中的數據包;否則網卡會丟棄該幀。因此,當同一局域網中的一台主機要與另一台主機、交換機或路由器等進行網絡通信時,必須知道與本機用網線連接的目標設備網絡接口的MAC地址(即網卡地址)。這就導致在以太網中使用IP協議向下傳遞IP包時,IP包被包含在以太網幀中。

以太網幀有自身的格式,在幀頭部需要填充目的機器MAC地址。此時若從ARP表中未能查詢到目的IP地址對應的MAC地址,主機會暫存該IP數據包。主機剛連接到局域網或重啟之後,往往不知道目的方的MAC地址。若要向目的機器發送IP包,需先獲取目的機器的MAC地址。這一過程通過發送稱為ARP請求的數據包來實現。

ARP數據包也被包含在以太網幀中。發送時,幀頭部中的目的MAC地址填寫為廣播地址FF:FF:FF:FF:FF:FF,使該局域網的所有機器收到廣播幀後均向協議棧遞交幀中的數據包(此處為ARP數據包),廣播至整個局域網。僅當某台機器的IP地址與該ARP請求中詢問的IP地址相同時,該機器才會返回ARP回應數據包。回應包中包含詢問的IP地址和MAC地址。本地主機收到回應的ARP數據包後,提取IP地址和MAC地址,記錄到ARP表中,從而建立目的主機的IP地址與MAC地址的對應關係。隨後,主機找到先前因缺少目的MAC地址而暫存的數據包,用以太網幀封裝,並用該ARP表項中的MAC地址填充幀頭部中的MAC地址域。該幀發送到局域網後,目標機器網卡判斷MAC地址匹配,便向上層協議棧遞交幀中的數據包,數據得以交付;其他主機則因MAC地址不匹配而丟棄該幀。這就是ARP協議的基本工作流程。

另外,當發送主機和目的主機不在同一個局域網中時,即使知道對方的MAC地址,兩者也無法直接通信,必須經過路由器進行IP層轉發。路由器在鏈路層上隔離了局域網(除非進行網絡層次的顯式轉發,否則路由器不會將局域網中的以太網幀自動轉發到其他局域網或外網。這一隔離功能正是路由器的基本作用之一,可防止廣播幀泛濫導致網絡癱瘓)。此時發送主機會將網關IP地址作為目的IP地址(由IP層決定),通過ARP協議獲得的將不是目的主機的真實MAC地址,而是一台可以通往局域網外的路由器的MAC地址。此後,發送主機發往目的主機的所有幀均發往該路由器,由其向外轉發。這種情況稱為委託ARP或ARP代理(ARP Proxy)

點對點鏈路中不使用ARP。實際上,點對點網絡中也不使用MAC地址,因為在此類網絡中已分別獲取了對端的IP地址。

數據包結構[編輯]

地址解析協議的消息格式簡單,僅包含單一的地址解析請求或響應。ARP消息的長度取決於上下兩層地址的大小:上層地址由所使用的網絡協議類型(通常是IPv4)決定,下層地址則由上層協議所使用的硬件或虛擬鏈路層的類型決定。消息的報頭中包含這些類型及對應的地址長度信息,此外還包含表示請求(1)和應答(2)的操作碼。數據包的有效負載為收發雙方的硬件地址和協議地址,總計四個地址。

為了將IP地址映射到48位以太網地址用於傳輸,需要採用體現地址轉換協議的包格式。

以太網幀[編輯]

  • 目標以太網地址:目標MAC地址。FF:FF:FF:FF:FF:FF(二進制全1)為廣播地址。
  • 源以太網地址:發送方MAC地址。
  • 幀類型:以太類型,ARP為0x0806。

ARP報文[編輯]

  • 硬件類型(HTYPE):如以太網(0x0001)、分組無線網
  • 協議類型(PTYPE):如網際協議(IP)(0x0800)、IPv6(0x86DD)。
  • 硬件地址長度(HLEN):每種硬件地址的字節長度,一般為6(以太網)。
  • 協議地址長度(PLEN):每種協議地址的字節長度,一般為4(IPv4)。
  • 操作碼:1為ARP請求,2為ARP應答,3為RARP請求,4為RARP應答。
  • 源硬件地址(Sender Hardware Address,簡稱SHA):n個字節,n由硬件地址長度得到,一般為發送方MAC地址。
  • 源協議地址(Sender Protocol Address,簡稱SPA):m個字節,m由協議地址長度得到,一般為發送方IP地址。
  • 目標硬件地址(Target Hardware Address,簡稱THA):n個字節,n由硬件地址長度得到,一般為目標MAC地址。
  • 目標協議地址(Target Protocol Address,簡稱TPA):m個字節,m由協議地址長度得到,一般為目標IP地址。

ARP協議的參數由互聯網號碼分配局(IANA)負責標準化和維護。

ARP協議的以太類型為0x0806。該類型出現於以太網幀格式中的以太類型字段。請注意區別此類型和ARP協議類型(PTYPE)。

報文格式[編輯]

長度(位) 48 48 16 16 16 8 8 16 48 32 48 32
數據類型 目標以太網地址 源以太網地址 幀類型 硬件類型 協議類型 硬件地址長度 協議地址長度 操作碼 源硬件地址 源協議地址 目標硬件地址 目標協議地址
組成 14字節 以太網首部 28字節 ARP請求/應答

原理[編輯]

File:Windows cmd arp a.png
在Windows命令行查看ARP緩存表

每台安裝TCP/IP協議的電腦或路由器中都有一個ARP緩存表,表內的IP地址與MAC地址一一對應,如下表所示。

主機名稱 IP地址 MAC地址
A 192.168.38.10 00-AA-00-62-D2-02
B 192.168.38.11 00-BB-00-62-C2-02
C 192.168.38.12 00-CC-00-62-C2-02
D 192.168.38.13 00-DD-00-62-C2-02
E 192.168.38.14 00-EE-00-62-C2-02
... ... ...

以主機A(192.168.38.10)向主機B(192.168.38.11)發送數據為例:

  1. 發送數據時,主機A先在自身的ARP緩存表中尋找是否有目標IP地址。若找到,便得知目標MAC地址為(00-BB-00-62-C2-02),直接將目標MAC地址寫入中發送即可。
  2. 若ARP緩存表中未找到對應的IP地址,主機A便在網絡上發送一個廣播(ARP request),目標MAC地址為「FF.FF.FF.FF.FF.FF」,表示向同一網段內的所有主機詢問:「192.168.38.11的MAC地址是什麼?」
  3. 網絡上其他主機不響應ARP詢問,只有主機B接收到該幀後向主機A做出回應(ARP response):「192.168.38.11的MAC地址是00-BB-00-62-C2-02」,此回應以單播方式進行。這樣主機A便獲知主機B的MAC地址,可向主機B發送信息。同時主機A更新自己的ARP高速緩存(ARP cache),下次再向主機B發送信息時可直接從ARP緩存表中查找。

ARP緩存表採用老化機制,在一段時間內若表中的某行未被使用,則會被刪除,以縮短緩存表長度、加快查詢速度。

無償ARP(gratuitous ARP)是指主機發送ARP查詢(廣播)自己的IP地址。當ARP功能開啟或端口初始配置完成時,主機向網絡發送無償ARP來查詢自己的IP地址,以確認地址唯一可用。其作用包括:

  1. 確定網絡中是否有其他主機使用了該IP地址,若有應答則產生錯誤消息。
  2. 無償ARP可用於更新ARP緩存。網絡中的其他主機收到該廣播後強制更新緩存條目:無論是否存在與IP地址相關的條目,收到廣播的主機均會將MAC更新為廣播包中的MAC。

協議的分層[編輯]

ARP協議在互聯網協議套件OSI模型中的位置可能造成混淆與爭議。RFC 1122僅在數據鏈路層提及ARP協議,但未說明將其置於該層[2]。一些較舊的文檔將ARP置於OSI的數據鏈路層[3],而較新的版本則將其與網絡層聯繫起來[4]

另見[編輯]

參考資料[編輯]

  1. ^ David C. Plummer. RFC 826, An Ethernet Address Resolution Protocol -- or -- Converting Network Protocol Addresses to 48.bit Ethernet Address for Transmission on Ethernet Hardware. Internet Engineering Task Force, Network Working Group. November 1982 [2017-09-14]. (原始內容存檔於2017-09-19). 
  2. ^ RFC 1122
  3. ^ W. Richard Stevens, TCP/IP Illustrated, Volume 1: The Protocols, Addison Wesley, 1994, ISBN 0-201-63346-9.
  4. ^ W. Richard Stevens, TCP/IP Illustrated, Volume 1: The Protocols, Addison Wesley, 2011, ISBN 0-321-33631-3, page 14

外部連結[編輯]