DHCP 协议概述

前言:
要成功的将您的网路用TCP/IP连接起来,您就得为每台电脑设定IPmaskgateway、等等繁琐的事情。要是您想管理好一个比较大的网路�o或是电脑节点经常改变(如手提电脑或拨接)�o这样的工作可以说是非常令人讨厌的�o而且出错的机会也比较多。要是,万一日后要进行IP重新规划�o其工作量也是相当惊人的。面对这些情形�oDHCP可以说您的菩萨了�s它不但救苦救难�o而且神通广大
 
什么是 DHCP
DHCP DynamicHostConfigurationProtocol 之缩写�o它的前身是 BOOTP BOOTP 原本是用于无磁碟主机连接的网路上面的�s网路主机使用 BOOTROM 而不是磁碟起动并连接上网路�o BOOTP 则可以自动地为那些主机设定 TCP/IP 环境。但 BOOTP 有一个缺点:您在设定前须事先获得客户端的硬体位址,而且,与 IP 的对应是静态的。换而言之, BOOTP 非常缺乏 " 动态性 " ,若在有限的 IP 资源环境中, BOOTP 的一对一对应会造成非常可观的浪费。
 
DHCP 可以说是 BOOTP 的增强版本�o它分为两个部份�s一个是伺服器端�o而另一个是客户端。所有的 IP 网路设定资料都由 DHCP 伺服器集中管理�o并负责处理客户端的 DHCP 要求�r而客户端则会使用从伺服器分配下来的 IP 环境资料。比较起 BOOTP DHCP 透过 " 租约 " 的概念,有效且动态的分配客户端的 TCP/IP 设定,而且,作为兼容考量, DHCP 也完全照顾了 BOOTPClient 的需求。
 
DHCP 的分配形式
首先�o必须至少有一台 DHCP 工作在网路上面�o它会监听网路的 DHCP 请求�o并与客户端搓商 TCP/IP 的设定环境。它提供两种 IP 定位方式�s
AutomaticAllocation
自动分配�o其情形是�s一旦 DHCP 客户端第一次成功的从 DHCP 伺服器端租用到 IP 位址之后�o就永远使用这个位址。
DynamicAllocation
动态分配�o当 DHCP 第一次从 HDCP 伺服器端租用到 IP 位址之后�o并非永久的使用该位址�o只要租约到期�o客户端就得释放 (release) 这个 IP 位址�o以给其它工作站使用。当然�o客户端可以比其它主机更优先的延续 (renew) 租约�o或是租用其它的 IP 位址。
动态分配显然比自动分配更加灵活�o尤其是当您的实际 IP 位址不足的时候�o例如�s您是一家 ISP �o只能提供 200 IP 位址用来给拨接客户�o但并不意味着您的客户最多只能有 200 个。因为要知道�o您的客户们不可能全部同一时间上网的�o除了他们各自的行为习惯的不同�o也有可能是电话线路的限制。这样�o您就可以将这 200 个位址�o轮流的租用给拨接上来的客户使用了。这也是为什么当您查看 IP 位址的时候�o会因每次拨接而不同的原因了 ( 除非您申请的是一个固定 IP �o通常的 ISP 都可以满足这样的要求�o这或许要另外收费 ) 。当然�o ISP 不一定使用 DHCP 来分配位址�o但这个概念和使用 IPPool 的原理是一样的。
 
DHCP 除了能动态的设定 IP 位址之外�o还可以将一些 IP 保留下来给一些特殊用途的机器使用�o它可以按照硬体位址来固定的分配 IP 位址�o这样可以给您更大的设计空间。同时�o DHCP 还可以帮客户端指定 router �p netmask �p DNSServer �p WINSServer �p等等项目�o您在客户端上面�o除了将 DHCP 选项打勾之外�o几乎无需做任何的 IP 环境设定。
 
