ARP协议

-- TOC --

ARP,Address Resolution Protocol,地址解析协议,用来根据IP地址获得Mac地址。很古老的协议,但在局域网中生命力很强。

工作原理

局域网的同一网段中,主机通过DHCP获得了IP地址,但是相互通信时,还需要Mac地址才行。ARP协议在这里开发发挥作用,主机广播一个包含目的IP的ARP请求,拥有此IP的主机单播响应这个请求,告知自己的Mac地址。

假设主机A和B在同一个网段,主机A要向主机B发送信息,具体的地址解析过程如下:

  1. 主机A首先查看自己的ARP缓存表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。
  2. 如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。
  3. 主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
  4. 主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。
  5. 当主机A和主机B不在同一网段时,主机A就会先向网关发出ARP请求,ARP请求报文中的目标IP地址为网关的IP地址。当主机A从收到的响应报文中获得网关的MAC地址后,将报文封装并发给网关。如果网关没有主机B的ARP表项,网关会广播ARP请求,目标IP地址为主机B的IP地址,当网关从收到的响应报文中获得主机B的MAC地址后,就可以将报文发给主机B;如果网关已经有主机B的ARP表项,网关直接把报文发给主机B。(这一步操作,其实是主机判断目标地址与自己不在一个网段内,则查询自己的路由表,一般主机路由表中只有网关地址,因此通过ARP获取网关Mac,将报文发出去,网关收到后,也是查询自己的路由表,来决定是做3层转发还是2层转发)

ARP frame format

ARP报文封装在Ethernet Frame中,结构如下:

arp_frame

Hardware Type: Hardware Type field in the Address Resolution Protocol (ARP) Message specifies the type of hardware used for the local network transmitting the Address Resolution Protocol (ARP) message. Ethernet is the common Hardware Type and the value for Ethernet is 1. The size of this field is 2 bytes.

Protocol Type: Each protocol is assigned a number used in this field. IPv4 is 0x0800.

Hardware Address Length(HLEN): Hardware Address Length in the Address Resolution Protocol (ARP) Message is length in bytes of a hardware (MAC) address. Ethernet MAC addresses are 6 bytes long.

Protocol Address Length(PLEN): Length in bytes of a logical address (IPv4 Address). IPv4 addresses are 4 bytes long.

Operation: 0表示请求广播,1表示应答单播;

ARP cache

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

ARP表项又分为动态ARP表项和静态ARP表项。动态就是通过广播学习到的,静态就是手动配置的。

动态ARP表项

动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的ARP报文更新,可以被静态ARP表项覆盖。

静态ARP表项

静态ARP表项通过手工配置和维护,不会被老化,不会被动态ARP表项覆盖。直到重新启动计算机为止。

arp

在交换机上配置静态arp,应该是要指定出端口的。主机上的静态arp,可通过ip查出端口。

gratuitous ARP

免费 ARP(Gratuitous ARP)包是一种特殊的ARP请求,它并非期待得到IP对应的 MAC 地址,而是当主机启动的时候,自己主动广播发送一个 Gratuitous ARP请求,即请求自己的IP地址的MAC地址。免费ARP报文与普通ARP请求报文的区别在于报文中的目标IP地址。普通ARP报文中的目标IP地址是其他主机的IP地址;而免费ARP的请求报文中,目标IP地址是自己的IP地址。

免费 ARP 数据包有以下 3 个作用:

  1. 该类型报文起到一个宣告作用。它以广播的形式将数据包发送出去,不需要得到回应,只为了告诉其他计算机自己的IP地址和MAC地址。
  2. 可用于检测IP地址冲突。当一台主机发送了免费ARP请求报文后,如果收到了ARP响应报文,则说明网络内已经存在使用该IP地址的主机。
  3. 可用于更新其他主机的ARP缓存表。如果该主机更换了网卡,而其他主机的ARP缓存表仍然保留着原来的MAC地址。这时,可以发送免费的 ARP数据包。其他主机收到该数据包后,将更新ARP缓存表,将原来的 MAC地址替换为新的MAC地址。

ARP欺骗

ARP欺骗(ARP spoofing),又称ARP毒化(ARP poisoning,网络上多译为ARP病毒)或ARP攻击,是针对ARP协议的一种攻击技术,通过欺骗局域网内访问者PC的网关MAC地址,使访问者PC错以为攻击者更改后的MAC地址是网关的MAC,导致网络不通。此种攻击可让攻击者获取局域网上的数据包甚至可篡改数据包,且可让网络上特定计算机或所有计算机无法正常连线。最早探讨ARP欺骗的文章是由Yuri Volobuev所写的《ARP与ICMP转向游戏》(ARP and ICMP redirection games)。

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

例如某一的IP地址是192.168.0.254,其MAC地址为00-11-22-33-44-55,网络上的计算机内ARP表会有这一笔ARP记录。攻击者发动攻击时,会大量发出已将192.168.0.254的MAC地址篡改为00-55-44-33-22-11的ARP数据包。那么网络上的计算机若将此伪造的ARP写入自身的ARP表后,计算机若要透过网上网关连到其他计算机时,数据包将被导到00-55-44-33-22-11这个MAC地址,因此攻击者可从此MAC地址截收到数据包,可篡改后再送回真正的网关,或是什么也不做,让其断网。

是不是也可以通过发出ARP报文,把主机系统的arp缓存填满?

Proxy ARP

Proxy ARP is a technique by which a Layer 3 device can respond to ARP requests for a destination which is not in same network in which sender resides.The Router configured for Proxy ARP can respond to the ARP and map the router’s MAC address with the destination IP address and fool the sending station that it has found its destination.

AT the backend , the proxy router forwards the packets to the correct destination since it has the relevant information.

RARP和BOOTP

Reverse-ARP,这是最早的用来实现主机得到IP地址的协议,现在已经没人用了。这种方式需要管理员预先配置和IP和Mac的对应关系。

rarp

后来RARP进化成为BOOTP:

bootp

再后来,就是DHCP协议了!

本文链接:https://cs.pynote.net/net/eth/202111181/

-- EOF --

-- MORE --