3-7 ARP 协议
# 378.3-7 ARP 协议
在之前的课程中,我们分别介绍了属于数据链路层范畴的 MAC 地址和属于网络层范畴的 IP 地址,以及数据包在传输过程中 IP 地址和 MAC 地址的变化情况之后,我们提出了这样一个问题,那就是如何通过 IP 地址找到其相应的 IP 地址?这就是本节课我们将要介绍的地址解析协议,ARP 所要实现的主要功能。
下面我们就来举例说明 ARP 协议的工作原理,这是一个共享总线型的以太网,为了简单起见,我们只画出了该网络中的三台主机,各主机所配置的 IP 地址,和其网卡上固化的 MAC 地址,如图所示
假设主机 B 要给主机 C 发送数据包,主机 B 知道主机 C 的 IP 地址,但不知道它的 MAC 地址,因此主机 B 的数据链路层在封装 MAC 帧时,就无法填写目的 MAC 地址字段,进而也就无法构建出要发送的 MAC 帧。
实际上每台主机都会有一个 ARP 高速缓存表,例如这是主机 B 的 ARP 高速缓存表,ARP 高速缓存表中记录有 IP 地址和 MAC 地址的对应关系。例如这是主机 B 之前获取到的主机 A 的 IP 地址与 MAC 地址的对应关系。在本例中当主机 B 要给主机 C 发送数据包时,会首先在自己的 ARP 高速缓存表中查找主机 C 的 IP 地址所对应的 MAC 地址,但未找到,因此主机 B 需要发送 ARP 请求报文,来获取主机 C 的 MAC 地址。
ARP 请求报文的内容是:我的 IP 地址为 192.168.0.2,我的 MAC 地址为 00e0f9a34377,我想知道 IP 地址为192.168.0.3 的主机的 MAC 地址。
需要说明的是为了简单起见,这里我们以比较通俗的语言来描述 ARP 请求报文的内容,但实际上 ARP 请求报文有其具体的格式。另外需要大家注意的是 ARP 请求报文被封装在 MAC 帧中发送,目的只为广播地址。
- 主机 B 发送封装有 ARP 请求报文的广播帧,总线上的其他主机都能收到该广播帧
- 主机 A 的网卡收到该广播帧后,将其送交上层处理。上层的 ARP 进程解析 ERP 请求报文,发现所询问的 IP 地址不是自己的 IP 地址,因此不予理会
- 主机 C 的网卡收到该广播之后,将其上交上层处理,上层的 ARP 进程解析 ARP 请求报文,发现所询问的 IP 地址,正是自己的 IP 地址,需要进行响应
- 主机 C 首先将 ARP 请求报文中所携带的主机 b 的 IP 地址与 MAC 地址记录到自己的 ARP 高速缓存表中,然后给主机 b发送 ARP 响应报文,以告知自己的 MAC 地址
ARP 响应报文的内容是我的 IP 地址是 192.168.0.3,我的 MAC 地址为00-0c-Cf-b8-4a-82,需要注意的是 ARP 响应报文被封装在 MAC 帧中,发送目的地址为主机 b 的 MAC 地址,主机 c 给主机 b 发送封装有 ARP 响应报文的单播帧,总线上的其他主机都能收到该单播帧。
主机 A 的网卡收到该单波针后,发现其目的 MAC 地址与自己的 MAC 地址不匹配,直接丢弃该帧。
主机 B 的网卡,收到该单波帧后,发现其目的 MAC 地址,就是自己的 MAC 地址,将其交付上层处理。
上层的 ARP 进程解析 ERP 响应报文,将其所包含的主机 C 的 IP 地址与 MAC 地址记录到自己的 ARP 高速缓存表中。
主机 B 现在可以给主机 C 发送之前发送的数据包了,ARP 高速缓存表中的每一条记录都有其类型,类型分为动态和静态两种:
- 动态类型是指记录是主机自动获取到的,其生命周期默认为两分钟,当生命周期结束时,该记录将自动删除。这样做的原因是 IP 地址与 MAC 地址的对应关系并不是永久性的。例如当主机的网卡坏了,更换新的网卡后,主机的 IP 地址并没有改变,但主机的 MAC 地址改变了
- 静态类型是指记录是用户或网络维护人员手工配置的。不同操作系统下的生命周期不同,例如系统重启后不存在,或在系统重启后依然有效
接下来请大家思考一下,在下图所示的网络拓扑中,主机 H1 是否可以使用 ARP 协议获取到主机 H2 的 MAC 地址?回答是否定的,ARP 协议只能在一段链路或一个网络上使用,而不能跨网络使用。对于本地 ARP 协议的使用是逐段链路进行的
本节课到这里就结束了。我们将之前课程中曾介绍过的 MAC 地址,IP 地址以及本节课介绍的地址解析协议 ARP 的内容小结如下:
需要说明的是除 ARP 请求和响应报文外,ARP 还有其他类型的报文,例如用于检查 IP 地址冲突的无故 ERP,或称免费 ERP。另外 ARP 协议没有安全验证机制,存在 ARP 欺骗或攻击等问题。