arp介紹
ARP(Address Resolution Protocol,地址解析協(xié)議)是根據(jù)IP地址獲取物理地址的一個TCP/IP協(xié)議。由于OSI模型把網(wǎng)絡(luò)工作分為七層,IP地址在OSI模型的第三層,MAC地址在第二層,彼此不直接通信。在通過以太網(wǎng)發(fā)送IP數(shù)據(jù)包時,需要先封裝第三層(32位IP地址)、第二層(48位MAC地址)的報頭。但由于發(fā)送數(shù)據(jù)包時只知道目標(biāo)IP地址,不知道其MAC地址,而又不能跨越第二、三層,所以需要使用地址解析協(xié)議。
使用地址解析協(xié)議后,計算機(jī)可根據(jù)網(wǎng)絡(luò)層IP數(shù)據(jù)包包頭中的IP地址信息對應(yīng)目標(biāo)硬件地址(MAC地址)信息,以保證通信的順利進(jìn)行。ARP的基本功能就是負(fù)責(zé)將一個已知的IP地址解析成MAC地址,以便主機(jī)間能正常進(jìn)行通信。
arp工作流程
本地主機(jī)PC1:192.168.31.238,目標(biāo)主機(jī)PC2:192.168.31.197。當(dāng)PC1和PC2通信時,地址解析協(xié)議可以將主機(jī)PC2的IP地址192.168.31.197解析成主機(jī)PC2的MAC地址。PC1和PC2的詳細(xì)通信過程如下:
1. 當(dāng)主機(jī)PC1發(fā)送數(shù)據(jù)給主機(jī)PC2時,首先在自己的本地ARP緩存表中檢查主機(jī)PC2匹配的MAC地址。
2. 如果主機(jī)PC1的緩存表中沒有找到相應(yīng)的條目,它將詢問主機(jī)PC2的MAC地址,從而將ARP請求幀廣播到本地網(wǎng)絡(luò)上的所有主機(jī)。該幀中包括源主機(jī)PC1的IP地址和MAC地址。本地網(wǎng)絡(luò)上的每臺主機(jī)都接收到ARP請求并且檢查是否與自己的IP地址匹配。如果主機(jī)發(fā)現(xiàn)請求的IP地址與自己的IP地址不匹配,它將會丟棄ARP請求。
3. 主機(jī)PC2確定ARP請求中的IP與自己的IP地址匹配,則將主機(jī)PC1的地址和MAC地址添加到本地緩存表。
4. 主機(jī)PC2將包含其MAC地址的ARP回復(fù)消息直接發(fā)送回主機(jī)PC1(這個數(shù)據(jù)幀為單播)。
5. 當(dāng)主機(jī)PC1收到從主機(jī)PC2發(fā)來的ARP回復(fù)消息時,會將主機(jī)PC2的IP和MAC地址添加到自己的ARP緩存表。本機(jī)緩存是有生存期的,默認(rèn)ARP緩存表的有效期是120s。當(dāng)超過該有效期后,將再次重復(fù)上面的過程。主機(jī)PC2的MAC地址一旦確定,主機(jī)PC1就能向主機(jī)PC2發(fā)送IP信息。
arp緩存表
1. arp緩存表的作用
ARP協(xié)議是通過目標(biāo)設(shè)備的IP地址,查詢目標(biāo)設(shè)備的MAC地址,以保證通信的順利進(jìn)行。而ARP緩存中包含一個或多個表,它們用于存儲IP地址及其經(jīng)過解析的MAC地址。在ARP緩存中的每個表又被稱為ARP緩存表。
2. arp緩存表維護(hù)工具
arp命令 在計算機(jī)中,提供了一個ARP命令。該命令用于查詢本機(jī)ARP緩存中的IP地址和MAC地址的對應(yīng)關(guān)系、添加或刪除靜態(tài)對應(yīng)關(guān)系等。用戶也可以通過使用arp命令驗證ARP緩存條目的生命周期。
3. arp緩存表的構(gòu)成
```
C:UsersAdministrator>arp -a
接口: 192.168.31.238 --- 0xb
Internet 地址 物理地址 類型
192.168.31.1 40-31-3c-eb-d3-a3 動態(tài)
192.168.31.197 88-88-88-88-87-88 動態(tài)
192.168.31.255 ff-ff-ff-ff-ff-ff 靜態(tài)
224.0.0.2 01-00-5e-00-00-02 靜態(tài)
224.0.0.22 01-00-5e-00-00-16 靜態(tài)
224.0.0.251 01-00-5e-00-00-fb 靜態(tài)
224.0.0.252 01-00-5e-00-00-fc 靜態(tài)
239.255.255.250 01-00-5e-7f-ff-fa 靜態(tài)
255.255.255.255 ff-ff-ff-ff-ff-ff 靜態(tài)
```
arp報文格式
- arp請求協(xié)議報文格式
表中每行長度為4字節(jié),即32位。前4行是以太網(wǎng)(Ethernet II類型)的幀頭部
1. 第1個字段:廣播類型的MAC地址:0XFF-FF-FF-FF-FF-FF,其目標(biāo)是網(wǎng)絡(luò)上的所有主機(jī)
2. 第2個字段:源MAC,即請求地址解析的主機(jī)MAC地址
3. 第3個字段:協(xié)議類型,這里用0X0806代表封裝的上層協(xié)議是ARP協(xié)議
4. 硬件地址:表明ARP協(xié)議實現(xiàn)在那種類型的網(wǎng)絡(luò)上
5. 協(xié)議類型:表示解析協(xié)議(上層協(xié)議)。這里一般是0800,即IP
6. 硬件地址長度:MAC地址長度,此處為6個字節(jié)
7. 協(xié)議地址長度:IP地址長度,此處為4個字節(jié)
8. 操作類型:表示ARP協(xié)議數(shù)據(jù)報類型。1表示ARP協(xié)議請求數(shù)據(jù)報,2表示ARP協(xié)議應(yīng)答數(shù)據(jù)報
9. 源MAC地址:發(fā)送端MAC地址
10. 源IP地址:表示發(fā)送端協(xié)議地址(IP地址)
11. 目標(biāo)MAC地址:目標(biāo)端MAC地址
- arp應(yīng)答協(xié)議報文格式
分析arp協(xié)議包
- 數(shù)據(jù)分析文件
- 本地主機(jī)PC1:192.168.31.238
- 目標(biāo)主機(jī)PC2:192.168.31.197
- 工具:WireShark、cmd-ping
```
C:UsersAdministrator>ping 192.168.31.197 -n 1
正在 Ping 192.168.31.197 具有 32 字節(jié)的數(shù)據(jù):
來自 192.168.31.197 的回復(fù): 字節(jié)=32 時間=3ms TTL=128
192.168.31.197 的 Ping 統(tǒng)計信息:
數(shù)據(jù)包: 已發(fā)送 = 1,已接收 = 1,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒為單位):
最短 = 3ms,最長 = 3ms,平均 = 3ms
```
arp請求包
```
No. Time Source Destination Protocol Time since reference or first frame Frame Info
1 0.000000 88:88:88:88:87:88 Broadcast ARP 0.000000000 Yes Who has 192.168.31.238? Tell 192.168.31.197
Frame 1: 60 bytes on wire (480 bits), 60 bytes captured (480 bits) # 第1幀數(shù)據(jù)報詳細(xì)信息。其中該包大小為60字節(jié)
Arrival Time: Aug 30, 2020 00:12:16.019728000 中國標(biāo)準(zhǔn)時間
Epoch Time: 1598717536.019728000 seconds
[Time delta from previous captured frame: 0.000000000 seconds]
[Time delta from previous displayed frame: 0.000000000 seconds]
[Time since reference or first frame: 0.000000000 seconds]
Frame Number: 1
Frame Length: 60 bytes (480 bits)
Capture Length: 60 bytes (480 bits)
[Frame is marked: False]
[Frame is ignored: False]
[Protocols in frame: eth:arp]
[Coloring Rule Name: ARP]
[Coloring Rule String: arp]
Ethernet II, Src: 88:88:88:88:87:88 (88:88:88:88:87:88), Dst: Broadcast (ff:ff:ff:ff:ff:ff) # 以太網(wǎng)幀頭信息。其中源MAC地址為88:88:88:88:87:88,目標(biāo)MAC地址為ff:ff:ff:ff:ff:ff(廣播地址)。這里的目標(biāo)地址為廣播,因為主機(jī)不清楚對方的MAC地址,因此局域網(wǎng)中所有設(shè)備都會收到該數(shù)據(jù)報
Destination: Broadcast (ff:ff:ff:ff:ff:ff)
Address: Broadcast (ff:ff:ff:ff:ff:ff)
.... ...1 .... .... .... .... = IG bit: Group address (multicast/broadcast)
.... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)
Source: 88:88:88:88:87:88 (88:88:88:88:87:88)
Address: 88:88:88:88:87:88 (88:88:88:88:87:88)
.... ...0 .... .... .... .... = IG bit: Individual address (unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
Type: ARP (0x0806)
Trailer: 000000000000000000000000000000000000
Address Resolution Protocol (request) # 地址解析協(xié)議內(nèi)容,request表示這是一個請求包
Hardware type: Ethernet (0x0001) # 硬件類型
Protocol type: IP (0x0800) # 協(xié)議類型
Hardware size: 6 # 硬件地址長度
Protocol size: 4 # 協(xié)議長度
Opcode: request (0x0001) # 操作碼。值為1,表示是個arp請求包
[Is gratuitous: False]
Sender MAC address: 88:88:88:88:87:88 (88:88:88:88:87:88) # 發(fā)送端MAC地址
Sender IP address: 192.168.31.197 (192.168.31.197) # 發(fā)送IP地址
Target MAC address: 00:00:00_00:00:00 (00:00:00:00:00:00) # 目標(biāo)MAC地址
Target IP address: 192.168.31.238 (192.168.31.238) # 目標(biāo)IP地址
0000 ff ff ff ff ff ff 88 88 88 88 87 88 08 06 00 01 ................
0010 08 00 06 04 00 01 88 88 88 88 87 88 c0 a8 1f c5 ................
0020 00 00 00 00 00 00 c0 a8 1f ee 00 00 00 00 00 00 ................
0030 00 00 00 00 00 00 00 00 00 00 00 00 ............
```
- arp請求報文格式
arp響應(yīng)包
```
No. Time Source Destination Protocol Time since reference or first frame Frame Info
2 0.000049 00:f4:8d:58:9b:7f 88:88:88:88:87:88 ARP 0.000049000 Yes 192.168.31.238 is at 00:f4:8d:58:9b:7f
Frame 2: 42 bytes on wire (336 bits), 42 bytes captured (336 bits) # 第2幀數(shù)據(jù)報詳細(xì)信息。其中該包大小為42字節(jié)
Arrival Time: Aug 30, 2020 00:12:16.019777000 中國標(biāo)準(zhǔn)時間
Epoch Time: 1598717536.019777000 seconds
[Time delta from previous captured frame: 0.000049000 seconds]
[Time delta from previous displayed frame: 0.000049000 seconds]
[Time since reference or first frame: 0.000049000 seconds]
Frame Number: 2
Frame Length: 42 bytes (336 bits)
Capture Length: 42 bytes (336 bits)
[Frame is marked: False]
[Frame is ignored: False]
[Protocols in frame: eth:arp]
[Coloring Rule Name: ARP]
[Coloring Rule String: arp]
Ethernet II, Src: 00:f4:8d:58:9b:7f (00:f4:8d:58:9b:7f), Dst: 88:88:88:88:87:88 (88:88:88:88:87:88) # 以太網(wǎng)幀頭信息。其中,源MAC地址為00:f4:8d:58:9b:7f,目標(biāo)MAC地址為88:88:88:88:87:88。因此可以得知,該主機(jī)與對方主機(jī)可以正常通信。
Destination: 88:88:88:88:87:88 (88:88:88:88:87:88)
Address: 88:88:88:88:87:88 (88:88:88:88:87:88)
.... ...0 .... .... .... .... = IG bit: Individual address (unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
Source: 00:f4:8d:58:9b:7f (00:f4:8d:58:9b:7f)
Address: 00:f4:8d:58:9b:7f (00:f4:8d:58:9b:7f)
.... ...0 .... .... .... .... = IG bit: Individual address (unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
Type: ARP (0x0806)
Address Resolution Protocol (reply) # 地址解析協(xié)議內(nèi)容,reply表示這是一個應(yīng)答包
Hardware type: Ethernet (0x0001) # 硬件地址
Protocol type: IP (0x0800) # 協(xié)議類型
Hardware size: 6 # 硬件地址長度
Protocol size: 4 # 協(xié)議長度
Opcode: reply (0x0002) # 操作碼為2,表示該包是arp響應(yīng)包
[Is gratuitous: False]
Sender MAC address: 00:f4:8d:58:9b:7f (00:f4:8d:58:9b:7f) # 發(fā)送方MAC地址
Sender IP address: 192.168.31.238 (192.168.31.238) # 發(fā)送方IP地址
Target MAC address: 88:88:88:88:87:88 (88:88:88:88:87:88) # 目標(biāo)MAC地址
Target IP address: 192.168.31.197 (192.168.31.197) # 目標(biāo)IP地址
0000 88 88 88 88 87 88 00 f4 8d 58 9b 7f 08 06 00 01 .........X......
0010 08 00 06 04 00 02 00 f4 8d 58 9b 7f c0 a8 1f ee .........X......
0020 88 88 88 88 87 88 c0 a8 1f c5 ..........
```
- arp應(yīng)答報文格式