目录
一、什么是ARP协议?
二、为什么需要ARP协议?
三、ARP报文格式
四、广播域是什么?
五、ARP缓存表是什么?
六、ARP的类型
6.1 ARP代理
6.2 免费ARP
七、不同网络设备收到ARP广播报文的处理规则
八、ARP工作机制原理
一、什么是ARP协议?
我们知道主机或三层网络设备会在系统中维护一个用于数据传输的ARP表项,每次发送数据包前都会查询ARP表项来将数据包封装成带MAC地址的数据帧。所谓的ARP协议就是根据目标网络设备的IP地址来获取其对应的物理MAC地址。
二、为什么需要ARP协议?
由于现在的局域网使用的都是以太网技术标准,所有的数据包都会经过二层网络设备进行转发,因此这种处境下致使网络间的数据传输就必须将数据包封装成带MAC地址的数据帧,只有这样数据帧才能在二层网络中转发而ARP协议就是通过IP获取对端(NH下一跳)的MAC地址,并保存到设备的ARP缓存表中。
三、ARP报文格式
通过抓包获取到的ARP报文格式:
四、广播域是什么?
广播域即广播报文能够到达的区域就是一个广播域。在没vlan划分情况下一个网段就是一个广播域,广播一般不能通过三层转发。路由器可以隔离广播域,收到广播报文要么处理、要么丢弃,不会进行转发。
五、ARP缓存表是什么?
ARP表项存放的是设备IP地址与MAC地址的映射关系。
六、ARP的类型
6.1 ARP代理
同一网段、不同物理网络的主机之间,可以通过ARP代理实现通信
场景:同一网段、不同物理网络上的计算机之间通信,通过ARP代理服务。
1.主机A与主机B在同一网段,主机A发送ARP请求包
D.MAC(F)+S.MAC(A) D.IP(B)+S.IP(A)
2.路由器收到主机A发的ARP广播包、拆包,发现请求目的IP与自己接收ARP广播帧的接口IP不在同一网段,检查有没有到主机B的路由(有 ),给主机A回应一个ARP响应包(目的ip、mac主机A,源IP是主机B、源MAC是自身G0/0/0的MAC地址)
3.主机A收到了ARP响应包,把主机B的Ip和路由器G0/0/0的映射存到ARP缓存表项里
4.主机A给主机B方发送一个单播报文(D.MAC是G0/0/0),发送到路由器
5.路由器拆包,查IP路由表有去往主机B的路由,把包转发给主机B,主机B在给主机A发送个回包。
6.2 免费ARP
检测本网段内是否有别的主机与自身的IP地址一样导致IP地址冲突带来的网络数据帧走向发生错误、造成设备视频卡顿等问题。
原理:设备会发送一个源IP和目的IP都是自身的ARP广播包,当有主机响应了此广播包,说明局域网中有主机在用和我同样的IP地址;没收到则说明没有冲突。一般在主机获取了新的IP地址后会自动触发免费ARP报文。
七、不同网络设备收到ARP广播报文的处理规则
PC计算机:
1.首先查看ARP广播报文的IP源地址与自身收到的ARP广播报文接口的IP地址是否在同一网段?在同一网段(不在同一网段则丢弃)----->检查ARP目的IP是否是发给自己的?是则回复ARP广播报文的发起者,不是则丢弃。
RT路由器:
首先检查ARP的源IP与本身接收ARP的接口IP是否在同一个网段(即检查ARP广播报文是否来自于同网段)是则处理,不是则丢弃。
1.当路由器收到ARP广播报文目标IP与自身收接口在同一网段(即ARP要获取的目的MAC是本网段的某台设备)----->如果目标IP是自身,则单播回复ARP发起者---->如果不是自身则丢弃。
2.当路由器收到的ARP请求目标IP与自身路由器不在同一网段时,如果该设备开启了ARP代理,并检查到有去往目标IP的路由,则会冒充目标主机给ARP广播报文的发起者回复一个以源地址是目标IP,源MAC是自身MAC的ARP回复包,这样ARP广播报文发起者(本网段的另一个路由器)下次在与非本网段的PC通信时,数据包的会先发给代理路由器,在由代理路由器发给PC。
八、ARP工作机制原理
说明:使用静态手动给路由器配置目的网络路由时若下一跳设置为本路由器出接口,则路由器认为此目的网络与自己直连。因此所有使用此静态路由的数据包在通过路由器进行转发时,路由器会认为是数据包可以直接到达目的主机,所以触发的ARP数据包请求的目标IP也会是目的主机的IP地址。
例如:在AR1上通过静态出接口的方式指定了10.0.23.0/24的路由下一跳G0/0/0做出接口。
1、AR1主机ping 10.0.23.2时查本地路由表发现下一跳是自身G0/0/0做出接口、认为目标主机与自己直连。
2、根据目标主机10.0.23.2查找本地ARP缓存表发现没有其所对应的MAC地址,于是触发ARP广播包(S_mac: AR1 D_mac: 全f ,S_ip: 10.0.12.1 D_ip: 10.0.23.2)。
3、AR2的G0/0/0接口接收到ARP请求包后:
●检查ARP数据包所请求的目的IP是否与自己本身接收此ARP数据包的G0/0/0接口在同一网段:
●在同一网段----->检查ARP数据包请求目的IP是否是自身本地的IP地址,如果是则单播回复AR1告诉其自身IP所对应的MAC地址。如果不是则不做任何回复。同时在本地ARP缓存表中会记录AR1的目的IP所对应的IP地址。
●如果不在同一网段,并且AR2路由器没有开启Arp 路由代理,则会丢弃其ARP请求数据包,不予回复(例如:本次案例AR1因获取不到10.0.23.2所对应的mac地址无法与AR2的G0/0/1通信。直连网段通过静态出接口配置的环回口路由之间也会因此无法互通)。
解决办法:
●静态手动配置的路由下一跳通过IP地址来指定。
●在接收ARP包的路由器接口下开启ARP路由代理功能。
因此,路由器在处理ARP请求数据包时会检查请求目标IP是否与接收此ARP广播包的接口在同一网段,如果不在(没有开启ARP路由代理)则不会对ARP请求数据包做任何处理,即路由器会认为ARP数据包所请求的目标IP不跟自己在同一个广播域,不予处理。如果在同一网段并且请求的目标IP是自己本地的IP地址,则会给予回复告诉请求者自身的mac地址。
@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!