ARP地址解析協議(Address Resolution Protocol)協議詳解,將IPv4地址轉換為硬件地址
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
ARP概述 ARP協議的定義 地址解析協議(Address Resolution Protocol,ARP):ARP協議可以將IPv4地址(一種邏輯地址)轉換為各種網絡所需的硬件地址(一種物理地址)。換句話說,所謂的地址解析的目標就是發現邏輯地址與物理地址的映射關系。 ARP僅用于IPv4協議,IPv6使用鄰居發現協議(NDP)替代。 ARP協議目前最廣泛應用于尋找32位IPv4地址與以太網的48位MAC地址之間的映射。 掌握ARP協議前,需要理解什么是邏輯地址和物理地址。 物理地址 物理地址:物理地址對于主機就類似身份證對于人類。對于每個網絡適配器,設置制造商都會給定一個永久的物理地址,將其存儲在設備的永久性內存中。就像身份證一樣,物理地址就是網絡適配器的ID。注意,物理地址是和網絡適配器綁定的,如果主機更換了網絡適配器,那么它的物理地址也會相應改變。(雖然網絡適配器的物理地址是固定的,但也可以通過特殊方法修改,但這種情況極少出現,不影響我們理解) 在TCP/IP分層體系結構中,數據鏈路層和物理層使用的地址是物理地址。而網絡層、傳輸層和應用層使用的地址是IP地址(邏輯地址)。 邏輯地址 邏輯地址:邏輯地址就是我們常說的IP地址,因為IP地址是由軟件實現的,所以把它稱為邏輯地址。IP地址是不固定的,它通常從某個網絡的IP地址池中獲得,改變網絡環境,IP地址就會改變。 為什么需要2級地址 分組進行傳輸必須要2級地址:邏輯地址和物理地址。 IP地址和物理地址是在不同的層次下運行的。同一個目的IP地址可能經過多段鏈路,每段鏈路都可能運行不同的鏈路層和物理層協議,它們的物理地址格式可能都截然不同;同理,同一段鏈路可能接收來自不同的網絡層協議,比如IPv4或者IPX。 有人可能覺得,直接用物理地址替代IP地址不就行了么? 這是因為對IP地址不夠了解。現實中,有很多鏈路層和物理層的協議,它們都有不同的物理地址。如果完全依賴物理地址,那么路由表就需要對每個物理地址建立一個項,那樣沒有一個路由器能夠負擔如此龐大的表項。 而IP地址提供了更高層次的抽象,將不同的物理地址抽象為統一的邏輯地址。 IP地址有良好的分層。如果分組轉發到同一子網,只需要在路由表中記錄統一的網絡前綴。比如,一個子網有6000個IP地址,對應6000個物理地址。記錄IP地址網絡前綴只需要1行,記錄物理地址則需要6000行。 有了IP地址,分組的路由(也就是找路)的工作仿佛在同一個網絡中進行。如果傳輸IPv4分組,那么IPv4分組傳輸過程中經過的所有網絡都使用IPv4協議,仿佛它們在一個邏輯上的網絡中。 ARP工作原理 ARP協議主要依賴ARP高速緩存(ARP cache)。ARP高速緩存就是一個映射表,它記錄了IP地址和物理地址的映射關系。每一臺主機和路由器都設有ARP高速緩存,在實際傳輸中,通常已知下一跳的目的IP地址(這是通過查詢路由表完成的,不是本篇的知識),通過查詢ARP高速緩存即可知道對應的物理地址。 如何建立ARP高速緩存 高速緩存記錄的映射表不是一開始就有的。假設已知下一跳的目的IP地址,如何通過ARP協議得知下一跳對應的物理地址呢? 答案是通過廣播ARP請求分組。 ARP請求分組有3個重要信息:1.源IP地址。2.對應的源物理地址。3.目的IP地址。 查詢的內容為:對應的目的物理地址。 以下是具體步驟: 源主機或者路由器會給該網絡的所有主機發送ARP請求分組(也就是給這個網絡廣播該分組),所有主機會檢查分組的目的IP地址是否與自身的IP地址相同。如果不相同,就丟棄該分組;如果相同,就說明自己就是被尋找的目的主機或者路由器。 目的主機(或目的路由器)在收到ARP請求分組后,會做兩件事: 1.將源主機的IP地址和對應的物理地址添加進自身的ARP高速緩存映射表。 這是因為既然源主機會和自己通信,那么自己之后也可能會主動和源主機通信,提前建立源主機的映射表項是有必要的,之后自己要主動和源主機通信就不用廣播ARP請求分組了。 2.給源主機發送ARP響應報文(注意,該報文是單播的) 目的主機需要給源主機發送ARP響應報文,告知源主機自己的物理地址。源主機在收到所需的ARP響應報文,就可以發送幀給目的主機了。 為什么是單播而不是廣播呢?那是因為目的主機已經有源主機的物理地址了,可以直接給源主機發送對應的幀,不需要廣播。 當源主機接收到ARP響應報文后,也會將目的主機的IP地址和對應的物理地址添加到自己的ARP高速緩存映射表中,這樣下次再和該主機通信,就不用廣播ARP分組了。之后就可以通過物理地址,給目的主機發送幀了。 使用ARP協議的4種不同情況 ARP協議是在單個網絡內部運行的。如果源主機和目的主機不在一個網絡中,必須多次使用ARP協議。 無論情況多復雜,都是由以下4種情況組合而成的。 如果源主機和目的主機在一個網絡中,這就很簡單,源主機直接通過ARP協議尋找目的主機的物理地址。 也就是情況1:源主機直接通過ARP協議尋找同一個網絡下目的主機的物理地址。 如果源主機和目的主機不在一個網絡中,就必須通過路由器路由。通過查找路由表,將目的主機的IP地址轉換為下一跳的IP地址。再通過ARP協議,將下一跳的IP地址轉換為對應的物理地址。 細分有3種情況: 情況2:源主機尋找下一跳路由器的物理地址。 情況3:路由器尋找在同一個網絡中的目的主機的物理地址。 情況4:路由器和目的主機不在同一個網絡中,路由器A尋找下一條路由器B的物理地址。 其實這4種情況非常好理解,只需要理解路由表的作用和ARP映射表的作用即可。 高速緩存的生存周期 ARP高速緩存是動態的,而且緩存記錄的映射項有生存周期,一般默認是20分鐘。超過生存周期,那條映射就會從映射表中移除。 為什么需要設置生存周期呢? 是因為物理地址和IP地址都可能改變。比如目的主機更換了網絡適配器,那么目的主機的物理地址就改變了。 如果源主機通過查看ARP映射表得到了目的主機以前的物理地址,肯定是無法正常通信的。但隨著該表項生存周期到時,源主機會重新廣播ARP請求分組,這樣就可以得到目的主機新的物理地址。從而和目的主機正常通信。 ARP報文格式 硬件類型:該字段有16bit。指定運行ARP協議的物理網絡類型,ARP協議可以運行在任何物理網絡上。以太網是類型1。 協議類型:該字段有16bit。指定高層協議的類型。ARP可用于任何高層協議。IPv4協議的值為0x0800。 硬件長度:該字段有8bit。定義物理地址的長度,以字節為單位。對于以太網,該值為6字節。 協議長度:該字段有8bit。定義邏輯地址的長度,以字節為單位。對于IPv4,該值為4字節。 操作:該字段有16bit。用于定義分組類型,目前常用2種。ARP請求分組和ARP響應分組。 發送方硬件地址:記錄發送方的物理地址。 發送方協議地址:記錄發送方的邏輯地址。 接收方硬件地址:如果是ARP請求報文,由于不知道接收方的物理地址(請求報文就是通過廣播詢問接收方物理地址,當然事先不知道),該字段全部填充為0。 接收方協議地址:記錄接收方的邏輯地址。 封裝ARP協議 ARP協議是很特殊的協議,它像是介于網絡層和鏈路層之間的協議。 ARP協議是封裝在幀中的,就像IPv4協議封裝在以太網幀一樣,從這個角度講,ARP協議像網絡層協議。 但是ARP協議是為網絡層協議服務的,從服務的角度講,它又像鏈路層協議。 實際中,ARP協議常封裝在以太網幀中。 當廣播ARP請求分組時,該網絡中的所有主機都會從以太網幀中提取出ARP協議分組,檢查接收方協議地址字段,如果和自身IP地址不相同,就丟棄該分組。如果相同,說明自身的物理地址就是被尋找的地址。就需要給發送方回復ARP響應分組(通過單播)。 ARP的響應報文會將發送方硬件地址字段和發送方協議地址字段填寫成自身的物理地址和IP地址。將接收方硬件地址和接收方協議地址填寫為ARP請求報文的發送方硬件地址和發送方協議地址。 抓包分析 抓取ARP請求報文 從上圖可知,ARP協議被封裝在Ethernet協議(以太網協議)中。 我們先看Ethernet II部分: Destination(目的物理地址)字段的值為:ff:ff:ff:ff:ff:ff 說明該以太網幀是廣播幀,和ARP請求分組是通過廣播形式發送吻合。 Source(源物理地址)字段的值為:50:eb:f6:56:ca:57 這是發送方主機的物理地址,和ARP協議的Sender MAC address字段的值完全吻合。 Type字段為:ARP(0x0806)。 說明該以太網幀封裝的是一個ARP協議分組。 再看ARP協議部分: 前4個字段表明物理地址和邏輯地址的類型和長度,和之前講解的吻合。 第五個字段Opcode的值為1,說明是ARP請求報文。 后面4個字段是源物理地址和IP地址,以及目標物理地址和IP地址。 值得注意的是,目標物理地址正如之前所說,全部填充的0。因為該字段正是ARP請求報文需要獲取的,目前不知,只能全部填充為0。 抓取ARP響應報文 先看Ethernet II部分: Destination(目的物理地址)字段的值正好是ARP請求報文的Source字段的值。 也就是說,該ARP響應報文是用來回應之前的ARP請求分組的。 該值也和Target MAC address的值相同。 Source(源物理地址)字段的值為目的端的物理地址,該值和Sender MAC address的值相同。 Padding是填充字段,用來填充以太網幀到最小幀長。 再看ARP協議部分: 前4個字段沒什么好講的。 第五個字段Opcode為2,表示這是ARP響應分組。 后面4個字段,源MAC地址正是ARP請求報文想尋找的物理地址。源IP地址正好是ARP請求分組的目的IP地址。目的物理地址和目的IP地址正好是ARP請求分組的源物理地址和源IP地址。 查看ARP高速緩存 在windows系統的終端,輸入arp -a命令可以顯示ARP緩存中的所有條目。 可以看到,當源主機192.168.1.1向目的主機192.168.1.2發送ARP請求分組,并且得到對應的ARP響應分組后。 該表項192.168.1.2 8e-47-af-ef-a2-66就被添加到了ARP高速緩存中(第二項)。 靜態映射與動態映射 可以看到,ARP高速緩存中,有的是靜態映射,有的是動態映射。 通過ARP協議動態配置的表項就是動態映射。發送方檢查ARP緩存,如果沒找到所需物理地址,就發送ARP請求報文,并得到ARP響應報文。之后再將對應的映射添加到ARP映射表上。這種方式得到的映射表項就是動態映射。 通過手動方式添加的表項就是靜態映射。這種方式添加的表項比較死板,因為對應的映射關系不一定固定不變。但是,靜態映射更加安全,不會被攻擊者通過ARP請求響應報文添加錯誤的映射關系。 該文章在 2025/1/2 8:51:06 編輯過 |
關鍵字查詢
相關文章
正在查詢... |