ARP协议解析

2,451 阅读5分钟

1、定义:

地址解析协议,是通过解析网络层地址(ipv4, ipv6)来寻找数据链路层地址的一个在网络协议包中非常重要的网络传输协议。ARP属于数据链路层协议。

2、基本功能

在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。

另外,当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为委托ARP或ARP代理(ARP Proxy)。

3、数据包结构

image
image

image
image

  1. 目标主机的Mac地址
  2. 源主机的Mac地址
  3. 协议类型,表明以太网帧的类型,这里是0x0806,代表这是ARP协议帧。
  4. 硬件类型,1代表是以太网。
  5. 协议类型,表明上层协议的类型,这里是0x0800,表示上层协议是IP协议
  6. 硬件地址长度,毫无疑问是6个字节
  7. 协议长度,这里IP协议的长度是4个字节
  8. 操作类型,在报文中占2个字节,1表示ARP请求,2表示ARP应答,3表示RARP请求,4表示RARP应答

    4、本地路由表

    在每台安装有TCP/IP协议的主机里都有一个ARP缓存表,表里的IP地址与MAC地址是一对应的,如下表所示
    image
    image

    以主机A(192.168.38.10)向主机B(192.168.38.11)发送数据为例。

1.当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到就知道目标MAC地址为(00-BB-00-62-C2-02),直接把目标MAC地址写入帧里面发送就可。

2.如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播(ARP request),目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.38.11的MAC地址是什么?”

3.网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应(ARP response):“192.168.38.11的MAC地址是00-BB-00-62-C2-02”,此回应以单播方式。这样,主机A就知道主机B的MAC地址,它就可以向主机B发送信息。同时它还更新自己的ARP高速缓存(ARP cache),下次再向主机B发送信息时,直接从ARP缓存表里查找就可。

ARP缓存表采用老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。

5、GARP

GARP(gratuitous ARP),他是指主机发送ARP查询(广播)自己的IP地址,当ARP功能被开启或者是端口初始配置完成,主机向网络发送免费ARP来查询自己的IP地址确认地址唯一可用。

作用:

1、确定网络中是否有其他主机使用了IP地址,如果有应答则产生错误消息。
2、免费ARP可以做更新ARP缓存用,网络中的其他主机收到该广播则在缓存中更新条目,收到该广播的主机无论是否存在与IP地址相关的条目都会强制更新,如果存在旧条目则会将MAC更新为广播包中的MAC。

6、ARP实例

使用 arp -d -a 删除本地路由表。打开抓包工具重新链接网络可以看到一下截图

image
image

1.本地发送一个广播ARP包获取局域网网关的MAC地址。

2.路由器接收到消息以后以单播的形式应答,本地将路由器MAC的地址写入本地路由表中。

3.由于使用的是DHCP获取协议,本地还会发送一个GRAP的广播ARP包,确认当前IP是否有冲突。

7、ARP欺骗、攻击

ARP欺骗的运作原理是由攻击者发送假的ARP数据包到网络上,尤其是送到网关上。其目的是要让送至特定的IP地址的流量被错误送到攻击者所取代的地方。因此攻击者可将这些流量另行转送到真正的网关(被动式数据包嗅探,passive sniffing)或是篡改后再转送(中间人攻击,man-in-the-middle attack)。攻击者亦可将ARP数据包导到不存在的MAC地址以达到阻断服务攻击的效果。
对ARP攻击感兴趣可以阅读Jpcap实现ARP攻击