轉載於 https://www.cnblogs.com/onlycat/p/11340872.html#/cnblog/works/article/11340872
一、基本概念
ARP(Address Resolution Protocol) 即地址解析協議,用於實現從IP地址到MAC地址映射。
二、 ARP工作流程
2.1 同一網段ARP工作流程分析

1. PC1 要和PC3 通行,首先查看自己的ARP表,查看其中是否包含PC3的MAC地址信息,如果找到對應關系,直接利用ARP表中的MAC地址對IP數據包進行封裝。並將數據包發送給PC3。
2. 如果PC1在ARP表中未找到PC3對應的MAC地址,則先緩存數據報文,然后利用廣播方式(目標MAC地址FF:FF:FF:FF:FF:FF)發送一個ARP報文請求,ARP請求中的發送端MAC地址分別是PC1的IP地址和MAC地址,接收端的IP地址為PC3的IP地址,MAC地址全為0,因為ARP請求報文是以廣播方式發送,所以該網段上的所有主機都可以接收到該請求包,但只有其IP地址與目的IP地址一致的PC3才會對該請求進行處理。
3. PC3將ARP請求報文中的發送端(即PC1)的IP地址和MAC地址存入自己的ARP表中。然后以單播方式向PC1發送一個ARP相應報文,應答報文中就包含了自己的MAC地址,也就是原來在請求報文中要請求的目的MAC地址。
4. PC1收到來自PC3的ARP響應報文之后,將PC3的MAC地址加入到自己的ARP表中以用於后續報文的轉發,同時將原來緩存的IP數據包再次修改(在目的MAC地址字段填上PC3的MAC地址)后發送出去。
2.2 跨網段的ARP地址解析流程
- 如果主機A不知道網關的MAC地址(也就是主機A的ARP表中沒有網關對應的MAC地址表項),則主機A先在本網段中發出一個ARP請求廣播,ARP請求報文中的目的IP地址為網關的IP地址,代表其目的就是想獲得網關的MAC地址。如果主機A已經知道網關的MAC地址,則略過此步。
- 網關收到ARP廣播包后同樣會向主機A發回一個ARP應答包。當主機A收到的應答包中獲得網關的MAC地址后,在主機A向主機B發送的原報文的目的MAC地址字段填上網關的MAC地址后發給網關。
- 如果網關的ARP表中已有主機B對應的MAC地址,則網關直接將在來自主機A的報文中的目的MAC地址字段填上主機B的MAC地址后轉發給B。
- 如果網關ARP表中沒有主機B的MAC地址,網關會再次向主機B所在的網段發送ARP廣播請求,此時目的IP地址為主機B的IP地址,當網關從收到來自主機B的應答報文中獲得主機B的MAC地址后,就可以將主機A發來的報文重新再目的MAC地址字段填上主機B的MAC地址后發送給主機B。
三、協議格式

以太網目的地址: 目的主機的硬件地址。目的地址全為1表示廣播地址
以太網源地址:源主機的硬件地址
幀類型:ARP:0x0806、 RARP:0x8035
硬件類型:表示硬件地址類型,ARP當前可用硬件類型如下
| 類型 | 含義 | 備注 | 類型 | 含義 | 備注 |
| 0x001 | 以太網 | 0x0012 | 本地網 | ||
| 0x002 | 實驗性以太網 | 0x0013 | 超鏈路 | ||
| 0x003 | 業務無線電AX.25 | 0x0014 | SMDS | ||
| 0x004 | Proteon ProNet令牌環 | 0x0015 | 幀中繼 | ||
| 0x005 | ChaosNET | 0x0016 | ATM | ||
| 0x006 | IEEE 802網 | 0x0017 | HDLC(高級數據鏈路控制) | ||
| 0x007 | ARCnet | 0x0018 | 未指定 | ||
| 0x008 | 超信道 | 0x0019 | 異步傳輸模式 | ||
| 0x009 | Lanstart | 0x0020 | 串行線路 | ||
| 0x0010 | Autonet短地址 | 0x0021 | 異步傳輸模式 | ||
| 0x0011 | Local talks |
協議類型:IP類型:0x0800
硬件地址長度:對於以太網II來說,MAC地址作為硬件地址,因此該字段值為十六進制06
協議地址長度:對於IPv4來,IP地址長度位32個字節,因此該字段值為十六進制04
操作類型:ARP定義了兩種操作:0x0001(請求)、0x0002(應答)
發送端以太網地址:對於以太網II來說,MAC地址作為硬件地址
發送端IP地址:對於IPv4來, 值為IPv4地址
目的以太網地址:對於以太網II來說,MAC地址作為硬件地址
目的IP地址:對於IPv4來, 值為IPv4地址
四、協議分析
4.1 普通ARP
即通過ip地址獲得MAC地址,即網絡中通過IP尋找對應MAC地址信息。
1. 請求包

