动态主机配置协议
动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)在TCP/IP网络上使客户机获得配置信息的协议,它是基于BOOTP协议,并在BOOTP协议的基础上添加了自动分配可用网络地址等功能。这两个协议可以通过一些机制互操作。DHCP向网络主机提供配置参数,它由两个基本部分组成:一部分是向网络主机传送专用的配置信息,另一部分是给主机分配网络地址。DHCP是基于客户/服务器模式的,这种模式下,专门指定的主机分配网络地址,传送网络配置参数给需要的网络主机,被指定的主机称为服务器。我们以后将提供DHCP服务的主机称为服务器,把接收信息的主机称为客户。不能随便谁都可以成为DHCP服务器,这需要管理员进行人为指定。由于网络中硬件和软件的多样性,使得任何一台主机随便响应DHCP请求的问题得到了解决,如果有一台机器可以随便响应的话,它也无法给用户提供正确的配置参数,而配置TCP/IP协议的参数又那么多,因此使得这种任意的响应成了不可能的事情。而分布式地分配网络地址要使用一些机制来防止地址重用,但是由于是分布式分配,有时真是防不胜防,无法从根本上杜绝网络地址冲突的问题。
DHCP支持三种IP地址分配方法。第一种是自动分配,DHCP给用户分配一个永久的IP地址。第二种是动态分配,在这种情况下,用户可以取得一个IP地址,但是是有时间限制的。第三种是手工分配,在这种方法下,用户的IP地址是由管理员手工指定的,这种情况下,DHCP服务器只需要将这个指定的IP地址传送给用户即可。至于用什么样的分配方法,不同的网络各不相同。
动态分配是唯一一种允许自动重用地址的机制。因此,这种方法对于有临时上网用户,而且网络的IP地址资源又不是多得没法用的时候特别有用。而手工指定对于管理不希望使用动态IP地址的用户十分方便,不会因为手工指定而和DHCP冲突或和别的已经分配的地址冲突。这里的关键希望大家能够理解,DHCP是一种相对集中式的管理方式。
DHCP信息包的格式是基于BOOTP包格式的,这使得BOOTP客户可以访问DHCP服务器。DHCP中使用了BOOTP的转发代理,这样就避免了在每个物理网段都设一个DHCP服务器的情况。
有许多协议与DHCP的功能相似,也同时为DHCP提供服务。反向地址解析协议(Reverse Address Resolution Protocol,RARP)用于发现网络地址和自动IP地址分配。小文件传输协议(Trivial File Transfer Protocol,TFTP)用于从启动服务器传送启动镜象。Internet控制信息协议(Internet Control Message Protocol,ICMP)用于向主机发送有关附加路由器信息。ICMP还被用于传送子网掩码信息和其它信息。主机也可能通过ICMP的路由寻找功能定位路由器 。BOOTP是用于传送配置信息的方法,它是可扩展的,正式的扩展在一些配置参数中定义。麻省理工学院的Athena工程中使用的网络信息协议(Network Information Protocol,NIP)采用分布式动态IP地址分配。资源定位协议(Resource Location Protocol,RLP)提供了高层服务定位。由于Sun公司不喜欢工作站在启动时的漫长过程,所以使用了RARP,TFTP和远程过程调用(RPC)机制,并称之为"bootparams",这种机制是用来为无硬盘主机传送配置信息和操作系统代码。一些Sun网络也在使用动态RARP(DRARP)和自动安装机制使新加入的主机自动配置。
在其它一些相关的工作中,路径最小传输单元(MTU)寻找算法使得寻找MTU的大小成为了可能。地址解析协议(Address Resolution Protocol,ARP)也被用于一种传输协议进行资源和定位和选择。
DHCP是用于向客户传送配置信息的,客户从DHCP服务器那里获得配置信息后应该可以和Internet上任何一台主机通信。TCP/IP协议栈参数请在本文后面寻找。在初始化一台主机时并不需要配置所有这些参数,客户和服务器可以通过一种商讨机制决定传送哪些参数。DHCP允许(不要求)客户参数配置不直接与IP协议相关,而且它也不将最加入的主机加入域名系统(DNS)中。
有一些名词需要解释一下,DHCP客户和DHCP服务器已经在前面说过了,这里就不再说明了。BOOTP转发代理或转发代理是一台Internet主机或路由器,它用于在DHCP客户和DHCP服务器间传送配置信息。绑定是一些配置参数,它至少应该包括IP地址,绑定由DHCP服务器管理。
DHCP的设计目标如下:
1.DHCP应该是一种机制而不是策略,它必须允许本地系统管理员控制配置参数,本地系统管理员应该能够对所希望管理的资源管理进行有效地管理。
2.客户不需要进行手工配置,客户应该在不参与的情况下发现合适于本地机的配置参数,并利用这些参数加以配置。
3.不需要对单个客户配置网络。在通常情况下,网络管理员没有必须输入任何预先设计好的用户配置参数。
4.DHCP不需要在每个子网上要一个服务器,为了经济的原因,它DHCP服务器必须可以和路由器和BOOTP转发代理一起工作。
5.DHCP客户必须可能对多个DHCP服务器提供的服务作出响应。出于网络稳定与安全的考虑,有时需要为网络加入多个DHCP服务器。
6.DHCP必须静态配置,而且必须以现存的网络协议实现。
7.DHCP必须能够和BOOTP转发代理互操作。
8.DHCP必须能够为现有的BOOTP客户提供服务。
下面几个设计目标是对于网络层参数的设计而言的,在网络层参数上,DHCP必须可以做到以下几点:
9.不允许有几个客户同时使用一个网络地址。
10.在DHCP客户重新启动后仍然能够保留它原先的配置参数,如果可能,客户应该被指定为相同的配置参数。
11.在DHCP服务器重新启动后仍然能够保留客户的配置参数,如果可能,即使DHCP机制重新启动,也应该能够为客户分配原有的配置参数。
12.能够为新加入的客户自动提供配置参数。
13.支持对特定客户永久固定分配网络地址。
在下面我们看一下DHCP的具体问题。从客户的观点来看,DHCP不过是BOOTP的扩展。这样就可以使现有的BOOTP用户在不进行任何改动的情况下使用DHCP。图一和表一描述了DHCP信息包的格式和信息包内每个字段的意义。请注意括号内的数字,它表示此字段的大小。我们老是提到BOOTP,它和DHCP的主要区别有两点,一点是DHCP对客户分配网络地址时不是无限期的,第二点是DHCP在提供网络地址时还提供了其它配置参数。熟悉BOOTP协议的可以对比一下两个协议的不同点。下图定义了DHCP消息格式:
[align=center][img=556,565]http://www.longen.org/A-D/detaila-d/DHCPFrame.gif[/img][/align]DHCP定义了一个新的“客户标识”选项,它是用来显式地将客户标识传送给DHCP服务器的。这个改变是针对BOOTP信息包中'chaddr'域即作为BOOTP转发信息的硬件地址又作为用户信息的情况而进行的。这个标记对于DHCP服务器来说没有什么意义,它可以是硬件地址,也可以是什么别的东西,反正只要是对于这个DHCP服务器管理的每个子网段内的客户是唯一的就可以了。客户一旦在一个信息包中使用了这个选项,以后的信息包内的这个选项必须和第一次使用时一致,这样DHCP服务器才可以正确地辨识客户。
[table=98%][tr][td=1,1,20%][b][align=center]域[/b][/align][/td][td=1,1,15%][b][align=center]字节[/b][/align][/td][td=1,1,65%][b][align=center]描述[/b][/align][/td][/tr][tr][td=1,1,20%]op
[/td][td=1,1,15%]1
[/td][td=1,1,65%]消息op代码/消息类型1 = BOOTREQUEST, 2 = BOOTREPLY
[/td][/tr][tr][td=1,1,20%]htype
[/td][td=1,1,15%]1
[/td][td=1,1,65%]硬件地址类型
[/td][/tr][tr][td=1,1,20%]hlen
[/td][td=1,1,15%]1
[/td][td=1,1,65%]硬件地址长度
[/td][/tr][tr][td=1,1,20%]hops
[/td][td=1,1,15%]1
[/td][td=1,1,65%]客户需要将这一项设置为零,当通过转发代理启动时可以供转发代理使用。
[/td][/tr][tr][td=1,1,20%]xid
[/td][td=1,1,15%]4
[/td][td=1,1,65%]操作ID,这是一个随机数,用于客户和服务器之间同步消息和消息的响应。
[/td][/tr][tr][td=1,1,20%]secs
[/td][td=1,1,15%]2
[/td][td=1,1,65%]由客户指定的时间,指的是开始地址获取和更新进行后的时间。
[/td][/tr][tr][td=1,1,20%]flags
[/td][td=1,1,15%]2
[/td][td=1,1,65%]请参阅图2。
[/td][/tr][tr][td=1,1,20%]ciaddr
[/td][td=1,1,15%]4
[/td][td=1,1,65%]用户IP地址,此字段仅当用户处于BOUND,RENEW或REBINDING状态和能够响应ARP请求时使用。
[/td][/tr][tr][td=1,1,20%]yiaddr
[/td][td=1,1,15%]4
[/td][td=1,1,65%]客户IP地址
[/td][/tr][tr][td=1,1,20%]siaddr
[/td][td=1,1,15%]4
[/td][td=1,1,65%]用于bootstrap过程中的IP地址
[/td][/tr][tr][td=1,1,20%]giaddr
[/td][td=1,1,15%]4
[/td][td=1,1,65%]转发代理IP地址
[/td][/tr][tr][td=1,1,20%]chaddr
[/td][td=1,1,15%]16
[/td][td=1,1,65%]客户硬件地址
[/td][/tr][tr][td=1,1,20%]sname
[/td][td=1,1,15%]64
[/td][td=1,1,65%]可选的服务器主机名
[/td][/tr][tr][td=1,1,20%]file
[/td][td=1,1,15%]128
[/td][td=1,1,65%]启动文件名
[/td][/tr][tr][td=1,1,20%]options
[/td][td=1,1,15%]不定
[/td][td=1,1,65%]可选的参数字段
[/td][/tr][/table]options字段的长度不定,DHCP客户可能会从服务器那里接收到长度大于576字节的包。DHCP客户也可以使用最大DHCP包长度字段要求服务器传送的包长度在一定限度之内。在客户使用DHCP进行配置的时候,DHCP需要使用TCP/IP软件,在配置好IP地址之前,TCP/IP软件应该能够接收并转发发送到客户硬件地址上的IP包;DHCP服务器和BOOTP转发代理在TCP/IP软件未配置好之前不能向未接收硬件单播报文的客户传送DHCP消息。如果客户在TCP/IP软件未能配置好之前实在不能接收IP单播报文,DHCP可以使用“标记”域进行工作。请注意下图中的那个B,它代表广播标记。至于这个标记的具体内容,我们在文章的后面几节内讨论。至于其它各位,它们是保留的,它们的值只能由客户设置为0。服务器和转发代理不会理会这一字段的内容。
不错
回答的很好呀,很细! 为了积分我罐水:lol :lol页:
[1]