解读《TCP/IP详解》(卷1):05章:RARP(逆地址解析协议)

   上一节,我们讲到的ARP协议是主机知道自己的IP来查询自己的硬件地址。但是不同于PC,网络上有一种设备(比如无盘工作站)没有本地磁盘,因此无法在系统引导时获得自己的IP地址。但是这些设备由网络接口厂家配置了唯一的硬件地址,因此它们可以获知自己的硬件地址。如果要得到自己的IP地址,它就会发送一个包含自己MAC地址的RARP请求的广播包给网络上某个主机,来响应该系统的IP地址。

 

1.分组格式

       

    RARP的分组格式与ARP的分组格式相同。关于分组中每个字段的具体解释,参见上一篇博文

解读《TCP/IP详解》(卷1):04章:ARP(地址解析协议)

    其不同之处是RARP的帧类型为0x8035而ARP帧类型为0x0806,以及对应的操作字段OP不同:

  RARP   ARP
请求 3 1
应答 4 2

2.过程

    与ARP相同的是,它们的请求包都是广播,而应答包都是单播。当我们发送RARP请求的主机,收到了IP地址的响应之后,它就会发送一个TFTP(简单文件传输协议)的读请求(RRQ)给一个文件(其文件名为IP地址,后缀名为系统的类型),是引导映像,用于引导系统。从而得到了本机IP地址。(笔者注:按照原书此过程是在BSD系统下,其他系统或许不同,因此才会产生系统相关性

    另外,由刚才的分组格式我们可知RARP请求加上以太网首部共占用了42字节,而以太网的最小传递单位是60字节,所以会对请求报文填充空白字符。

    而当发送了RARP请求之后,却得不到响应(比如网络上没有RARP服务器)时,就会重发。每次重发的时间间隔会以两倍的比例增加。而当间隔达到某一阀值时,又会恢复到初始值,再重复上一过程。

3.RARP服务器设计的复杂性

    不像概念这般简单,真正设计实现起来是相当复杂的。ARP服务是在TCP/IP的内核中实现的,内核知道IP地址和硬件地址,直接查表就可以了。

    RARP服务器则要为网络上的所有无盘系统提供IP地址与硬件地址的映射。该映射文件保存在磁盘上,而内核是不访问磁盘文件的,因此读取和分析该文件的过程只能由用户进程完成。并不作为TCP/IP内核实现的一部分,原因大概是ARP协议的使用率要比RARP使用率多得多,毕竟无盘工作站还是少数。

    此外RARP请求本身也是一个以太网数据帧。这需要RARP服务器能够提供接收与发生这种数据帧的能力。但是RARP的数据帧的发送和接收是与系统相关的。因此RARP服务器的实现是与系统捆绑在一起的。

    不仅一个RARP服务器要为多个无盘系统提供映射,并且一个无盘系统的网络也需要提供多个RARP服务器。避免个别服务器关机,并且提供冗余备份。但服务器数量增加,网络的流量也会增加,而一个RARP请求发出后,多个服务器都会响应,一般是采用最先收到的响应,但是如果多个响应同时收到,则会造成以太网冲突。

原文地址:https://www.cnblogs.com/unclejelly/p/4082096.html