链路层-ARP地址解析协议
定义
地址解析是发现两个地址之间的映射关系的过程。ARP是一个通用的协议,从这个意义上来看,它被设计为支持多种地址之间的映射。实际上, ARP 几乎总是用于 32 位 IPv4 地址和以太网的 48 位 MAC 地址之间的映射。
ARP 提供从网络层地址到相关硬件地址的动态映射。我们使用动态这个术语是因为它会自动执行和随时间变化,而不需要系统管理员重新配置。也就是说,如果一台主机改变它的网络接日卡,从而改变了它的硬件地址(但保留其分配的IP地址), ARP 可以在一定延时后继续正常运作. ARP 操作通常与用户或系统管理员无关。
适用场景
ARP 用于运行 IPv4 的多接人链路层网络,每个主机都有自已首选的硬件地址。点到点链路(例如 PPP )不使用 ARP。当这些链路被建立后(通常是由用户或系统来发起创建),在链路两端通知正在使用的地址。由于不涉及硬件地址,因此不需要地址解析或 ARP。
ARP 缓存
ARP 高效运行的关键是维护每个主机和路由器上的 ARP 缓存(或表)。该缓存使用地址解析为每个接日维护从网络层地址到硬件地址的最新映射。当IPv4地址映射到硬件地址时,它对应于高速缓存中的一个条目,其正常到期时间是条目创建开始后的20分钟
ARP 帧格式
image.png- 硬件类型:占两字节,表示ARP报文可以在哪种类型的网络上传输,值为1时表示为以太网地址。
- 协议类型:占两字节,表示硬件地址要映射的协议地址类型,映射 IP 地址时的值为 0x0800。
- 硬件大小:占一字节,标识 MAC 地址长度,以字节为单位
- 协议大小:占一字节,标识 IP 得知长度,以字节为单位
- op 操作类型:占2字节,指定本次ARP报文类型。1标识ARP请求报文,2标识ARP应答报文。
- 源 MAC 地址:占6字节,标识发送设备的硬件地址。
- 源 IP 地址:占4字节,标识发送方设备的IP地址。
- 目的 MAC 地址:占6字节,表示接收方设备的硬件地址,在请求报文中该字段值全为0,即00-00-00-00-00-00,表示任意地址,因为现在不知道这个MAC地址。
- 目的 IP 地址:占4字节,表示接受方的IP地址。
- FCS:帧校验序列
免费 ARP
免费 ARP(Gratuitous ARP)包是一种特殊的 ARP 请求,它并非期待得到 IP 对应的 MAC 地址,而是当主机启动的时候,发送一个 Gratuitous ARP 请求,即请求自己的 IP 地址的 MAC 地址。
帧格式
免费 ARP 报文与普通 ARP 请求报文的区别在于报文中的目标 IP 地址。普通 ARP 报文中的目标 IP 地址是其他主机的 IP 地址;而免费 ARP 的请求报文中,目标 IP 地址是自己的 IP 地址。
作用
- 该类型报文起到一个宣告作用。它以广播的形式将数据包发送出去,不需要得到回应,只为了告诉其他计算机自己的 IP 地址和 MAC 地址。
- 可用于检测 IP 地址冲突。当一台主机发送了免费 ARP 请求报文后,如果收到了 ARP 响应报文,则说明网络内已经存在使用该 IP 地址的主机。
- 可用于更新其他主机的 ARP 缓存表。如果该主机更换了网卡,而其他主机的 ARP 缓存表仍然保留着原来的 MAC 地址。这时,可以发送免费的 ARP 数据包。其他主机收到该数据包后,将更新 ARP 缓存表,将原来的 MAC 地址替换为新的 MAC 地址。
总结
ARP 是 TCP/IP 实现中的一个基本协议。ARP 用于确定本地可达的 IPv4 子网使用的 IPv4 地址对应的硬件地址。它在数据报的目的地与发送方处于同一子网时使用,还用于数据报的目的地不在当前子网时将其转发到一台路由器。