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 定位方式:
Automatic Allocation
自动分配,其情形是:一旦 DHCP 客户端第一次成功的从 DHCP 服务器端租用到 IP 地址之后,就永远使用这个地址。
Dynamic Allocation
动态分配,当 DHCP 第一次从 HDCP 服务器端租用到 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。当 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 秒。如果都没有得到 DHCP 服务器的响应,客户端则会显示错误信息,宣告 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 ;然后在剩下的租约期限的再一半的时候(即租约的75%),还得不到确认的话,那么工作站就不能拥有这个 IP 了。至于为什么不是到租约期限完全结束才放弃 IP 呢?,对不起,小弟也是不学无术之人,没有去深究了,只知道要回答 MCSE 题目的时候,您一定要记得 NT 是这么工作的就是了。
要是您想退租,可以随时送出 DHCPLEREASE 命令解约,就算您的租约在前一秒钟才获得的。
跨网络的 DHCP 运作
从前面描述的过程中,我们不难发现:DHCDISCOVER 是以广播方式进行的,其情形只能在同一网络之内进行,因为 router 是不会将广播传送出去的。但如果 DHCP 服务器安设在其它的网络上面呢?由于 DHCP 客户端还没有 IP 环境设定,所以也不知道 Router 地址,而且有些 Router 也不会将 DHCP 广播封包传递出去,因此这情形下 DHCP DISCOVER 是永远没办法抵达 DHCP 服务器那端的,当然也不会发生 OFFER 及其它动作了。要解决这个问题,我们可以用 DHCP Agent (或 DHCP Proxy )主机来接管客户的 DHCP 请求,然后将此请求传递给真正的 DHCP 服务器,然后将服务器的回复传给客户。这里,Proxy 主机必须自己具有路由能力,且能将双方的封包互传对方。
若不使用 Proxy,您也可以在每一个网络之中安装 DHCP 服务器,但这样的话,一来设备成本会增加,而且,管理上面也比较分散。当然喽,如果在一个十分大型的网络中,这样的均衡式架构还是可取的。端视您的实际情况而定了。



DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段,在RFC 2131中有详细的描述。DHCP有3个端口,其中UDP67和UDP68为正常的DHCP服务端口,分别作为DHCP Server和DHCP Client的服务端口;546号端口用于DHCPv6 Client,而不用于DHCPv4,是为DHCP failover服务,这是需要特别开启的服务,DHCP failover是用来做“双机热备”的。



DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
DHCP协议采用客户端/服务器模型,主机地址的动态分配任务由网络主机驱动。当DHCP服务器接收到来自网络主机申请地址的信息时,才会向网络主机发送相关的地址配置等信息,以实现网络主机地址信息的动态配置。DHCP具有以下功能:



  1. 保证任何IP地址在同一时刻只能由一台DHCP客户机所使用。

  2. DHCP应当可以给用户分配永久固定的IP地址。

  3. DHCP应当可以同用其他方法获得IP地址的主机共存(如手工配置IP地址的主机)。

  4. DHCP服务器应当向现有的BOOTP客户端提供服务。
    DHCP有三种机制分配IP地址:
    1) 自动分配方式(Automatic Allocation),DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。
    相关图片
    相关图片
    2) 动态分配方式(Dynamic Allocation),DHCP服务器给主机指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。
    3) 手工分配方式(Manual Allocation),客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。
    三种地址分配方式中,只有动态分配可以重复使用客户端不再需要的地址。
    DHCP消息的格式是基于BOOTP(Bootstrap Protocol)消息格式的,这就要求设备具有BOOTP中继代理的功能,并能够与BOOTP客户端和DHCP服务器实现交互。BOOTP中继代理的功能,使得没有必要在每个物理网络都部署一个DHCP服务器。RFC 951和RFC 1542对BOOTP协议进行了详细描述。 [1] [2]
    封包格式
    DHCP的封包格式如右图所示,各字段定义如下:
    FIELD OCTETS DESCRIPTION
    —– —— ———–
    DHCP报文格式
    DHCP报文格式
    OP:
    若是 client 送给 server 的封包,设为 1 ,反向为 2。HTYPE
    硬件类别,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 或相关文献,并好好理解,这里不再叙述了。
    相关介绍
    DHCP客户端
    在支持DHCP功能的网络设备上将指定的端口作为DHCP Client,通过DHCP协议从DHCP Server动态获取IP地址等信息,来实现设备的集中管理。一般应用于网络设备的网络管理接口上。
    DHCP客户端可以带来如下好处:
    降低了配置和部署设备时间。
    降低了发生配置错误的可能性。
    可以集中化管理设备的IP地址分配。
    DHCP服务器
    DHCP服务器指的是由服务器控制一段IP地址范围,客户端登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。
    DHCP中继代理
    DHCPRelay(DHCPR)DHCP中继 也叫做DHCP中继代理。DHCP中继代理,就是在DHCP服务器和客户端
    相关图片
    相关图片
    之间转发DHCP数据包。当DHCP客户端与服务器不在同一个子网上,就必须有DHCP中继代理来转发DHCP请求和应答消息。DHCP中继代理的数据转发,与通常路由转发是不同的,通常的路由转发相对来说是透明传输的,设备一般不会修改IP包内容。而DHCP中继代理接收到DHCP消息后,重新生成一个DHCP消息,然后转发出去。
    在DHCP客户端看来,DHCP中继代理就像DHCP服务器;在DHCP服务器看来,DHCP中继代理就像DHCP客户端。
    工作原理
    DHCP协议采用UDP作为传输协议,主机发送请求消息到DHCP服务器的67号端口,DHCP服务器回应应答消息给主机的68号端口。详细的交互过程如下图。



