标题：DHCP
结构介绍
  相关图片DHCP 是 Dynamic Host Configuration Protocol(动态主机配置协议）缩写，它的前身是 BOOTP。BOOTP 原本是用于无磁盘主机连接的网络上面的：网络主机使用 BOOT ROM 而不是磁盘启动并连接上网络，BOOTP则可以自动地为那些主机设定 TCP/IP 环境。但 BOOTP 有一个缺点：您在设定前须事先获得客户端的硬件地址，而且与 IP 的对应是静态的。换而言之，BOOTP 非常缺乏 "动态性" ，若在有限的 IP 资源环境中，BOOTP 的一一对应会造成非常严重的资源浪费。DHCP 可以说是 BOOTP 的增强版本，它分为两个部份：一个是服务器端，而另一个是客户端。所有的 IP 网络设定数据都由 DHCP 服务器集中管理，并负责处理客户端的 DHCP 要求；而客户端则会使用从服务器分配下来的IP环境数据。比较起 BOOTP ，DHCP 透过 "租约" 的概念，有效且动态的分配客户端的 TCP/IP 设定，而且，作为兼容考虑，DHCP 也完全照顾了 BOOTP Client 的需求。DHCP 的分配形式 首先，必须至少有一台 DHCP服务器 工作在网络上面，它会监听网络的 DHCP 请求，并与客户端磋商 TCP/IP的设定环境。它提供三种 IP 定位方式：
地址分配
Manual Allocation
人工分配，获得的IP也叫静态地址，网络管理员为某些少数特定的在网计算机或者网络设备绑定固定IP地址，且地址不会过期。
同一个路由器一般可以通过设置来划分静态地址和动态地址的IP段，比如一般家用TP-LINK路由器，常见的是从192.168.1.100~192.168.1.254，这样如果你的电脑是自动获得IP的话，一般就是192.168.1.100，下一台电脑就会由DHCP自动分到为192.168.1.101。而192.168.1.2~192.168.1.99为手动配置IP段。
Automatic Allocation
自动分配，其情形是：一旦 DHCP 客户端第一次成功的从 DHCP 服务器端租用到 IP 地址之后，就永远使用这个地址。
Dynamic Allocation
动态分配，当 DHCP客户端 第一次从 DHCP 服务器端租用到 IP 地址之后，并非永久的使用该地址，只要租约到期，客户端就得释放(release)这个 IP 地址，以给其它工作站使用。当然，客户端可以比其它主机更优先的更新（renew)租约，或是租用其它的 IP 地址。动态分配显然比手动  相关图片分配更加灵活，尤其是当您的实际 IP 地址不足的时候，例如：您是一家ISP，只能提供 200 个IP地址用来给拨接客户，但并不意味着您的客户最多只能有 200 个。因为要知道，您的客户们不可能全部同一时间上网的，除了他们各自的行为习惯的不同，也有可能是电话线路的限制。这样，您就可以将这 200 个地址，轮流的租用给拨接上来的客户使用了。这也是为什么当您查看 IP 地址的时候，会因每次拨接而不同的原因了（除非您申请的是一个固定 IP ，通常的 ISP 都可以满足这样的要求，这或许要另外收费）。当然，ISP 不一定使用 DHCP 来分配地址，但这个概念和使用 IP Pool 的原理是一样的。DHCP 除了能动态的设定 IP 地址之外，还可以将一些 IP 保留下来给一些特殊用途的机器使用，它可以按照硬件地址来固定的分配 IP 地址，这样可以给您更大的设计空间。同时，DHCP 还可以帮客户端指定 router、netmask、DNS Server、WINS Server、等等项目，您在客户端上面，除了将 DHCP 选项打勾之外，几乎无需做任何的 IP 环境设定。
运作状态
运作模式：
DHCP 是怎么运作的？
假设多部计算机在同一个网域当中，也就是说，DHCP Server 与他的 Clients 都在同一个网段之内，可以透过软件广播的方式来达到相互沟通的状态。那么Client 藉由 DHCP Server 得到 IP 的程序为： 
①若 Client 端计算机设定使用 DHCP 协议以取得网络参数时，则Client 端计算机在开机的时候，或者是重新启动网络卡的时候，会自动的发出 DHCPClient 的需求给网域内的每部计算机：这个时候，由于发出的讯息希望每部计算机都可以接受，所以该讯息除了网络卡的硬件地址(MAC)无法改变外，需要将该讯息的来源软件地址设定为0.0.0.0 ，而目的地址则为 255.255.255.255 ( Linux 会自动设定，无须考虑这个问题！)。网域内的其它没有提供DHCP 服务的计算机，收到这个封包之后会自动的将该封包丢弃而不回应；
②DHCP 主机响应讯息：如果是 DHCP 主机收到这个Client 的 DHCP 需求时，那么 DHCP 主机首先会针对该次需求的讯息所携带的 MAC与 DHCP 主机本身的设定值去比对，如果 DHCP 主机的设定有针对该 MAC 做静态IP (每次都给予一个固定的 IP )的提供时，则提供 Client 端相关的固定 IP 与相关的网络参数；而如果该讯息的MAC 并不在 DHCP 主机的设定之内时，则 DHCP 主机会选取目前网域内没有使用的IP (这个 IP 与设定值有关) 来发放给 client 端使用！此外，需要特别留意的是，在DHCP 主机发放给 Client 端的讯息当中，会附带一个『租约期限』的讯息，以告诉Client 端，IP 可以使用的期限有多长！
③Client 端接受来自 DHCP 主机的网络参数，并设定 Client自己的网络环境：当 Client 端接受响应的讯息之后，首先会以 ARP 封包在网域内发出讯息，以确定来自DHCP 主机发放的 IP 并没有被占用！如果该 IP 已经被占用了，那么 Client 对于这次的DHCP 信息将不接受，而将再次向网域内发出 DHCP 的需求广播封包；若该 IP 没有被占用，则client 可以接受 DHCP 主机所给的网络的参数，那么这些参数将会被使用于 client端的网络设定当中，同时， Client 端也会对 DHCP 主机发出确认封包，告诉 Server这次的需求已经确认！而 Server 也会将该信息记录下来；
④Client 端结束该 IP 的使用权：当 Client 开始使用这个DHCP 发放的 IP 之后，有几个情况下他可能会失去这个 IP 的使用权：
Client 端离线：不论是关闭网络接口( ifdown)、重新开机 ( reboot )、关机 ( shutdown ) 等行为，皆算是离线状态，这个时候Server 端就会将该 IP 回收，并放到 Server 自己的备用区中，等待未来的使用；
Client 端租约到期：前面提到 DHCP server 端发放的IP 有使用的期限， Client 使用这个 IP 到达期限规定的时间，就需要将 IP 缴回去！这个时候就会造成断线，而Client 也可以再向 DHCP 主机要求再次分配 IP！　
以上就是 DHCP 这个协议在 Server 端与 Client 端的运作状态，由上面这个运作状态来看，可以明白，只要Server 端设定没有问题，加上 Server 与 Client 在硬件联机上面确定是 OK 的，那么Client 就可以直接藉由 Server 来取得上网的网络参数，当然啦，只要我们这些管理员能够好好的、正确的管理好我们的DHCP 。
IP 取得的方法：
在上面的步骤中，注意第二步。就是 DHCP 会去比较 MAC 这个硬件地址，并判断该MAC 是否需要给予一个固定的 IP 呢！呵呵！所以啦，我们在 Client 端由 DHCP主机取得的 IP 主要有两种方式：　
①静态 ( Static ) IP ：只要那个 client 端计算机的网络卡不换掉，那么MAC 肯定就不会改变，由于 DHCP 可以根据 MAC 来给予固定的 IP ，所以该计算机每次都能以一个固定的IP 连上 Internet ！呵呵！这种情况比较适合当这部计算机需要用来做为提供区域内的一些网络服务的主机之用。那么如何在Linux 上面知道您的 MAC 呢？很简单啦！有很多的方式，最简单的方式就是使用ifconfig 及 arp 来进行（以下针对LINUX）：
[root@testroot]# ifconfig eth0
ifconfig
eth0 Link encap:Ethernet HWaddr 00:50:FC:22:9C:57
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:333678 errors:0 dropped:0 overruns:0 frame:0
TX packets:377219 errors:0 dropped:0 overruns:0 carrier:0
collisions:195 txqueuelen:100
RX bytes:42243563 (40.2 Mb) TX bytes:278373316 (265.4 Mb)
Interrupt:10 Base address:0x6100[root@test root]#arp
Address HWtype HWaddress Flags Mask Iface
test.X ether 00:50:FC:22:9C:57 C eth0
192.168.1.100 ether 00:02:44:19:A6:AD C eth0
②动态 ( dynamic ) IP：Client 端每次连上 DHCP所取得的 IP 都不是固定的！都直接经由 DHCP 所随机由尚未被使用的 IP 中提供！　
关于租约的行为：
观察上面 DHCP 运作模式的第二个步骤，会发现最后面还有一个租约期限！最大的优点就是可以避免该IP 被某些使用者一直占用着，但该使用者却是 Idle (闲置/空闲) 的状态！　
关于 DHCP 主机个数：
当网域里面有两部以上的 DHCP 主机时，到底哪一部主机会设定我的这部Client 端计算机？很多时候是『先抢先赢』，同样，DHCP 的回应也是如此！当 Server1 先响应时，使用的就是 Server1 所提供的网络参数内容，如果是Server2 先响应，就是使用 Server2 的参数来设定 PC ！不过，前提之下当然是这些计算机的『物理联机』都是在一起的。
需求说明
Ⅰ什么时候最好使用 DHCP ？
在某些情况之下，倒是强烈的建议架设 DHCP 主机的！例如：
公司内部很多 Notebook 计算机使用的场合！因为 Notebook 在使用上，当设定为DHCP client 的时候，那么只要他连接上的网域里面有一部可以动作的 DHCP ，那部notebook 就可以连接上 Internet 了！
网域内计算机数量相当的多时：另外一个情况就是网域内计算机数量相当庞大时，大到您没有办法一个一个的进行说明来设定他们自己的网络参数，这个时候为了省麻烦，还是架设DHCP 来的方便。
Ⅱ什么情况下不建议使用 DHCP 主机？
虽然 DHCP 有很多好处，但是有一个步骤怪怪的。回头看一下那个步骤一，Client 在开机的时候会主动的发送讯息给网域上的所有机器，这个时候，如果网域上就是没有DHCP 主机呢？很抱歉，那么这部 Client 端计算机，『仍然会持续的发送讯息！』真正的时间与次数我不晓得会有多久，不过，肯定会超过30 秒以上，甚至可以达到一分钟以上！
在网域内的计算机，有很多机器其实是做为主机的用途，很少Client 需求，那么似乎就没有必要架设 DHCP。
安装设置
套件安装：在 Linux上面 DHCP 简单，无需 Tarball ！直接拿出原版光盘， mount，并且找到 dhcp 字样的套件，使用RPM 安装好就好了！以 mandrake 9.0 及 Red Hat 9 为例的话，您需要的 DHCP套件为：
# 在 Mandrake9.0 当中：
[root@testroot]# rpm -qa | grep dhcp
dhcp-server-3.0-1rc9.2mdk
dhcp-common-3.0-1rc9.2mdk
dhcp-client-3.0-1rc9.2mdk
# 在 Red Hat9 当中：
[root@testroot]#rpm -qa | grep dhcp
dhcp-3.0pl1-23
dhcp-devel-3.0pl1-23　
如果是Mandrake 系列的话，DHCP 套件档案总数会有三个！如果没有安装的话，请拿出原板光盘(不论是那个Linux distribution ，应该都是这三个套件名称！只是后面的版本可能不一样。但是，需要注意，在Red Hat 上面，这三个套件被整合成为一个，亦即是 dhcp-xxxx.rpm 的档案。)，先挂载上去，然后就以rpm 安装！另外，如果在系统当中没有找到 dhcp 套件的话，还可以使用 apt-get 或者是 urpmi 都是很好的安装方式设置Server：DHCP套件结构　
在 DHCP 的套件结构当中，也是仅有一个设置文件。这个文件不见得会存在，需要手动来建立：
/etc/dhcpd.conf：主要配置文件。这个档案不见得会存在，请手动来建立喔！另外，其实每个dhcp 套件在释出的时候，都会附上一个范例档案，您可以使用 rpm -ql grep dhcp来查询到 dhcpd.conf.sample 这个档案呐！然后将该档案复制成为 /etc/dhcpd.conf后，在手动去修改 /etc/dhcpd.conf 即可，这样设定比较容易咯！(注：这个设定档在不同的Linux distribution 当中会有不一样的放置目录！例如在 openlinux 底下，这个设定档预设需要放置在/etc/dhcpd/dhcpd.conf )　
/usr/sbin/dhcpd：这个就是DHCP 的 daemon 执行档
/var/lib/dhcp/dhcpd.leases：
整个 DHCP 的设定档与检查的档案就是这几个而已
工作原理
根据客户端是否第一次登录网络，DHCP 的工作形式会有所不同。
第一次登录的时候：寻找 Server当 DHCP 客户端第一次登录网络的时候，也就是客户发现本机上没有任何 IP 数据设定，它会向网络发出一个 DHCP DISCOVER 封包。因为客户端还不知道自己属于哪一个网络，所以封包的来源地址会为 0.0.0.0 ，而目的地址则为 255.255.255.255 ，然后再附上 DHCP discover 的信息，向网络进行广播。在 Windows 的预设情形下，DHCP discover 的等待时间预设为 1 秒，也就是当客户端将第一个 DHCP discover 封包送出去之后，在 1 秒之内没有得到响应的话，就会进行第二次 DHCP discover 广播。若一直得不到响应的情况下，客户端一共会有四次 DHCP discover 广播（包括第一次在内），除了第一次会等待 1 秒之外，其余三次的等待时间分别是 9、13、16 秒。如果都没有得到 D  相关图片HCP 服务器的响应，客户端则会显示错误信息，宣告 DHCP discover 的失败。之后，基于使用者的选择，系统会继续在 5 分钟之后再重复一次 DHCP discover 的过程。
提供 IP 租用地址
当 DHCP 服务器监听到客户端发出的 DHCP discover 广播后，它会从那些还没有租出的地址范围内，选择最前面的空置 IP ，连同其它 TCP/IP 设定，响应给客户端一个 DHCP OFFER 封包。由于客户端在开始的时候还没有 IP 地址，所以在其 DHCP discover 封包内会带有其 MAC 地址信息，并且有一个 XID 编号来辨别该封包，DHCP 服务器响应的 DHCP offer 封包则会根据这些资料传递给要求租约的客户。根据服务器端的设定，DHCP offer 封包会包含一个租约期限的信息。
接受 IP 租约
如果客户端收到网络上多台 DHCP 服务器的响应，只会挑选其中一个 DHCP offer 而已（通常是最先抵达的那个），并且会向网络发送一个DHCP request广播封包，告诉所有 DHCP 服务器它将指定接受哪一台服务器提供的 IP 地址。同时，客户端还会向网络发送一个 ARP 封包，查询网络上面有没有其它机器使用该 IP 地址；如果发现该 IP 已经被占用，客户端则会送出一个 DHCPDECLINE 封包给 DHCP 服务器，拒绝接受其 DHCP offer ，并重新发送 DHCP discover 信息。事实上，并不是所有 DHCP 客户端都会无条件接受 DHCP 服务器的 offer ，尤其这些主机安装有其它 TCP/IP 相关的客户软件。客户端也可以用 DHCP request 向服务器提出 DHCP 选择，而这些选择会以不同的号码填写在 DHCP Option Field 里面。
换一句话说，在 DHCP 服务器上面的设定，未必是客户端全都接受。客户端可以保留自己的一些 TCP/IP 设定，并且主动权永远在客户端这边。租约确认当 DHCP 服务器接收到客户端的 DHCP request 之后，会向客户端发出一个 
  相关图片DHCPACK 响应，以确认 IP 租约的正式生效，也就结束了一个完整的 DHCP 工作过程。
