加载中...

ARP协议

一、ARP(地址解析协议)简介

1.1 ARP的使用场景

在局域网中,当主机或其它网络设备有数据要发送给另一个主机或设备时,它必须知道对方的逻辑地址(即IP地址)。但是仅仅有逻辑地址是不够的,因为IP数据报文必须封装成帧才能通过物理网络发送,因此发送站还必须有接收站的物理地址,所以需要一个从逻辑地址到物理地址的映射。地址解析协议ARP用于将IP地址映射为以太网MAC地址(或称物理地址)。

二、ARP的机制

2.1 ARP Announcement(免费ARP)

image-20250216152944734

当配置第一个IPv4接口地址时,也可以说链路up起来时,设备主动使用自己的IP地址作为目的IP地址发送ARP请求,此种方式称免费ARP。

目的是为了用于DAD(冲突地址检测),或VRRP设备切换时候宣告主备设备切换。

2.2 ARP报文结构

image-20250216154852246

# Hardware type 硬件地址类型  -指明硬件的类型,一般是以太网,值为1。
# Portocol type 协议类型 指明发送者映射到数据链路标识的网络层协议类型
# Hardware size 硬件地址长度。也就是MAC地址的长度,单位是字节
# Protocol size 硬件地址长度。也就是MAC地址的长度,单位是字节。
# Opcode: request (1) 指定了ARP报文的类型,包括ARP Request和 ARP Reply。
# Sender MAC address: 指的是发送ARP报文的设备的MAC地址
# Sender IP address: 指的是发送ARP报文的设备的IP地址
# Target MAC address: 目的MAC地址指的是接收者MAC地址 由于免费ARP通常作用于检测 所以目的MAC用全0填充
# Target IP address: 目的MAC地址指的是接收者IP地址  免费ARP用自己的IP地址进行填充,作用于重复检测

2.3 ARP表项

image-20250216161924419

通过IP地址和MAC地址与接口进行关联的一张表。

动态ARP表项的表项老化时间一般为1200秒,即20分钟,时间快到时会发送ARP Request请求更新ARP表项。

关注此图,自身的192.169.1.1的地址没有生存时间。

三、ARP的工作原理

3.1 ARP协议的请求流程

image-20250216160010909

3.2 ARP的工作过程

在两端设备刚刚建立时,只发送了免费ARP进行DAD检测,并没有获取对方的MAC地址

# 逻辑上接受处理流程
# if 广播 or 组播同一组 or 单播是自己
#    二层type交给arp协议
#    target字段与自己无关 pass报文

image-20250216163350865

所以在ICMP的ping测试下会进行如下的报文封装,具体的过程如下

  1. 查询路由表

    • 如果没有路由不会发送
  2. 封装ICMP报文

    • 但是封装时不知MAC地址
    • 创建一条ARP表项 172.16.12.2 --- mac(incomplete)
  3. 发送ARP request请求

  • image-20250216163749897
  1. 对端发送 ARP Reply回应 也会创建自己ARP表
  • image-20250216163945151

四、ARP的一些趣事

4.1 前言

在刷抖音的过程中,我遇到了两台PC设备,两个跨网段的地址分别指向对端可以进行ping通测试。

ARP可以跨网段进行回复。

image-20250318191630623

4.2 实现逻辑

其实统筹来讲,PC设备进行设置网关会添加一条缺省路由指向 0.0.0.0 0 nexthop 9.9.9.9,对于ping处理来说,Arp请求会指向nexthop地址。

很不巧的是PC2尽然会跨网段的回复ARP。我清晨看到这个问题后想起来看到WireShark小试牛刀的书中,描述了(ARP的应答可以跨网段

那对于PC来说,这个互通的现象可以说明了。

image-20250318192410333

那抽象与路由器呢?

Ensp的试验下这个静态路由根本无法写入路由表

对我而言来说应该是Nexthop地址不可达,无法写入这个路由,通常大家写入下一段IP地址的根本原因是在配置接口IP后,路由表会产生对应的直连路由。

那看起来这个问题比较有意思了,ARP确实可以跨网段回应。

posted @ 2025-02-16 16:41  江寒雨  阅读(153)  评论(0)    收藏  举报