ARP协议解说

网络设备有数据要发给另一台网络设备是,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能通过数据链路层进行发送。数据帧必须要包含目的MAC地址,因此发送端还必须获取目的MAC地址。通过目的IP地址获取母的MAC地址的过程是由ARP(Address Resolution Protocol)协议来实现的。ARP数据包格式

ARP报文不能穿越路由器,不能被转发到其他广播域

网络设备通过ARP报文来发现目的MAC地址。 ARP报文中包含以下字段:

Hardware Type表示硬件地址类型, 一般为以太网;

Protocol Type表示三层协议地址类型, 一般为IP;

Hardware Length和Protocol Length为MAC地址和IP地址的长度,单位是字节;

Operation Code指定了ARP报文的类型, 包括ARP request和ARP reply;

Source Hardware Address指的是发送ARP报文的设备MAC地址;

Source Protocol Address指的是发送ARP报文的设备IP地址;

Destination Hardware Address指的是接收者MAC地址, 在ARPrequest报文中, 该字段值为0;

Destination Protocol Address指的是指接收者的IP地址。

下面是抓取的ARP数据包,可以对照上面的说明进行理解。

下面两张图分别是ARP请求和相应的ARP应答的分组格式截图。

ARP应答分组中,将ARP请求中的源和目的地址进行交换,此外,变化的还有字段8 Opcode。其余字段内容不会发生变化。

工作过程

发送端查询本机ARP缓存

发送APR请求

接收端学习arp缓存

接收端回复arp响应

发端学习arp缓存ARP缓存

网络设备一般都有一个ARP缓存(ARP Cache) , ARP缓存用来存放IP地址和MAC地址的关联信息。 在发送数据前, 设备会先查找ARP缓存表。 如果缓存表中存在对方设备的MAC地址, 则直接采用该MAC地址来封装帧, 然后将帧发送出去。 如果缓存表中不存在相应信息, 则通过发送ARP request报文来获得它。 学习到的IP地址和MAC地址的映射关系会被放入ARP缓存表中存放一段时间。 在有效期内, 设备可以直接从这个表中查找目的MAC地址来进行数据封装, 而无需进行ARP查询。 过了这段有效期, ARP表项会被自动删除。如果目标设备位于其他网络, 则源设备会在ARP缓存表中查找网关的MAC地址, 然后将数据发送给网关, 网关再把数据转发给目的设备。免费ARP

免费ARP指主机发送ARP查找自己的IP地址,通常发生在系统引导期间进行接口配置时。 与标准ARP的区别就是免费ARP分组的目的IP地址字段封装的是自己的IP地址,即向所在网络请求自己的MAC地址。

作用

免费ARP的作用有:

1) 一个主机可以通过它来确定另一个主机是否设置了相同的 IP地址。

正常情况下发送免费ARP请求不会收到ARP应答,如果收到了一个ARP应答,则说明网络中存在与本机相同的IP地址的主机,发生了地址冲突。

2)更新其他主机高速缓存中旧的硬件地址进行。

如果发送免费ARP的主机正好改变了硬件地址,如更换了接口卡。 其他主机接收到这个ARP请求的时候,发现自己的ARP高速缓存表中存在对应的IP地址,但是MAC地址不匹配,那么就需要利用接收的ARP请求来更新本地的ARP高速缓存表表项。

3)网关利用免费ARP防止ARP攻击

有些网关设备在一定的时间间隔内向网络主动发送免费ARP报文,让网络内的其他主机更新ARP表项中的网关MAC地址信息,以达到防止或缓解ARP攻击的效果。

4)利用免费ARP进行ARP攻击

ARP协议并不只在发送了ARP请求才接收ARP应答,计算机只要接收到ARP应答数据包,就会使用应答中的IP和MAC地址对本地的ARP缓存进行更新。

主机可以构造虚假的免费ARP应答,将ARP的源MAC地址设为错误的MAC地址,并把这个虚假的免费ARP应答发送到网络中,那么所有接收到这个免费ARP应答的主机都会更新本地ARP表项中相应IP地址对应的MAC地址。更新成功后,这些主机的数据报文就会被转发到错误的MAC地址,从而实现了ARP欺骗的攻击。代理ARP

代理ARP就是通过使用一个主机(通常为router),来作为指定的设备使用自己的 MAC 地址来对另一设备的ARP请求作出应答。

为什么需要代理ARP?

先要了解,路由器的重要功能之一就是把局域网的广播包限制在该网内,阻止其扩散,否则会造成网络风暴。ARP请求是个广播包,它询问的对象如果在同一个局域网内,就会收到应答。但是如果询问的对象不在同一个局域网该如何处理?路由器就提供的代理ARP为这个问题提供了解决方案。

在上述例子的组网中,主机A需要与主机B通信时, 目的IP地址与本机的IP地址位于不同网络, 但是由于主机A未配置网关, 所以它将会以广播形式发送ARP Request报文,请求主机B的MAC地址。 但是, 广播报文无法被路由器转发, 所以主机B无法收到主机A的ARP请求报文, 当然也就无法应答。

在路由器上启用代理ARP功能, 就可以解决这个问题。 启用代理ARP后, 路由器收到这样的请求, 会查找路由表, 如果存在主机B的路由表项, 路由器将会使用自己的G0/0/0接口的MAC地址来回应该ARP request。 主机A收到ARP reply后, 将以路由器的G0/0/0接口MAC地址作为目的MAC地址进行数据转发。

优点:代理ARP能在不影响路由表的情况下添加一个新的Router,使子网对该主机变得透明化。一般代理ARP应该使用在主机没有配置默认网关或没有任何路由策略的网络上。

缺点:从工作工程可以看到,这其实是一种ARP欺骗。而且,通过两个物理网络之间的路由器的代理ARP功能其实互相隐藏了物理网络,这导致无法对网络拓扑进行网络概括。此外,代理ARP增加了使用它的那段网络的ARP流量,主机需要更大的ARP缓存空间,也不会为不使用ARP进行地址解析的网络工作。

上一篇:分娩前的征兆有哪些?到底准不准?
下一篇:没有了

欢迎扫描关注我们的微信公众平台!

欢迎扫描关注我们的微信公众平台!