ARP 与 RARP 协议
The article was written by:GoodGoodStudy(76371578@qq.com)
通常我们只要确定了 IP 地址即可向目标发送数据报。然而,在底层数据链路层,进行实际通信时却有必要了解每个 IP 地址所对应的 MAC 地址。ARP 正是一种解决地址问题的协议。
ARP 以目标 IP 地址为线索,用来定位下一个应该接收数据分包的网络设备对应的 MAC 地址。如果目标主机不在同一个链路上时。可以通过 ARP 查找下一跳路由器的 MAC 地址。不过 ARP 只适用于 IPv4,不能用于 IPv6。IPv6 中可以用 ICMPv6 替代 ARP 发送邻居探索消息。
ARP 的工作机制
ARP 通过请求与响应两种类型包来确定 MAC 地址。
如下图所示,假定主机 A (172.20.1.1
)向同一链路上的主机 B (172.20.1.2
)发送 IP 包,它们互不知道对方的 MAC 地址。
主机 A 为了获得主机 B 的 MAC 地址,起初要通过广播发送一个 ARP 请求包,这个包中包含了想要了解其 MAC 地址的主机 IP 地址(即 ARP 请求包中包含了主机 B 的 IP 地址 172.20.1.2
)。由于广播的包可以被同一链路上所有的主机或路由器接收,因此 ARP 的请求包也会被这同一链路上所有的主机和路由器进行解析。如果 ARP 请求包中的目标 IP 地址与自己的 IP 地址一致,那么这个节点就将自己的 MAC 地址塞入 ARP 响应包返回给主机 A。
即 ARP 协议是通过往同一链路上的节点广播发送 ARP 请求包(含想了解 MAC 地址的节点 IP 地址),等待目标节点返回响应包来获取其 MAC 地址,从而实现链路内的 IP 通信。
根据 ARP 可以动态地进行地址解析,因此 TCP/IP 的网络构造和网络通信中无需事件知道 MAC 地址究竟是什么,只要有 IP 地址即可。
如何解决每次发送 IP 数据报都要进行一次 ARP 请求 ?
如果每次发送一个 IP 数据报都要进行一次 ARP 请求以此确定 MAC 地址,那将会造成不必要的网络流量。因此,通常的做法是把获取到的 MAC 地址与其 IP 地址的映射关系缓存一段时间。这样下一次再向这个 IP 地址发送数据报时就无需再重新发送 ARP 请求,而是直接使用缓存表中的 MAC 地址。这样,在一定程度上可以防止 ARP 包在网络上被大量广播的可能性。
一般来说,发送过一次 IP 数据报的主机,继续发送多次 IP 数据报的可能性会比较高。因此,这种缓存能有效地减少 ARP 包的发送。反之,接收 ARP 请求的那个主机又可以从这个 ARP 请求包中获取发送端主机的 IP 和 MAC 地址,这时它也可以将这些 MAC 地址缓存起来,从而根据 MAC 地址发送响应包给发送端主机。
为什么即需要 IP 地址,还需要 MAC 地址
可能有人会疑惑:"数据链路上只要知道接收端的 MAC 地址不就知道数据发送给主机 B 吗,为什么还需要 IP 地址?如果知道 IP 地址,即使不做 ARP,只要在数据链路上做一个广播不就能发给主机 B 了吗?那 ARP 这不是在做多余的事情吗?"
此时我们要考虑一下以下情况,即:发送给其它数据链路中某一主机时;
如下图所示,当主机 A 想要发送给 IP 数据报给主机 B 时必须得经过路由器 C。即使知道了主机 B 的 MAC 地址,由于路由器 C 会隔断两个网络,还是无法实现直接从主机 A 发送数据报给主机 B。此时,主机 A 必须得先将数据报发送给路由器 C 的 MAC 地址 C1。
image-20201218145418137.png此外,假定 MAC 地址就用广播地址,那么路由器 D 也将会收到该广播消息。于是路由器 D 又将该消息转发给路由器 C,导致数据包被重复发送两次。
IP 地址与 MAC 地址承当着不同的作用,IP 地址是目标的地址,而 MAC 地址承担着 "下一目标" 的地址,数据报要经过多次中转才能到达最终的目标上。
在以太网上发送 IP 包时,"下次要经由哪个路由器发送数据报",这一信息非常重要。而这里的 "下一个路由器" 就是相应的 MAC 地址。
如此看来,IP 地址和 MAC 地址两者缺一不可。于是就有将这两个地址相关联的 ARP 协议。
我们再试想一下,倘若不使用 IP 地址,而是通过 MAC 地址连接世界上所有网络中所有的主机和节点情况。仅仅凭一个 MAC 地址,人们是无法知道这台机器所处的位置的。而如果全世界设备都使用 MAC 地址相连,那么网桥在习得之前就得向全世界发送包。可想而知那将会造成多大的网络流量。并且网桥还得维护一张巨大的表来维护所有学到的 MAC 地址,一旦这些信息超过网桥所能承受的极限,那将会导致网桥无法正常工作。
RARP
RARP(Reverse Address Resolution Protocol)是将 ARP 反过来,从 MAC 地址定位 IP 地址的一种协议。
例如将打印机服务器等小型嵌入式设备接入到网络时就经常用到。平常我们可以通过个人电脑设置 IP 地址,也可以通过 DHCP 自动分配获取 IP 地址。然而,对于使用嵌入式设备时,会遇到没有任何输入接口或无法通过 DHCP 动态获取 IP 地址的情况。在类似情况下,就可以使用 RARP。
为此,需要架设一台 RARP 服务器,从而在这个服务器上注册设备的 MAC 地址及其 IP 地址。然后再将这个设备接入到网络,插电启动设备时,该设备就会发送一条 "我的 MAC 地址是 ***,请告诉我,我的 IP 地址应该是什么"的请求信息。RARP 服务器接收到这个消息后返回类似于 "MAC 地址为 *** 的设备,IP 地址为 ***"的信息给这个设备。而设备就根据从 RARP 服务器所收到的应答信息设置自己的 IP 地址。
image代理 ARP
通常 ARP 包会被路由器隔离,但是采用代理 ARP 的路由器时,可以将 ARP 请求转发给邻居的网段。由此,两个以上的网段节点之间可以像在同一个网段中一样进行通信。
网友评论