赵工的个人空间


专业技术部分转网页计算转业余爱好部分


 基础资料

首页 > 专业技术 > 基础资料 > 地址解析
地址解析

虽然TCP/IP协议引入IP地址实现了不同物理网络中设备逻辑地址的统一,但数据最终还是要在物理网络上传输,还要使用物理地址,也就是网络中存在两套地址,需要在这两套地址间建立映射关系。
地址解析,指的是将一个协议地址转换成一个相应的物理地址,或反之。使用地址解析,可以解析不同计算机编址策略的差异,使得端设备可以动态地找到本地的硬件地址以便向远端主机传输数据,或者取得必要的逻辑IP地址和配置参数以便加入网络。
有4种地址解析的方法:
·ARP:地址解析协议
·RARP:反向地址解析协议
·BOOTP:引导协议
·DHCP:动态主机配置协议
其中,ARP是唯一的将网络层地址解析为硬件地址的协议,而RARP、BOOTP、DHCP协议则都是允许一个端设备可以动态地将其硬件地址解析为网络层的逻辑地址。

1.ARP:

RFC826定义的ARP的功能就是动态地将主机网络层的逻辑IP地址解析为一个硬件地址。

1)ARP操作:

在远端主机间进行任何通信之前,发送者必须获得一个用于传输的本地地址。如果源和目的在同一个网段,则此本地地址就是最终的目的主机的硬件地址。如果源和目的不在同一个网段(由一个或多个路由器分开),发送者就用本地路由器(网关)的地址向远端主机传输和转发数据报。
为了得到本地硬件地址,发送主机首先检查本地的ARP缓存表并寻找学习获得的地址。每个主机在内存中维护一个静态或动态学习到的地址信息的本地ARP表。如果表中有地址对,则源主机只是利用此信息而无需用ARP解析其地址;如果没有地址对,则发送主机就用ARP将目的主机的网络层地址解析为本地的硬件地址。一旦发送主机解析了网络层的地址并且确定了一个本地地址,就将此信息放到本地主机的ARP缓存中以供将来使用。
ARP是基于广播的,当一个发送主机想解析一个远端主机的网络层地址时,就给本网段的所有主机发送一个广播。发送主机发现目的主机在同一个网段上,就会发送一个本地的ARP广播以解析目的主机的硬件地址;如果发送主机发现目的主机不在同一个子网上,就发送一个本地的ARP广播来解析可以将数据转发到远端主机的本地网关的硬件地址。
目的主机或本地网关应答,然后发送主机就用足够信息把数据报转发给端主机或为此主机作路由的网关。

2)ARP缓存:

每一个主机有一个可配置的ARP缓存定时器。当一个主机将一个条目加入到其ARP表中时,就置此定时器的值,当定时的时间到,就认为此条目是一个旧条目,应该从缓存移走。
如果此主机想与地址已被移走的主机联系,就会发送一个新的ARP请求,这样就会在表中加入一个新条目。主机每次用其缓存中的一个条目时,都会对相应的定时器复位,如果主机与远端主机通信是有规律的,则此条目将保存的ARP缓存中。

3)代理ARP:

代理ARP使得另一个设备,如路由器,在地址解析时代表远端主机向ARP请求作出应答。当一个具有代理ARP功能的网关响应时,会用自己的硬件地址作出应答。

4)ARP头:

一个ARP头包括28字节:

硬件类型

协议类型

HLEN

PLEN

操作

发方硬件地址

发方IP

目的硬件地址

目的IP

2

2

1

1

2

6

4

6

4

ARP协议类型是在数据链路控制头标出的,类型为0806,目的主机的硬件地址全为F,说明此请求类型是一个发送到本地网段上所有设备的广播。操作代码为1,说明这是一个ARP请求,ARP应答为2。发送方请求将4字节的IP协议目的地址转换成一个6字节的以太网硬件地址,目的硬件地址为全0,表示是未知的。
·硬件类型:2字节,说明了可以解析为以太网、令牌环或者其他网络硬件类型。
·协议类型:2字节,说明了网络层的协议类型,比如0800表示IP,8137表示IPX。
·HLEN:1字节,表示硬件地址的长度。
·PLEN:1字节,表示协议地址的长度。
·操作代码:2字节,1--ARP请求,2--ARP响应,3--RARP请求,4--RARP响应
由于ARP和RARP所用的帧格式包含相同的字段,因此需要这个操作代码字段。