DHCP Client以广播的方式发出DHCP Discover报文。
所有的DHCP Server都能够接收到DHCP Client发送的DHCP Discover报文,所有的DHCP Server都会给出响应,向DHCP Client发送一个DHCP Offer报文。
DHCP Offer报文中“Your(Client) IP Address”字段就是DHCP Server能够提供给DHCP Client使用的IP地址,且DHCP Server会将自己的IP地址放在“option”字段中以便DHCP Client区分不同的DHCP Server。DHCP Server在发出此报文后会存在一个已分配IP地址的纪录。
DHCP Client只能处理其中的一个DHCP Offer报文,一般的原则是DHCP Client处理最先收到的DHCP Offer报文。
DHCP Client会发出一个广播的DHCP Request报文,在选项字段中会加入选中的DHCP Server的IP地址和需要的IP地址。
DHCP Server收到DHCP Request报文后,判断选项字段中的IP地址是否与自己的地址相同。如果不相同,DHCP Server不做任何处理只清除相应IP地址分配记录;如果相同,DHCP Server就会向DHCP Client响应一个DHCP ACK报文,并在选项字段中增加IP地址的使用租期信息。
DHCP Client接收到DHCP ACK报文后,检查DHCP Server分配的IP地址是否能够使用。如果可以使用,则DHCP Client成功获得IP地址并根据IP地址使用租期自动启动续延过程;如果DHCP Client发现分配的IP地址已经被使用,则DHCP Client向DHCPServer发出DHCP Decline报文,通知DHCP Server禁用这个IP地址,然后DHCP Client开始新的地址申请过程。
DHCP Client在成功获取IP地址后,随时可以通过发送DHCP Release报文释放自己的IP地址,DHCP Server收到DHCP Release报文后,会回收相应的IP地址并重新分配。
在使用租期超过50%时刻处,DHCP Client会以单播形式向DHCP Server发送DHCPRequest报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址。
在使用租期超过87.5%时刻处,DHCP Client会以广播形式向DHCP Server发送DHCPRequest报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址,直到IP地址使用租期到期时,DHCP Client才会向DHCP Server发送DHCP Release报文来释放这个IP地址,并开始新的IP地址申请过程。
需要说明的是:DHCP客户端可以接收到多个DHCP服务器的DHCPOFFER数据包,然后可能接受任何一个DHCPOFFER数据包,但客户端通常只接受收到的第一个DHCPOFFER数据包。另外,DHCP服务器DHCPOFFER中指定 [1] 的地址不一定为最终分配的地址,通常情况下,DHCP服务器会保留该地址直到客户端发出正式请求。
正式请求DHCP服务器分配地址DHCPREQUEST采用广播包,是为了让其它所有发送DHCPOFFER数据包的DHCP服务器也能够接收到该数据包,然后释放已经OFFER(预分配)给客户端的IP地址。
如果发送给DHCP客户端的地址已经被其他DHCP客户端使用,客户端会向服务器发送DHCPDECLINE信息包拒绝接受已经分配的地址信息。
在协商过程中,如果DHCP客户端发送的REQUEST消息中的地址信息不正确,如客户端已经迁移到新的子网或者租约已经过期,DHCP服务器会发送DHCPNAK消息给DHCP客户 端,让客户端重新发起地址请求过程。
DHCP服务
安装DHCP服务
在Windows Server 2003系统中默认没有安装DHCP服务,因此需要安装DHCP服务。
第1步 单击“开始”按钮,在“控制面板”中双击“添加或删除程序”图标,在打开的窗口左侧单击“添加/删除
相关图片
相关图片
Windows组件”按钮,打开“Windows组件向导”对话框。
第2步 在“组件”列表中找到并勾选“网络服务”复选框,然后单击“详细信息”按钮,打开“网络服务”对话框。接着在“网络服务的子组件”列表中勾选“动态主机配置协议(DHCP)”复选框,依次单击“确定→下一步”按钮开始配置和安装DHCP服务。最后单击“完成”按钮完成安装。
提示:如果是在Active Directory(活动目录)域中部署DHCP服务器,还需要进行授权才能使DHCP服务器生效。本例的网络基于工作组管理模式,因此无需进行授权操作即可进行创建IP作用域的操作。
DHCP服务器
并不是安装了DHCP功能后就能直接使用,还必须进行授权操作,未经授权操作的服务器无法提供DHCP服务。对DHCP服务器授权操作的过程如下:



  1. 依次点击“开始→程序→管理工具→DHCP”,打开DHCP控制台窗口。

  2. 在控制台窗口中,用鼠标左键点击选中服务器名,然后单击右键,在快捷菜单中选中“授权”,此时需要几
    相关图片
    相关图片
    分钟的等待时间。注意:如果系统长时间没有反应,可以按F5键或选择菜单工具中的“操作”下的“刷新”进行屏幕刷新,或先关闭DHCP控制台,在服务器名上用鼠标右键点击。如果快捷菜单中的“授权”已经变为“撤消授权”,则表示对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 ?
