网络程序设计教材第三章 IP协议(3)

2020-05-12 11:48

ARP代理也称为混合ARP或ARP出租。这些名字来自ARP的其它用途:通过两个物理网络之间的路由器可以互相隐藏物理网络。在这种情况下,两个物理网络可以使用相同的网络号,只要把中间的路由器设置成一个ARP代理,以响应一个网络到另一个网络主机的ARP请求。这种技术主要用于隐藏一组在不同物理电缆上运行旧版TCP/IP的主机。

gemini 子网140.252.1 ARP请求发往140.252.1.29 Netb(140.252.1.183) ARP应答 调制解调器 SLIP(拨号) 调制解调器 SLIP 140.252.1.29 配置为sun的ARP代理 Slip .66 .65 Bsdi .35 .33 svr4 sun .34 以太网140.252.13 图3-6 ARP代理的工作过程

小结

IP地址的分配独立于机器的物理硬件地址。传递一个网络报文,网络软件必须使IP地址最终转换为物理硬件地址,而使用硬件地址传输数据帧。ARP协议主要功能是进行IP地址到物理地址的映射。

一台机器使用ARP找出另一台机器的硬件地址,办法是发送一个ARP请求。这个请求包括该机器的IP地址,它还需要一个硬件地址。每台机器对具有自己IP地址的请求作出响应,发出回答,回答中包含所需要的硬件地址。

为了提高ARP的效率,每台机器都具有高速缓存存放IP地址到物理地址的捆扎。

3.4.2 RARP:反向地址解析协议

我们已经清楚,物理网络地址是低层地址并且与硬件有关,同时使用TCP/IP协议的每台主机必须分配一个或多个32位的IP地址,而这些地址与机器的硬件地址无关。应用程序在指定数据报的目的地址时使用IP地址,但主机和网关必须使用物理地址,在数据报传输过程中,它们依靠像ARP这样的协议完成地址转换。

通常,具有本地磁盘的计算机系统引导时,可以从磁盘中的配置文件读取IP地址。但是对于无盘机器,例如X终端或无盘工作站,则需要采用其它方法来获得IP地址。在使用TCP/IP的系统中主要使用RARP协议来实现这个功能。

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

从理论上看RARP的工作过程是很简单的,但是实现起来常常比ARP要困难,关于RARP的正式规范是RFC903文件。

3.4.2.1 RARP的分组格式

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

与ARP相比,RARP请求以广播方式传送,而RARP应答一般是单播(unicast)方式传送。

3.4.2.2 RARP实现

对于无盘机器,可以使用自己的物理地址在网络中通信。这样,计算机凭借与操作系统使用物理存储器寻址的同样方式,暂时使用物理网络地址进行寻址,建立允许进行虚拟寻址的页表。计算机一旦知道了自己的网络地址,便可以使用网络地址进行通信。

RARP的工作原理比较简单:无盘机器发出一个RARP请求给一个服务器,而后等待这个服务器发回响应。假设服务器是一个有盘机器,并且在磁盘中保存着网络地址数据库。当某台机器需要知道自己的网络IP地址时,必须在其请求中唯一地标识自己,这样服务器便可以找出正确的网络地址并给出回答。发出RARP请求的计算机和给出回答的服务器,在它们双方通信过程中使用物理网络地址。无盘机器通常不知道服务器的物理地址,比较简单的方法是向本地网络中所有计算机广播一个请求,这样就会有一个或几个服务器作出响应。

无盘机器在启动时,它广播一个RARP请求,指出自己是目标计算机,并且在请求数据帧中提供自己的物理网络地址。本地网络中的所有计算机都会接收这个请求,但只有被授权提供RARP服务的计算机,才处理这个RARP请求并发出一个回答,这样的计算机通常称为RARP服务器。要保证RARP成功,本地网络中至少有一个RARP服务器。

服务器应答请求的方法是填充目标协议地址段,把报文类型从请求变成回答,然后把这个回答直接送回发出请求的计算机。发出请求的计算机接收来自所有RARP服务器的回答,从中获得该机器的网络地址。

同任何网络通信一样,RARP请求在传输过程中可能会丢失或受到破坏。因为RARP只用物理网络,因此RARP软件必须能够解决超时问题,而且具有重发能力。通常,RARP只在像以太网这样的局域网中使用,这样的网络环境出错概率较低,但如果一个网络中只有一个RARP服务器,这个服务器可能由于网络高负荷等因素而导致报文分组丢失。