DHCP 的工作原理
视乎客户端是否第一次登录网路�o DHCP 的工作形式会有所不同。
第一次登录的时候�s
1. 寻找 Server 。当 DHCP 客户端第一次登录网路的时候�o也就是客户发现本机上没有任何 IP 资料设定�o它会向网路发出一个 DHCPDISCOVER 封包。因为客户端还不知道自己属于哪一个网路�o所以封包的来源位址会为 0.0.0 .0 �o而目的位址则为 255.255.255.255 �o然后再附上 Dhcpdiscover 的信息�o向网路进行广播。在 Windows 的预设情形下, Dhcpdiscover 的等待时间预设为 1 秒�o也就是当客户端将第一个 Dhcpdiscover 封包送出去之后�o在 1 秒之内没有得到回应的话�o就会进行第二次 Dhcpdiscover 广播。若一直得不到回应的情况下�o客户端一共会有四次 Dhcpdiscover 广播 ( 包括第一次在内 ) �o除了第一次会等待 1 秒之外�o其余三次的等待时间分别是 9 �p 13 �p 16 秒。如果都没有得到 DHCP 伺服器的回应�o客户端则会显示错误信息�o宣告 Dhcpdiscover 的失败。之后�o基于使用者的选择�o系统会继续在 5 分钟之后再重复一次 Dhcpdiscover 的过程。
2. 提供 IP 租用位址 。当 DHCP 伺服器监听到客户端发出的 Dhcpdiscover 广播后�o它会从那些还没有租出的位址范围内�o选择最前面的的空置 IP ,连同其它 TCP/IP 设定,回应给客户端一个 DHCPOFFER 封包。由于客户端在开始的时候还没有 IP 位址�o所以在其 Dhcpdiscover 封包内会带有其 MAC 位址信息�o并且有一个 XID 编号来辨别该封包�o DHCP 伺服器回应的 Dhcpoffer 封包则会根据这些资料传递给要求租约的客户。根据伺服器端的设定�o Dhcpoffer 封包会包含一个租约期限的信息。
3. 接受 IP 租约 。如果客户端收到网路上多台 DHCP 伺服器的回应�o只会挑选其中一个 Dhcpoffer 而已 ( 通常是最先抵达的那个 ) �o并且会向网路发送一个 Dhcprequest 广播封包�o告诉所有 DHCP 伺服器它将指定接受哪一台伺服器提供的 IP 位址。同时�o客户端还会向网路发送一个 ARP 封包�o查询网路上面有没有其它机器使用该 IP 位址�r如果发现该 IP 已经被占用�o客户端则会送出一个 DHCPDECLINE 封包给 DHCP 伺服器�o拒绝接受其 Dhcpoffer �o并重新发送 Dhcpdiscover 信息。事实上�o并不是所有 DHCP 客户端都会无条件接受 DHCP 伺服器的 offer �o尤其这些主机安装有其它 TCP/IP 相关的客户软体。客户端也可以用 Dhcprequest 向伺服器提出 DHCP 选择�o而这些选择会以不同的号码填写在 DHCPOptionField 里面�s
 
换一句话说�o在 DHCP 伺服器上面的设定�o未必是客户端全都接受�o客户端可以保留自己的一些 TCP/IP 设定。而主动权永远在客户端这边。
4.
租约确认。 DHCP 伺服器接收到客户端的 Dhcprequest 之后�o会向客户端发出一个 DHCPACK 回应�o以确认 IP 租约的正式生效�o也就结束了一个完整的 DHCP 工作过程。
如上的工作流程如下图:
 
DHCP 发放流程
第一次登录之后�s
一旦 DHCP 客户端成功地从伺服器哪里取得 DHCP 租约之后�o除非其租约已经失效并且 IP 位址也重新设定回 0.0.0 .0 �o否则就无需再发送 Dhcpdiscover 信息了�o而会直接使用已经租用到的 IP 位址向之前之 DHCP 伺服器发出 Dhcprequest 信息�o DHCP 伺服器会尽量让客户端使用原来的 IP 位址�o如果没问题的话�o直接回应 Dhcpack 来确认则可。如果该位址已经失效或已经被其它机器使用了�o伺服器则会回应一个 DHCPNACK 封包给客户端�o要求其从新执行 Dhcpdiscover 。至于 IP 的租约期限却是非常考究的�o并非如我们租房子那样简单�o以 NT 为例子�s DHCP 工作站除了在开机的时候发出 dhcprequest 请求之外�o在租约期限一半的时候也会发出 dhcprequest �o如果此时得不到 DHCP 伺服器的确认的话�o工作站还可以继续使用该 IP �r然后在剩下的租约期限的再一半的时候 ( 即租约的 75%) �o还得不到确认的话�o那么工作站就不能拥有这个 IP 了。至于为什么不是到租约期限完全结束才放弃 IP 呢�t�o对不起�o小弟也是不学无术之人�o没有去深究了�o只知道要回答 MCSE 题目的时候�o您一定要记得 NT 是这么工作的就是了。要是您想退租,可以随时送出 DHCPLEREASE 命令解约�o就算您的租约在前一秒钟才获得的。
跨网路的 DHCP 运作
从前面描述的过程中,我们不难发现: DHCDISCOVER 是以广播方式进行的,其情形只能在同一网路之内进行�o因为 router 是不会将广播传送出去的 。但如果 DHCP 伺服器安设在其它的网路上面呢�t由于 DHCP 客户端还没有 IP 环境设定�o所以也不知道 Router 位址�o而且有些 Router 也不会将 DHCP 广播封包传递出去�o因此这情形下 DHCPDISCOVER 是永远没办法抵达 DHCP 伺服器那端的,当然也不会发生 OFFER 及其他动作了。要解决这个问题,我们可以用 DHCPAgent( DHCPProxy) 主机来接管客户的 DHCP 请求�o然后将此请求传递给真正的 DHCP 伺服器�o然后将伺服器的回复传给客户。这里�o Proxy 主机必须自己具有路由能力,且能将双方的封包互传对方。若不使用 Proxy ,您也可以在每一个网路之中安装 DHCP 伺服器�o但这样的话�o一来设备成本会增加�o而且�o 管理 上面也比较分散。当然���o如果在一个十分大型的网路中�o这样的均衡式架构还是可取的。端视您的实际情况而定了。

你可能感兴趣的:(职场,DHCP,休闲)