ARP协议的主要功能是什么(带你全面了解ARP协议)
在生活中我们常常听说ARP攻击,到底ARP的作用是啥呢?今天来个全面的了解关于ARP协议的知识。网络设备有数据要发送给另一台网络设备时,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层来提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能够通过数据链路进行转发。数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的MAC地址。通过目的IP地址而获取目的MAC地址的过程由ARP(Address Resolution Protocol)协议来实现。
ARP数据包格式
PS: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工作过程
主机A发送一个数据包给主机C之前,首先获取主机C的MAC地址。通过ARP协议, 网络设备可以建立目标IP地址和MAC地址之间的映射。网络设备通过网络层获取到目的IP地址之后, 还要判断目的MAC地址是否已知。
ARP缓存
网络设备一般都有一个ARP缓存(ARP Cache) , ARP缓存用来存放IP地址和MAC地址的关联信息。 在发送数据前, 设备会先查找ARP缓存表。 如果缓存表中存在对方设备的MAC地址, 则直接采用该MAC地址来封装帧, 然后将帧发送出去。 如果缓存表中不存在相应信息, 则通过发送ARP request报文来获得它。 学习到的IP地址和MAC地址的映射关系会被放入ARP缓存表中存放一段时间。 在有效期内, 设备可以直接从这个表中查找目的MAC地址来进行数据封装, 而无需进行ARP查询。 过了这段有效期, ARP表项会被自动删除。
如果目标设备位于其他网络, 则源设备会在ARP缓存表中查找网关的MAC地址, 然后将数据发送给网关, 网关再把数据转发给目的设备。
ARP请求
本例中,主机A的ARP缓存表中不存在主机C的MAC地址, 所以主机A会发送ARP request来获取目的MAC地址。 ARP request报文封装在以太帧里。 帧头中的源MAC地址为发送端主机A的MAC地址。 此时, 由于主机A不知道主机C的MAC地址, 所以目的MAC地址为广播地址FF-FFFF-FF-FF-FF。 ARP request报文中包含源IP地址、 目的IP地址、 源MAC地址、 目的MAC地址, 其中目的MAC地址的值为0。ARP Request报文会在整个网络上传播, 该网络中所有主机包括网关都会接收到此ARP request报文。 网关将会阻止该报文发送到其他网络上。
ARP响应
所有的主机接收到该ARP Request报文后, 会检查它的目的协议地址字段与自身的IP地址是否匹配。 如果不匹配, 则该主机将不会响应该ARP Request报文。 如果匹配, 则该主机会将ARP报文中的源MAC地址和源IP地址信息记录到自己的ARP缓存表中, 然后通过ARP Reply报文进行响应。
主机C会向主机A回应ARP Reply报文。 ARP Reply报文中的源协议地址是主机C自己的IP地址, 目标协议地址是主机A的IP地址, 目的MAC地址 是 主 机 A 的 MAC 地 址 , 源 MAC 地 址 是 自 己 的 MAC 地 址 , 同 时Operation Code被设置为reply。 ARP Reply报文通过单播传送。
ARP缓存
主机A收到ARP Reply以后, 会检查ARP报文中目的MAC地址是否与自己的MAC匹配。 如果匹配, ARP报文中的源MAC地址和源IP地址会被记录到主机A的ARP缓存表中。 ARP表项的老化超时时间缺省为1200秒。
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功能:在接口模式下执行如下命令
arp-proxy enable
免费ARP
免费ARP是用来探测IP地址是否冲突。
主机被分配了IP地址或者IP地址发生变更后, 必须立刻检测其所分配的IP地址在网络上是否是唯一的, 以避免地址冲突。 主机通过发送ARP request报文来进行地址冲突检测。
主机A将ARP Request广播报文中的目的IP地址字段设置为自己的IP地址, 该网络中所有主机包括网关都会接收到此报文。 当目的IP地址已经被某一个主机或网关使用时, 该主机或网关就会回应ARP reply报文。通过这种方式,主机A就能探测到IP地址冲突了。
原文地址:https://tangjiusheng.cn/it/608.html