起序:文字篇幅略长,请读者耐心读下去。
原理:发送 ARP 广播报文,接收 ARP 单播应答。
一、概述
地址解析协议 ARP(Address Resolution Protocol),在实际应用中,它是为了解决 已经知道了一个机器(主机或路由器)的IP地址,需要找出其相应的硬件地址
这样的问题。
网络层使用的是 IP地址
,但在实际网络的链路上传送数据帧时,最终还是必须使用该网络的 硬件地址
。但 IP地址
和下面的网络的 硬件地址
之间由于格式不同而不存在简单的映射关系,因为
- IP 地址:32 位
- 硬件地址(MAC 地址):48 位
地址解析协议 ARP
解决这个问题的方法是在主机 ARP 高速缓存
中存放一个从 IP地址
到 硬件地址
的映射表,并且这个映射表还经常动态更新(新增或超时删除)。
二、工作流程
每一台主机都设有一个
ARP高速缓存(ARP cache)
,里面有本局域网上的各主机和路由器的IP地址
到硬件地址
的映射表,这些都是该主机目前知道的一些地址。
1、网络拓扑图
假设
主机 PC1
向主机 PC3
发送HTTP 请求
,会有两种 “心里活动”。
主机 PC1
的ARP 高速缓存
中存在主机 PC3
的IP 地址
和硬件地址
的映射关系。主机 PC1
的ARP 高速缓存
中不存在主机 PC3
的IP 地址
和硬件地址
的映射关系。
2、存在
如果
主机 PC1
存在主机 PC3
的IP 地址
和硬件地址
的映射关系。在发送HTTP 请求
的时候,就会把这个硬件地址
写入MAC 帧
,然后通过局域网把该MAC 帧
发往此硬件地址
。
3、不存在
主机 PC1
的ARP 高速缓存
中不存在主机 PC3
的IP 地址
和硬件地址
的映射关系。
1)、发送 HTTP 请求
下面图片显示的就是
PC1
发送HTTP请求
给PC3
在 MAC 层的MAC 帧
格式,为了清晰了解MAC 帧
格式,图片有对应关系。点赞谢谢。
注:此时的 PC1
的 ARP 高速缓存
中还没有 PC3
的 IP 地址
和 MAC 地址
的映射关系,也就是说,这个 帧
封装不成功,是无法发送到 PC3
的。
2)、发送 ARP 请求
这个时候就该
ARP
大显神威了,此时ARP
的 “心里活动” 是:“你在一边等着,我把MAC 地址
给你带回来”。
- 在
ARP
中的目的 MAC 地址
是未知的,所以是以00:00:00:00:00:00
暂时填补空缺位置。 - 在
帧头
中的目的 MAC 地址
也是未知的,但是以FF:FF:FF:FF:FF:FF
这个广播地址
作为目标 MAC 地址
。 - ARP 请求分组的主要内容是:“我的
IP 地址
是192.168.1.1
,MAC 地址
是AA
,我想知道IP 地址
为192.168.1.3
的MAC 地址
是什么”。
注:从上方可分析得 ARP 是广播报文。
3)、交换机广播转发
交换机的主要工作是
转发
,因为交换机是二层设备
,只会检查帧头
和帧尾
,当交换机知道ARP 请求协议帧
的目的 MAC 地址
是12FF
时,就可以知道,这个报文是广播报文
。
注:这里不细说 交换机的工作原理。
4)、机器收到 ARP 请求
这里的
机器
有多种,这里只介绍两种,主机
或路由器
。
Ⅰ、主机
主机
收到ARP 请求报文
后,不是立即丢弃这个报文,而是先送到主机
的网卡- 网卡检查出
帧
的目标 MAC 地址
是12FF
,说明是给所有人的,自己也是所有人之一 - 解封装
帧头
和帧尾
后,发现帧头
中的类型
字段的值是0806
,就会把ARP 包头和 ARP 数据
交给主机
的网络层的ARP 协议
来处理这个数据 ARP 协议
把ARP 数据
中的目的 IP 地址(192.168.1.3)
和自己的IP 地址
匹配
匹配成功
请看第五步 - 5)、发送 ARP 响应
匹配失败
就会由 主机 PC2
的网络层的 ARP 协议
丢弃,而不是网卡进行丢弃。
Ⅱ、路由器
路由器
收到 ARP 请求报文
后,检查出 帧
的 目标 MAC 地址
是 12FF
,路由器
是 三层设备
,解封装 帧头
和 帧尾
后,发现 帧头
中的 类型
字段的值是 0806
,就会把 ARP 包头和 ARP 数据
交给 主机
的网络层的 ARP 协议
来处理这个数据。
问:路由器会不会转发(路由) ARP 报文
?
答:不会
- 路由器要路由的话,是需要检查
IP包头
里面的目标IP地址
,再匹配路由表。而ARP 报文
里是没有IP 包头
的。 - ARP 是广播报文,路由器是不允许广播报文通过的
注:ARP
是出不了 网关
的,所以是内网协议(局域网协议)。
5)、发送 ARP 响应
ARP 响应分组的主要内容是:"我的 IP 地址
是 192.168.1.3
,MAC 地址
是 CC
"。
6)、交换机单播转发
这时的
ARP 响应报文
有明确的MAC 地址(AA)
,就会转发到主机 PC1
。
7)、主机收到 ARP 响应
这一步和第五步(机器收到 ARP 请求)不一样,因为
交换机
在转发ARP 响应
时,是以单播
的通信方式。
主机 PC1
收到 ARP 响应后
,先到达 主机 PC1
的网卡,解封装 帧头
和 帧尾
,把 ARP 包头和 ARP 数据
交给 主机 PC1
的网络层的 ARP 协议
来处理这个数据,就可以得到 目的 MAC 地址(CC)
。
同时
主机 PC1
会创建一个ARP 高速缓存表
:
Internet 地址 | 物理地址 | 类型 |
---|---|---|
192.168.1.3 | CC | 动态 |
可以在命令行窗口查看
# 查看 ARP 缓存
arp -a
8)、完善 HTTP 请求报文
这个时候就把
目的 MAC 地址(CC)
填写在HTTP 请求报文帧
的目的 MAC 地址
的位置。
如果对您有帮助,点个赞再走吧。