DHCP 发放流程第一次登录之后：一旦 DHCP 客户端成功地从服务器那里取得 DHCP 租约之后，除非其租约已经失效并且 IP 地址也重新设定回 0.0.0.0 ，否则就无需再发送 DHCP discover 信息了，而会直接使用已经租用到的 IP 地址向之前的 DHCP服务器发出 DHCP request 信息，DHCP 服务器会尽量让客户端使用原来的 IP 地址，如果没问题的话，直接响应 DHCPack 来确认则可。如果该地址已经失效或已经被其它机器使用了，服务器则会响应一个 DHCPNACK 封包给客户端，要求其重新执行 DHCP discover。至于 IP 的租约期限却是非常考究的，并非如我们租房子那样简单， 以 NT 为例子：DHCP 客户端除了在开机的时候发出 DHCP request 请求之外，在租约期限一半的时候也会发出 DHCP request ，如果此时得不到 DHCP 服务器的确认的话，客户端还可以继续使用该 IP ；当租约期过了87.5%时，如果客户端仍然无法与当初的DHCP服务器联系上，它将与其它DHCP服务器通信。如果网络上再没有任何DHCP服务器在运行时，该客户端必须停止使用该IP地址，并从发送一个Dhcpdiscover数据包开始，再一次重复整个过程。要是您想退租，可以随时送出 DHCPRELEASE 命令解约，就算您的租约在前一秒钟才获得的。
跨网络的 DHCP 运作 从前面描述的过程中，我们不难发现：DHCP DISCOVER 是以广播方式进行的，其情形只能在同一网络之内进行，因为 router 是不会将广播传送出去的。但如果 DHCP 服务器安设在其它的网络上面呢？由于 DHCP 客户端还没有 IP 环境设定，所以也不知道 Router 地址，而且有些 Router 也不会将 DHCP 广播封包传递出去，因此这情形下 DHCP DISCOVER 是永远没办法抵达 DHCP 服务器那端的，当然也不会发生 OFFER 及其它动作了。要解决这个问题，我们可以用 DHCP Agent (或 DHCP Proxy )主机来接管客户的 DHCP 请求，然后将此请求传递给真正的 DHCP 服务器，然后将服务器的回复传给客户。这里，Proxy 主机必须自己具有路由能力，且能将双方的封包互传对方。若不使用 Proxy，您也可以在每一个网络之中安装 DHCP 服务器，但这样的话，一来设备成本会增加，而且，管理上面也比较分散。当然喽，如果在一个十分大型的网络中，这样的均衡式架构还是可取的。视您的实际情况而定了。
责任
1.保证任何IP地址在同一时刻只能由一台DHCP客户机所使用。
2.DHCP应当可以给用户分配永久固定的IP地址。
3.DHCP应当可以同用其他方法获得IP地址的主机共存（如手工配置IP地址的主机）
4.DHCP服务器应当向现有的BOOTP客户端提供服务。
封包格式
以下为各字段的简要说明：
OP 
若是 client 送给 server 的封包，设为 1 ，反向为 2。HTYPE  DHCP报文格式硬件类别，Ethernet 为 1。
HLEN 
硬件地址长度， Ethernet 为 6。
HOPS 
若封包需经过 router 传送，每站加 1 ，若在同一网内，为 0。
TRANSACTION ID 
DHCP REQUEST 时产生的数值，以作 DHCPREPLY 时的依据。
SECONDS 
Client 端启动时间（秒）。
FLAGS 
从 0 到 15 共 16 bits ，最左一 bit 为 1 时表示 server 将以广播方式传送封包给 client ，其余尚未使用。
ciaddr 
要是 client 端想继续使用之前取得之 IP 地址，则列于这里。
yiaddr 
从 server 送回 client 之 DHCP OFFER 与 DHCPACK 封包中，此栏填写分配给 client 的 IP 地址。
siaddr 
若 client 需要透过网络开机，从 server 送出之 DHCP OFFER、DHCPACK、DHCPNACK 封包中，此栏填写开机程序代码所在 server 之地址。
giaddr 
若需跨网域进行 DHCP 发放，此栏为 relay agent 的地址，否则为 0。
chaddr 
Client 之硬件地址。
sname 
Server 之名称字符串，以 0x00 结尾。
file 
若 client 需要透过网络开机，此栏将指出开机程序名称，稍后以 TFTP 传送。
options 
允许厂商定议选项（Vendor-Specific Area)，以提供更多的设定信息（如
  相关图片：Netmask、Gateway、DNS、等等）。其长度可变，同时可携带多个选项，每一选项之第一个 byte 为信息代码，其后一个 byte 为该项数据长度，最后为项目内容。CODE LEN VALUE 此字段完全兼容 BOOTP ，同时扩充了更多选项。其中，DHCP 封包可利用编码为 0x53 之选项来设定封包类别：