公司内部很多 Laptop计算机使用的场合!因为 Laptop在使用上,当设定为DHCP client 的时候,那么只要它连接上的网域里面有一部可以上网的 DHCP服务器 ,那部Laptop也就可以连接上 Internet 了!
网域内计算机数量相当的多时:另外一个情况就是网域内计算机数量相当庞大时,大到您没有办法一个一个的进行说明来设定他们自己的网络参数,这个时候为了省麻烦,还是架设DHCP 来的方便。
什么情况下不建议使用 DHCP 主机?
Client 在开机的时候会主动的发送讯息给网域上的所有机器,这个时候,如果网域上就是没有DHCP主机呢?那么这部 Client 端计算机会发送四次请求信息,第一次等待时间为 1 秒,其余三次的等待时间分别是 9、13、16 秒。如果还是没有DHCP服务器的响应,那么在5分钟之后,Client端计算机会重复这一动作。
在网域内的计算机,有很多机器其实是做为主机的用途,很少Client 需求,那么似乎就没有必要架设 DHCP。
DHCP跨网运作
DHCP DISCOVER 是以广播方式进行的,其情形只能在同一网段之内进行,因为路由器是不会将二层广播包转发出去的。但如果DHCP 服务器安设在其它的网络上面呢?由于 DHCP 客户端还没有 IP 环境设定,所以也不知道路由器地址,而且有些 Router 也不会将 DHCP 广播封包传递出去,因此这情形下 DHCP DISCOVER 是永远没办法抵达 DHCP 服务器那端的,当然也不会发生 OFFER 及其它动作了。要解决这个问题,我们可以用 DHCP Agent (或 DHCP Proxy )主机来接管客户的 DHCP 请求,然后将此请求传递给真正的 DHCP 服务器,然后将服务器的回复传给客户。这里,Proxy 主机必须自己具有路由能力,且能将双方的封包互传对方。
若不使用 Proxy,也可以在每一个网络之中安装 DHCP 服务器,但这样的话,一来设备成本会增加,而且,管理上面也比较分散。当然,如果在一个十分大型的网络中,这样的均衡式架构还是可取的。 [3]
网络设备
注意:不同的网络设备配置的语法不一样.
要配置DHCP,可以按照下面任务列表进行配置,其中前三个配置任务是必须的。
l 启用DHCP服务器与中继代理(要求)
l DHCP排斥地址配置(要求)
l DHCP地址池配置(要求)
l 配置CLASS(可选)
l 配置绑定数据库保存(可选)
l 手工地址绑定(可选)
l 配置Ping包次数(可选)
l 配置Ping包超时时间(可选)
l 以太网接口DHCP客户端配置(可选)
l PPP封装链路上的DHCP客户端配置(可选)
l FR封装链路上的DHCP客户端配置(可选)
l HDLC封装链路上的DHCP客户端配置(可选)
启用DHCP服务器与中继代理
要启用DHCP服务器、中继代理,全局配置模式中执行以下命令:
R (config)#service dhcp
启用DHCP服务器和DHCP中继代理功能
R (config)#no service dhcp
关闭DHCP服务器和中继代理功能
DHCP排斥地址配置
如果没有特别配置,DHCP服务器会试图将在地址池中定义的所有子网地址分配给DHCP客户端。因此,如果你想保留一些地址不想分配,比如已经分配给服务器或者设备了,你必须明确定义这些地址是不允许分配给客户端的。
要配置哪些地址不能分配给客户端,在全局配置模式中执行以下命令:
R (config)#ip dhcp excluded-address
定义IP地址范围,这些地址DHCP不会分配给客户端
R (config)#no ip dhcp excluded-address
low-ip-address[high-ip-address]
取消配置地址排斥
配置DHCP服务器,一个好的习惯是将所有已明确分配的地址全部不允许DHCP分配,这样可以带来两个好处:1)不会发生地址冲突;2)DHCP分配地址时,减少了检测时间,从而提高DHCP分配效率。
DHCP地址池配置
DHCP的地址分配以及给客户端传送的DHCP各项参数,都需要在DHCP地址池中进行定义。如果没有配置DHCP地址池,即使启用了DHCP服务器,也不能对客户端进行地址分配;但是如果启用了DHCP服务器,不管是否配置了DHCP 地址池,DHCP中继代理的总是起作用的。
如果DHCP请求包中没有DHCP中继代理的IP地址,就分配与接收DHCP请求包接口的IP地址同一子网或网络的地址给客户端。如果没定义这个网段的地址池,地址分配就失败;
如果DHCP请求包中有中继代理的IP地址,就分配与该地址同一子网或网络的地址给客户端。如果没定义这个网段的地址池,地址分配就失败。
要进行DHCP地址池配置,请根据实际的需要执行以下任务,其中前三个任务要求执行:
l 配置地址池并进入其配置模式(要求)
l 配置地址池子网及其掩码(要求)
l 配置客户端缺省网关(要求)
l 配置地址租期(可选)
l 配置客户端的域名(可选)
l 配置域名服务器(可选)
l 配置NetBIOS WINS服务器(可选)
l 配置客户端NetBIOS节点类型(可选)
l 配置DHCP地址池根据Option82分配地址(可选)
配置地址池名并进入其配置模式
要配置地址池名并进入地址池配置模式,在全局配置模式中执行以下命令:
R (config)#ip dhcp pooldhcp-pool
配置地址池名并进入地址池配置模式
地址池的配置模式显示为“R(dhcp-config)#”。
配置客户端启动文件
客户端启动文件是客户端启动时要用到的启动映像文件。启动映像文件通常是DHCP客户端需要下载的操作系统。
要配置客户端的启动文件,在地址池配置模式中执行以下命令:
R (dhcp-config)#bootfilefilename
配置客户端启动文件名
配置客户端缺省网关
配置客户端默认网关,这个将作为服务器分配给客户端的默认网关参数。缺省网关的IP地址必须与DHCP客户端的IP地址在同一网络。
要配置客户端的缺省网关,在地址池配置模式中执行以下命令:
R (dhcp-config)#default-routeraddress[address2…address8]
配置缺省网关
配置地址租期
DHCP服务器给客户端分配的地址,缺省情况下租期为1天。当租期快到时客户端需要请求续租,否则过期后就不能使用该地址。
要配置地址租期,在地址池配置模式中执行以下命令:
R (dhcp-config)#lease{days[hours][minutes] |infinite}
配置地址租期
配置客户端的域名
可以指定客户端的域名,这样当客户端通过主机名访问网络资源时,不完整的主机名会自动加上域名后缀形成完整的主机名。
要配置客户端的域名,在地址池配置模式中执行以下命令:
R (dhcp-config)#domain-namedomain
配置域名
配置域名服务器
当客户端通过主机名访问网络资源时,需要指定DNS服务器进行域名解析。要配置DHCP客户端可使用的域名服务器,在地址池配置模式中执行以下命令:
R (dhcp-config)#dns-serveraddress
[address2…address8]
配置DNS服务器
配置NetBIOS WINS服务器
NetBIOS WINS是微软TCP/IP网络解析NetNBIOS名字到IP地址的一种域名解析服务。WINS服务器是一个运行在Windows NT下的服务器。当WINS服务器启动后,会接收从WINS客户端发送的注册请求,WINS客户端关闭时,会向WINS服务器发送名字释放消息,这样WINS数据库中与网络上可用的计算机就可以保持一致了。
要配置DHCP客户端可使用的NetBIOS WINS服务器,在地址池配置模式中执行以下命令:
R (dhcp-config)#netbios-name-serveraddress[address2…address8]
配置NetBIOS WINS服务器
配置客户端NetBIOS节点类型
微软DHCP客户端NetBIOS节点类型有四种:1)Broadcast,广播型节点,通过广播方式进行NetBIOS名字解析;2)Peer-to-peer,对等型节点,通过直接请求WINS服务器进行NetBIOS名字解析;3)Mixed,混合型节点,先通过广播方式请求名字解析,后通过与WINS服务器连接进行名字解析;4)Hybrid,复合型节点,首先直接请求WINS服务器进行NetBIOS名字解析,如果没有得到应答,就通过广播方式进行NetBIOS名字解析。
缺省情况下,微软操作系统的节点类型为广播型或者复合型。如果没有配置WINS服务器,就为广播型节点;如果配置了WINS服务器,就为复合型节点。
要配置DHCP客户端NetBIOS节点类型,在地址池配置模式中执行以下命令:
R (dhcp-config)#netbios-node-typetype
配置NetBIOS节点类型
配置DHCP地址池的网络号和掩码
进行动态地址绑定的配置,必须配置新建地址池的子网及其掩码,为DHCP服务器提供了一个可分配给客户端的地址空间。除非有地址排斥配置,否则所有地址池中的地址都有可能分配给客户端。DHCP在分配地址池中的地址,是按顺序进行的,如果该地址已经在DHCP绑定表中或者检测到该地址已经在该网段中存在,就检查下一个地址,直到分配一个有效的地址。
要配置地址池子网和掩码,在地址池配置模式中执行以下命令:
R (dhcp-config)#networknetwork-number mask
配置DHCP地址池的网络号和掩码
配置DHCP地址池根据Option82分配地址
通常,DHCP中继代理在转发报文的过程中会添加一个Option82选项用来记录客户端的相关信息(如客户端所处的VLAN、设备槽号、端口号或者用户的1X等级等等),DHCP服务器在收到该报文后可以通过解析Option82信息来根据客户端的具体信息进行地址分配。如对某个VLAN或者某个用户等级的客户端分配某个范围内的IP地址。在需要根据用户的具体网络位置信息(如VLAN、槽号、端口号)来为用户分配特有的IP地址范围或者根据用户的优先级分配特有的(如受限、非受限)IP地址时,可以采用该功能。
每个DHCP地址池可以根据Option82信息进行地址分配,我们把Option82信息进行匹配归类,在DHCP地址池中为这些归类分别指定可以分配的网段范围。这个归类称为CLASS,一个DHCP地址池可以关联多个CLASS,每个CLASS可以指定不同的网段范围。
在地址分配的过程中可以先根据客户端所处的网段确定可以分配的地址池,再根据其Option82信息进一步确定其所属的CLASS,从CLASS对应的网段范围中分配IP地址。当一个请求报文匹配地址池中的多个CLASS时,按照CLASS在地址池中配置的先后顺序从对应的CLASS网段范围中分配地址,如果该CLASS已无可分配地址,则继续从下一个匹配的CLASS网段范围进行分配,依此类推。每个CLASS对应一个网段范围,网段范围必须从低地址到高地址,可以允许多个CLASS之间的网段范围重复。如果指明了地址池关联的CLASS,但对应的网段范围没有配置,则该CLASS默认的网段范围和CLASS所处的地址池的网段范围相同。
要配置地址池关联的CLASS以及CLASS所对应的网段范围,在地址池配置模式中执行以下命令:
R (dhcp-config)#classclass-name
配置关联的CLASS名称,并进入地址池的CLASS配置模式
R(config-dhcp-pool-class)#address rangelow-ip-addresshigh-ip-address
配置对应的网段范围
值得注意的是:
当配置的CLASS在全局CLASS查找不到的情况下,会自动创建一个全局的CLASS;
在地址池中配置关联CLASS与静态手工绑定配置冲突,不可同时配置。
每个地址池下允许配置的CLASS数目最大为5个
配置CLASS
配置CLASS的Option82匹配信息
在全局模式下进入CLASS配置模式后,可以配置每个CLASS对应的具体的Option82匹配信息。一个CLASS可以匹配多个Option82信息,请求报文匹配时只要匹配其中一条信息即认为通过匹配,如果CLASS不配置任何的匹配信息,则认为该CLASS可以匹配任何携带Option82信息的请求报文。请求报文只有匹配了具体的CLASS后,才可从对应的地址池关联的CLASS网段范围中分配地址。
要配置全局的CLASS以及CLASS所对应的匹配Option82信息,在全局配置模式中执行以下命令:
R (config)#ip dhcp classclass-name
配置CLASS名并进入全局CLASS配置模式
R (config-dhcp-class)#relay agent information
进入Option82匹配信息配置模式
R (config-dhcp-class-relayinfo)#relay-information hexaabb.ccdd.eeff…[*]
配置具体的Option82匹配信息



  1. aabb.ccdd.eeff..为16进制数

  2. 代表不完全匹配模式,只需要匹配之前信息即通过匹配
    值得注意的是:全局CLASS可匹配的最大个数为20个。  
    配置CLASS的标识信息
    要配置标识信息来描述CLASS代表的含义,在全局配置模式中执行以下命令:
    R (config)#ip dhcp classclass-name
    配置CLASS名并进入CLASS配置模式
    R (config-dhcp-class)#remarkused in #1 building
    配置标识信息
    配置是否使用CLASS分配
    要设置使用CLASS来进行地址分配,在全局配置模式中执行如下命令:
    R (config)#ip dhcp use class
    配置使用CLASS进行地址分配
    应注意的是:默认情况下该命令打开,执行NO命令关闭使用CLASS进行地址分配。
    配置定时把绑定数据库保存到FLASH
    为了防止设备断电重启导致设备上的DHCP服务器的绑定数据库(租约信息)丢失,DHCP提供可配置的定时把绑定数据库写入FLASH的命令,默认情况下,定时为0,即不定时写FLASH。
    要配置定时把绑定数据库保存到FLASH,在全局配置模式中执行以下命令:
    R (config)# [no]ip dhcp database write-delay[time]
    设置DHCP延迟写FLASH的时间
    time:600s–86400s,缺省为0
    值得注意的是:由于不停擦写FLASH会造成FLASH的使用寿命缩短,所以在设置延迟写FLASH时间时需要注意,设置时间较短有利于设备信息更有效的保存,设置时间较长能够减少写FLASH的次数,延长FLASH的使用寿命。
    配置手动把绑定数据库保存到FLASH
    为了防止设备断电重启导致设备上的DHCP绑定数据库(租约信息)丢失,除了配置定时写FLASH外,也可以根据需要手动地把当前的绑定数据库信息立即写入FLASH。
    要配置手动把绑定数据库保存到FLASH,在全局配置模式中执行以下命令:
    R (config)#ip dhcp database write-to-flash
    把DHCP绑定数据库信息写入FLASH
    手工地址绑定
    地址绑定是指IP地址和客户端MAC地址的映射关系。地址绑定有两种:1)手工绑定,就是在DHCP服务器数据库中,通过手工定义将IP地址和MAC地址进行静态映射,手工绑定其实是一个特殊地址池;2)动态绑定,DHCP 服务器接收到DHCP请求时,动态地从地址池中分配IP地址给客户端,而形成的IP地址和MAC地址映射。
    要定义手工地址绑定,首先需要为每一个手动绑定定义一个主机地址池,然后定义DHCP客户端的IP地址和硬件地址或客户端标识。硬件地址就是MAC地址。客户端标识,微软客户端一般定义客户端标识,而不定义MAC地址,客户端标识包含了网络媒介类型和MAC地址。关于媒介类型的编码,请参见RFC 1700中关于“Address Resolution Protocol Parameters”部分内容。以太网类型为“01”。
    要配置手工地址绑定,在地址池配置模式中执行以下命令:
    R (config)#ip dhcp poolname
    定义地址池名,进入DHCP配置模式
    R (dhcp-config)#hostaddress[netmask]
    定义客户端IP地址
    R (dhcp-config)#client-identifierunique-identifier
    定义客户端硬件地址,如aabb.bbbb.bb88
    定义客户端的标识,如01aa.bbbb.bbbb.88
    R (dhcp-config)#client-namename
    (可选)用标准的ASCII字符定义客户端的名字,名字不要包括域名。如定义mary主机名,不可定义成mary.rg.com
    配置Ping包次数
    缺省情况,当DHCP服务器试图从地址池中分配一个IP地址时,会对该地址执行两次Ping命令(一次一个数据包)。如果Ping没有应答,DHCP服务器认为该地址为空闲地址,就将该地址分配给DHCP客户端;如果Ping有应答,DHCP服务器认为该地址已经在使用,就试图分配另外一个地址给DHCP客户端,直到分配成功。
    要配置Ping包次数,在全局配置模式中执行以下命令:
    R (config)#ip dhcp ping packets[number]
    配置DHCP服务器在分配地址之前的Ping包次数,如果设为0则不进行Ping操作,缺省为2。
    配置Ping包超时时间
    缺省情况下,DHCP服务器Ping操作如果500毫秒没有应答,就认为没有该IP地址主机存在。你可以通过调整Ping包超时时间,改变服务器Ping等待应答的时间。
    要配置Ping包超时时间,在全局配置模式中执行以下命令:
    R (config)#ip dhcp ping timeoutmilliseconds
    配置DHCP服务器Ping包超时时间,缺省为500ms。
    以太网接口DHCP客户端配置
    配置以太网接口DHCP客户端,在接口配置模式中执行以下命令:
    R (config-if)#ip address dhcp
    配置通过DHCP得到IP地址
    PPP封装链路上的DHCP客户端配置
    配置DHCP客户端,在接口配置模式中执行以下命令:
    R(config-if)#ip address dhcp
    配置通过DHCP得到IP地址
    FR封装链路上的DHCP客户端配置
    在接口配置模式中执行以下命令:
    R(config-if)#ip address dhcp
    配置通过DHCP得到IP地址
    HDLC封装链路上的DHCP客户端配置
    配置DHCP客户端,在接口配置模式中执行以下命令:
    R (config-if)#ip address dhcp
    配置通过DHCP得到IP地址

    DHCP服务IP地址自动分配原理
    DHCP在提供服务时,DHCP客户端是以UDP 68号端口进行数据传输的,而DHCP服务器是以UDP 67号端口进行数据传输的。DHCP服务不仅体现在为DHCP客户端提供IP地址自动分配过程中,还体现在后面的IP地址续约和释放过程中。本节仅介绍DHCP客户端初次分配IP地址的过程。
    在整个DHCP服务器为DHCP客户端初次提供IP地址自动分配过程中,一共经过了以下四个阶段,利用了表11-10中的前四个报文:发现阶段(DHCP客户端在网络中广播发送DHCP DISCOVER请求报文,发现DHCP服务器,请求IP地址租约)、提供阶段(DHCP服务器通过DHCP OFFER报文向DHCP客户端提供IP地址预分配)、选择阶段(DHCP客户端通过DHCP REQUEST报文确认选择第一个DHCP服务器为它提供IP地址自动分配服务)和确认阶段(被选择的DHCP服务器通过DHCP ACK报文把在DHCP OFFER报文中准备的IP地址租约给对应DHCP客户端)。
    在DHCP客户端在获得了一个IP地址以后,就可以发送一个免费ARP请求探测网络中是否还有其它主机使用IP地址,来避免由于DHCP服务器地址池重叠而引发的IP冲突。以上四个阶段如图11-19所示,相当于DHCP客户端与DHCP服务器的四次握手过程。具体描述如下:
    (1)发现阶段:即DHCP客户端获取网络中DHCP服务器信息的阶段。在客户端配置了DHCP客户端程序(如在Windows系统中进行了如图11-16所示的配置)并启动后,以广播方式发送DHCP DISCOVER报文寻找网络中的DHCP服务器。示例如下。
    此广播报文采用传输层的UDP 68号端口发送(封装的目的端口为UDP 68号端口),经过网络层IP协议封装后,源IP地址为0.0.0.0(因为此时还没有分配IP地址),目的IP地址为255.255.255.255(有限广播IP地址)。如下是一个DHCP DISCOVER报文封装的IP报头示例,可以看到 Destination Address(目的地址)是 255.255.255.255,而 Source Address(源地址)是 0.0.0.0。IP报头中的其它字段含义大家可以参见本书第7章7.3.4节相关内容。
    IP:ID = 0x0; Proto = UDP; Len: 328
    IP:Version = 4 (0x4)
    IP:Header Length = 20 (0x14)
    IP:Service Type = 0 (0x0)
    IP:Precedence = Routine
    IP:…0…. = Normal Delay
    IP:….0… = Normal Throughput
    IP:…..0.. = Normal Reliability
    IP:Total Length = 328 (0x148)
    IP:Identification = 0 (0x0)
    IP:Flags Summary = 0 (0x0)
    IP:…….0 = Last fragment in datagram
    IP:……0. = May fragment datagram if necessary
    IP:Fragment Offset = 0 (0x0) bytes
    IP:Time to Live = 128 (0x80)
    IP:Protocol = UDP - User Datagram !—使用UDP传输层协议
    IP:Checksum = 0x39A6
    IP:Source Address = 0.0.0.0 !—源IP地址为0.0.0.0
    IP:Destination Address = 255.255.255.255 !—-目的IP地址为255.255.255.255
    IP:Data:Number of data bytes remaining = 308 (0x0134)
    【经验之谈】在以上DHCP DISCOVER报文中IP报头中的目的地址(Destination Address)是255.255.255.255这个有限广播地址。这个有限广播地址就是代表任意一个IPv4子网的广播地址,当然是发送报文的主机所在的子网和DHCP服务器所在子网的广播地址,但因为此时DHCP客户端并不知道DHCP服务器所在的是哪个子网。下面所有其它DHCP报文中的255.255.255.255地址的含义也是一样的。
    至于IP报头中的源地址(Source Address),由于当前DHCP客户端主机并未分配具体的IP地址,所以只能用具有任意代表功能的0.0.0.0地址来表示了。下面所有其它DHCP报文中指定的0.0.0.0地址的含义也是一样的。
    因为此时,DHCP客户端没有分配到IP地址,也不知道DHCP服务器或DHCP中继的IP地址,所以在DHCP DISCOVER报文中Ciaddr(客户端IP地址)、Yiaddr(被分配的DHCP客户端IP地址)、Siaddr(下一个为DHCP客户端分配IP地址的DHCP服务器地址)、Giaddr(DHCP中继IP地址)这四个字段均为0.0.0.0,如下所示。另外,从中可以看到,在CHADDR字段和DHCP选项中Client Identifier字段中都标识了DHCP客户端网卡MAC地址。
    DHCP:Discover (xid=21274A1D)
    DHCP:Op Code (op) = 1 (0x1)
    DHCP:Hardware Type (htype) = 1 (0x1) 10Mb Ethernet
    DHCP:Hardware Address Length (hlen) = 6 (0x6)
    DHCP:Hops (hops) = 0 (0x0)
    DHCP:Transaction ID (xid) = 556223005 (0x21274A1D)
    DHCP:Seconds (secs) = 0 (0x0)
    DHCP:Flags (flags) = 1 (0x1) !—标志位置1,代表以广播方式发送
    DHCP:1…………… = Broadcast
    DHCP:Client IP Address (ciaddr) = 0.0.0.0
    DHCP:Your IP Address (yiaddr) = 0.0.0.0
    DHCP:Server IP Address (siaddr) = 0.0.0.0
    DHCP:Relay IP Address (giaddr) = 0.0.0.0
    DHCP:Client Ethernet Address (chaddr) = 08002B2ED85E
    DHCP:Server Host Name (sname) =
    DHCP:Boot File Name (file) =
    DHCP:Magic Cookie = [OK]
    DHCP:Option Field (options)
    DHCP:DHCP Message Type = DHCP Discover !---DHCP报文类型为DHCP Discover
    DHCP:Client-identifier = (Type:1) 08 00 2b 2e d8 5e
    DHCP:Host Name = JUMBO-WS !---DHCP服务器主机名
    DHCP:Parameter Request List = (Length:7) 01 0f 03 2c 2e 2f 06
    DHCP:End of this option field
    (2)提供阶段:即DHCP服务器向DHCP客户端提供预分配IP地址的阶段。网络中的所有DHCP服务器接收到客户端的DHCP DISCOVER报文后,都会根据自己地址池中IP地址分配的优先次序选出一个IP地址,然后与其它参数一起通过传输层的UDP 67号端口,在DHCP OFFER报文中以广播方式发送给客户端(目的端口是DHCP客户端的UDP 68号端口)。客户端通过封装在帧中的目的MAC地址(也就在DHCP DISCOVER报文中的CHADDR字段值)的比对来确定是否接收该帧。但这样一来,理论上DHCP客户端可能会收到多个DHCP OFFER报文(当网络中存在多个DHCP服务器时),但DHCP客户端只接受第一个到来的DHCP OFFER报文。
    DHCP OFFER报文经过IP协议封装后的源IP地址DHCP服务器自己的IP地址,目的地址仍是255.255.255.255广播地址,使用的协议仍为UDP。下面是一个DHCP OFFER报文的IP报头示例。
    IP:ID = 0x3C30; Proto = UDP; Len: 328
    IP:Version = 4 (0x4)
    IP:Header Length = 20 (0x14)
    IP:Service Type = 0 (0x0)
    IP:Precedence = Routine
    IP:...0.... = Normal Delay
    IP:....0... = Normal Throughput
    IP:.....0.. = Normal Reliability
    IP:Total Length = 328 (0x148)
    IP:Identification = 15408 (0x3C30)
    IP:Flags Summary = 0 (0x0)
    IP:.......0 = Last fragment in datagram
    IP:......0. = May fragment datagram if necessary
    IP:Fragment Offset = 0 (0x0) bytes
    IP:Time to Live = 128 (0x80)
    IP:Protocol = UDP - User Datagram
    IP:Checksum = 0x2FA8
    IP:Source Address = 157.54.48.151
    IP:Destination Address = 255.255.255.255
    IP:Data:Number of data bytes remaining = 308 (0x0134)
    在DHCP OFFER报文中,Ciaddr字段值仍为0.0.0.0,因为客户端仍没有分配到IP地址;Yiaddr字段已有值了,这是DHCP服务器为该客户端预分配的IP地址;因为此时仍没有得到客户端确认,所以Siaddr字段值仍为0.0.0.0;因为没有经过DHCP中继服务器,所以Giaddr字段值仍为0.0.0.0。另外,在 DHCP可选项部分,可以看到由服务器随 IP 地址一起发送的各种选项。在这种情况下,服务器发送的是子网掩码、默认网关(路由器)、租约时间、WINS 服务器地址(NetBIOS 名称服务)和 NetBIOS 节点类型。下面是一个DHCP OFFER报文示例。
    DHCP:Offer (xid=21274A1D)
    DHCP:Op Code (op) = 2 (0x2)
    DHCP:Hardware Type (htype) = 1 (0x1) 10Mb Ethernet
    DHCP:Hardware Address Length (hlen) = 6 (0x6)
    DHCP:Hops (hops) = 0 (0x0)
    DHCP:Transaction ID (xid) = 556223005 (0x21274A1D)
    DHCP:Seconds (secs) = 0 (0x0)
    DHCP:Flags (flags) = 1 (0x1)
    DHCP:1............... = Broadcast
    DHCP:Client IP Address (ciaddr) = 0.0.0.0
    DHCP:Your IP Address (yiaddr) = 157.54.50.5
    DHCP:Server IP Address (siaddr) = 0.0.0.0
    DHCP:Relay IP Address (giaddr) = 0.0.0.0
    DHCP:Client Ethernet Address (chaddr) = 08002B2ED85E
    DHCP:Server Host Name (sname) =
    DHCP:Boot File Name (file) =
    DHCP:Magic Cookie = [OK]
    DHCP:Option Field (options)
    DHCP:DHCP Message Type = DHCP Offer !---DHCP报文类型为DHCP Offer
    DHCP:Subnet Mask = 255.255.240.0 !---所分配IP地址的子网掩码为255.255.240.0
    DHCP:Renewal Time Value (T1) = 8 Days, 0:00:00 !---想要继续租约原来分配的IP地址,则提出续约申请的期限为8天
    DHCP:Rebinding Time Value (T2) = 14 Days, 0:00:00 !---如果上次申请续约失败,再次申请绑定原来分配到的IP地址的期限为14天
    DHCP:IP Address Lease Time = 16 Days, 0:00:00 !---租约期限为16天,也就是DHCP客户端可使用此IP地址的最长时间为16天
    DHCP:Server Identifier = 157.54.48.151 !---DHCP服务器的IP地址为157.54.48.151
    DHCP:Router = 157.54.48.1 !---默认网关IP地址为157.54.48.1
    DHCP:NetBIOS Name Service = 157.54.16.154 !---DNS服务器IP地址为157.54.16.154
    DHCP:NetBIOS Node Type = (Length: 1) 04
    DHCP:End of this option field
    (3)选择阶段:即DHCP客户端选择IP地址的阶段。如果有多台DHCP服务器向该客户端发来DHCP OFFER报文,客户端只接受第一个收到的DHCP OFFER报文,然后以广播方式发送DHCP REQUEST报文。在该报文的“Requested Address”选项中包含DHCP服务器在DHCP OFFER报文中预分配的IP地址,对应的DHCP服务器IP地址等。这样也就相当于同时告诉得其他DHCP服务器,它们可以释放已提供的地址,并将这些地址返回到可用地址池中。
    在DHCP OFFER报文封装的IP协议头部中,客户端的 Source Address仍然是 0.0.0.0,数据包的 Destination 仍然是 255.255.255.255。但在DHCP OFFER报文中Ciaddr、Yiaddr、Siaddr、Giaddr 字段的地址均0.0.0.0,大家自己分析一下为什么,很简单的。下面是一个DHCP OFEER报文头部和DHCP OFFER报文示例。
    IP:ID = 0x100; Proto = UDP; Len: 328
    IP:Version = 4 (0x4)
    IP:Header Length = 20 (0x14)
    IP:Service Type = 0 (0x0)
    IP:Precedence = Routine
    IP:...0.... = Normal Delay
    IP:....0... = Normal Throughput
    IP:.....0.. = Normal Reliability
    IP:Total Length = 328 (0x148)
    IP:Identification = 256 (0x100)
    IP:Flags Summary = 0 (0x0)
    IP:.......0 = Last fragment in datagram
    IP:......0. = May fragment datagram if necessary
    IP:Fragment Offset = 0 (0x0) bytes
    IP:Time to Live = 128 (0x80)
    IP:Protocol = UDP - User Datagram
    IP:Checksum = 0x38A6
    IP:Source Address = 0.0.0.0
    IP:Destination Address = 255.255.255.255
    IP:Data:Number of data bytes remaining = 308 (0x0134)



