今天跟大家聊一聊你們認為最熟悉又是最陌生的ARP地址解析協議,現在網絡都是 Ethernet,在這個環境中,我們的 PC router 三層設備都包含 mac IP 地 址。
一、ARP的簡單介紹
在以太網環境中,我們要發送幀,幀要添加SD( 源目,下面統一說成SD)MAC 地址信息,通信的時候,不關注 MAC 地址是什么,ping IP 地址,很多情況下 S 和 D 通信的時候 S 知道 D的 IP 地址,不知道MAC 地址是不能通信的,因為在 Ethernet 環境中將成幀(成幀 我們的數據幀能夠成功的被封裝),如果不知道 MAC 地址,那么 MAC 地址幀頭的第一個字段沒有辦法填寫,所以通信的時候,不但知道對端的 IP 地址,還要知道對端 MAC 地址。
當PC 發送一個數據包去往目的節點的時候,回做一個判斷自身的 IP 地址和目標 IP 地址是否在同一個自網段內,使用自身的掩碼和目的 IP 地址做一個云運算,得出網絡號和自身的網絡號對比,一致代表在同一個網絡內或者廣播域內,這個時候可以使用對端 MAC 地址做數據封裝,不在同一網絡內,那么就檢查是否指定網關,去查看網關的 MAC 地址信息,因為去往外網的時候目的 MAC 地址必須是網管的,否則出不去,因為 router 收到 MAC 地址為自己的接受接口地址的時候才會拆包,獲得 3 層查 DIP,做轉發,這就是 PC 對待網絡內 網絡間通信差異化處理。
還有一種可能,就是 PC 要訪問外網節點,并沒有指定網關,那么可以嘗試解析對端的 MAC 地址,只要通過 Ethernet 接口發送數據,我一定要根據下一跳 IP 地址在 ARP 表中找對應的表項 ,情況有以下兩種:
找到:直接使用該表項的地址信息填充 MAC 字段,
沒有找到:發送 ARP 請求來解析,
在同一網絡內,我的下一跳就是目的地;不在同一網絡內 下一跳就是網關。當兩來主機在同一網絡內的時候直接針對目的 IP 做 ARP 檢查,要訪問外網的時候指定網關,對網關做 ARP 地址檢查。ARP請求廣播,應答為單播,那什么情況下發送ARP請求呢?就是在已知目的主機 IP,解析目的主機MAC 地址的時候,如下圖:
可以看到,ARP 封裝一定是封裝 Ethernet 幀頭。
下面我們就來說看看ARP數據包格式,如下圖所示:
Hardware type(硬件類型)表示硬件地址類型,一般為以太網
Protocol type(協議字段) 三層的協議信息
Hardware length (硬件地址長度)MAC 地址多少字節,
Protocol length(協議長度) 3 層地址長度
Operation code (操作代碼) 1 是 request 2 是 reply
二、代理 ARP 和免費 ARP
代理 ARP 全稱是 Proxy ARP ,在路由器、多層交換機、防火墻的網關接口使用,那么代理 ARP 是怎么工作的呢?如:PCA---SW1---R1---SW2---PCB,PCA 是沒有配置網關的老式電腦,步驟如下:
(1)判斷 PCB 和自身的 IP 地址是否屬于同一個 IP 子網段,然后
(2)PCA 直接針對 PCB 的 IP 地址做 ARP 解析,條件如下:
- ARP 的請求者和被請求者是否屬于同一個網絡
- R1 需要擁有去往被請求者的路由
- 接口開啟代理 ARP
這時 R1 會偽裝成 PCB 代替 PCB 向 A 返還 ARP 應答、免費 ARP全稱是IP gratuitous-arps,通過 DHCP 來獲取一個 ip 地址,同時發送免費 ARP,免費 ARP 數據包是主機發送 ARP 查找自己的 IP 地址 。那么免費ARP有那么作用呢?如下:
(1)驗證 IP 是否沖突一個主機能夠通過它來確定還有一個主機是否設置了同樣的 IP 地址。發送主機并不須要一定收到此請求的回答。假設收到一個回答,表示網絡中存在與自身 IP 同樣的主機。假設沒有收到應答,則表示本機所使用的 IP 與網絡中其他主機并不沖突 。
(2) 假設發送 ARP 的主機正好改變了物理地址(如更換物理網卡),能夠使用免費ARP來通知網絡中其他主機及時更新 ARP 緩存。