1、地址解析协议ARP(Address Resolution Protocol)

ARP协议规定

根据RFC826对ARP规范的描述。在ARP背后有一个基本概念,那就是网络接口有一个硬件地址(一个48bit的值,标识不同的以太网或令牌环网络接口)。在硬件层次上进行的数据帧交换必须有正确的接口地址。但是,TCP/IP有自己的地址: 32 bit的IP地址。知道主机的IP地址并不能让内核发送一帧数据给主机。内核(如以太网驱动程序)必须知道目的端的硬件地址才能发送数据。ARP的功能是实现32bit的IP地址和不同网络技术的硬件地址之间动态映射。

  • 以太网报头中的前两个字段是以太网的源地址和目的地址。目的地址为全1的特殊地址是广播地址。两个字节长的以太网帧类型表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0x0806。

  • 硬件类型字段表示硬件地址的类型。它的值为1即表示以太网地址。协议类型字段表示要映射的协议地址类型。它的值为0x0800表示映射的协议为IP协议地址

  • 接下来的两个1字节的字段,硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6字节(MAC地址长度)和4字节(IPv4地址长度)

  • 操作字段指出四种操作类型,它们是ARP请求(op=1)、ARP应答(op=2)、RARP请求(op=3)和RARP应答(op=4)

  • 接下来的四个字段是发送端的硬件地址(在本例中是以太网地址)、发送端的协议地址(IP地址)、目的端的硬件地址和目的端的协议地址

    从报文结构来看,一个普通的ARP报文的大小应该是42字节,但在实际的环境中会遇到60字节的ARP报文(不包含CRC校验4字节),因为一些历史原因,规定最小的以太帧长度为64字节,所以大部分网卡驱动会对不满足最小长度的报文填充(padding)到60字节,虽然目前并不需要这样做,为了兼容性大部分网卡驱动在发送报文时还是会对小于60字节的报文进行填充,但是有些虚拟化的网卡驱动如virtio等就不再遵守该规范

    为什么最小以太帧是64字节?

    最初指定最小帧大小的原因是为了使用于共享以太网介质的 CSMA/CD 协议正常工作——可靠的冲突检测要求传输帧所需的时间(与其大小以及所有报头和前导码成正比)必须大于任意两个站之间的信号传播时间。10M 以太网的早期版本使用共享同轴介质,并且连接的设备必须能够检测到它们中的设备是否正在共享介质上传输数据。然而,大多数现代以太网都是交换式的并且不使用共享介质,因此这不再是必要的,但出于兼容性原因它仍然是规范的一部分。短于 64 字节的帧称为残帧,如果在网络中看到残帧,通常表示存在某种配置或硬件问题。

ARP报文转发实验

本地组网图

PC1 执行arp -a

1:路由器网关IP地址对应的mac

2:PC2 IP地址对应的mac

3、7:广播地址对应的mac

4、5:组播地址对应的mac

登录到192.168.1.1路由器上,可以查到对应的地址信息

抓到的ARP请求报文

抓到的ARP回应报文

ARP的分类

代理ARP:如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程称作委托ARP或ARP代理(Proxy ARP)。这样可以欺骗发起ARP请求的发送端,使它误以为路由器就是目的主机,而事实上目的主机是在路由器的“另一边”。路由器的功能相当于目的主机的代理,把分组从其他主机转发给它。

免费ARP (gratuitous ARP):它是指主机发送源地址和目的地址都是自己的ARP广播报文。免费ARP主要用于更新交换机的MAC转发表,经常在以下场景中使用:

  1. 如果发送免费ARP的主机正好改变了硬件地址(很可能是主机关机了,并换了一块接口卡,然后重新启动),免费ARP就可以使其他主机高速缓存中旧的硬件地址进行相应的更新。通常网卡UP之后,都会发送几个免费ARP数据报文来刷新其他设备的转发表
  2. 在云计算环境中云主机发生了迁移,一般云主机或它的模拟软件如qemu,会发送免费ARP更新交换机MAC转发表,已保证正常的流量转发
  3. 云环境下有些虚拟网络功能,比如VIP等或NAT地址发送迁移后,也会发送免费ARP
  4. 一个主机可以通过它来检查IP冲突,确定是否有别的主机设置了相同的IP地址。

2、地址逆向解析协议RARP(A Reverse Address Resolution Protocol)

RARP 的正式规范是RFC903。RARP分组的格式与ARP分组基本一致。它们之间主要的差别是RARP请求或应答的帧类型代码为0x8035,而且RARP请求的操作代码为3,应答操作代码为4。对应于ARP,RARP请求以广播方式传送,而RARP应答一般是单播(unicast)传送的。

主要应用:网络上的每个系统都具有唯一的硬件地址,它是由网络接口生产厂家配置的。无盘系统的RARP实现过程是从接口卡上读取唯一的硬件地址,然后发送一份RARP请求(一帧在网络上广播的数据),请求某个主机响应该无盘系统的IP地址(在RARP应答中)。