DHCP:Request (xid=21274A1D)
DHCP:Op Code (op) = 1 (0x1)
DHCP:Hardware Type (htype) = 1 (0x1) 10Mb Ethernet
DHCP:Hardware Address Length (hlen) = 6 (0x6)
DHCP:Hops (hops) = 0 (0x0)
DHCP:Transaction ID (xid) = 556223005 (0x21274A1D)
DHCP:Seconds (secs) = 0 (0x0)
DHCP:Flags (flags) = 1 (0x1)
DHCP:1…………… = Broadcast
DHCP:Client IP Address (ciaddr) = 0.0.0.0
DHCP:Your IP Address (yiaddr) = 0.0.0.0
DHCP:Server IP Address (siaddr) = 0.0.0.0
DHCP:Relay IP Address (giaddr) = 0.0.0.0
DHCP:Client Ethernet Address (chaddr) = 08002B2ED85E
DHCP:Server Host Name (sname) =
DHCP:Boot File Name (file) =
DHCP:Magic Cookie = [OK]
DHCP:Option Field (options)
DHCP:DHCP Message Type = DHCP Request
DHCP:Client-identifier = (Type:1) 08 00 2b 2e d8 5e
DHCP:Requested Address = 157.54.50.5
DHCP:Server Identifier = 157.54.48.151
DHCP:Host Name = JUMBO-WS
DHCP:Parameter Request List = (Length:7) 01 0f 03 2c 2e 2f 06
DHCP:End of this option field
(4)确认阶段:即DHCP服务器确认分配级DHCP客户端IP地址的阶段。某个DHCP服务器在收到DHCP客户端发来的DHCP REQUEST报文后,只有DHCP客户端选择的服务器会进行如下操作:如果确认将地址分配给该客户端,则以广播方式返回DHCP ACK报文;否则返回DHCP NAK报文,表明地址不能分配给该客户端。
在DHCP 服务器发送的DHCP ACK报文的IP协议头部,Source Address是 DHCP 服务器IP地址,Destination Address仍然是广播地址255.255.255.255。在DHCP ACK报文中的Yiaddr字段包含要分配给客户端的IP地址,而Chaddr和DHCP:Client Identifier字段是发出请求的客户端中网卡的MAC地址。同时在选项部分也会在DHCP OFFER报文中把所分配的IP地址的子网掩码、默认网关、DNS服务器、租约期、续约时间等信息加上。
IP:ID = 0x3D30; Proto = UDP; Len: 328
IP:Version = 4 (0x4)
IP:Header Length = 20 (0x14)
IP:Service Type = 0 (0x0)
IP:Precedence = Routine
IP:...0.... = Normal Delay
IP:....0... = Normal Throughput
IP:.....0.. = Normal Reliability
IP:Total Length = 328 (0x148)
IP:Identification = 15664 (0x3D30)
IP:Flags Summary = 0 (0x0)
IP:.......0 = Last fragment in datagram
IP:......0. = May fragment datagram if necessary
IP:Fragment Offset = 0 (0x0) bytes
IP:Time to Live = 128 (0x80)
IP:Protocol = UDP - User Datagram
IP:Checksum = 0x2EA8
IP:Source Address = 157.54.48.151
IP:Destination Address = 255.255.255.255
IP:Data:Number of data bytes remaining = 308 (0x0134)



DHCP:ACK (xid=21274A1D)
DHCP:Op Code (op) = 2 (0x2)
DHCP:Hardware Type (htype) = 1 (0x1) 10Mb Ethernet
DHCP:Hardware Address Length (hlen) = 6 (0x6)
DHCP:Hops (hops) = 0 (0x0)
DHCP:Transaction ID (xid) = 556223005 (0x21274A1D)
DHCP:Seconds (secs) = 0 (0x0)
DHCP:Flags (flags) = 1 (0x1)
DHCP:1…………… = Broadcast
DHCP:Client IP Address (ciaddr) = 0.0.0.0
DHCP:Your IP Address (yiaddr) = 157.54.50.5
DHCP:Server IP Address (siaddr) = 0.0.0.0
DHCP:Relay IP Address (giaddr) = 0.0.0.0
DHCP:Client Ethernet Address (chaddr) = 08002B2ED85E
DHCP:Server Host Name (sname) =
DHCP:Boot File Name (file) =
DHCP:Magic Cookie = [OK]
DHCP:Option Field (options)
DHCP:DHCP Message Type = DHCP ACK
DHCP:Renewal Time Value (T1) = 8 Days, 0:00:00
DHCP:Rebinding Time Value (T2) = 14 Days, 0:00:00
DHCP:IP Address Lease Time = 16 Days, 0:00:00
DHCP:Server Identifier = 157.54.48.151
DHCP:Subnet Mask = 255.255.240.0
DHCP:Router = 157.54.48.1
DHCP:NetBIOS Name Service = 157.54.16.154
DHCP:NetBIOS Node Type = (Length: 1) 04
DHCP:End of this option field
客户端在收到服务器返回的DHCP-ACK确认报文后,会以广播的方式发送免费ARP报文(该报文中,源IP地址和目标IP地址都是本机IP地址,源MAC地址是本机MAC地址,目的MAC地址是广播MAC地址),探测是否有主机使用服务器分配的IP地址,如果在规定的时间内没有收到回应,客户端才使用此地址。否则,客户端会发送DHCP DECLINE报文给DHCP服务器,并重新申请IP地址。
如果网络中存在多个DHCP服务器,除DHCP客户端选中的服务器外,其它DHCP服务器中本次未分配出的IP地址仍可分配给其他客户端。



