arp介紹
ARP(Address Resolution Protocol,地址解析協(xié)議)是根據IP地址獲取物理地址的一個TCP/IP協(xié)議。由于OSI模型把網絡工作分為七層,IP地址在OSI模型的第三層,MAC地址在第二層,彼此不直接通信。在通過以太網發(fā)送IP數據包時,需要先封裝第三層(32位IP地址)、第二層(48位MAC地址)的報頭。但由于發(fā)送數據包時只知道目標IP地址,不知道其MAC地址,而又不能跨越第二、三層,所以需要使用地址解析協(xié)議。
使用地址解析協(xié)議后,計算機可根據網絡層IP數據包包頭中的IP地址信息對應目標硬件地址(MAC地址)信息,以保證通信的順利進行。ARP的基本功能就是負責將一個已知的IP地址解析成MAC地址,以便主機間能正常進行通信。
arp工作流程
本地主機PC1:192.168.31.238,目標主機PC2:192.168.31.197。當PC1和PC2通信時,地址解析協(xié)議可以將主機PC2的IP地址192.168.31.197解析成主機PC2的MAC地址。PC1和PC2的詳細通信過程如下:
1. 當主機PC1發(fā)送數據給主機PC2時,首先在自己的本地ARP緩存表中檢查主機PC2匹配的MAC地址。
2. 如果主機PC1的緩存表中沒有找到相應的條目,它將詢問主機PC2的MAC地址,從而將ARP請求幀廣播到本地網絡上的所有主機。該幀中包括源主機PC1的IP地址和MAC地址。本地網絡上的每臺主機都接收到ARP請求并且檢查是否與自己的IP地址匹配。如果主機發(fā)現請求的IP地址與自己的IP地址不匹配,它將會丟棄ARP請求。
3. 主機PC2確定ARP請求中的IP與自己的IP地址匹配,則將主機PC1的地址和MAC地址添加到本地緩存表。
4. 主機PC2將包含其MAC地址的ARP回復消息直接發(fā)送回主機PC1(這個數據幀為單播)。
5. 當主機PC1收到從主機PC2發(fā)來的ARP回復消息時,會將主機PC2的IP和MAC地址添加到自己的ARP緩存表。本機緩存是有生存期的,默認ARP緩存表的有效期是120s。當超過該有效期后,將再次重復上面的過程。主機PC2的MAC地址一旦確定,主機PC1就能向主機PC2發(fā)送IP信息。
arp緩存表
1. arp緩存表的作用
ARP協(xié)議是通過目標設備的IP地址,查詢目標設備的MAC地址,以保證通信的順利進行。而ARP緩存中包含一個或多個表,它們用于存儲IP地址及其經過解析的MAC地址。在ARP緩存中的每個表又被稱為ARP緩存表。
2. arp緩存表維護工具
arp命令 在計算機中,提供了一個ARP命令。該命令用于查詢本機ARP緩存中的IP地址和MAC地址的對應關系、添加或刪除靜態(tài)對應關系等。用戶也可以通過使用arp命令驗證ARP緩存條目的生命周期。
3. arp緩存表的構成
```
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行是以太網(Ethernet II類型)的幀頭部
1. 第1個字段:廣播類型的MAC地址:0XFF-FF-FF-FF-FF-FF,其目標是網絡上的所有主機
2. 第2個字段:源MAC,即請求地址解析的主機MAC地址
3. 第3個字段:協(xié)議類型,這里用0X0806代表封裝的上層協(xié)議是ARP協(xié)議
4. 硬件地址:表明ARP協(xié)議實現在那種類型的網絡上
5. 協(xié)議類型:表示解析協(xié)議(上層協(xié)議)。這里一般是0800,即IP
6. 硬件地址長度:MAC地址長度,此處為6個字節(jié)
7. 協(xié)議地址長度:IP地址長度,此處為4個字節(jié)
8. 操作類型:表示ARP協(xié)議數據報類型。1表示ARP協(xié)議請求數據報,2表示ARP協(xié)議應答數據報
9. 源MAC地址:發(fā)送端MAC地址
10. 源IP地址:表示發(fā)送端協(xié)議地址(IP地址)
11. 目標MAC地址:目標端MAC地址
- arp應答協(xié)議報文格式
分析arp協(xié)議包
- 數據分析文件
- 本地主機PC1:192.168.31.238
- 目標主機PC2:192.168.31.197
- 工具:WireShark、cmd-ping
```
C:UsersAdministrator>ping 192.168.31.197 -n 1
正在 Ping 192.168.31.197 具有 32 字節(jié)的數據:
來自 192.168.31.197 的回復: 字節(jié)=32 時間=3ms TTL=128
192.168.31.197 的 Ping 統(tǒng)計信息:
數據包: 已發(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幀數據報詳細信息。其中該包大小為60字節(jié)
Arrival Time: Aug 30, 2020 00:12:16.019728000 中國標準時間
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) # 以太網幀頭信息。其中源MAC地址為88:88:88:88:87:88,目標MAC地址為ff:ff:ff:ff:ff:ff(廣播地址)。這里的目標地址為廣播,因為主機不清楚對方的MAC地址,因此局域網中所有設備都會收到該數據報
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é)議內容,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) # 目標MAC地址
Target IP address: 192.168.31.238 (192.168.31.238) # 目標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響應包
```
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幀數據報詳細信息。其中該包大小為42字節(jié)
Arrival Time: Aug 30, 2020 00:12:16.019777000 中國標準時間
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) # 以太網幀頭信息。其中,源MAC地址為00:f4:8d:58:9b:7f,目標MAC地址為88:88:88:88:87:88。因此可以得知,該主機與對方主機可以正常通信。
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é)議內容,reply表示這是一個應答包
Hardware type: Ethernet (0x0001) # 硬件地址
Protocol type: IP (0x0800) # 協(xié)議類型
Hardware size: 6 # 硬件地址長度
Protocol size: 4 # 協(xié)議長度
Opcode: reply (0x0002) # 操作碼為2,表示該包是arp響應包
[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) # 目標MAC地址
Target IP address: 192.168.31.197 (192.168.31.197) # 目標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應答報文格式