解析:
鏈路層解析:
主機(54 89 98 ec 0f 66) 向局域網內發送廣播(ff ff ff ff ff ff), 使用類型類型為 ARP (0806)
網絡層解析:
該數據包的硬件地址類型為以太網(00 01), 使用IPv4(08 00)協議類型, 其中硬件地址長度為6個字節(以太網MAC地址長度), 協議地址長度為4字節(IPv4地址長度);該數據包為ARP請求包(0001), 數據包內容為 宿主機MAC地址為54 89 98 ec 0f 66 ,IP地址為 192.168.1.2(c0 a8 01 02) 向網絡(ff ff ff ff ff ff)中請求IP地址為192.168.1.4(c0 a8 01 04的mac地址。該網絡中主機收到該數據包請求根據包中發送方地址信息,更新自己ARP表信息,若該IP地址為自己IP地址,則對請求方進行回復,若非自己IP地址,則丟棄。
2. 響應包

解析:
鏈路層解析:
主機(54 89 98 49 3a 78) 向主機發送響應消息(54 89 98 ec 0f 66), 使用類型類型為 ARP (0806)
網絡層解析:
該數據包的硬件地址類型為以太網(00 01), 使用IPv4(08 00)協議類型, 其中硬件地址長度為6個字節(以太網MAC地址長度), 協議地址長度為4字節(IPv4地址長度);該數據包為ARP響應包(0002), 數據包內容為 宿主機MAC地址為54 89 98 49 3a 78,IP地址為 192.168.1.4(c0 a8 01 04) 向主機(54 89 98 ec 0f 66)發出的ARP請求數據包進行響應,接收方收到該響應包更新系統ARP表。
4.2 免費ARP
免費ARP報文與普通ARP請求報文的區別在於普通的ARP請求報文,其ARP封裝內的“目的IP地址”是其他機器的IP地址,而免費ARP的請求報文,其ARP封裝內的“目的IP地址”是其自己的IP地址。免費ARP的數據包格式如下圖所示:

免費ARP在實際環境中的一些應用
1. 免費ARP主要用於檢測IP地址沖突
當一台主機發送了免費ARP請求報文后,如果收到了ARP響應報文,則說明網絡內已經存在使用該IP 的主機。
2. 利用免費ARP確認設備接口地址
一般的設備在網卡地址加載階段都會向網絡中發送免費的ARP報文(也有些安全設備為了安全起見,讓設備在加載地址期間不向外發送免費ARP報文),當我們想知道某些設備的接口地址但又沒有相應記錄可查時,我們就可以利用設備的這種特性,抓取其免費ARP報文,從而分析出其接口使用的IP地址。
3. 使用免費ARP報文,更新某些設備的ARP表項
4. 利用免費ARP的攻擊
5. 網關設備利用免費ARP防止ARP攻擊
4.3 代理ARP
代理ARP是ARP協議的一個變種。對於沒有配置缺省網關的計算機要和其他網絡中的計算機實現通信,網關收到源計算機的 ARP 請求會使用自己的 MAC 地址與目標計算機的 IP地址對源計算機進行應答。代理ARP就是將一個主機作為對另一個主機ARP進行應答。它能使得在不影響路由表的情況下添加一個新的Router,使得子網對該主機來說變得更透明化。同時也會帶來巨大的風險,除了ARP欺騙,和某個網段內的ARP增加,最重要的就是無法對網絡拓撲進行網絡概括。代理ARP的使用一般是使用在沒有配置默認網關和路由策略的網絡上的。
1. 基本實現

2. 數據解析
1. 在主機192.168.2.2 上ping 主機 192.168.3.2 抓取數據包如下,


解析: 主機192.168.2.2 與主機 192.168.3.2 進行通行,先向發送廣播包,請求網關MAC地址,網關收到該廣播后發送單播給請求方告知自己的MAC地址信息
抓取 192.168.3.0/24 網絡側數據包如下


解析: 網關收到192.168.2.1 發送給192.168.3.2的信息,先檢查自身MAC地址表若沒有192.168.3.2 的MAC地址信息,則在192.168.3.0 網段進行廣播請求192.168.3.2 的MAC地址信息,192.168.3.2收到網關的ARP請求信息,向網關發送單播告知自己的MAC地址信息。
五、ARP常用命令
| 功能 | Mac | Windows | Linux | Huawei | H3C | Cisco | Ruijie |
| 查看ARP表 | arp -a | arp -a | arp -a | display arp all | show mac-address-table | ||
| 清理ARP表 | arp -ad | reset arp all | clear arp |