项值 类别
1 DHCP DISCOVER 
2 DHCP OFFER 
3 DHCP REQUEST 
4 DHCPDECLINE
5 DHCPACK 
6 DHCPNACK 
7 DHCPRELEASE
DHCP 的选项非常多，有空请查阅 RFC 或相关文献，并好好理解，这里不再叙述了。
协议
RFC-951、RFC-1084、RFC-1123、RFC-1533、RFC-1534、RFC-1497、RFC-1541 RFC-2131
DHCP是可自动将IP位址指派给登入TCP/IP网络的用户端的一种软件，（此种IP位址称为「动态IP位址」）。这种软件通常是在路由器及其他网络设备上执行的。依照预先设定，您的GateLock路由器设定为使用DHCP，因此就无须手动指派永久IP位址给网络上的每个设备。建议不要改变这个设置，这样您的个人电脑就可以被分辨为DHCP服务器。
1 dhcpdiscover: 此为client开始DHCP过程中的第一个请求报文
2 dhcpoffer : 此为server 对dhcpdiscover 报文的响应
3 dhcprequst : 此为client 对dhcpoffer 报文的响应
4 dhcpdeclient: 当client发现server 分配给它的IP地址无法使用，如 IP地址发生冲突时，将发出此报文让server禁止使用这次分配的IP地址。
5 dhcpack : server对 dhcprequst 报文的响应，client收到此报文后才真正获得了IP地址和相关配置信息。
6 dhcpnack : 此报文是server对client的dhcprequst报文的拒绝响应，client 收到此报文后，一般会重新开始DHCP过程。
7 dhcprelease :此报文是 client主动释放IP地址，当server 收到此报文后就可以收回IP地址分配给其他的client.
DHCP是BOOTP的扩展，是基于C/S模式的，它提供了一种动态指定  相关图片IP地址和配置参数的机制。这主要用于大型网络环境和配置比较困难的地方。DHCP服务器自动为客户机指定IP地址，指定的配置参数有些和IP协议并不相关，但这必没有关系，它的配置参数使得网络上的计算机通信变得方便而容易实现了。DHCP使IP地址的可以租用，对于许多拥有许多台计算机的大型网络来说，每台计算机拥有一个IP地址有时候可能是不必要的。租期从1分钟到100年不定，当租期到了的时候，服务器可以把这个IP地址分配给别的机器使用。客户也可以请求使用自己喜欢的网络地址及相应的配置参数。
DHCP是对BOOTP的扩展，它的包格式和BOOTP也一样，这样它就可以使用BOOTP的中转发代理来发送DHCP包了，这使得BOOTP和DHCP之间可以实现互操作。对于BOOTP转发代理来说，发的是DHCP包还是BOOTP包，它根本分不清楚。它们使用的服务器端口号是67和68，但是有些地方还有些不同：
DHCP定义了一种可以使IP地址使用一段有限时间的机制，在客户期限到了的时候可以重新分配这个IP地址。
DHCP为用户提供所有IP配置参数。
DHCP包长度比BOOTP包长度稍长。既然包比BOOTP的长，那也不是白带的，这多出的长度里包括了网络配置参数。
DHCP的包都比BOOTP的长，那协议也复杂了。DHCP有七种消息类型，而BOOTP只有两种。
下图中我们可以清楚地看到客户机请求获得网络地址和配置参数的最初几个步骤：
第一步的时候客户发出包的名称叫DHCPDISCOVER，而服务器返回包的名称叫DHCPOFFER。
1.BOOTP转发代理接收到请求包，并负责向DHCP其它网络内的DHCP服务器转发。
2.DHCP服务器以DHCPOFFER响应客户的要求，这个包内包括可用的IP地址和参数。
3.BOOTP转发代理接收包，并对它进行检查。如果它觉得没有问题，就向客户转发。
4.如果客户在发出DHCP DISCOVER 包后一段时间内没有接收到回应，它有机会重新发送请求10次，否则就通知用户。客户机可以同时接收到许多个服务器的应答，它可以自己决定用哪一个。下图是客户决定了以后，向服务器发送应答时的情况。
5.当客户选定了某个目标服务器后，它会广播DHCPREQUEST包，用以通知选定的服务器和未选定的服务器。
6.转发工作仍然由BOOTP转发担任。
7.收到DHCPREQUEST包服务器会检查收到的包，如果包内的地址和提供的地址一致，证明现在客户机选择的是这台服务器提供的地址，如果不是，自己提供的地址被拒绝了。
8.被选定的服务器在接收到DHCPREQUEST包以后，因为某些原因可能不能向客户提供这个网络地址或参数，它可以向客户发送DHCPNAK包，如果可以提供则可以发送DHCPACK包。
客户在收到包后，检查内部的网络地址和租用时间，如果客户觉得这个包有问题，它可以发送DHCPDECLIENT包拒绝这个地址，然后重新发送DHCPDISCOVER包。如果觉得没有问题，就可以接受这个配置参数。同样当客户接收到DHCPNAK包时，它也可以发送DHCPDISCOVER包。客户可以在租期到期之前释放网络地址，这通过发送DHCPRELEASE包来实现。
用户下一次可以再次获得相同的IP地址。在这一过程中，许多步骤就可以不用麻烦了，老客户当然要方便一点了。
1.客户在发送的DHCPREQUEST包内包括自己以前使用的IP地址。
2.此包由BOOTP转发代理转发。
3.DHCP服务器检查DHCPREQUEST包内包括的配置参数。
4.它如果是原来提供这个网络地址的参数的服务器，它会认出这些数来，并以DHCPACK包回应。
5.客户接收到DHCPACK包后，它可以接收或拒绝，如果拒绝它可以申请新的网络地址。
当然了，如果服务器觉得客户的请求是无效的，服务器会以DHCPNACK包响应，客户接收到这个包后，会重新会获得网络地址而发送DHCPDISCOVER包。
服务器
目前比较通用的都是采用路由器设备来给用户分配地址，这样可以节省一大笔DHCP服务器的费用。网络拓扑图如右图，详细配置方法如下：  IPv4配置方法Router(config)#int f0/0
Router(config-if)#ip add 192.168.1.1 255.255.255.0
Router(config-if)#no sh
Router(config-if)#exit
Router(config)#ip dhcp excluded-address 192.168.1.1 //需要排除路由器的接口既网关地址
Router(config)#ip dhcp pool IPv4 //创建DHCP池
Router(dhcp-config)#network 192.168.1.0 /24 //宣告可分配网段
Router(dhcp-config)#default-Router 192.168.1.1 //设置客户端的默认网关
Router(dhcp-config)#dns-server 61.128.114.133 //设置客户端DNS地址
Router(dhcp-config)#lease 2 //地址租期
Router(dhcp-config)#domain-name ewao_cn //设置客户端所在域
Router(dhcp-config)#endIPv6配置方法（需要您的路由设备支持IPv6技术）：　Router(config)#ipv6 unicast-routing //开启IPv6协议
Router(config)#ipv6 cef //开启IPv6转发
Router(config)#ipv6 dhcp pool v6 //创建DHCP池
Router(config-dhcp)# prefix-delegation pool v6pool
Router(config-dhcp)# dns-server 2001:470:20::2
Router(config-dhcp)# domain-name ewao_cn
Router(config-dhcp)#end客户端设置参照下图
  
