📄 动态主机配置协议.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0044)http://www.longen.org/A-D/detaila~d/DHCP.htm -->
<HTML><HEAD><TITLE>动态主机配置协议</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2800.1400" name=GENERATOR></HEAD>
<BODY>
<TABLE width="100%" border=0>
<TBODY>
<TR>
<TD width="100%"><FONT face=宋体 size=3>
<P align=center><STRONG>动态主机配置协议</STRONG></P>
<P align=justify>动态主机配置协议(Dynamic Host Configuration
Protocol,DHCP)在TCP/IP网络上使客户机获得配置信息的协议,它是基于BOOTP协议,并在BOOTP协议的基础上添加了自动分配可用网络地址等功能。这两个协议可以通过一些机制互操作。</P>
<P
align=justify>DHCP向网络主机提供配置参数,它由两个基本部分组成:一部分是向网络主机传送专用的配置信息,另一部分是给主机分配网络地址。DHCP是基于客户/服务器模式的,这种模式下,专门指定的主机分配网络地址,传送网络配置参数给需要的网络主机,被指定的主机称为服务器。我们以后将提供DHCP服务的主机称为服务器,把接收信息的主机称为客户。不能随便谁都可以成为DHCP服务器,这需要管理员进行人为指定。由于网络中硬件和软件的多样性,使得任何一台主机随便响应DHCP请求的问题得到了解决,如果有一台机器可以随便响应的话,它也无法给用户提供正确的配置参数,而配置TCP/IP协议的参数又那么多,因此使得这种任意的响应成了不可能的事情。而分布式地分配网络地址要使用一些机制来防止地址重用,但是由于是分布式分配,有时真是防不胜防,无法从根本上杜绝网络地址冲突的问题。</P>
<P
align=justify>DHCP支持三种IP地址分配方法。第一种是自动分配,DHCP给用户分配一个永久的IP地址。第二种是动态分配,在这种情况下,用户可以取得一个IP地址,但是是有时间限制的。第三种是手工分配,在这种方法下,用户的IP地址是由管理员手工指定的,这种情况下,DHCP服务器只需要将这个指定的IP地址传送给用户即可。至于用什么样的分配方法,不同的网络各不相同。</P>
<P
align=justify>动态分配是唯一一种允许自动重用地址的机制。因此,这种方法对于有临时上网用户,而且网络的IP地址资源又不是多得没法用的时候特别有用。而手工指定对于管理不希望使用动态IP地址的用户十分方便,不会因为手工指定而和DHCP冲突或和别的已经分配的地址冲突。这里的关键希望大家能够理解,DHCP是一种相对集中式的管理方式。</P>
<P
align=justify>DHCP信息包的格式是基于BOOTP包格式的,这使得BOOTP客户可以访问DHCP服务器。DHCP中使用了BOOTP的转发代理,这样就避免了在每个物理网段都设一个DHCP服务器的情况。</P>
<P align=justify>有许多协议与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)和自动安装机制使新加入的主机自动配置。</P>
<P
align=justify>在其它一些相关的工作中,路径最小传输单元(MTU)寻找算法使得寻找MTU的大小成为了可能。地址解析协议(Address
Resolution Protocol,ARP)也被用于一种传输协议进行资源和定位和选择。</P>
<P
align=justify>DHCP是用于向客户传送配置信息的,客户从DHCP服务器那里获得配置信息后应该可以和Internet上任何一台主机通信。TCP/IP协议栈参数请在本文后面寻找。在初始化一台主机时并不需要配置所有这些参数,客户和服务器可以通过一种商讨机制决定传送哪些参数。DHCP允许(不要求)客户参数配置不直接与IP协议相关,而且它也不将最加入的主机加入域名系统(DNS)中。</P>
<P
align=justify>有一些名词需要解释一下,DHCP客户和DHCP服务器已经在前面说过了,这里就不再说明了。BOOTP转发代理或转发代理是一台Internet主机或路由器,它用于在DHCP客户和DHCP服务器间传送配置信息。绑定是一些配置参数,它至少应该包括IP地址,绑定由DHCP服务器管理。</P>
<P align=justify>DHCP的设计目标如下:</P>
<P
align=justify>1.DHCP应该是一种机制而不是策略,它必须允许本地系统管理员控制配置参数,本地系统管理员应该能够对所希望管理的资源管理进行有效地管理。</P>
<P align=justify>2.客户不需要进行手工配置,客户应该在不参与的情况下发现合适于本地机的配置参数,并利用这些参数加以配置。</P>
<P align=justify>3.不需要对单个客户配置网络。在通常情况下,网络管理员没有必须输入任何预先设计好的用户配置参数。</P>
<P
align=justify>4.DHCP不需要在每个子网上要一个服务器,为了经济的原因,它DHCP服务器必须可以和路由器和BOOTP转发代理一起工作。</P>
<P
align=justify>5.DHCP客户必须可能对多个DHCP服务器提供的服务作出响应。出于网络稳定与安全的考虑,有时需要为网络加入多个DHCP服务器。</P>
<P align=justify>6.DHCP必须静态配置,而且必须以现存的网络协议实现。</P>
<P align=justify>7.DHCP必须能够和BOOTP转发代理互操作。</P>
<P align=justify>8.DHCP必须能够为现有的BOOTP客户提供服务。</P>
<P align=justify> </P>
<P align=justify>下面几个设计目标是对于网络层参数的设计而言的,在网络层参数上,DHCP必须可以做到以下几点:</P>
<P align=justify>9.不允许有几个客户同时使用一个网络地址。</P>
<P align=justify>10.在DHCP客户重新启动后仍然能够保留它原先的配置参数,如果可能,客户应该被指定为相同的配置参数。</P>
<P
align=justify>11.在DHCP服务器重新启动后仍然能够保留客户的配置参数,如果可能,即使DHCP机制重新启动,也应该能够为客户分配原有的配置参数。</P>
<P align=justify>12.能够为新加入的客户自动提供配置参数。</P>
<P align=justify>13.支持对特定客户永久固定分配网络地址。</P>
<P align=justify> </P>
<P
align=justify>在下面我们看一下DHCP的具体问题。从客户的观点来看,DHCP不过是BOOTP的扩展。这样就可以使现有的BOOTP用户在不进行任何改动的情况下使用DHCP。图一和表一描述了DHCP信息包的格式和信息包内每个字段的意义。请注意括号内的数字,它表示此字段的大小。我们老是提到BOOTP,它和DHCP的主要区别有两点,一点是DHCP对客户分配网络地址时不是无限期的,第二点是DHCP在提供网络地址时还提供了其它配置参数。熟悉BOOTP协议的可以对比一下两个协议的不同点。下图定义了DHCP消息格式:</P>
<P align=center><IMG height=565 alt=DHCP消息格式
src="动态主机配置协议.files/DHCPFrame.gif" width=556></P>
<P
align=justify>DHCP定义了一个新的“客户标识”选项,它是用来显式地将客户标识传送给DHCP服务器的。这个改变是针对BOOTP信息包中'chaddr'域即作为BOOTP转发信息的硬件地址又作为用户信息的情况而进行的。这个标记对于DHCP服务器来说没有什么意义,它可以是硬件地址,也可以是什么别的东西,反正只要是对于这个DHCP服务器管理的每个子网段内的客户是唯一的就可以了。客户一旦在一个信息包中使用了这个选项,以后的信息包内的这个选项必须和第一次使用时一致,这样DHCP服务器才可以正确地辨识客户。</P>
<P align=justify> </P>
<TABLE cellSpacing=1 cellPadding=7 width="100%" border=1>
<TBODY>
<TR>
<TD vAlign=top width="20%"><B>
<P align=center>域</B></P></TD>
<TD vAlign=top width="15%"><B>
<P align=center>字节</B></P></TD>
<TD vAlign=top width="65%"><B>
<P align=center>描述</B></P></TD></TR>
<TR>
<TD vAlign=top width="20%">
<P align=justify>op</P></TD>
<TD vAlign=top width="15%">
<P align=justify>1</P></TD>
<TD vAlign=top width="65%">
<P align=justify>消息op代码/消息类型1 = BOOTREQUEST, 2 = BOOTREPLY</P></TD></TR>
<TR>
<TD vAlign=top width="20%">
<P align=justify>htype</P></TD>
<TD vAlign=top width="15%">
<P align=justify>1</P></TD>
<TD vAlign=top width="65%">
<P align=justify>硬件地址类型</P></TD></TR>
<TR>
<TD vAlign=top width="20%">
<P align=justify>hlen</P></TD>
<TD vAlign=top width="15%">
<P align=justify>1</P></TD>
<TD vAlign=top width="65%">
<P align=justify>硬件地址长度</P></TD></TR>
<TR>
<TD vAlign=top width="20%">
<P align=justify>hops</P></TD>
<TD vAlign=top width="15%">
<P align=justify>1</P></TD>
<TD vAlign=top width="65%">
<P align=justify>客户需要将这一项设置为零,当通过转发代理启动时可以供转发代理使用。</P></TD></TR>
<TR>
<TD vAlign=top width="20%">
<P align=justify>xid</P></TD>
<TD vAlign=top width="15%">
<P align=justify>4</P></TD>
<TD vAlign=top width="65%">
<P align=justify>操作ID,这是一个随机数,用于客户和服务器之间同步消息和消息的响应。</P></TD></TR>
<TR>
<TD vAlign=top width="20%">
<P align=justify>secs</P></TD>
<TD vAlign=top width="15%">
<P align=justify>2</P></TD>
<TD vAlign=top width="65%">
<P align=justify>由客户指定的时间,指的是开始地址获取和更新进行后的时间。</P></TD></TR>
<TR>
<TD vAlign=top width="20%">
<P align=justify>flags</P></TD>
<TD vAlign=top width="15%">
<P align=justify>2</P></TD>
<TD vAlign=top width="65%">
<P align=justify>请参阅图2。</P></TD></TR>
<TR>
<TD vAlign=top width="20%">
<P align=justify>ciaddr</P></TD>
<TD vAlign=top width="15%">
<P align=justify>4</P></TD>
<TD vAlign=top width="65%">
<P
align=justify>用户IP地址,此字段仅当用户处于BOUND,RENEW或REBINDING状态和能够响应ARP请求时使用。</P></TD></TR>
<TR>
<TD vAlign=top width="20%">
<P align=justify>yiaddr</P></TD>
<TD vAlign=top width="15%">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -