为什么需要RARP
物理网络地址即依赖于底层协议又依赖于硬件,并且给每台使用TCP/IP的机器都分配了一个或者多个独立于硬件地址(即MAC地址)的32比特IP地址。当指定一个目的地时,应用程序总是使用IP地址。因为主机和路由器必须使用物理地址在底层硬件网络上传输数据报,它们依赖于ARP之类的地址转换协议完成在IP地址和相应硬件地址之间的映射。
通常,机器的IP地址保存在硬盘中,操作系统在启动时找到它。但是:“没有硬件的机器是如何确定自己的IP地址的?”(在使用网络协议之前,必须知道自己的IP地址)
寻找IP地址的思路很简单:需要知道自己地址的机器向另一台机器上的服务器发出请求(在发出的请求中必须唯一的标识自己,这样服务器才能做出正确的响应),并等待服务器响应。我们假定服务器访问了存放互联网地址数据库的磁盘。发出请求的机器和相应的服务器在这个简短的通信中都使用了物理网络地址。请求放怎样才能知道对方的物理地址呢?通常它并不知道。它只简单的向本地网上所有机器广播这个请求。一个或者多个服务器会响应这个请求。
一旦某台机器广播了一个对地址的请求,它就必须唯一的标识自己。那么,在请求中包含什么样的信息才能达到这个目的呢?任何唯一的硬件标识(机器的物理网络地址)都可以。而且我们必须设计这样一个服务器:它能使用同一格式来接受物理网络上的所有机器的请求。
机器的物理网络地址唯一的标识自己的优势:这个地址总是可用的,而且不必放在人为启动代码中。于是,问题转换为:给出一个物理网络地址,设计一种方法使服务器把它映射成互联网地址。
允许计算机从服务器获得IP地址的TCP/IPP协议被称为方向地址转换协议RARP。
RARP详解
与ARP类似,RARP报文是封装在一个网络帧的数据部分中,并从一台机器发送到另一台机器的。
下图演示了主机是如何使用RARP:发送方广播一个指定它自己即是发送方又是接收方的RARP请求,并把它自己的物理网络地址放到目标硬件地址字段中。网络上的所有机器都接收到该请求,但只有被授权提供RARP服务的机器才能处理请求并做出应答。要成功使用RARP,网络中必须至少包含一个RARP服务器。
服务器对请求的回答方式是:填写目标协议地址字段,并把报文类型从“请求”改为“应答”,然后直接把应答发回提出请求的机器。发出请求的机器收到了所有RAPR服务器的应答,但它只需要第一个。
注意:对于寻找自己IP地址的机器和提供这一地址的服务器,它们之间的所有机器都只能使用物理网络实施。另外,协议还允许主机询问任意目标主机的地址。因此,发送发分别提供自己和目标主机的硬件地址,而服务器要把应答发送到发送发的物理地址上。
处理RARP事务的时间
RARP请求和响应很容易丢失。因为RARP直接使用物理网络,所以没有其他协议软件限定响应时间或者重发请求,RARP软件必须承担这些任务。
某些依赖RARP启动的计算机,采用无限重试的方法知道收到一个响应;某些则在重试几次之后就宣布失败,以避免因为不必要的广播导致网络拥塞。因此,使用大的时延保证了服务器有足够时间响应RARP请求,并做出应答。
RARP主服务器和备份服务器
多台RARP服务器可以使得系统更加可靠。如果一个服务器失效或者由于负载过重而来不及响应,另一个服务器就会响应请求。缺点是当一台服务器广播一个RARP请求时,如果所有服务器都试图响应,网络就会超载。
怎样组织RARP服务才能使它可靠可用又不会导致多个服务器同时应答呢?至少有两种解决方案,它们均采用延迟响应技术:
- 第一种方案:给每台发出RARP请求的机器都分配一个主服务器。正常情况下,只有主服务器响应RARP请求;备份服务器接收到请求后只记录它到达时间。如果主服务器不可用了,原来的机器会因为等待响应而超时,然后重新广播这个请求。一旦备份服务器在短时间内收到一个RARP请求的第二个副本时,就会响应
- 第二种方案采用类似方法,但试图避免所有备份服务器同时响应。每台备份服务器收到请求后会等待一段随机时间后才响应。正常情况下,主服务器是立即响应。通过精心设计延迟时间,设计人员可以确保发出请求的机器在收到答复之间不会再次广播
总结
启动系统时,没有硬盘的计算机在使用TCP/IPP通信之前必须与服务器联络,以找到自己的IP地址。RARP机器提供目标机器的物理硬件地址,以唯一的标识处理器并广播RAPR请求。网络上的服务器接收到请求后,在一个表(比如硬盘)中查找映射,并应答发送方。一旦机器获得它的IP地址,就把地址存储在主存中,知道重新启动之前都不再使用RARP。