主机配置
安装DHCP服务在Windows Server 2003系统中默认没有安装DHCP服务，因此需要安装DHCP服务。
第1步 单击“开始”按钮，在“控制面板”中双击“添加或删除程序”图标，在打开的窗口左侧单击“添加/删除Windows组件”按钮，打开“Windows组件向导”对话框。
第2步 在“组件”列表中找到并勾选“网络服务”复选框，然后单击“详细信息”按钮，打开“网络服务”对话框。接着在“网络服务的子组件”列表中勾选“动态主机配置协议（DHCP)”复选框，依次单击“确定→下一步”按钮开始配置和安装DHCP服务。最后单击“完成”按钮完成安装。
提示：如果是在Active Directory(活动目录)域中部署DHCP服务器，还需要进行授权才能使DHCP服务器生效。本例的网络基于工作组管理模式，因此无需进行授权操作即可进行创建IP作用域的操作。创建IP作用域要想为同一子网内的所有客户端电脑自动分配IP地址，首先要做就是创建一个IP作用域，这也是事先确定一段IP地址作为IP作用域的原因。下面开始创建IP作用域的操作。
第1步 依次单击“开始→管理工具→DHCP”，打开“DHCP”控制台窗口。在左窗格中右击DHCP服务器名称，执行“新建作用域”命令。
第2步 在打开的“新建作用域向导”对话框中单击“下一步”按钮，打开“作用域名”向导页。在“名称”框中为该作用域键入一个名称（如“CCE”）和一段描述性信息，单击“下一步”按钮。
小提示：这里的作用域名称只起到一个标识的作用，基本上没有实际应用。
第3步 打开“IP地址范围”向导页，分别在“起始IP地址”和“结束IP地址”编辑框中键入事先确定的IP地址范围（本例为“10.115.223.2～10.115.223.254”）。接着需要定义子网掩码，以确定IP地址中用于“网络/子网ID”的位数。由于本例网络环境为城域网内的一个子网，因此根据实际情况将“长度”微调框的值调整为“23”，单击“下一步”按钮（图3)。
第4步 在打开的“添加排除”向导页中可以指定排除的IP地址或IP地址范围。由于已经使用了几个IP地址作为其它服务器的静态IP地址，因此需要将它们排除。在“起始IP地址”编辑框中键入排除的IP地址并单击“添加”按钮。重复操作即可，接着单击“下一步”按钮。
第5步 在打开的“租约期限”向导页中，默认将客户端获取的IP地址使用期限限制为8天。如果没有特殊要求保持默认值不变，单击“下一步”按钮。
第6步 打开“配置DHCP选项”向导页，保持选中“是，我想现在配置这些选项”单选框并单击“下一步”按钮。在打开的“路由器（默认网关)”向导页中根据实际情况键入网关地址（本例为“10.115.223.254”）并依次单击“添加→下一步”按钮。
第7步 在打开的“域名称和DNS服务器”向导页中没有做任何设置，这是因为网络中没有安装DNS服务器且尚未升级成域管理模式.依次单击“下一步”按钮，跳过“WINS服务器”向导页打开“激活作用域”向导页。保持“是，我想现在激活此作用域”单选框选中状态，并依次单击“下一步”→“完成”按钮结束配置。
设置DHCP客户端　安装了DHCP服务并创建了IP作用域后， 要想使用DHCP方式为客户端电脑分配IP地址，除了网络中有一台DHCP服务器外，还要求客户端电脑应该具备自动向DHCP服务器获取IP地址的能力，这些客户端电脑就被称作DHCP客户端。
因此我们对一台运行Windows XP的客户端电脑面前进行了如下设置：在桌面上右击“网上邻居”图标，执行“属性”命令。在打开的“网络连接”窗口中右击“本地连接”图标并执行“属性”，打开“本地连接 属性”对话框。然后双击“Internet协议（TCP/IP)”选项，点选“自动获得IP地址”单选框，并依次单击“确定”按钮。
提示：默认情况下端电脑使用的都是自动获取IP地址的方式，一般无需进行修改，只需检查一下就行了。
至此，DHCP服务器端和客户端已经全部设置完成了。在DHCP服务器正常运行的情况下，首次开机的客户端会自动获取一个IP地址并拥有八天的使用期限。
创建用户
创建新用户或供应商选项类启动 DHCP 管理器。单击控制台树中的适用的 DHCP 服务器分支。右击在的服务器，然后单击创建新的用户类的 定义用户类 ，或者单击 定义供应商类 创建一个新的供应商类。单击 添加 。在 新的类 的对话框键入一个描述性的标识名称，为新的选项，在 显示名称 框。还可能会将其他信息添加到 说明 框。键入数据以匹配的类 ID 由 ID 或 ASCII 下的 DHCP 客户端提供 DHCP 服务器服务使用。若要为十六进制字节数字值输入数据，请单击文本框的左侧。若要输入信息交换 (ASCII) 文本字符值为美国标准码数据，单击文本框的右侧。单击 确定 ，然后单击 关闭 。使用新的类 ID 配置 DHCP 作用域在 DHCP 管理器，双击相应的 DHCP 作用域。右键单击 作用域选项 ，然后单击 配置选项 。单击 高级 。单击以选中复选框或要使用新的供应商或用户类在功能旁边的框。单击 确定 。为客户端计算机设置指定的 DHCP 类 ID 字符串连接到基于 Windows 2000 的 DHCP 服务器的客户端计算机使用下面的命令可以设置指定的 DHCP 类别 ID 字符串：ipconfig / setclassid adapter_name class_id 
是例如配置名为"Local Area Connection"的适配器名为"myuserclass 用户类 ID，请在命令提示符下键入 ipconfig / setclassid 本地连接 myuserclass ，，然后按 ENTER 键。
它标识"Local Area Connection"接口接收为"myuserclass"DHCP 服务器上配置的 DHCP 选项。
注意 ：ASCII 中的类 ID 是区分大小写，并必须的匹配在 编辑类 对话框中输入标识数据的类来创建新的用户或供应商选项类。
建立
DHCP服务的安装
DHCP指的是由服务器控制一段IP地址范围，客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。首先，DHCP服务器必须是一台安装有Windows 2000 Server/Advanced Server系统的计算机；其次，担任DHCP服务器的计算机需要安装TCP/IP协议，并为其设置静态IP地址、子网掩码、默认网关等内容。默认情况下，DHCP作为Windows 2000 Server的一个服务组件不会被系统自动安装，必须把它添加进来：
1. 依次点击“开始→设置→控制面板→添加/删除程序→添加/删除Windows组件”，打开相应的对话框。
2. 用鼠标左键点击选中对话框的“组件”列表框中的“网络服务”一项，单击[详细信息]按钮，出现带有具体内容的对话框。
3. 在对话框“网络服务的子组件”列表框中勾选“动态主机配置协议（DHCP）”，单击[确定]按钮，根据屏幕提示放入Windows 2000安装光盘，复制所需要的程序。
4. 重新启动计算机后，在“开始→程序→管理工具”下就会出现“DHCP”一项，说明DHCP服务安装成功。
DHCP服务器的授权
出于对网络安全管理的考虑，并不是在Windows 2000 Server中安装了DHCP功能后就能直接使用，还必须进行授权操作，未经授权操作的服务器无法提供DHCP服务。对DHCP服务器授权操作的过程如下：
1. 依次点击“开始→程序→管理工具→DHCP”，打开DHCP控制台窗口。
2. 在控制台窗口中，用鼠标左键点击选中服务器名，然后单击右键，在快捷菜单中选中“授权”，此时需要几分钟的等待时间。注意：如果系统长时间没有反应，可以按F5键或选择菜单工具中的“操作”下的“刷新”进行屏幕刷新，或先关闭DHCP控制台，在服务器名上用鼠标右键点击。如果快捷菜单中的“授权”已经变为“撤消授权”，则表示对DHCP服务器授权成功。此时，最明显的标记是服务器名前面红色向上的箭头变成了绿色向下的箭头。这样，这台被授权的DHCP服务器就有分配IP的权利了。
DHCP服务的测试
经过上述设置，DHCP服务已经正式启动，我们需要在客户机上进行测试。只需把客户机的IP地址选项设为“自动获取IP地址”，随后重新启动客户机。在客户机的“运行”对话框中键入“Ipconfig/all”，即可看到客户机分配到的动态IP地址。
跨网运作
DHCP DISCOVER 是以广播方式进行的，其情形只能在同一网络之内进行，因为 router 是不会将广播传送出去的。但如果 DHCP 服务器安设在其它的网络上面呢？由于 DHCP 客户端还没有 IP 环境设定，所以也不知道 Router 地址，而且有些 Router 也不会将 DHCP 广播封包传递出去，因此这情形下 DHCP DISCOVER 是永远没办法抵达 DHCP 服务器那端的，当然也不会发生 OFFER 及其它动作了。要解决这个问题，我们可以用 DHCP Agent (或 DHCP Proxy )主机来接管客户的 DHCP 请求，然后将此请求传递给真正的 DHCP 服务器，然后将服务器的回复传给客户。这里，Proxy 主机必须自己具有路由能力，且能将双方的封包互传对方。
若不使用 Proxy，也可以在每一个网络之中安装 DHCP 服务器，但这样的话，一来设备成本会增加，而且，管理上面也比较分散。当然，如果在一个十分大型的网络中，这样的均衡式架构还是可取的。
地址范围
当DHCP服务器被授权后，还需要对它设置IP地址范围。通过给DHCP服务器设置IP地址范围后，当DHCP客户机在向DHCP服务器申请IP地址时，DHCP服务器就会从所设置的IP地址范围中选择一个还没有被使用的IP地址进行动态分配。添加IP地址范围的操作如下：
1.点击“开始→程序→管理工具→DHCP”，打开DHCP控制台窗口。
2.选中DHCP服务器名，在服务器名上点击鼠标右键，在出现的快捷菜单中选择“新建作用域”，在出现的窗口中单击[下一步]按钮，在出现的对话框中输入相关信息，单击[下一步]按钮。
3.根据自己网络的实际情况，对各项进行设置，然后单击[下一步]按钮。
4.在对话框中，输入需要排除的IP地址范围。由于 网络中有很多网络设备需要指定静态IP地址（即固定的IP地址），如服务器、交换机、路由器等，此时必须把这些已经分配的IP地址从DHCP服务器的IP地址范围中排除，否则会引起IP地址的冲突，导致网络故障。
5.单击[下一步]按钮，在出现的“租约期限”窗口中可以设置IP地址租期的时间值。一般情况下，如果网络中的IP地址比较紧张的时候，可以把租期设置短一些，而IP地址比较宽松时，可以把租期设置长一些。设置完后，单击[下一步]按钮，出现“配置DHCP选项”窗口。
6.在“配置DHCP选项”窗口中，如果选择“是，我想现在配置这些选项”，此时可以对DNS服务器、默认网关、WINS服务器地址等内容进行设置；如果选择“否，我想稍后配置这些选项”，可以在需要这些功能时再进行配置。此处，我们选择前者，单击[下一步]按钮。
7.在出现的窗口中，输入网络中路由器的IP地址（即默认网关的IP地址）或是NAT服务器（网络地址转换服务器）的IP地址，如WinRoute、SyGate等。这样，客户机从DHCP服务器那里得到的IP信息中就包含了默认网关的设定了，从而可以接入Internet。
8.单击[下一步]按钮，在此对话框中设置有关客户机DNS域的名称，同时输入DNS服务器的名称和IP地址。，然后单击[添加]按钮进行确认。单击[下一步]按钮，在出现的窗口中进行WINS服务器的相关设置，设置完后单击[下一步]按钮。
9.在出现的窗口中，选择“是，我想现在激活此作用域”后，单击[下一步]按钮，在出现的窗口中单击[完成]按钮，设置结束。此时，就可以在DHCP管理器中看到我们刚刚建好的作用域。
注意：如果您的校园网络是以工作组的形式存在的，可以在第6步的“配置DHCP选项”窗口中选择“否，我想稍后配置这些选项”，此时设置过程跳过第7、8步。如果您的校园网络是以域的形式存在的，建议您的网络配置顺序为：活动目录的建立→WINS的建立→DNS的建立→DHCP的建立，这样可以减少很多麻烦。
相关应用
开启DHCP“我的电脑”→“服务和应用程序”→“服务”→“DHCP Client”，点击启动即可启动，最好设置为开机自动运行！不设置的后果若机器的DHCP Client出现异常或应急关闭会导致，该机器与其局域网内其他机器数据传输速度大大降低，如果你的机器与其他局域网内的机器数据传输速度慢的话，可能就是这个原因引起的！
[1]​