TCP/IP详解--第五章

来源:互联网 发布:java设计模式' 编辑:程序博客网 时间:2024/06/05 08:40


第5章 RARP:逆地址解析协议


5.1   引言

 

具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取  I P地址。但是无盘机, 如X终端或无盘工作站,则需要采用其他方法来获得 IP地址。

网络上的每个系统都具有唯一的硬件地址,它是由网络接口生产厂家配置的。无盘系统 的RARP实现过程是从接口卡上读取唯一的硬件地址,然后发送一份 RARP请求(一帧在网络 上广播的数据),请求某个主机响应该无盘系统的 IP地址(在 RARP应答中)。

在概念上这个过程是很简单的,但是实现起来常常比 ARP要困难,其原因在本章后面介 绍。RARP的正式规范是 RFC 903 [Finlayson et al. 1984]。

5.2   RARP的分组格式

 

RARP分组的格式与 ARP分组基本一致(见图 4-3)。它们之间主要的差别是 RARP请求或 应答的帧类型代码为0x8035,而且 RARP请求的操作代码为 3,应答操作代码为 4。

对应于 ARP,RARP请求以广播方式传送,而 RARP应答一般是单播 (unicast)传送的。

5.3   RARP举例

 

在互联网中,我们可以强制 sun主机从网络上引导,而不是从本地磁盘引导。如果在主 机bsdi上运行 RARP服务程序和 tcpdump命令,就可以得到如图 5-1那样的输出。用 -e参数使 得tcpdump命令打印出硬件地址:

图5-1   RARP请求和应答

 

RARP请求是广播方式(第 1行),而第 2 行的 RARP应答是单播方式。第 2 行的输出中 at sun表示RARP应答包含主机 sun的IP地址( 140.252.13.33)。

在第3行中,我们可以看到,一旦 sun收到IP地址,它就发送一个 TFTP读请求( RRQ)给 文件 8CFC0D21.SUN4C (TFTP表示简单文件传送协议。我们将在第 15章详细介绍)。文件名 中的 8个十六进制数字表求主机 sun的IP地址 140.252.13.33。这个 IP地址在 RARP应答中返回。 文件名的后缀 SUN4C表示被引导系统的类型。

tcpdump在第3行中指出IP数据报的长度是65个字节,而不是一个UDP数据报(实际上是一 个UDP数据报),因为我们运行tcpdump命令时带有- e参数,以查看硬件层的地址。在图5-1中


48   TCP/IP详解,卷1:协议

下载

 

需要指出的另一点是,第2行中的以太网数据帧长度比最小长度还要小(在4.5节中我们说过应该

是60字节)。其原因是我们在发送该以太网数据帧的系统(bsdi)上运行tcpdump命令。应用程 序rarpd写42字节到BSD分组过滤设备上(其中14字节为以太网数据帧的报头,剩下的28字节是 RARP应答),这就是tcpdump收到的副本。但是以太网设备驱动程序要把这一短帧填充空白字 符以达到最小传输长度(60)。如果我们在另一个系统上运行tcpdump命令,其长度将会是60。

从这个例子可以看出,当无盘系统从 RARP应答中收到它的 IP地址后,它将发送 TFTP请 求来读取引导映象。在这一点上我们将不再进一步详细讨论无盘系统是如何引导的(第 16章 将描述无盘 X终端利用 RARP、BOOTP以及TFTP进行引导的过程)。

当网络上没有RARP服务器时,其结果如图5-2所示。每个分组的目的地址都是以太网广播地址。在who- 后面的以太网地址是目的硬件地址,跟在tell后面的以太网地址是发送端的硬件地址。 请注意重发的频度。第一次重发是在 6.55秒以后,然后增加到 42.80秒,然后又减到 5.34 秒和 6.55秒,然后又回到 42.79秒。这种不确定的情况一直继续下去。如果计算一下两次重发 之间的时间间隔,我们发现存在一种双倍的关系:从  5.34到6.55是1.21 秒,从  6.55到8.97是

2 . 4 2秒,从 8 . 9 7 到 1 3 . 8 0是 4 . 8 3 秒,一直这样继续下去。当时间间隔达到某个阈值时(大于

42.80秒),它又重新置为 5.34秒。

 

图5-2   网络中没有RARP服务器的RARP请求

 

超时间隔采用这样的递增方法比每次都采用相同值的方法要好。在图 6-8中,我们将看到 一种错误的超时重发方法,以及在第 21章中将看到 TCP的超时重发机制。

5.4  RARP服务器的设计

 

虽然 RARP在概念上很简单,但是一个 RARP服务器的设计与系统相关而且比较复杂。相 反,提供一个 ARP服务器很简单,通常是 TCP/IP 在内核中实现的一部分。由于内核知道 IP地


5章   RARP:逆地址解析协议     49

下载

 

址和硬件地址,因此当它收到一个询问 IP地址的 ARP请求时,只需用相应的硬件地址来提供

应答就可以了。

 

5.4.1   作为用户进程的RARP服务器

 

RARP服务器的复杂性在于,服务器一般要为多个主机(网络上所有的无盘系统)提供硬 件地址到 IP地址的映射。该映射包含在一个磁盘文件中(在 Unix系统中一般位于 /etc/ethers目 录中)。由于内核一般不读取和分析磁盘文件,因此 RARP服务器的功能就由用户进程来提供, 而不是作为内核的 TCP/IP实现的一部分。

更为复杂的是, RARP请求是作为一个特殊类型的以太网数据帧来传送的(帧类型字段值 为0x8035,如图2-1所示)。这说明RARP服务器必须能够发送和接收这种类型的以太网数据帧。 在附录 A中,我们描述了 BSD分组过滤器、 Sun的网络接口栓以及 SVR4数据链路提供者接口 都可用来接收这些数据帧。由于发送和接收这些数据帧与系统有关,因此 RARP服务器的实现 是与系统捆绑在一起的。

 

5.4.2   每个网络有多个RARP服务器

 

RARP服务器实现的一个复杂因素是 RARP请求是在硬件层上进行广播的,如图 5-2所示。 这意味着它们不经过路由器进行转发。为了让无盘系统在 RARP服务器关机的状态下也能引导, 通常在一个网络上(例如一根电缆)要提供多个 RARP服务器。

当服务器的数目增加时(以提供冗余备份),网络流量也随之增加,因为每个服务器对每 个RARP请求都要发送 RARP应答。发送 RARP请求的无盘系统一般采用最先收到的 RARP应答

(对于 ARP,我们从来没有遇到这种情况,因为只有一台主机发送  ARP应答)。另外,还有一种可能发生的情况是每个 RARP服务器同时应答,这样会增加以太网发生冲突的概率。

5.5   小结

 

RARP协议是许多无盘系统在引导时用来获取 IP地址的。 RARP分组格式基本上与 ARP分 组一致。一个 RARP请求在网络上进行广播,它在分组中标明发送端的硬件地址,以请求相应 IP地址的响应。应答通常是单播传送的。

RARP带来的问题包括使用链路层广播,这样就阻止大多数路由器转发 RARP请求,只返 回很少信息:只是系统的 IP地址。在第 16章中,我们将看到 BOOTP在无盘系统引导时会返回 更多的信息: IP地址和引导主机的名字等。

虽然 RARP在概念上很简单,但是 RARP服务器的实现却与系统相关。因此,并不是所有 的TCP/IP实现都提供 RARP服务器。

习题

 

5.1   RARP需要不同的帧类型字段吗? ARP和RARP都使用相同的值 0x0806吗?

5.2   在一个有多个 RARP服务器的网络上,如何防止它们的响应发生冲突?