⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 动态主机配置协议.htm

📁 internet协议集
💻 HTM
📖 第 1 页 / 共 5 页
字号:
            <P align=justify>4</P></TD>
          <TD vAlign=top width="65%">
            <P align=justify>客户IP地址</P></TD></TR>
        <TR>
          <TD vAlign=top width="20%">
            <P align=justify>siaddr</P></TD>
          <TD vAlign=top width="15%">
            <P align=justify>4</P></TD>
          <TD vAlign=top width="65%">
            <P align=justify>用于bootstrap过程中的IP地址</P></TD></TR>
        <TR>
          <TD vAlign=top width="20%">
            <P align=justify>giaddr</P></TD>
          <TD vAlign=top width="15%">
            <P align=justify>4</P></TD>
          <TD vAlign=top width="65%">
            <P align=justify>转发代理IP地址</P></TD></TR>
        <TR>
          <TD vAlign=top width="20%">
            <P align=justify>chaddr</P></TD>
          <TD vAlign=top width="15%">
            <P align=justify>16</P></TD>
          <TD vAlign=top width="65%">
            <P align=justify>客户硬件地址</P></TD></TR>
        <TR>
          <TD vAlign=top width="20%">
            <P align=justify>sname</P></TD>
          <TD vAlign=top width="15%">
            <P align=justify>64</P></TD>
          <TD vAlign=top width="65%">
            <P align=justify>可选的服务器主机名</P></TD></TR>
        <TR>
          <TD vAlign=top width="20%">
            <P align=justify>file</P></TD>
          <TD vAlign=top width="15%">
            <P align=justify>128</P></TD>
          <TD vAlign=top width="65%">
            <P align=justify>启动文件名</P></TD></TR>
        <TR>
          <TD vAlign=top width="20%">
            <P align=justify>options</P></TD>
          <TD vAlign=top width="15%">
            <P align=justify>不定</P></TD>
          <TD vAlign=top width="65%">
            <P align=justify>可选的参数字段</P></TD></TR></TBODY></TABLE>
      <P 
      align=justify>options字段的长度不定,DHCP客户可能会从服务器那里接收到长度大于576字节的包。DHCP客户也可以使用最大DHCP包长度字段要求服务器传送的包长度在一定限度之内。在客户使用DHCP进行配置的时候,DHCP需要使用TCP/IP软件,在配置好IP地址之前,TCP/IP软件应该能够接收并转发发送到客户硬件地址上的IP包;DHCP服务器和BOOTP转发代理在TCP/IP软件未配置好之前不能向未接收硬件单播报文的客户传送DHCP消息。如果客户在TCP/IP软件未能配置好之前实在不能接收IP单播报文,DHCP可以使用“标记”域进行工作。请注意下图中的那个B,它代表广播标记。至于这个标记的具体内容,我们在文章的后面几节内讨论。至于其它各位,它们是保留的,它们的值只能由客户设置为0。服务器和转发代理不会理会这一字段的内容。</P>
      <P align=justify>0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5</P>
      <P align=justify>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</P>
      <P align=justify>|B| 
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      全为0 
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      |</P>
      <P align=justify>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</P>
      <P align=justify>B: 广播标记位</P>
      <P 
      align=justify>上图表示了标记位的格式。前面已经提到过了,DHCP的一个重要功能就是能够向客户提供网络配置参数,这种存储模型实际上就是DHCP服务为每个客户保存了一个关键字,这个关键字中保存了保存了用户特有的标记和客户的配置参数。关键字可能是一个二元组(IP子网号,硬件地址),这种设计考虑到不同子网内的硬件地址可能是一样的,所以要加入一个子网号加以区别。当然关键字也可以是(IP子网号,主机名),这是为了照顾客户机会经常在不同子网间转换,或者经常改变物理地址的情况。在协议规定是,关键字需要是(IP子网号,物理地址),当然了,如果客户在信息包中显式地应用了“客户标记”这一字段的话就不这样使用了。客户可以通过查询DHCP服务器取得配置信息。</P>
      <P 
      align=justify>DHCP的另外一个重要特点就是能够动态地分配网络地址,这种动态分配的机制是很简单的:客户会要求使用某一网络地址一段时间,服务器就对客户说:“好的,在这一段时间内,这个地址我不给别人。”当客户使用完这一地址后再次申请时,服务器总是优先将它使用过的地址再次分配给它。我们把这种分配称为一种“租用”。说到租用,当然了,客户也可以要求增加租用期,当客户不再使用这一地址时,它就把它还给服务器。客户也可以要求永久租用,这个永久对可不是永远,当服务器觉得客户机可能已经不存在时,它可以再次把这一地址分配给别的机器使用。当网络内地址不够用的时候,永久的分配就不可能了,当地址不够用的时候,由客户归还的地址还要被继续使用,这几乎是人人都可以想得到的,服务器可以使用配置信息库内的信息帮助它决定分配哪一个地址,比如说它可以选择最近最少使用的地址进行分配。为了安全起见,服务器应该在分配前使用ICMP协议进行探测,保证这个地址没有机器使用,客户也应该能够使用一些协议(如ARP)探测新接收的地址是不是被人使用。</P>
      <P 
      align=justify>下面我们来说一下服务器客户协议的内容。DHCP使用BOOTP消息格式,这种格式请见表1和图1。在每个由客户发送到服务器消息的'op'字段中包括了一个BOOTREQUEST,而在服务器发送到客户消息内的'op'字段则包括了一个BOOTREPLY。DHCP信息包内'options'字段包含了十进制数99,130,83和99,这几个值。其余的地方是称为“选项”的标记参数。有几个参数定义也没几天,大家应该注意其中的一个重要的选项“DHCP消息类型”选项,这一项必须在每个DHCP信息包中存在,其它的选项有的是必须的,有的不是必须的,有的根本就是可有可无。在下文中,消息格式就以这一选项的内容决定。</P>
      <P 
      align=justify>在下面的表2和图3中描述了DHCP协议包中信息的意义以及DHCP客户与服务器交换信息的流程图。下面我们就过程简述如下:</P>
      <P align=justify>1. 
      客户会首先进行广播,它要地址当然是它先开口,它在本子网段内广播一个DHCPDISCOVER消息,这个消息内可能包括了它希望租用的网络地方和租用时间。BOOTP转发代理可以将这个消息传送到不在这个网段内的DHCP服务器上。</P>
      <P align=justify>2. 
      每个有空闲地址的DHCP服务器都响应这个消息,在响应消息中包括了可用的地址,这个地址在消息的'yiaddr'字段中,其它的配置参数在DHCP选项中。服务器无需要保留已经分配的地址,虽然这样可能想起来更有效率。在分配时,因为未保留已经分配的地址,服务器必须想办法知道这个地址未被别的客户使用,服务器可以使用ICMP协议的回应请求进行。在分配地址时,服务器有时候可能需要使用BOOTP转发代理,这一点要在实现上给予支持。下表是各种消息及其应用:</P>
      <P align=justify> </P>
      <P align=justify>消息&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      功能</P>
      <P align=justify>-------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---</P>
      <P align=justify>DHCPDISCOVER - 客户进行广播以确定本地可用的服务器。</P>
      <P align=justify>DHCPOFFER&nbsp;&nbsp;&nbsp; - 服务器给客户的应答,在其中包括了配置参数。</P>
      <P align=justify>DHCPREQUEST&nbsp; - 
      此消息是客户发送给服务器的,作用有三个:客户从一台服务器上请求配置信息(在这个时候客户也就拒绝了其它服务器发来的地址,客户就用这个地址了);在系统重新启动后,客户利用这个消息确认原来分配的网络地址仍然有效;客户还可以腹这个地址对特定的网络地址租用时间要求延期。</P>
      <P align=justify>DHCPACK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - 
      服务器发向用户的消息,包括了配置参数和网络地址。</P>
      <P align=justify>DHCPNAK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - 
      服务器发向用户的消息,告知客户当前使用的网络地址无效或租期已满。</P>
      <P align=justify>DHCPDECLINE&nbsp; - 客户发向服务器的消息,告知服务器此地址已被使用。</P>
      <P align=justify>DHCPRELEASE&nbsp; - 客户发向服务器的消息,告知服务器此地址不再使用。</P>
      <P align=justify>DHCPINFORM&nbsp;&nbsp; - 
      客户发向服务器的消息,要求服务器发送本地配置信息,客户已经配置好了网络地址,不需要再发送网络地址了。</P>
      <P align=justify><IMG height=747 alt=时间流图 
      src="动态主机配置协议.files/DHCPTime.gif" width=556></P>
      <P align=justify>3. 
      客户将会接收到一个或多个服务器发来的地址和配置参数。客户可以不用那么急于回应哪一个地址,它也可以挑的。当选择好了以后,客户广播DHCPREQUEST消息,在这个消息中的“服务器标记”字段中必须包括选定的服务器的标记,此消息中也可以包括希望获得的网络配置参数,而“请求IP地址”选项则要填写服务器发来信息包中'yiaddr'的内容,也就是服务器给客户提供的IP地址。DHCPREQUEST消息在本网段广播,并通过DHCP/BOOTP转发代理向不同网段转发。如果客户在规定时间内没有收到任何服务器的回应,它会再次发送DHCPDISCOVER。</P>
      <P align=justify> </P>
      <P align=justify>4. 
      许多服务器会接收到DHCPREQUEST广播,那些没有被选择的服务器将DHCPREQUEST视为拒绝包。那个被选择的服务器会记录这个地址已经有人用了,并以包含配置参数的DHCPACK包返回给客户。“客户标记”字段和指定的网络地址用以唯一确定一个客户。服务器发送的DHCPACK包内的参数不应该和原来发送的DHCPOFFER包内的内容有冲突,服务器也不在这时再次检测提供的网络地址,在DHCPACK包内的'yiaddr'字段包括了选择的网络地址。如果被选的主机不能满足DHCPREQUEST包内的要求,它应该以DHCPNAK包回复。服务器可以将DHCPOFFER包内包括的地址设置为不可用,也可以不设置,但是如果服务器没有从客户那儿接收到DHCPREQUEST包,此地址一定要保证是可用的。</P>
      <P align=justify>5. 
      客户接收到包括配置参数的DHCPACK包,它应该对此参数进行最后一次检查,不要和人家的冲突了,当没有发现冲突时客户才算真正配置好了。如果客户发现有人已经使用了这个地址,它需要向服务器发送DHCPDECLINE包,并重新开始配置过程,当然了,客户机必须等待一段时间后才能进行重要的配置过程,如果紧接着就进行会对网络造成巨大的压力。不但在地址冲突的时候要重新开始配置过程,在接收到DHCPNAK包时也要进行重要配置过程。如果超时而未接收到DHCPACK或DHCPNAK包,客户需要再次发送DHCPREQUEST。当然这个发送的过程要有一定的时间,不要人家服务器还没接收到呢,这边就放弃了。如果重新发送后还是没有收到DHCPACK或DHCPNAK包,客户要返回初始状态,并通用用户,初始化过程失败,正在重新开始。</P>
      <P align=justify>6. 客户可以通过发送DHCPRELEASE包取消租用。客户在消息中放置“客户标记”或</FONT><FONT 
      size=3>”</FONT><FONT face=宋体 size=3>chaddr</FONT><FONT 
      size=3>”</FONT><FONT face=宋体 
      size=3>和网络地址。如果客户在租用的时候使用了“客户标记”,在取消租用的时候必须还使用这一标记项。</P>
      <P 
      align=justify>如果客户希望再次使用过去使用过的网络地址,客户就不需要进行上面说的一些步骤,对老客户的服务要方便一些吗。下面的时间图就能够帮助您理解这一过程。</P>
      <P align=justify>1. 
      客户在自己的子网里广播一个DHCPREQUEST消息,在此消息的“请求IP地址”选项中包括了客户现在的网络地址。(这里要注意一点,如果客户目前没有网络地址,'ciaddr'域绝对不能填写)。BOOTP转发代理把这个消息发送到不在同一子网内的DHCP主机上。如果客户当时申请租用地址的时候使用了“客户标记”,这个新发的包内也必须使用相同的“客户标记”,说自己是老客户总要有证据。</P>
      <P align=justify>2. 
      这个时候服务器已经知道客户是个老客户,也知道了它的配置参数,就返回一个DHCPACK消息。此时服务器不负责检查网络地址是否已经被使用,这个工作要客户自己完成。既然说自己是老客户了,那有些事情自己办了。</P>
      <P align=justify><IMG height=547 alt=已有网络地址情况下的请求 
      src="动态主机配置协议.files/DHCPTime1.gif" width=556></P>
      <P 
      align=justify>如果客户的请求无效(可以客户已经移到另外一个子网内了),服务器应该以DHCPNAK返回,如果服务器不能确认发送到的消息是否准确,它干脆什么都不返回。我们可以想象一个,如果一个服务器接收到一个应该属于别的服务器管理的网络地址,它就不要返回DHCPNAK包了,自己不知道的事情就不要说不。</P>
      <P 
      align=justify>如果包内的'giaddr'域为零说明客户和服务器处于同一子网内,服务器不会轻信这样的好事的,它会发向0xffffffff发送广播,它担心这个客户已经离开这个子网,或者它的子网掩码不正确,即使客户接收到了这个消息,也不需要发送ARP。如果服务器知道客户不在这个子网内,它只需要按照'giaddr'内记录的地址发送一个消息给BOOTP转发代理就是了,转发代理会将服务器发送的包发到客户手中,即使客户此时已经处于新的子网中了。</P>
      <P align=justify>3. 
      客户接收了带配置参数的DHCPACK信息,客户最后对参数进行检查,标记了租用时间。指定的租用时间由包内的“客户标记”或'chaddr'字段确定,这时客户也就配置好了。如果客户检测到地址冲突,客户必须以DHCPDECLINE包通知服务器并重新开始请求网络地址。如果客户接收到DHCPNAK包,它不能再使用当前地址了,它必须重新开始配置过程以获得新的网络地址。如果客户既然没有收到DHCPACK或DHCPNAK,它必须重新发送DHCPREQUEST包以进行配置。客户应该在一定时间再次发送DHCPREQUEST请求。在地址没有过期的时候,如果客户既没有收到DHCPACK或DHCPNAK,客户可以继续使用这个地址及相应的参数。</P>
      <P align=justify>4. 
      客户可能通过DHCPRELEASE包取消租用。在这个取消的包中包括了“客户标记”或'chaddr'和网络地址。</P>
      <P align=justify> </P>
      <P 
      align=justify>客户租用某一地址是有时间限制的,当然也可以是无期限限制的。在整个DHCP中,时间的单位是秒,而0xffffffff表示无限。在分布式系统中有一个重要的问题就是时间的同步,服务器和客户的时间可能是不同步的,为了实现时间的同步,要靠在一定时间内发送DHCP包以客户本地时间来表示。这个时间是由一个无符号的32位数表示,它可以表示0到100年,这对于现行的系统来说够用了。在上面的图中,我们假定时间是同步的,如果两者时间上有一点差别,服务器可以给客户发一个把租期稍微延长一点,这样就可以了。</P>
      <P 
      align=justify>如果客户通过别的手段获得了网络地址,它可以使用DHCPINFORM请求获得其它配置参数,服务器接收到DHCPINFORM包,并建立一个DHCPACK消息,在其中包括一些合适客户的配置参数,只是不包括分配网络地址,检查现有的绑定,在信息中不填充'yiaddr'字段或租用时间参数。服务器取得DHCPINFORM包内的'ciaddr'地址,而返回DHCPACK包。</P>
      <P 
      align=justify>并不是所有客户需要初始化所有在附表内的参数。有两种方法可以减少服务器到客户发送参数的数目。客户可以使用默认参数,如果服务器不发送任何参数,客户就使用默认参数。第二种方法是让客户在DHCPDISCOVER和DHCPREQUEST包内给服务器发送一个自己觉得合适的参数表,让服务器在这个表中选择,如果客户在DHCPDISCOVER内使用了这个表,在其后的DHCPREQUEST包内也要包括这个列表。客户应该包括“最大DHCP包大小”选项使服务器预先知道DHCP消息的大小。而返回客户的参数有可能超过给DHCP包分配的空间。在这种情况下,两个额外的选项标记指示'file'和'sname'域可以用做选项使用。客户在发送到服务器的包内指示自己希望得到哪一个参数项。当然客户也可以自己把希望得到网络地址和租用时间包括在包内发送到包内,这样就减少了服务器发向客户的数据量,这是因为服务器是中心结点,如果它的处理速度下降会影响到整个网络的性能。其它一些选项也可以在包内使用,但是服务器可能不理会这些消息,在多个服务器响应的时候,返回的值可能根本就不一样。当客户确认自己获得的网络地址时,“请求的IP地址”项可以仅在DHCPREQUEST包内包括。当客户处于BOUND,RENEWING或REBINDING状态而正确配置了IP地址时,客户可以填充'ciaddr'域。如果服务器接收到一个包括无效请求地址的“请求的IP地址”包时,服务器应该向客户返回DHCPNACK包,如果需要可以向管理员报告。如果客户有多个网络接口,各个接口必须独立地以DHCP方式获得自己的配置参数。</P>
      <P 
      align=justify>下面我们来介绍一下何时客户应该使用DHCP协议,客户在本地网络参数发生改变时应该使用DHCP,例如在系统重新启动时或在与网络失去联系一段时间之后,本地网的参数可以在用户不知情的情况下发生改变。如果客户(机)还记得住自己的IP地址而且无法联系本地的DHCP服务器,它可以继续使用这一地址,直到租期到期为止,如果在地址失效前客户(机)仍然不能联系到DHCP服务器,在租期过期时,它应该立即放弃对此网络地址的使用,并通过用户。</P>
      <P 
      align=justify>在下面,我们要具体介绍一下DHCP协议的客户/服务器协议内容,这里我们假设服务器有一些可供使用的地址,使用这些地址可以满足客户对地址的需求。每个服务器也支持一个分配的地址的数据库及租用情况。</P>
      <P 
      align=justify>而在建立和传送DHCP消息的问题上,DHCP客户和服务器都向消息中的特定字段填充来建立DHCP消息。选项区域包括头四个字节的'magic 
      cookie',在其后是选项,而最后的选项必须是'end'选项。DHCP使用UCP协议传送信息,服务器方接收此消息的端口是端口67,而客户在端口68接收服务器方面的消息。如果服务器有多个网络地址,它可以使用其中任何一个来传送DHCP消息。“服务器标记”字段用于DHCP服务器发送的DHCP消息,也用于客户来确定服务器。如果服务器有多个网络地址,那么多哪个地址来的请求它也不应该拒绝。为了照顾到网络使用的实际情况,服务器必须选择一个地址来专门接收客户发送来的请求。比如一个服务器和客户处于同一个子网,服务器应该使用这个子网内的地址作为“服务器标记”使客户便于发送请求。同样客户也应该使用提供的“服务器标记”向特定的服务器发送请求。如果客户还没有获得网络地址,在客户发向服务器的请求包中的IP地址一栏中应该被设备为0。</P>
      <P 
      align=justify>如果在DHCP消息中的'giaddr'域不为0,服务器就会向'giaddr'中指示的BOOTP转发代理发送。如果'giaddr'为0,而'ciaddr'不为0,服务器将DHCPOFFER和DHCPACK发向'ciaddr'中指示的地址。如果'giaddr'和'ciaddr'为0,而广播域被设置,应该将返回信息广播,也就是向0xffffffff发送。如果广播域也未被设置,那只好向客户的硬件地址发送了。无论发生何种情况,只要'giaddr'为0,服务器都应该广播DHCPNAK信息。</P>
      <P align=justify>如果在DHCP信息中的选项扩展到了'sname'和'file'域,在“选项”域中必须有'option 
      overload'选项。如果'option 
      overload'在'options'中出现,那出现的选项必须以'end'选项结束,不足的地方以特定的填充字符填充。客户在接收到相应的选项,如果有相同的选项,客户将它们变为一个。</P>
      <P 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -