1、ARP简介

ARP<Address Resolution Protocol,地址解析协议>,用于实现从IP地址到MAC地址的映射。它是属于OSI七层模型中的网络层协议。

注明:ARP协议由IETF互联网工程任务组于1982年11月在RFC 826中描述并发布。在ARP协议的基础上,衍生出了反向ARP、代理ARP、免费ARP等。

2、ARP原理

在网络通信中,主机和主机通信的数据包需要依据OSI模型从上到下进行数据封装,当数据封装完整后,再向外发出。所以在局域网的通信中,不仅需要源目IP地址的封装,也需要源目MAC的封装。一般情况下,上层应用程序更多关心IP地址而不关心MAC地址,所以需要通过ARP协议来获知目的主机的MAC地址,完成数据封装。其工作原理如下:

从图中拓扑可以看出,PC1需要与PC2进行通信,此时PC1向整个局域网发送ARP Request即ARP请求包,此请求包为二层广播包,目的地址为ffff.ffff.ffff,保证同一局域网的所有主机都能够收到此请求包。PC2收到广播包请求后,向PC1发送单播的ARP Reply包即ARP回复包。此后,PC1将PC2的IP和MAC地址映射信息存储在本地ARP表项中,用于实现后续数据封装使用,如下:

从上图看出,当PC1需要访问PC2时,通过查看ARP映射表实现数据封装,之后再向外发送数据包。

 


 

【ARP实验步骤】

1、通过GNS3搭建实验拓扑,采用两台路由器模拟主机,开启接口,并配置IP地址,如下:

R1(config)#int f0/0

R1(config-if)#no shutdown

R1(config-if)#ip address 12.1.1.1 255.255.255.0

R2(config)#int f0/0

R2(config-if)#no shutdown

R2(config-if)#ip add 12.1.1.2 255.255.255.0

2、在GNS3上开启wireshark抓包,在R1和R2之间抓取ARP数据包,如下:
(1)在R1和R2的链路上,点击右键,弹出“开始抓包”=>

 

 

(2)弹出抓包对话框,点击OK,如下=>


(3)此时wireshark对话框出现,并开始进行实时流量监控

3、在R1上Ping R2的地址,如下:

R1#ping 12.1.1.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 12.1.1.2, timeout is 2 seconds:

.!!!!

Success rate is 80 percent (4/5), round-trip min/avg/max = 32/38/44 ms

可以看到,此时R1 Ping通R2,从实验结果来看,在发送ICMP数据包时<即Ping包>,有一个包没有发送,所以显示为”.”而不是“!”。这说明在发生正常的ICMP数据包之前,有一个ARP的请求回复过程。

4、在wireshark软件界面中观察数据包
(1)通过拖拽wireshark右侧进度条,可以找到如下界面

 

(2)接下来我们来仔细分析ARP的分组内容,先将鼠标移至最上方的ARP请求包,得到下图:

以下表格详细解读了ARP请求包的内容。

字段

解释

Hardware type

硬件类型,标识链路层协议

Protocol type

协议类型,标识网络层协议

Hardware size

硬件地址大小,标识MAC地址长度

Protocol size

协议地址大小,标识IP地址长度

Opcode

操作代码,标识ARP数据包类型

Sender MAC address

发送者MAC,此处为R1的MAC

Sender IP address

发生者IP,此处为R1的IP

Target MAC address

目标MAC,此处全0表示在请求

Target IP address

目标IP,此处为R2的IP

 

当发送ARP请求时,会将【Target MAC address】字段置空,代表本地没有,邻居收到之后,需要将此字段填充并返回。

(3)接下来我们来观察下ARP的回复包,如下:

此时可以看到,R2将自己的MAC置于【Sender MAC address】字段中,完成整个ARP过程。

5、在R1查看ARP表,如下:

R1#show arp 

Protocol  Address Age (min)  Hardware Addr   Type   Interface

Internet  12.1.1.1  -   cc00.2184.0000  ARPA   FastEthernet0/0

Internet  12.1.1.2  68   cc01.2184.0000  ARPA   FastEthernet0/0

可以看到,此时R1的ARP表除了有自己的地址映射信息,也具备R2的地址映射。此实验完成。