本頁使用了標題或全文手工轉換

地址解析協定

維基百科,自由的百科全書
跳至導覽 跳至搜尋

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

ARP是通過網絡地址來定位MAC地址。 ARP已經在很多網路層和數據連結層之間得以實現,包括IPv4,Chaosnet英語Chaosnet, DECnet英語DECnet和Xerox PARC Universal Packet英語PARC Universal Packet(PUP)使用IEEE 802標準, 光纖分散式數據介面, X.25, 幀中繼非同步傳輸模式(ATM),IEEE 802.3IEEE 802.11標準上IPv4佔了多數流量。

IPv6鄰居發現協定(NDP)用於代替地址解析協定(ARP)。

基本功能[編輯]

乙太網路協定中規定,同一區域網絡中的一台主機要和另一台主機進行直接通信,必須要知道目標主機的MAC地址。而在TCP/IP協定中,網絡層和傳輸層只關心目標主機的IP位址。這就導致在乙太網路中使用IP協定時,數據鏈路層的乙太網路協定接到上層IP協定提供的數據中,只包含目的主機的IP位址。於是需要一種方法,根據目的主機的IP位址,獲得其MAC地址。這就是ARP協定要做的事情。所謂地址解析(address resolution)就是主機在傳送幀前將目標IP位址轉換成目標MAC地址的過程。

另外,當傳送主機和目的主機不在同一個區域網絡中時,即便知道對方的MAC地址,兩者也不能直接通信,必須經過路由轉發才可以。所以此時,傳送主機通過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。

乙太網路報文數據[編輯]

  • 硬件類型:如乙太網路(0x0001)、分組無線網
  • 協定類型:如網際協定(IP)(0x0800)、IPv6(0x86DD)。
  • 硬件地址長度:每種硬件地址的位元組長度,一般為6(乙太網路)。
  • 協定地址長度:每種協定地址的位元組長度,一般為4(IPv4)。
  • 操作碼:1為ARP請求,2為ARP應答,3為RARP請求,4為RARP應答。
  • 源硬件地址:n個位元組,n由硬件地址長度得到,一般為傳送方MAC地址。
  • 源協定地址:m個位元組,m由協定地址長度得到,一般為傳送方IP位址。
  • 目標硬件地址:n個位元組,n由硬件地址長度得到,一般為目標MAC地址。
  • 目標協定地址:m個位元組,m由協定地址長度得到,一般為目標IP位址。

報文格式[編輯]

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

原理[編輯]

在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傳送資訊。同時它還更新自己的ARP高速緩衝記憶體(ARP cache),下次再向主機B傳送資訊時,直接從ARP緩衝記憶體表裏尋找就可。


ARP緩衝記憶體表採用老化機制,在一段時間內如果表中的某一行沒有使用,就會被刪除,這樣可減少緩衝記憶體表的長度,加快查詢速度。

免費ARP(gratuitous ARP),他是指主機傳送ARP查詢(廣播)自己的IP位址,當ARP功能被開啟或者是埠初始組態完成,主機向網絡傳送免費ARP來查詢自己的IP位址確認地址唯一可用。

作用:

  1. 確定網絡中是否有其他主機使用了IP位址,如果有應答則產生錯誤訊息。
  2. 免費ARP可以做更新ARP緩衝記憶體用,網絡中的其他主機收到該廣播則在緩衝記憶體中更新條目,收到該廣播的主機無論是否存在與IP位址相關的條目都會強制更新,如果存在舊條目則會將MAC更新為廣播包中的MAC。

Windows:開始 → 執行 → cmd → arp -a(參數a表示顯示所有內容)

Linux終端 → arp -nv

MacOS終端 → arp -nla

參考資料[編輯]

另見[編輯]

外部連結[編輯]