ARP原理简述

本文不会跟书上一样详细地介绍ARP相关的命令与它的报文格式,而是试图从宏观上通俗地说明白ARP协议的实现原理。

我们知道,依据以太网协议(加粗的意思在点对点信道上只要有IP协议也可以通信),两台主机想要通信至少得互相知道对方的MAC地址。

“当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48 bit的以太网地址来确定目的接口的。设备驱动程序从不检查IP数据报中的目的IP地址”。

这句话是《TCP/IP详解 卷1》中的原话,它的意思是说负责主机间通信的硬件设备在通信活动中从未使用过IP地址这个东西,它(下层应用)只使用且MAC地址来完成通信活动。

而我们在实际应用中,我们关注的往往是上层应用,通常只知道对方主机的IP地址,而主机间的通信又必须要使用到MAC地址。那么主机间的通信如何完成呢?

ARP协议就是为了解决这个矛盾而产生的:如何通过IP地址得到MAC地址,使得主机间通信可行。

ARP,全称是”Address Resolution Protocol”(地址解析协议),它提供了IP地址转换MAC地址的功能,ARP协议将动态分配的IP地址与每台电脑唯一的MAC地址给联系了起来,构成对应关系。

现假设某局域网内有这么两台主机:

主机A的IP地址为192.168.1.90,MAC地址为MAC_A

主机B的IP地址为192.168.1.91,MAC地址为MAC_B

主机A要与主机B主动通信则需要执行以下步骤:

自应用层起至物理层终,主机A将一些必要的东西封装到数据包裹里面去,此包裹中包括了通信应用双方的端口号、IP地址、MAC地址。这样我们才能知道是主机A上的哪个应用与B主机上的哪个应用进行通信。而此时主机A它只知道主机B的IP地址,于是主机A拿着主机B(目标主机)的IP地址去查询自己的ARP高速缓存。

如果主机A没有在自己的ARP高速缓存中查到目标主机B的IP与MAC的对应关系,它将给自己所在局域网内的所有主机广播一个ARP请求帧,说白了就是群发一个特殊的数据包,这个数据包包含主机A(自己)的IP地址、MAC地址,主机B(目标)IP地址,以及要期望通信的主机B的MAC地址,此处主机B的MAC地址按照协议约定写成 “ff:ff:ff:ff:ff:ff:ff”,意思是这个数据包用于询问主机B的MAC地址。

局域网内的所有主机接收到此询问数据包后会发现这个是一个群发的而不是正常通信发送的数据包,那么每个主机在匹配目标IP的时候发现与自己的IP地址不匹配,则丢弃这个数据包,且对这个群发的询问数据包不予回应,而IP匹配上了的主机B需要将询问数据包来源主机(主机A)的IP对应MAC地址存在本机的ARP高速缓存中后,再对主机A进行单播应答(私聊),此时的应答中,就包含了主机B的MAC地址了。


为了更通俗些地描述,下面再举一个栗子:

快递员周先生需要给三年二班的小华送快递,周先生查了查随身携带的记事本,发现自己虽然认识三年二班在哪儿但是他既不认识小华也不认识小华的座位,于是他走到了三年二班后大声地吆喝了一声“小华是哪位,拿快递啦”。周先生吆喝的内容中必须是这样固定的,这样吆喝了一声的好处很明显,名字不叫小华的同学就当做没听见吆喝就好了,而听见了吆喝的小华就答应一声然后快递就会送到他座位上。此时周先生将小华的位置信息记录在记事本上,下次送快递就不用吆喝了而是直接送到小华座位上。这个栗子举得不算好,但是辅助理解应该够了。

再回到我们前文提及的“高速缓存”的概念,除了主机IP地址与MAC地址的映射关系以外,最需要重点关注的就是这每个主机上都有的ARP高速缓存,这个缓存的实现是ARP协议的根本,它存放了最近因特网地址与硬件地址之间的映射记录,高速缓存中,每一项都有生命周期(TTL),一般为20分钟。

前面我们提到,在主机A进行广播找主机B的MAC地址时,给局域网内的每个主机都发送了询问包。实际上这个环节是较为脆弱的,假设此时有接收到了询问包的主机C,本来目标IP匹配与主机C的IP不符合,它应该主动丢弃,但是如果主机C居心叵测,它未将此包丢弃,反而是伪装成主机B进行回应。那么源主机A会先后接收到真假两个回应,两个回应中分别包含映射“主机B的IP地址映射主机B的MAC地址”与“主机B的IP地址映射主机C的MAC地址”。

主机A无法确定哪个是真的,它只能默认地选择后到的回应为真的,也就是之后的通信都与后到的MAC地址建立,本该发往主机B的数据包都发往了主机C。

你可能感兴趣的:(ARP原理简述)