细聊网络层协议之ARP、RARP协议

一、两台主机之间的通信解读ARP

首先我们必须明白一点的是,IP地址只在网络及其以上的层有用,在链路层及以下的层是没有用的。TCP/IP协议栈从上层到下层的封装过程中,第三层封装需要知道目的IP,第二层封装需要知道目的MAC(物理地址)。在实际网络的链路上传送数据帧时,最终还必须是硬件地址。说到底IP地址是虚的,两台主机的通信归根结底是要落实到实物上的,所以说,两台主机之间通信光有IP地址是不够的,还需要有物理地址。

首先,我们知道,一台主机可以通过DNS服务知道另一台它想要通信主机的IP,这一步称为域名到IP地址的转换;而ARP所做的事就是通过IP地址得到对应的物理地址,这一步叫做IP地址到物理地址的转换。通过这两部便得到了目的主机的IP地址和物理地址。

其次,每台主机上都会有一个APR高速缓存,里面有所在局域网上的各主机和路由器的IP地址到硬件地址的映射表。当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。

下面所示的这张图有两个局域网LAN1和LAN2,它们的网关分别是路由器1和路由器2,下面阐述两种通信情形。
细聊网络层协议之ARP、RARP协议
第一种情况:局域网内的主机通信
主机1-2想和主机1-3通信,通过DNS服务知道了主机1-3的IP地址。主机1-2用子网掩码和主机1-3的IP地址相与后得到的值和自己的网络号相比较,若相同则为同一局域网中的主机。如图所示,主机1-2和主机1-3在同一局域网内。然后主机1-2查看自己的ARP高速缓存中的映射表是否有与该IP地址相匹配的MAC地址,这里我们假设没有,所以主机1-2便在局域网内以广播的方式发送ARP请求,该请求的内容可以这么表示:

我是 222.1.3.3,硬件地址是 M1-2,我想知道主机 222.1.3.4的硬件地址

当主机1-3收到该请求信息之后,发现222.1.3.4是自己的IP地址,便以单播的形式向主机1-2发送ARP响应,该响应内容可以表示为:

我是 222.1.3.4,硬件地址是 M1-3

这样一个ARP请求便完成了。

第二种情况:跨局域网的主机通信
首先要明白ARP是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题,如果所要通信的目的主机和源主机不在同一个局域网中该如何获得物理地址呢?那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。
如图中所示的主机2-1若要与主机1-3通信,发现不在同一个局域网上,则主机2-1线得到路由器2的物理地址,通过交换机,将数据帧传给路由器2,然后接下来又是一个怎样的过程呢?我们先简化一下主机2-1和主机1-3的连线图。
细聊网络层协议之ARP、RARP协议
看图中的三条数据帧,第一条是主机2-1通过交换机1发送给路由器2的数据帧,第二条是路由器2发送给路由器1 的数据帧,第三条是路由器1通过交换机3发送给主机1-3的数据帧。前面三部分是不变的,改变的是源物理地址和目标物理地址。
以下总结三条:

  • 交换机是基于数据帧的MAC地址转发数据的,路由器是基于数据包的IP 地址转发数据的
  • 数据包在传输过程中不变,过网络设备数据帧要用新的物理层地址重新封装
  • MAC地址决定了数据帧下一跳哪个设备接收,二IP地址决定了数据包的起点和终点

另外,从路由器2到路由器1的路径选择属于路由器选择的内容,本篇就不多做展开了。


二、使用 ARP 的四种典型情况

1、发送方是主机,要把IP数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。
2、发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
3、发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。
4、发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。


三、ARP带来的安全问题及ARP欺骗

有几个相关的问题来看一看:
Q:为什么不用物理地址直接通信呢?

由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此几乎是不可能的事。
比如说一个电脑产商生产一台电脑,这台电脑有全世界唯一的物理地址,但是产商不知的是,他卖出的这台电脑最终是到非洲还是到亚洲,这是控制不了的,若真想控制,实在是一个庞大的工作。

Q:对于跨局域网的通信,为什么不可以直接ARP请求目标主机的物理地址?

之前说过了ARP是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题,为什么不能作用于广域网?试想想,大部分的通信其实是跨局域网的,若每台主机向广域网发ARP那岂不是占用了许多资源,还有一个就是安全问题,网络攻击者可以发送大量的请求,那么全球的网络都会陷入瘫痪。

什么是ARP欺骗呢,放个传送门:ARP欺骗


四、逆地址解析协议 RARP

逆地址解析协议 RARP 使只知道自己硬件地址的主机能够知道其 IP地址。这种主机往往是无盘工作站。 因此 RARP协议目前已很少使用。其工作原理如下:

  • 网络上的每台设备都会有一个独一无二的硬件地址,通常是由设备厂商分配的MAC地址。PC1从网卡上读取MAC地址,然后在网络上发送一个RARP请求的广播数据包,请求RARP服务器回复该PC的IP地址。
  • RARP服务器收到了RARP请求数据包,为其分配IP地址,并将RARP回应发送给PC1。
  • PC1收到RARP回应后,就使用得到的IP地址进行通讯。

ARP和RARP请求是广播方式,应答都是单播方式。