DHCP的优缺点
DHCP服务优点不少:网络管理员可以验证IP地址和其它配置参数,而不用去检查每个主机;DHCP不会同时租借相同的IP地址给两台主机;DHCP管理员可以约束特定的计算机使用特定的IP地址;可以为每个DHCP作用域设置很多选项;客户机在不同子网间移动时不需要重新设置IP地址。
但同时也存在不少缺点:DHCP不能发现网络上非DHCP客户机已经在使用的IP地址;当网络上存在多个DHCP服务器时,一个DHCP服务器不能查出已被其它服务器租出去的IP地址;DHCP服务器不能跨路由器与客户机通信,除非路由器允许BOOTP转发。
工作流程
DHCP服务的工作过程是这样的:



  1. 发现阶段,即DHCP客户机寻找DHCP服务器的阶段。DHCP客户机以广播方式(因为DHCP服务器的IP地址对于客户机来说是未知的)发送DHCP discover发现信息来寻找DHCP服务器,即向地址255.255.255.255发送特定的广播信息。网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。

  2. 提供阶段,即DHCP服务器提供IP地址的阶段。在网络中接收到DHCP discover发现信息的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含出租的IP地址和其他设置的DHCP offer提供信息。

  3. 选择阶段,即DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。如果有多台DHCP服务器向DHCP客户机发来的DHCP offer提供信息,则DHCP客户机只接受第一个收到的DHCP offer提供信息,然后它就以广播方式回答一个DHCP request请求信息,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址。

  4. 确认阶段,即DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户机回答的DHCP request请求信息之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCP ack确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址。

  5. 重新登录。以后DHCP客户机每次重新登录网络时,就不需要再发送DHCP discover发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ack确认信息。如果此IP地址已无法再分配给原来的DHCP客户机使用时(比如此IP地址已分配给其它DHCP客户机使用),则DHCP服务器给DHCP客户机回答一个DHCP nack否认信息。当原来的DHCP客户机收到此DHCP nack否认信息后,它就必须重新发送DHCP discover发现信息来请求新的IP地址。

  6. 更新租约。DHCP服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其IP租约。DHCP客户机启动时和IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送更新其IP租约的信息。
    为了便于理解,我们把DHCP客户机比做餐馆里的客人,DHCP服务器比做服务员(一个餐馆里也可以有多个服务员),IP地址比做客户需要的食物。那么可以这样描述整个过程:客人走进餐馆,问:“有没有服务员啊?”(DHCP discover),多个服务员同时回答:“有,我这有鸡翅”“有,我这有汉堡”(DHCP offer)。客人说:“好吧,我要一份汉堡”(DHCP request,这个客人比较死板,总是选择第一次听到的食物),端着汉堡的服务员回应了一声:“来啦”(DHCP ack),并把食物端到客人面前,供其享用(将网卡和IP地址绑定)。客人下次来的时候,就直接找上次那个服务员点自己喜欢的汉堡了(DHCP request),如果还有汉堡,服务员会再次确认并上菜(DHCP ack),而如果已经卖完了,服务员则会告诉客人:“不好意思,已经卖完了”(DHCP nack)。当然,服务员隔一段时间会来收拾一次桌子,除非客人特别说明这菜还要继续吃的,服务员会将剩菜端走。
    DHCP CLIENT的行为
    所有支持DHCP 协议并能够发起DHCP过程的终端都称之为DHCP CLIENT,包括普通PC机,各种特殊设备,如CABLE MODEM,IDT等。DHCP CLIENT自己必须能够发出DHCPDISCOVER,DHCPREQUEST,DHCPDECLINE等报文(DHCPINFORM报文也是DHCP CLIENT发出但实际中很少见),并且必须能够处理从服务器收到的以下几种报文:DHCPOFFER,DHCPACK和DHCPNAK。
    图 DHCP CLIENT 行为图
    DHCP交互过程
    标准的DHCP server 和client的交互过程如下图所示,

    图 DHCP交互过程时序图
    如果客户通过别的手段获得了网络地址,它可以使用DHCPINFORM请求获得其它配置参数,服务器接收到DHCPINFORM包,并建立一个DHCPACK消息,在其中包括一些合适客户的配置参数,只是不包括分配网络地址,检查现有的绑定,在信息中不填充’yiaddr’字段或租用时间参数。服务器取得DHCPINFORM包内的’ciaddr’地址,而返回DHCPACK包。
    DHCPDECLINE ——客户机通知服务器,其分配的地址已经被其他设.


Category web