地址解析协议 ARP
在共享总线型的以太网中
为了简单起见:只有各主机所配置的 IP 地址和其网卡上固化的 MAC 地址
假设主机 B 要给主机 C 发送数据包
主机 B 知道主机 C 的 IP 地址,但是不知道 C 的 MAC 地址
B 的数据链路层在封装 MAC 帧时,就无法填写目的 MAC 地址字段,进而也就无法构建出要发送的 MAC 帧
实际上,每台主机都会有一个 ARP 高速缓存表
其中记录有 IP 地址和 MAC 地址的对应关系
例如:主机 A 的 IP 地址与 MAC 地址的对应关系

主机 B 要给主机 C 发送数据包时
会首先在自己的 ARP 高速缓存表中查找主机 C 的 IP 地址对应的 MAC 地址,但是未找到

因此,主机 B 需要发送 ARP 请求报文来获取主机 C 的 MAC 地址
广播来根据获取目的主机 IP 获取其 MAC 地址)ARP 请求报文的内容:
IP 地址为
192.168.0.2
192.168.0.2
192.168.0.2MAC 地址为
00
−
E
0
−
F
9
−
A
3
−
43
−
77
00-E0-F9-A3-43-77
00−E0−F9−A3−43−77IP 地址为
192.168.0.3
192.168.0.3
192.168.0.3 的主机的 MAC 地址
注意:
这里以比较通俗的语言描述其内容,实际上 ARP 地址有具体的格式
ARP 请求报文封装在 MAC 帧中发送,目的地址为广播地址
主机 B 发送封装有 ARP 请求报文的广播帧
总线上的其他主机都能收到该广播帧
主机 A 的网卡收到该广播帧后,将其交给上层处理
ARP 进程解析 ARP 请求报文IP 地址不是自己的 IP 地址,因此不予理会主机 C 的网卡收到该广播帧后,将其交给上层处理
上层的 ARP 进程解析 ARP 请求报文
发现所询问的 IP 地址正是自己的 IP 地址,需要进行响应
主机 C 首先将 ARP 请求报文中所携带的主机 B 的 IP 地址与 MAC 地址记录到自己的 ARP 高速缓存表中
然后给主机 B 发送 ARP 响应报文,已告知自己的 MAC 地址

ARP 响应报文的内容:
IP 地址为
192.168.0.3
192.168.0.3
192.168.0.3MAC 地址为
00
−
0
C
−
C
F
−
B
7
−
4
A
−
82
00-0C-CF-B7-4A-82
00−0C−CF−B7−4A−82
注意:
这里以比较通俗的语言描述其内容,实际上 ARP 地址有具体的格式
ARP 响应报文封装在 MAC 帧中发送,目的地址为主机 B 的 MAC 地址
主机 C 发送封装有 ARP 响应报文的单播帧
总线上的其他主机都能收到该单播帧
A 的网卡收到该单播帧后,发现其目的 MAC 地址与自己的 MAC 地址不匹配
C 的网卡收到该广播帧后,发现其目的 MAC 地址就是自己的 MAC 地址(数据链路层)
ARP 进程解析 ARP 响应报文C 的 IP 地址与 MAC 地址记录到自己的 ARP 高速缓存表中
主机 B 现在可以给主机 C 发送之前想发送的数据包了
ARP 请求的广播帧和 ARP 响应的单播帧是不同的
IP 地址是不是自己的 IP 地址MAC 地址接不接收该帧ARP 高速缓存表中的每一条记录都有其类型
动态
IP 地址与 MAC 地址的对应关系并不是永久性的
IP 地址并没有改变,但主机的 MAC 地址改变了静态

主机 H1 是否可以更用 ARP 协议获取到主机 H2 的 MAC 地址?

否定的。
ARP 协议只能在一段链路或一个网络上使用,而不能跨网络使用对于本例,ARP 协议的使用是逐段链路进行的

除 ARP 请求和响应外,ARP 还有其他类型的报文
IP 地址冲突的 “ 无故 ARP、免费 ARP(Gratuitous ARP) ” ;ARP 没有安全验证机制,存在 ARP 欺骗(攻击)问题。
ARP 请求的广播帧时,都会接受该广播帧,然后返回给自己的 IP 地址和 MAC 地址