许多无盘计算机依靠RARP协议进行引导,因此可能选择不定次数重试,知道接收一个响应为止。通常在像以太网环境下,重试达到一定次数后便宣布失败,以免过多的广播信息导致网络拥挤。

3.4.2.3 RARP服务器的设计

使用多个RARP服务器的主要优点是使系统较为可靠。如果一个服务器不能工作,或者负荷太重,不能及时响应RARP请求,其它服务器便可以应答这些RARP请求。使用多个服务器的缺点是当一台计算机广播一个RARP请求时,所有服务器都企图响应,从而导致网络拥挤。

虽然RARP在概念上很简单,一个RARP服务器的设计与系统相关而且比较复杂。相反,提供一个ARP服务器的系统很简单,通常是TCP/IP在内核中实现的一部分。由于内核知道IP地址和硬件地址,因此当它收到一个询问IP地址的ARP请求时,只需用相应的硬件地址来提供应答就可以了。RARP服务器的设计必须考虑可用性,又要考虑可靠性。

1. 作为用户进程的RARP服务器

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

RARP请求是作为一个特殊类型的以太网数据帧来传送的,因此RARP服务器必须能够发送和接收这种类型的以太网数据帧。由于发送和接收这些数据帧与系统有关,因此RARP服务器的实现是与系统捆绑在一起的。

2. 多个RARP服务器

RARP请求是在硬件层进行广播的,它们不经过路由器进行转发。为了让无盘系统在RARP服务器关机的状态下也能够引导,通常在一个网络上要提供多个RARP服务器。

当RARP服务器的数量增加时,网络流量也随之增加,这样虽然增加了网络的可靠性,但也可能导致网络拥挤的产生。通常使用将RARP服务器分为基本RARP服务器和后备RARP服务器的方法进行配置。

对每台产生RARP请求的计算机都分配一个基本RARP服务器(Primary Server)。在正常的情况下,只是属于那个计算机的基本RARP服务器才对该计算机的请求给予响应。所有非基本RARP服务器都收到这个请求,但它们仅仅记录请求的到达时间,如果基本RARP服务器不能工作,发出RARP请求的计算机便会超时,于是重发这个请求。某个非基本RARP服务器在第一次记录到一个RARP请求之后很短时间内又记录到同一个RARP请求,它便作出响应。

为了避免所有非基本RARP服务器同时发出响应,可以使用类似的方法解决。每个非基本RARP服务器收到一个请求便计算一个随机延迟时间,然后发送一个响应。在正常情况下,基本RARP服务器立即作出响应。以后的响应都被延迟,因此这些响应同时产生的可能性很小。当基本RARP服务器不能工作时,发出请求的计算机便会经历一个较小的延迟之后收到回答。网络协议的设计者对这些延迟加以精心选择,确保发出请求的计算机在收到一个响应之前,不会因超时而重新广播请求。

RARP协议主要工作在低层,它利用计算机的物理地址寻址而获得该计算机IP地址。当前一个可以替代RARP的协议是BOOTP协议,BOOTP协议与RARP协议不同,它是建立在像IP和UDP这样的较高层协议上的。后面的章节将介绍BOOTP协议。

3.5 BOOTP:引导协议

前面介绍了一个无盘系统,它在不知道自己的IP地址的情况下,在系统引导时能够通过RARP协议来获得它的 IP地址。然而使用RARP协议有两个问题:

1. IP地址是返回的唯一结果。

2. RARP协议使用链路层广播,因此RARP请求不能被路由器转发。

为了避免发生上述问题,我们介绍一种用于无盘系统进行引导的替代方法,即引导协议:BOOTP(BOOTstrap Protocol)。允许无盘机器不使用RARP协议,而使用BOOTP协议去确定它自己的IP地址。

BOOTP使用UDP,而且经常需与TFTP协同工作。RFC951文件是BOOTP协议的正式规范,RFC1542则对BOOTP协议进行了说明。

3.5.1 BOOTP重发策略

BOOTP协议将可靠通信的全部责任都放置在客户机上。我们知道由于UDP协议使用IP协议进行信息包提交,报文可能发生延迟、丢失、错序等错误。而且,由于IP协议不提供数据的检查和,所以UDP数据报到达目的地时可能带有出错的位。为了防止这种错误,BOOTP要求UDP使用检查和进行校验;BOOTP协议还规定请求和回答应该以非分段形式的数据报进行发送以适应那些内存太小不能重新组装数据报的客户机器。同时,BOOTP也可以构造成允许多个回答,但它接收和处理第一个回答。

