位址解析協定
位址解析協定(英語:Address Resolution Protocol,縮寫:ARP)是一個通過解析網路層位址來找尋資料鏈路層位址的網路傳輸協定,它在IPv4中極其重要。ARP最初在1982年的RFC 826(徵求意見稿)[1]中提出並納入網際網路標準STD 37。ARP也可能指是在多數作業系統中管理其相關位址的一個行程。
ARP是通過網路位址來定位MAC位址。 ARP已經在很多網路層和資料鏈結層之間得以實現,包括IPv4、Chaosnet、DECnet和Xerox PARC Universal Packet(PUP)使用IEEE 802標準, 光纖分散式資料介面, X.25,訊框中繼和非同步傳輸模式(ATM),IEEE 802.3和IEEE 802.11標準上IPv4占了多數流量。
基本功能
在TCP/IP協定中,傳輸層只關心目標主機的IP位址和埠,因為它們唯一確定一個傳輸層的包要互動的目的地,即目標主機上的目標應用程式。網路層會對傳輸層的包進行封裝,形成IP包。網路層只關心目標機器的IP位址,並根據這個IP位址定址到網路上的目標機器。在乙太網路中,IP封包又被封裝在乙太網路訊框中,經過實體層(也就是網卡)傳送到網路上,乙太網路訊框又是根據MAC位址來定址到目的機器的網卡的。區域網路中的所有機器的網卡都會接收到這個訊框,而只有該訊框頭部中的目的MAC位址與自己網卡的MAC位址匹配時,才會向網路協定棧交付該訊框中的封包,否則網卡就會丟棄該訊框。因此,當同一區域網路中的一台主機要和另一台主機或者交換機,路由器等進行網路通訊時,必須要知道與本機用網線連接上的,目標裝置那邊的那個網路介面的MAC位址(也就是網卡的位址)。這就導致在乙太網路中使用IP協定向下傳遞IP包時,IP包被包含在乙太網路訊框中。乙太網路訊框是有自己的格式的,在訊框頭部就需要填充目的機器MAC位址,而此時從ARP表裡面沒有查詢到目的IP位址對應的MAC位址,因此主機會暫存這個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位址相同,就會向上層協定棧遞交這個訊框中的封包,從而資料得以交付,而其他主機檢測到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協定的參數由網際網路號碼分配局(Internet Assigned Numbers Authority, 簡稱IANA)負責標準化和維護。
ARP協定的以太類型為0x0806。該類型出現於乙太網路訊框格式中的以太類型欄位。請注意區別此類型和ARP協定類型(PTYPE)。
報文格式
長度(位) | 48 | 48 | 16 | 16 | 16 | 8 | 8 | 16 | 48 | 32 | 48 | 32 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
資料類型 | 目標乙太網路位址 | 源乙太網路位址 | 訊框類型 | 硬體類型 | 協定類型 | 硬體位址長度 | 協定位址長度 | 操作碼 | 源硬體位址 | 源協定位址 | 目標硬體位址 | 目標協定位址 |
組成 | 14位元組 乙太網路首部 | 28位元組 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)傳送資料為例。
- 當傳送資料時,主機A會在自己的ARP快取表中尋找是否有目標IP位址。如果找到就知道目標MAC位址為(00-BB-00-62-C2-02),直接把目標MAC位址寫入訊框裡面傳送就可。
- 如果在ARP快取表中沒有找到相對應的IP位址,主機A就會在網路上傳送一個廣播(ARP request),目標MAC位址是「FF.FF.FF.FF.FF.FF」,這表示向同一網段內的所有主機發出這樣的詢問:「192.168.38.11的MAC位址是什麼?」
- 網路上其他主機並不回應ARP詢問,只有主機B接收到這個訊框時,才向主機A做出這樣的回應(ARP response):「192.168.38.11的MAC位址是00-BB-00-62-C2-02」,此回應以單播方式進行。這樣,主機A就知道主機B的MAC位址,它就可以向主機B傳送資訊。同時它還更新自己的ARP高速緩衝記憶體(ARP cache),下次再向主機B傳送資訊時,直接從ARP快取表里尋找就可。
ARP快取表採用老化機制,在一段時間內如果表中的某一行沒有使用,就會被刪除,這樣可減少快取表的長度,加快查詢速度。
無回報的ARP(gratuitous ARP),它是指主機傳送ARP查詢(廣播)自己的IP位址,當ARP功能被開啟或者是埠初始組態完成,主機向網路傳送無回報的ARP來查詢自己的IP位址確認位址唯一可用。作用:
- 確定網路中是否有其他主機使用了IP位址,如果有應答則產生錯誤訊息。
- 無回報的ARP可以做更新ARP快取用,網路中的其他主機收到該廣播則在快取中更新條目,收到該廣播的主機無論是否存在與IP位址相關的條目都會強制更新,如果存在舊條目則會將MAC更新為廣播包中的MAC。
協定的分層
ARP協定在網際網路協定套件和OSI模型的位置可能會造成混亂和爭議。在 RFC 1122 僅僅在資料鏈路層提及ARP協定當並未說明將此協定置於該層[2]。一些較舊的文件將ARP置於OSI的資料鏈路層[3],但是一些新的版本卻將其與網路層聯絡起來。[4]
參考資料
- ^ 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).
- ^ RFC 1122
- ^ W. Richard Stevens, TCP/IP Illustrated, Volume 1: The Protocols, Addison Wesley, 1994, ISBN 0-201-63346-9.
- ^ W. Richard Stevens, TCP/IP Illustrated, Volume 1: The Protocols, Addison Wesley, 2011, ISBN 0-321-33631-3, page 14