一、概念
ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。
根据TCP/IP层次模型,在以太网中,一个主机要和另一个主机进行直接通信,必须知道目标主机的MAC地址。而在现实环境中,一般采用IP地址标示通信的对象,而ARP的功能就是提供IP地址与硬件地址之间的映射。ARP协议是自动进行的,主机和通讯设备会自动对自身的ARP缓存表进行更新。
对于TCP/IP协议,ARP协议提供了一种在IPv4地址和各种网络技术使用的硬件地址之间的映射。ARP仅用于IPv4、IPv6使用邻居发现协议,它被合并入ICMPV6中。
地址解析是发现两个地址之间的映射关系的过程。ARP是一个通用的协议,它被设计成支持多种地址之间的映射,但是目前几乎全部都是用来映射IP和以太网MAC地址。
ARP提供的是动态映射。他会自动执行和随时间变化,而不需要管理员重新配置。也就是说一台主机改变他网络接口卡,从而改变了他的硬件地址(但保留其分配的IP地址),ARP协议可以在一定的延时后继续正常运作。
当我们向一台目的主机发送信息时,它会首先判断这个主机是不是在同一个网段下。如果是在外网,则信息会交给网关;如果是在同一网络下,ARP才能工作。
注意:
(1)ARP只能在广播网络下适用,因为只有这样才能将消息交付给它连接的所有网络设备。
(2)ARP的广播只有同网络下能接收到。处在不同的VLAN下是不能接收到广播的。
二、使用ARP的四种情况
- 发送方是主机,要把IP数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。
- 发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
- 发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。
- 发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
三、ARP缓存
ARP高效运行的关键是维护每个主机和路由器上的ARP缓存。该缓存使用地址解析为每个接口维护IP到MAC地址的最新映射。
正常ARP缓存老化时间是20分钟(有效期);每使用一次条目后,该条目会重启老化计时器。在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度
ARP缓存的更新原理
:
如果没有这个条目,接收到ARP请求后就更新上;
如果缓存中同IP已经有MAC地址了,在接收到ARP帧后,会比对,如果相同,则不理会;不同的话就更新。
以太网上的两台主机进行通讯时,双方必须知道对方的MAC 地址。IP网络中的每台主机都要维护IP 地址到MAC 地址的转换表,称为ARP 映射表(ARP缓存)。ARP 映射表中存放着最近用到的一系列与本主机通信的其他主机的IP 地址和MAC 地址的映射关系,每一条映射关系称为一条ARP 表项。
ARP表项分为静态表项和动态表项:
(1)静态ARP 表项:用户手工配置的IP 地址到MAC 地址的映射,手工进行维护。
(2)动态ARP表项:交换机动态学习的IP 地址到MAC 地址的映射,通过动态ARP老化定时器设定的时间进行老化。
ARP表的建立一般情况下是通过两个途径:
主动解析:如果一台主机与另外一台不知道其MAC地址的主机通信,则该主机主动发ARP请求,主机通过ARP响应学习目的IP主机对应的MAC地址。
响应请求:如果一台主机接收到了另一台主机的ARP请求,则首先在本地建立请求主机的IP地址和MAC地址的对应表。
四、ARP的工作原理
以主机PC1向PC3通信为例:
(1)发送数据前PC1查找自己本地的ARP缓存表;如果找到PC3的硬件地址,将其放入MAC帧中,发送出去。如果未找到,执行下一步;
(2)PC1向同网段下其他相邻主机广播一条ARP请求报文,发出询问:“192.168.1.3的MAC地址是什么?”
(3)PC2不响应这个请求,只有PC3收到该请求后,将PC1硬件地址存入ARP缓存表,并单播返回一个ARP响应帧,“ip 地址是192.168.1.3的Mac地址是 00:50:79:66:68:02”
(4)PC1收到响应后,更新自己的缓存表,并将硬件地址存入MAC帧中后,将数据发送出去。
五、ARP报文格式
请求帧与响应帧
六、免费ARP
又称为无故ARP。是ARP报文中的一种。当一个端口UP或者配置了IP地址之后,主机会自动向全网广播一个免费ARP。
主要作用是:
(1)用来探测IP地址是否冲突;
(2)使其它设备及时更新高速缓存中旧的该设备硬件地址(存在ARP欺骗的问题)
使能了免费ARP报文学习功能后,设备会根据收到的免费ARP报文中携带的信息(源IP地址、源MAC地址)对自身维护的ARP表进行修改。设备先判断ARP表中是否存在与此免费ARP报文源IP地址对应的ARP表项:
如果没有对应的ARP表项,设备会根据该免费ARP报文中携带的信息新建ARP表项;
如果存在对应的ARP表项,设备会根据该免费ARP报文中携带的信息更新对应的ARP表项。
关闭免费ARP报文学习功能后,设备不会根据收到的免费ARP报文来新建ARP表项,但是会更新已存在的对应ARP表项。如果用户不希望通过免费ARP报文来新建ARP表项,可以关闭免费ARP报文学习功能,以节省ARP表项资源。
上图所示,通过抓包发现免费ARP的报文中,目的IP地址也是自己本身,这也是它与其他ARP包的区别之处。在网络中IP地址分配正常的情况下,我们可以看到,免费ARP请求报文是没有响应报文的。一旦免费ARP出现了响应报文,就说明当前主机配置的IP地址已经存在,与其他主机冲突了。
当出现地址冲突时,抓包如下:
七、代理ARP
代理ARP的RFC文档:
https://blog.csdn.net/monologuezjp/article/details/104025384
在一些情况下,我们希望不通过网关来与其他网段的主机进行通信,那么此时就需要代理ARP。但根据RFC文档可知,实际上这里所指的跨网段并不是真正意义上的跨网段,更准确的来说,代理ARP是为了透明化子网划分来进行通信,即一个子网内的用户可以直接利用二层的代理ARP技术访问另一个子网内的主机,仿佛二者仍处于同一个网络中。
代理ARP使一个系统可回答不同主机的ARP请求,他使ARP请求的发送者认为做出响应的系统就是目的主机,可实际上主机可能在其他地方(或不存在)。代理ARP又被称为混杂ARP或ARP黑客。
用途:
(1)两个物理网络互相隐蔽自己
(2)ARP欺骗:将自己的主机设置成代理ARP就能接收到网络中传出的数据帧。(假扮主机,对所有arp请求作出回答)
(3)使位于不同网络的网络设备,在不配置网关的情况下能通过代理ARP实现互相通信。(即需要使子网划分透明化时使用)
(4)三层冗余时也会启动ARP代理。
(5)工程师为了防止用户错误的配置默认网关而导致通信丢失
原理:
在配置网关的情况下,ARP会请求自己网关的IP地址对应的MAC地址;但是在不配置网关的情况下,主机A会直接请求自己需要通信的主机的IP地址,当路由器接收到这个ARP请求后,正常情况下是丢弃。但是在设置了代理ARP后,路由器会查找自己的路由表,如果能查到目标IP地址的话,就返回一个ARP响应报文,传回自己的MAC地址。
实验:
实验说明:
根据代理ARP的定义,如果主机192.168.1.1/24没有配置默认网关,那么它发出对192.168.2.1/24的ARP请求,将被路由器的R1的F0/0接口所接收,然后R1将代理源主机192.168.1.1去请求192.168.3.2的MAC地址,然后完成不同网络的通信。
实验拓扑:
确定接口proxy-arp已开启(路由器默认开启代理ARP)
没有出现实验结果,并且显示找不到网关。
并且抓包显示PC1没有发出任何arp请求报文
原因:
基于IPv4的主机在发送ARP请求之前,它会将目标的IP地址拿来和自已的子网掩码求“与”运算,如果目标主机的IP地址与自己的子网掩码在求“与”运算后,确定目标主机和自己的IP不在同一子网,那么该主机在没有配置默认网关的情况下不会发送任何ARP请求,如果配置了默认网关那么该主机会把ARP请求发送给默认网关,在代理ARP这个实验中,主机192.168.2.2子网掩码为255.255.255.0,请大家注意看目标主机192.168.3.2与自己的子网掩码求与得出的网络ID是192.168.3.0;而自己属于192.168.2.0,并没有配置任何默认网关,所以主机192.168.2.2/24根本不会发送任何ARP请求,所以路由器R1上的代理ARP功能根本就没法工作起来
修改后的实验:
只需要将主机PC1的IP地址改为192.168.1.1/16,再ping一次,实验成功。同时我们注意到,这里返回的是路由器R1 F0/0接口的mac地址。
路由器接口地址
将路由器proxy-arp功能关掉后,访问失败。
综上,说明代理ARP确实起到了作用。