七叶笔记 » golang编程 » 如何理解ARP协议?史上最全面详细的文章网络工程师必读

如何理解ARP协议?史上最全面详细的文章网络工程师必读

ARP(Address Resolution Protocol)是用来将IP地址解析为MAC地址的协议。

ARP表项可以分为静态和动态两种类型。动态ARP是利用ARP广播报文,动态执行并自动进行IP地址到以太网MAC地址的解析,无需网络管理员手动处理。静态ARP是建立IP地址和MAC地址之间固定的映射关系,在主机和路由器上不能动态调整此映射关系,需要网络管理员手动添加。

设备上有一个ARP高速缓存,用来存放IP地址到MAC地址的映射表,利用ARP请求和应答报文来缓存映射表,一遍能争取地把三层数据包封装成二层数据帧,达到快速封装数据帧、正确转发数据的目的。另外ARP还有扩展应用功能,比如Proxy ARP功能。

当主机A和主机B不在同一网段时,主机A就会先向网关发出ARP请求,ARP请求报文中的目标IP地址为网关的IP地址。当主机A从收到的响应报文中获得网关的MAC地址后,将报文封装并发给网关。如果网关没有主机B的ARP表项,网关会广播ARP请求,目标IP地址为主机B的IP地址,当网关从收到的响应报文中获得主机B的MAC地址后,就可以将报文发给主机B;如果网关已经有主机B的ARP表项,网关直接把报文发给主机B。

设备通过ARP解析到目的MAC地址后,将会在自己的ARP表中增加IP地址到MAC地址的映射表项,以用于后续到同一目的地报文的转发。ARP表项分为动态ARP表项和静态ARP表项。

动态ARP表项:动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的ARP报文更新,可以被静态ARP表项覆盖。当到达老化时间、接口down时会删除相应的动态ARP表项。

静态ARP表项:静态ARP表项通过手工配置和维护,不会被老化,不会被动态ARP表项覆盖。配置静态ARP表项可以增加通信的安全性。静态ARP表项可以限制和指定IP地址的设备通信时只使用指定的MAC地址,此时攻击报文无法修改此表项的IP地址和MAC地址的映射关系,从而保护了本设备和指定设备间的正常通信。

静态ARP表项分为短静态ARP表项和长静态ARP表项。

在配置长静态ARP表项时,除了配置IP地址和MAC地址项外,还必须配置该ARP表项所在VLAN和出接口。长静态ARP表项可以直接用于报文转发。

在配置短静态ARP表项时,只需要配置IP地址和MAC地址项。如果出接口是三层以太网接口,短静态ARP表项可以直接用于报文转发;如果出接口是VLAN虚接口,短静态ARP表项不能直接用于报文转发,当要发送IP数据包时,先发送ARP请求报文,如果收到的响应报文中的源IP地址和源MAC地址与所配置的IP地址和MAC地址相同,则将接收ARP响应报文的接口加入该静态ARP表项中,之后就可以用于IP数据包的转发。

有一种特殊的ARP报文,称之为免费ARP(无故ARP),该报文中携带的发送端IP地址和目标IP地址都是本机IP地址,报文源MAC地址是本机MAC地址,报文的目的MAC地址是广播地址。

设备通过对外发送免费ARP报文来实现以下功能:

确定其它设备的IP地址是否与本机的IP地址冲突。当其它设备收到免费ARP报文后,如果发现报文中的IP地址和自己的IP地址相同,则给发送免费ARP报文的设备返回一个ARP应答,告知该设备IP地址冲突。设备改变了硬件地址,通过发送免费ARP报文通知其它设备更新ARP表项。

主要应用场景如下:

(1) 防止仿冒网关的ARP攻击

(2) 防止主机ARP表项老化

(3) 防止VRRP虚拟IP地址冲突

(4) 及时更新模糊终结VLAN内设备的MAC地址表

代理ARP:如果ARP请求是从一个网络的主机发往同一网段却不在同一物理网络上的另一台主机,那么连接它们的具有代理ARP功能的设备就可以回答该请求,这个过程称作代理ARP(Proxy ARP)。

代理ARP功能屏蔽了分离的物理网络这一事实,使用户使用起来,好像在同一个物理网络上。

代理ARP分为普通代理ARP和本地代理ARP,二者的应用场景有所区别:

普通代理ARP的应用环境为:想要互通的主机分别连接到设备的不同三层接口上,且这些主机不在同一个广播域中。

本地代理ARP的应用环境为:想要互通的主机连接到设备的同一个三层接口上,且这些主机不在同一个广播域中。

反向ARP(Reverse ARP,RARP)反向 ARP是根据源设备 MAC 地址通过广播获取 IP地址的过程的地址解析协议。实质上是用于非广播多路访问网络的ARP。大多数WAN链路是NBMA环境,因此广播是行不通。所以,必须使用另一种机制来将物理地址解析成逻辑地址。

然而,在NBMA环境中,你所面临的问题通常并不是已知IP地址而想要知道MAC地址(或其他数据链路层地址);而恰巧相反。例如,在帧中继中,早已知道我们用来与邻居进行通信的物理地址(DLCI),因此,我们首先必须使用该物理地址来建立连接,但并不是我们邻居的IP地址。

IELAB网络实验室技术文章分享,每天学习一个技术点~转载需注明出处

相关文章