计算机网络总五ARP与RARP

简介

ARP与RARP都属于网络层协议,但是他们是为了解决链路层的帧转发问题,ARP的功能是将IP解析成MAC地址,而RARP则相反。
在这里插入图片描述

ps 教材上把ARP协议划到网络层,是因为ARP协议属于TCP/IP协议簇。在TCP/IP模型中,它所有定义的协议是在网际层上的。再看按照OSI的标准,数据在传递时每层会加上自己的信息。当网络层的IP包进入链路层时,链路层通过ARP协议添加链路信息,而这不是网络层的功能。所以有很多人说ARP是链路层的。
可以这样做,在OSI模型中ARP协议属于链路层;而在TCP/IP模型中,ARP协议属于网络层。考试我们要按教材做,接网络层。
谈论ARP协议究竟属于第几层一点意义也没有.

一 ARP

地址解析协议(Address Resolution Protocol),其基本功能为透过目标设备的IP地址,查询目标设备的MAC地址。

  1. 首先,每个主机都有一个ARP列表,以缓存IP地址和MAC地址之间的对应关系。
  2. 当源主机要发送数据时,首先检查ARP列表中是否有对应的IP地址的目的地址的主机的MAC地址,如果有,则直接发送数据。如果没有,则以广播的形式向本子网所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址。
  3. 当本网段的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否有自己的IP地址,如果没有,则忽略该数据包。如果有,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
  4. 源主机收到ARP响应包后,将目的主机的IP和MAC地址写入到ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP相应数据包,表示ARP查询失败。广播发送ARP请求,单播发送ARP响应。

使用ARP协议的四种典型情况

(1) 发送方是主机,要把 IP 数据发送到本地网络上的另一个主机。这时用ARP获取目的主机的MAC地址。
(2) 发送方是主机,要把 IP 数据发送到另一个网络上的一个主机,这时需要使用ARP获取路由器的MAC地址,将数据发送到路由器,由路由器完成在不同路由器之间跨越网络的数据传输此时处于(4)情形,当到达目标网络的路由器时,处于(3)的情形。
(3) 发送方是路由器,需要把 IP 数据发送到本地网络上的一个主机,这时用 ARP 找到目标主机的 IP地址。
(4) 发送方是路由器,需要把 IP 数据包转发到另一个网络的主机。这时用 ARP找到去往该主机的下一跳路由器,之后的工作由下一个路由器完成。
(路由器收到ARP时,选择传输哪一个端口,采用的是路由器的选路算法进行判断)

二 RARP

RARP是将MAC物理地址转换成IP地址。RARP也有request与reply,并且RARP request也是广播,没有目标地址;RARP reply也是有目标地址,也是单播。这两点与ARP都相同。看起来虽然仅仅是ARP协议的逆向操作,但是RARP server设计的复杂性是远远超过ARP server的。首先,ARP server是存在于kernel中,而RARP server仅仅是一个用户进程,RARP就有些"先天不足"。其次,RARP是寻找与物理地址对应的IP地址,这就表明了RARP request packet包中没有IP地址,自然也就无法通过路由器进行转发了。因为路由器是工作在网络层,网络层的协议是IP协议,ARP request能够通过路由器进行转发,是因为在ARP request packet中有IP地址的字段,而RARP request packet没有,所以路由器对RARP也就没有帮助了。

RARP还有一个机制,就是在每个网络中都有多个RARPserver。我猜想这可能是为了增大可靠性,是用的主从服务器的设计理念。源地址一般只接受第一个RARP reply。有多个服务器,自然也就可能出现冲突。所以RARP server是这样设计的:一般有一个主服务器是接收到request后立刻发送RARP reply,没有发送延迟;而其他的服务器即使接收到了request,也会在一个随机的发送延迟后才能发送reply,而且一般是在短时间内收到重复的第二个request才可以发送reply。因为如果这些次要的服务器都收到了第二次相同的request,那么这种情况一般是主服务器挂了。

RARP工作原理:

1)将源设备和目标设备的MAC地址字段都设为发送者的MAC地址和IP地址,发送主机发送一个本地的RARP广播,能够到达网络上的所有设备,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址; ​
2)本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
​ 3)如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;如果不存在,RARP服务器对此不做任何的响应; ​
4) 源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。

猜你喜欢

转载自blog.csdn.net/GreedySnaker/article/details/115063741