为了处理数据报的丢失情况,BOOTP使用了传统的超时和重传技术。当客户发出一个请求时,它也启动一个定时器;如果定时器时间到还未收到回答,这个客户就重传这次请求。当然,在网络上所有机器由于电源故障以后将导致多个客户机器同时重新引导,这时,多个请求的同时产生可能使BOOTP服务器的负荷过重。为了避免这种情况,BOOTP规范推荐使用随机延迟方案;此外,该方案还推荐以0到4秒之间的随机超时值启动,并在每次重传后把定时器时间加倍;当定时器达到最大值60秒时,客户机将不再增加这个定时器时间,但还继续使用随机化的时间。在每次重传以后采用加倍超时时间将避免BOOTP增加过量的信息到已出现拥挤的网络上,这种随机化方案有助于避免同时发送。

3.5.2 BOOTP的分组格式

为了使BOOTP协议实现简单,BOOTP报文有固定长度段,而且回答和请求分组使用一样的格式。BOOTP请求和回答均被封装在UDP数据报中,格式如图3-7所示。

IP数据报 UDP数据报 IP首部 UDP首部 BOOTP请求/应答 图:BOOTP报文封装在UDP报文中 20字节 8字节 300字节

图3-7 BOOTP报文封装在UDP报文中

图3-8显示了长度为300字节的BOOTP协议的请求和应答的报文格式。为了保证BOOTP报文的长度足够小以适合在ROM内实现,在BOOTP报文中的所有字段都具有固定长度。

0 8 16 24 31 OP HTYPE SECONDS CLIENT IP ADDRESS YOUR IP ADDRESS SERVER IP ADDRESS GATEWAY IP ADDRESS CLIENT HARDWARE ADDRESS (16OCTETS) ….. SERVER HOST NAME (64OCTETS) ….. BOOT FILE NAME (128OCTETS) ….. VENDOR-SPECIFIC AREA (64OCTETS) ….. HLEN UNUSED HOPS TRANSACTION ID 图3-8 BOOTP报文格式

在BOOTP报文中,OP字段代表了报文的操作码,其中该字段值为1表示请求报文,为2表示应答报文。如同ARP协议,HTYPE和HLEN字段规定网络硬件类型和硬件地址长度,对于以太网,其HTYPE 字段值为1,HLEN字段值为6。

跳数(HOPS)字段由用户设置为0,它也能被一个代理服务器设置。如果BOOTP服务器接收请求,并决定把这个请求传递到另一台机器上(如果允许穿越网关),它就增加这个计数值。

事务标识(TRANSACTION ID)字段是一个由客户设置并由服务器返回的32位整数。客户使用该字段对请求和应答进行匹配。对每个请求,客户应该将该字段设置为一个随机数。

客户开始引导时,将秒数(SECONDS)字段设置为一个时间值。服务器能够看到这个时间值,备用服务器在等待时间超过这个时间值后才会响应客户的请求,这意味着主服务器没有启动或发生故障。

从客户IP地址字段以后的各个字段含有许多重要的信息。为了允许最大的灵活性,客户添入他们知道的尽可能多的信息,其余的字段填入0。如果该客户已经知道自身的IP地址,它将写入客户IP地址(CLIENT IP ADDRESS)字段;否则,它将该字段设置为0。对于后面这种情况,服务器用该客户的IP地址写入你的IP地址(YOUR IP ADDRESS)字段。服务器IP地址(SERVER IP ADDRESS)字段由服务器填写。如果使用了某个代理服务器,则该代理服务器就填写网关IP地址(GATEWAY IP ADDRESS)字段。

客户必须设置它的客户硬件地址(CLIENT HARDWARE ADDRESS)字段。尽管这个值和以太网数据帧头中的值相同,UDP数据报中也需要设置这个字段。

服务器主机名(SERVER HOST NAME)字段是一个空值终止串,由服务器填写。服务器还将在引导文件名(BOOT FILE NAME)字段填入包括用于系统引导的文件名及其所在位置的路径全名。

特定厂商区域(VENDOR-SPECIFIC AREA)字段用于对BOOTP协议进行不同的扩展。RFC1533文件定义了这个区域的格式。这个区域含有服务器返回客户的可选信息。

如果服务器有信息要提供给客户,特定厂商区域字段的前4个字节被设置为IP地址99.130.83.00,这通常称为魔术甜饼(magic cookie),表示该区域包含信息。这个区域的其余部分是一个条目表,每个条目的开始是1字节标志字段。其中的两个条目仅有标志字段:


网络程序设计教材第三章 IP协议(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:江苏卫生正高职称评审条件 江苏省卫生正高职称评审条件

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: