地址解析協議?(ARP) 是通過解析網路層地址來找尋數據鏈路層地址的一個在網絡協議包中極其重要的網絡傳輸協議。?
ARP是通過網絡地址(例:IPv4)來定位MAC地址?(也稱為乙太地址)。?
ARP已經在很多網路層和數據鏈接層之間得以實現,包括IPv4,Chaosnet,?DECnet和Xerox?PARC Universal Packet?(PUP) 使用IEEE 802標準,?光纖分布式數據接口,?X.25,?幀中繼和異步傳輸模式?(ATM),?IEEE 802.3和IEEE 802.11標準上IPv4占了多數流量。
在IPv6中鄰居發現協議?(NDP)用于代替地址解析協議。
在以太網協議中規定,同一局域網中的一臺主機要和另一臺主機進行直接通信,必須要知道目標主機的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請求/應答 |
原理
在每臺安裝有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緩存表里查找就可。
轉自**百科。