由硬件交換的幀需要使用正確的硬件地址定位到正確的接口;否則,無法傳輸數據。
一個傳統IPv4網絡需要使用自已的地址: 32位的IPv4地址。一臺主機要將一個幀發送到另一臺主機,還需要要發往主機的物理地址
(這里的物理地址是數據幀即將要發往的主機,而不是數據幀最終要發往的主機)
地址解析協議
提供了IPv4地址和物理地址間的動態映射(自動執行隨時間變化,不需要管理員重新配置)。就是能夠通過ip地址獲得物理地址。用的方法就是喊一聲!
ARP僅用于IPv4, IPv6使用鄰居發現協議,它被合并人ICMPv6
網絡層地址為IP地址,由網絡管理員,或者用戶指定分配,可隨時更改。
而數據鏈路層地址為物理地址,是在網卡出場的時候寫入網卡中,不能更改。
地址解析就是建立這兩個地址之間的映射關系。
兩個局域網的主機之間傳輸的以太網幀包含IP數據報時,由48位以太網地址確定該幀的目的接口。只有數據幀達位于同一IP子網的系統時, ARP才能工作。(數據幀貌似一直都只在不同的子網中傳播的吧。)
例如:
同一子網中的兩臺計算機要進行通信:
- 使用子網掩碼判斷目標主機與源主機位于同一子網中。(假設沒有arp緩存)
在這一步的時候已經到了鏈路層 - 在一個共享的鏈路層網段上, 源主機ARP向所有主機發送一個稱為ARP請求的以太網幀。這被稱為鏈路層廣播。
who has ..... - 某個主機使用請求中指出的IPv4地址,它需要響應一個ARP應答。
不同虛擬局域網中的主機不會收到 - 收ARP請求的源主機學習(也就是記錄)IPv4到MAC地址的映射,并記錄在內存中供以后使用。
- 源主機可將數據報封裝在以太網幀中直接發送到目的主機。
由于這個以太網地址僅指向正確的目的主機,其他主機或路由器接收到這個數據包以檢測物理地址與自己的不匹配,然后扔掉了。 - 同一子網中的路由器通信不需要經過路由器
他經過交換機?。?!
同一網段內的兩臺主機通信是否需要路由器
ARP緩存
IPv4地址映射到硬件地址后,將這個這一個映射關系(也就是這個鍵值對)存起來,對應于高速緩存中的一個條目,其正常到期時間是條目創建開始后的20分鐘。
使用arp -a
查看
動態是指主動學習(通過arp獲得的),而靜態就是手動輸入。
linux下是一欄flag
,對應window的類型。
可能為C、M、P。
C類條目由ARP協議動態學習也就是接收到數據報就記錄了, M類條目通過手工輸人,而P類條目的含義是“發布”,也就是主動獲取的。
幀格式
注意這個圖,這是完整的以太網幀,黑色是有效荷載部分,所以他是鏈路層的,不是ip層的。
- DST:目的地址 6B
也就是接受這個數據幀的下一臺主機的物理地址。
在arp中通常不知道采取詢問,所以物理地址為全f
對于ARP請求,目的以太網地址ff:ff:ff:ff:ff:ff(全部為1)是廣播地址,在同一廣播域中的所有以太網接日可接收這些幀。 - SRC:源地址 6B
發送該數據幀主機的物理地址。 - 長度或類型 2B
arp中必須為0x0806。 - 接下來的 8B
長度/類型字段之后的前4個宇段指定了隨后4個字段的類型和大小。
硬件類型字段指出硬件地址類型,對于以太網該值為1。
協議類型字段指出映射的協議地址類型。對于IPv4地址,該值為0x0800
硬件大小和協議大小分別指出硬件地址和協議地址的字節數,以太網中使用IPv4地址的ARP請求或應答.它們的值分別為6和4。物理地址長度6,ip地址長度4 - Op 2B
op字段指出該操作是ARP請求(1)、 ARP應答(2)、 RARP請求(3)或RARP應答(4)。
由于ARP請求和ARP應答的長度/類型字段相同.因此這個字段是必需的。 - 發送方物理地址,發送方協議地址 10B
- 接收方物理地址,發送方協議地址 10B
對于各arp請求,其目的硬件地址為全0
當一個系統接收到一個ARP請求.它填充自己的硬件地址.將兩個發送方地址和接收方地址互換.將Op
字段設為2.然后發送生成的應答。
arp請求
嗯就這些。
arp應答
其目的主機物理地址應該被填充的。
目的主機發送ARP應答外,它還會在ARP緩存中保存請求者的硬件地址和IP地
arp緩存
一般有效期為20分鐘,不完整的arp為3分鐘(只發送了請求,但是沒有收到回應)
軟狀態?超時前沒有被更新而丟棄的信息。
ARP代理
有那么一臺無聊的主機,準們回答arp請求的。
這個作用沒搞懂,用于隱藏目的主機。
比如,訪問谷歌。但是,卻被代理arp返回了錯誤的物理地址。我們和谷歌永別了。
主機不存在
如果嘗試訪問一個不存在的主機,會首先卡死在arp上,因為主機不存在,根本沒有人會回應這條請求。
免費arp
與普通的arp請求一樣,不期望收到回復,如果收到就是有沖突了
- 允許一臺主機確定另一臺主機是否配置相同的IPv4地址。
如果ip沖突,什么都不顯示,就是不讓你上網。 - 更改主機的物理地址(換硬件之類的)
ARP探測分組和通告分組
探測用于檢測是否有使用這個ip的,通告用于高速別的主機,我已經使用了這個ip
通告之前需要先探測
ipv4地址沖突檢測 ACD,使用arp分組,將發送方協議地址設置為9,避免污染已經緩存的arp緩存(如果ip地址被使用,那么可能已經緩存arp,所以要避免這種情況),這是與免費arp的主要區別。
如果收到arp回復,那么表明候選的ip(請求使用ip主機選擇的ip地址)已經被使用。
如果沒有收到請求,就會想廣播域中發送2個arp通告,表明它已經在使用這個ip地址了。
arp通告將發送方協議地址和目的協議地址填充為候選的ipv4地址。
arp分配ip地址
使用主機配置嵌入式設備的ip
不常用,一般都是DHCP分配
但是有一些嵌入式設備不能手動獲取的時候。
一個主機先生成一個ip-mac映射,其中mac為嵌入設備的物理地址,ip為任選一個不沖突的。
然后向嵌入設備發送一個數據包,此時設備接收到一個以自己物理地址為目標地址的數據幀時,這個設備可以用數據幀中的ip完成配置。
這需要嵌入設備的配合和主機的配合。