3.7 ARP协议
# 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欺骗或攻击等问题。