5)计算机上操作ARP缓存:

arp -s inet_sddr eth_adr [if_addr]
arp -d inet_addr [if_addr]
arp -a [inet_addr] [-N if_addr]
其中,-a用于查看高速缓存中的所有项目,如果计算机上有多个网卡就需要使用-a并加上网卡接口的网络地址参数inet_addr,就可以之显示与该网卡接口相关的ARP缓存项目;-s是向ARP高速缓存中人工加入一个静态项目,主要使用主机IP地址inet_sddr和以太网地址eth_adr,人工增加内容一般是永久保存的,除非在命令行末尾使用关键字temp;-d用来删除一个静态项目,需要使用主机IP地址inet_sddr。

2.RARP:

RFC903定义了RARP协议,功能是动态地将一个主机的硬件地址解析为一个逻辑网络层协议地址。功能与ARP相反。实际上RARP和ARP用相同的头格式和字段,RARP标识为8035。
开发RARP的最初目的是使无盘客户可以从远端主机动态地获得一个逻辑地址,因为无盘客户没有存储此信息的永久介质,需要一个远端的RARP服务器上为子网内的每个客户创建一个静态映射,并且在主机的硬件地址或网络层地址改变时作出相应的更新。
RARP协议也是基于广播的,网关(路由器)并不转发数据报,在每个本地子网中至少需要一个RARP服务器来对客户的请求作出响应。

1)RARP操作:

RARP是一个主机知道自己的硬件地址,而向RARP服务器请求逻辑地址的过程。步骤为:
主机发送一个本地的RARP广播,其中声明其硬件地址,向收到此请求的RARP服务器请求分配一个逻辑地址;本地网段上的RARP服务器收到请求后,检查其RARP数据库,以寻找发送主机的硬件地址映射为逻辑地址的一个条目;如果存在这样的映射对,此RARP服务器就给源主机发送一个定向数据报并提供所请求的信息;源主机得到一个协议地址,就将此信息存储在本地主机的内存中。如果不存在这样的映射对,服务器就不回答;如果收不到从RARP服务器的应答,就放弃获取,表示入网初始化失败。

2)缺陷:

整个网间网上都必须有一个RARP服务器,而且需要一个静态的映射表,管理员需要定期手工创建和维护此映射表。如果主机移到另一个网段,而本地的RARP服务器并未收到此客户的映射信息,或者管理员输入了错误信息,则此客户将不能与网络连接。
现在,RARP协议已经被更健壮的协议,如BOOTP和DHCP替代。

3.BOOTP:

引导参数协议BOOTP在RFC951中定义,最初目的与RARP类似,也是无盘客户从一个远端服务器上请求IP地址信息,无盘客户还可以从TFTP服务器或其他引导服务器上请求一个远程引导文件来实现初始化。
初始化时,BOOTP客户向运行BOOTP服务器进程的所有主机寻址,并请求IP地址配置信息。所有的BOOTP服务器维护一个将硬件地址映射为有效IP地址的静态配置表以完成客户的请求,网络管理员必须手工更新和维护此表。
BOOTP利用UDP和IP服务传输信息,UDP端口值68标识了一个客户,而值67则标识了一个服务器端口。路由器可以转发BOOTP请求和响应,这样在整个网间网上适当安装BOOTP服务器就可以满足需要。

4.DHCP动态主机配置协议:

这是一个给设备,如主机或网关提供IP配置参数的动态协议,这些参数包括逻辑IP地址、网关地址、DNS(域名解析)地址及其他信息。RFC2131定义了DHCP,替代了BOOTP和RARP协议。
DHCP同样实现了将一个MAC地址映射为网络地址的静态表,但本质上是动态的,可以维持一个动态分配给主机或网关的IP地址池。
DHCP基于客户机/服务器模式,客户发送请求而服务器在响应时发送配置信息,DHCP支持自动分配、动态分配和手工分配方式。

1)DHCP报文交换:

DHCP报文包括发现、提供、请求、确认、否定确认、拒绝、释放、通知分类。在DHCP客户和服务器之间有4个一般的报文交换过程来配置新客户。
客户首先广播一个DHCP发现报文以定位DHCP服务器,所有服务器用一个DHCP提供报文来响应发现。如果有多个服务器响应,客户选择一个服务器后发送一个DHCP请求报文来请求配置,还可以包含一个意愿参数表。
被选定的服务器用一个包含所请求信息的DHCP确认响应,此服务器必须提供全部或部分所请求的参数。分配给客户的地址必须在主机所在的子网是有效的。如果服务器不能完成客户对特定参数的请求或者客户请求了无效的参数,则服务器就用一个DHCP否定确认作出响应。
一旦客户收到了配置信息,用给定的IP地址为目的产生一个ARP请求,来验证此IP地址未被网络上的其他主机使用。如果此ARP未被答复,即此地址未被其他主机使用,客户就保存该地址,完成了初始化过程。如果有某一主机识别了此地址,那么此地址已被使用,主机就给服务器发送一个DHCP拒绝报文,开始重新配置过程。
如果客户是无盘客户,会在每次引导时执行此过程,如果客户有硬盘,则只在首次引导或者租期过期时才会执行。
如果一个客户不再需要分配给它的IP地址,就向分配此地址的DHCP服务器发送一个DHCP释放报文,通知其可以将此地址归还到地址池中。

2)DHCP报头:

DHCP头的格式和功能与BOOTP几乎完全一样,唯一区别是BOOTP头中包含一个厂商专用字段,在DHCP中改名为可选项,并且长度是可变的。

操作码

硬件
类型

硬件
长度

事务
识别


客户
IP

主机
IP

服务器IP

网关
IP

客户
MAC

服务器名

引导文件

可选

1

1

1

1

4

2

2

4

4

4

4

16

64

128

可变

·操作码:1字节,DHCP数据报类型,1--DHCP请求(客户发),2--DHCP应答(服务器发)
·Htype:1字节,硬件类型,以太网为1
·Hlen:1字节,硬件长度,随硬件类型不同而变化,以太网为6
·跳数:1字节,指出了客户正通过一个路由器或多个路由器获取远端的引导信息,初始设为0,网关或中继代理每次转发就将此值加1
·事务ID:4字节,允许客户将其请求与服务器的响应相匹配,客户随机选取一个id值
·秒:2字节,每一个DHCP客户在初始化时都置此定时器并记录一个请求发出的时间,这可以衡量从客户引导并且希望从一个DHCP服务器得到配置以来经过了多少时间。如果一个DHCP客户在一定时间内没有收到响应,就重传其请求。如果定时器过时了,此设备就超时,初始化失败并且不能入网。
·标识:2字节,指出数据报是作为广播或者是单目帧发送
·客户IP地址:4字节,第一个客户引导时此字段的值全为0,如果客户是无盘的,此字段就总为0.如果客户有硬盘并且存储了此信息,此字段总是DHCP服务器分配的初始IP地址
·主机IP:4字节,如果前一个字段是全0,此字段也全0;如果客户知道其IP地址并愿意继续使用,则此字段将包含相同的值
·服务器IP地址:4字节,当客户首次初始化或者这是一个无盘客户时,此字段全为0。如果客户在上次引导时将此信息存储了,此字段就是这一报文要发往的DHCP服务器的IP地址。如果这是一个应答,此字段就是对此请求作为应答响应的DHCP服务器的IP地址。
·网关IP地址:4字节,当一个新的主机发送其初始请求时,此字段全为0;如果一个本地的网关或中继代理必须转发此请求以便定位远端的DHCP服务器,则转发数据报的网关或中继代理就将IP地址信息加入。如果此DHCP客户以前从远端DHCP服务器上收到过其配置信息并且存储了此信息,此字段将包括它以前使用的网关或中继代理的IP地址。
·客户硬件地址:16字节,此字段标识了DHCP客户的硬件地址,如果是一个以太网硬件地址,此字段就包含记录在网卡中的一个6字节的唯一地址。
·服务器主机名:64字节,此可选值用名字标识了DHCP服务器,指定了可以响应的DHCP服务器。如果此字段为空,任何服务器都可以响应。
·引导文件名:128字节,此可选值标识了一个DHCP客户可以从DHCP服务器请求的引导文件名,此文件用于获取带有主机远端初始化参数的配置信息。当服务器响应时,就标识出引导文件的完整路径。如果客户不指定此字段(空白),则服务器就争取为客户下载一个缺省的引导文件。
·可选项:可变长度,包含客户请求的或服务器分配的参数列表。

Copyright@dwenzhao.cn All Rights Reserved   备案号:粤ICP备15026949号
联系邮箱:dwenzhao@163.com  QQ:1608288659