DHCP的工作原理
视乎客户端是否第一次登录网路,DHCP 的工作形式会有所不同。
第一次登录的时候:
1. 寻找 Server。当 DHCP 客户端第一次登录网路的时候,也就是客户发现本机上没有任何 IP 资料设定,它会向网路发出一个 DHCPDISCOVER 封包。因为客户端还不知道自己属于哪一个网路,所以封包的来源位址会为 0.0.0.0 ,而目的位址则为 255.255.255.255 ,然后再附上 Dhcpdiscover 的信息,向网路进行广播。
在 Windows 的预设情形下,Dhcpdiscover 的等待时间预设为 1 秒,也就是当客户端将第一个 Dhcpdiscover 封包送出去之后,在 1 秒之内没有得到回应的话,就会进行第二次 Dhcpdiscover 广播。若一直得不到回应的情况下,客户端一共会有四次 Dhcpdiscover 广播(包括第一次在内),除了第一次会等待 1 秒之外,其余三次的等待时间分别是 9、13、16 秒。如果都没有得到 DHCP 伺服器的回应,客户端则会显示错误信息,宣告 Dhcpdiscover 的失败。之后,基于使用者的选择,系统会继续在 5 分钟之后再重复一次 Dhcpdiscover 的过程。
2. 提供 IP 租用位址。当 DHCP 伺服器监听到客户端发出的 Dhcpdiscover 广播后,它会从那些还没有租出的位址范围内,选择最前面的的空置 IP ,连同其它 TCP/IP 设定,回应给客户端一个 DHCPOFFER 封包。
由于客户端在开始的时候还没有 IP 位址,所以在其 Dhcpdiscover 封包内会带有其 MAC 位址信息,并且有一个 XID 编号来辨别该封包,DHCP 伺服器回应的 Dhcpoffer 封包则会根据这些资料传递给要求租约的客户。根据伺服器端的设定,Dhcpoffer 封包会包含一个租约期限的信息。
3. 接受 IP 租约。如果客户端收到网路上多台 DHCP 伺服器的回应,只会挑选其中一个 Dhcpoffer 而已(通常是最先抵达的那个),并且会向网路发送一个Dhcprequest广播封包,告诉所有 DHCP 伺服器它将指定接受哪一台伺服器提供的 IP 位址。
同时,客户端还会向网路发送一个 ARP 封包,查询网路上面有没有其它机器使用该 IP 位址;如果发现该 IP 已经被占用,客户端则会送出一个 DHCPDECLINE 封包给 DHCP 伺服器,拒绝接受其 Dhcpoffer ,并重新发送 Dhcpdiscover 信息。
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
网络管理员为某些少数特定的Host绑定固定IP地址,且地址不会过期
Automatic Allocation
自动分配,其情形是:一旦 DHCP 客户端第一次成功的从 DHCP 服务器端租用到 IP 地址之后,就永远使用这个地址。
Dynamic Allocation
动态分配,当 DHCP 第一次从 DHCP 服务器端租用到 IP 地址之后,并非永久的使用该地址,只要租约到期,客户端就得释放(release)这个 IP 地址,以给其它工作站使用。当然,客户端可以比其它主机更优先的更新(renew)租约,或是租用其它的 IP 地址。 动态分配显然比自动分配更加灵活,尤其是当您的实际 IP 地址不足的时候, 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 已经被占用,客户端则会送出一个 DHCPDECLIENT 封包给 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 运作 从前面描述的过程中,我们不难发现:DHCDISCOVER 是以广播方式进行的,其情形只能在同一网络之内进行,因为 router 是不会将广播传送出去的。但如果 DHCP 服务器安设在其它的网络上面呢?由于 DHCP 客户端还没有 IP 环境设定,所以也不知道 Router 地址,而且有些 Router 也不会将 DHCP 广播封包传递出去,因此这情形下 DHCP DISCOVER 是永远没办法抵达 DHCP 服务器那端的,当然也不会发生 OFFER 及其它动作了。要解决这个问题,我们可以用 DHCP Agent (或 DHCP Proxy )主机来接管客户的 DHCP 请求,然后将此请求传递给真正的 DHCP 服务器,然后将服务器的回复传给客户。这里,Proxy 主机必须自己具有路由能力,且能将双方的封包互传对方。 若不使用 Proxy,您也可以在每一个网络之中安装 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 DHCPDECLIENT
5 DHCPACK
6 DHCPNACK
7 DHCPRELEASE
DHCP 的选项非常多,有空请查阅 RFC 或相关文献,并好好理解,这里不再叙述了。
DHCP 协议之 RFC 文件
RFC-951、RFC-1084、RFC-1123、RFC-1533、RFC-1534、RFC-1497、RFC-1541
DHCP是可自动将IP位址指派给登入TCP/IP网络的用户端的一种软件,(此种IP位址称为「动态IP位址」)。这种软件通常是在路由器及其他网络设备上执行的。依照预先设定,您的GateLock路由器设定为使用DHCP,因此就无须手动指派永久IP位址给网络上的每个设备。建议不要改变这个设置,这样您的个人电脑就可以被分辨为DHCP服务器[2]。
1 dhcpdiscover: 此为client开始DHCP过程中的第一个请求报文
2 dhcpoffer : 此为server 对dhcpdiscover 报文的响应
3 dhcprequst : 此为client 对dihcpoffer 报文的响应
4 dhcpdeclient: 当client发现server 分配给它的IP地址无法使用,如 IP地址发生冲突时,将发出此报文让server禁止使用这次分配的IP地址。
5 dhcpack : server对 dhcprequst 报文的响应,client收到此报文后才真正获得了IP地址和相关配置信息。
6 dhcpnak : 此报文是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.如果客户在发出DHCPOFFER包后一段时间内没有接收到回应,它有机会重新发送请求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包后,它可以接收或拒绝,如果拒绝它可以申请新的网络地址。
当然了,如果服务器觉得客户的请求是无效的,服务器会以DHCPNAK包响应,客户接收到这个包后,会重新会获得网络地址而发送DHCPDISCOVER包。
DHCP学习
DHCP——Dynamic Host Configuration Protocol,中文意思就是动态主机配置协议。DHCP服务就是指每台客户机(工作站)都没有自己的固定IP地址,而这个地址是在启动了系统之后,从 DHCP服务器上取得的、一个暂时提供给这台机器使用的IP地址。
它给我们带来的好处 有:
不用人工记忆没有规律的地址;
永远不会有重复使用IP地址现象;
永远不用担心在配置网络时地址输入错误。
如果要移动网络中的一台计算机,包括添加或移走以及更换网卡等硬件设备,在新的位置,甚至新的局域网系统中,该工作站计算机都会自动寻找 到新网络中的 DHCP 服务器,然后在一定的时间间隔后自动获得一个地址。
其明显的缺点 有:
DHCP不能发现网络上非DHCP客户机已经在使用的IP地址;
当网络上存在多个DHCP服务器时,一个DHCP服务器不能查出已被其它服务器租出去的IP地址;
DHCP服务器不能跨路由器与客户机通信,除非路由器允许BOOTP转发。
DHCP的前身是BOOTP。BOOTP原本是用於无磁碟主机连接的网路上面的网路主机使用BOOTROM而不是磁碟起动并连接上网路,BOOTP则可以自动地为那些主机设定TCP/IP环境。
DHCP 是 BOOTP 的扩展,是基于 C/S 模式的,它提供了一种动态指定 IP 地址和配置参数的机制。这主要用于大型网络环境和配置比较困难的地方。 它的包格式和 BOOTP 也一样,这样它就可以使用 BOOTP 的转发代理来发送 DHCP 包了,这使得 BOOTP 和 DHCP 之间可以实现互操作。对于 BOOTP 转发代理来说,发的是 DHCP 包还是 BOOTP 包,它根本分不清楚。它们使用的服务器端口号是 67 和 68 ,但是有些地方还有些不同: DHCP 定义了一种可以使 IP 地址使用一段有限时间的机制,在客户期限到了的时候可以重新分配这个 IP 地址; DHCP 为用户提供所有 IP 配置参数; DHCP 包长度比 BOOTP 包长度稍长。既然包比 BOOTP 的长,那也不是白带的,这多出的长度里包括了网络配置参数; DHCP 的包都比 BOOTP 的长,那协议也复杂了。 DHCP 有七种消息类型,而 BOOTP 只有两种。
BOOTP的全称是 BootStrap Protocol,中文意思就是自引导协议。
BOOTP的作用有两个:一、使工作站能请求一个IP地址和其它TCP/IP设置信息;二、使无盘工作站可以请求得到引导文件信息的位置,并从那里开始启动。
BOOTP不支持租用期(lease)这个概念,其工作方式是每台工作站的硬件地址必须和一个实际的IP地址相联系,这也就是为什么在进行无盘启动时必须确认其网卡的前六位地址,及在“远程启动管理器”必须“转换适配器”的原因了。
要注意的是 Windows 9x 工作站并不支持 BOOTP,但 DHCP 是 BOOTP 的扩展,同时 Windows NT 4.0 SP2 以上开始支持 BOOTP 客户机(这也就是为什么安装无盘 WIN95 时必须采用 SP4 及以上的原因),所以,DHCP能够接受来自无盘工作站的 DHCP 请求。
DHCP 的工作方式
使用 DHCP 时,要求整个网络中至少有一台 Windows NT 计算机运行有 DHCP 服务,同时,要使用 DHCP 功能的工作站也必须配置为支持 DHCP。其工作方式如下:
1、DHCP 工作站在启动时,自动与 DHCP 服务器通信,向 DHCP 服务器发出 IP 地址租用请求;
2、DHCP 服务器向工作站提供 IP 地址设置信息(其中也可以包括 WINS 服务器地址)。
DHCP 服务器可以按下面两种方式向工作站提供 IP 地址:
(1)自动分配
自动分配(Automatic allocation)是指在 DHCP 工作站第一次向 DHCP 服务器发出请求并成功租得 IP 地址后,这个地址就永远分配给它使用。这一种很明显没有很大的优越性,因为,DHCP 是根据工作站网络适配器的 MAC 地址来进行 IP 地址分配的,所以,它只相当于减少了人的记忆、配置工作站 IP 地址的工作罢了。
(2)动态分配
动态分配(Dynamic allocation)是指在 DHCP 工作站第一次向 DHCP 服务器发出请求并成功租得 IP 地址后,DHCP 只能暂时的使用这个地址。即是说,DHCP 服务器提供的这个地址有一定的期限,这个期限称为租用期(lease)。只要租用期结束,DHCP 服务器就会把这个地址收回,并将其提供给其他的 DHCP 工作站使用。当然,该工作站也可以在租用快到期时请求一个新的租赁来继续使用这个地址。
动态分配的最大好处就是可以解决 IP 地址不够用的问题。因为在实际应用中我们一般将自己的局域网配置为 C 类(Class C),大家已经知道,在这样的网络中,最多只能支持254台主机。假定网络上有 300 台,那么 IP 地址不够用的情况就发生了。根据上面的概念,在 DHCP 服务中,IP 地址是动态分配而不是固定给具体某台工作站使用的,那么只有有空闲的 IP 地址可用,DHCP 服务器就会在工作站请求时分配一个 IP 地址给它,而一旦工作站不再需要该地址,DHCP 服务器就将其收回重新分配给其它需要的工作站。
DHCP的功能
首先必须有一台DHCP工作在网路上面它会监听网路的DHCP请求它提供两种IP定位方式
AutomaticAllocation
自动分配其情形是一旦DHCP客户端第一次成功的从DHCP伺服器端租用到IP位址之後就永远使用这个位址。
DynamicAllocation
动态分配当DHCP第一次从HDCP伺服器端租用到IP位址之後并非永久的使用该位址只要租约到期客户端就得释放(release)这个IP位址以给其它工作站使用。当然客户端也可以延续(renew)租约或是租用其它的IP位址。
动态分配显然比自动分配更加灵活尤其是当您的实际IP位址不足的时候例如您是一家ISP只能提供200个IP位址用来给拨接客户但并不意味着您的客户最多 只能有200个。因为要知道您的客户们不可能全部同一时间上网的除了他们各自的行为习惯的不同也有可能是电话线路的限制。这样您就可以将这200个地址轮 流的租用给拨接上来的客户使用了。这也是为什麽当您用winipcfg来查看您的IP地址的时候会因每次接拨而不同的原因了(除非您申请的是一个固定IP 通常的ISP都可以满足这样的要求当然可能要另外收费啦)。当然ISP不一定使用DHCP来分配地址但和使用IPPool的原理是一样的。
DHCP除了能动态的设定IP位址之外还可以将一些IP保留下来给一些特殊用途的机器使用也可以按照MAC地址来分配固定的IP地址这样可以给您更大的设 计空间。同时DHCP还可以帮客户端指定网路网关routerNetMaskDNS伺服器WINS伺服器等等项目您在客户端上面除了将DHCP选项打勾之 外几乎无需做任何的IP环境设定。
DHCP服务的工作过程:
视乎客户端是否第一次登录网路﹐DHCP的工作形式会有所不同。
第一次登录的时候﹕
1. 寻找Server。当DHCP客户端第一次登录网路的时候﹐也就是客户发现本机上没有任何IP资料设定﹐它会向网路发出一个DHCPDISCOVER封 包。因为客户端还不知道自己属于哪一个网路﹐所以封包的来源位址会为0.0.0.0﹐而目的位址则为255.255.255.255﹐然后再附上 Dhcpdiscover的信息﹐向网路进行广播。
在Windows的预设情形下,Dhcpdiscover的等待时间预设为1秒﹐也就是当客户 端将第一个Dhcpdiscover封包送出去之后﹐在1秒之内没有得到回应的话﹐就会进行第二次Dhcpdiscover广播。若一直得不到回应的情况 下﹐客户端一共会有四次Dhcpdiscover广播(包括第一次在内)﹐除了第一次会等待1秒之外﹐其余三次的等待时间分别是9﹑13﹑16秒。如果都 没有得到DHCP伺服器的回应﹐客户端则会显示错误信息﹐宣告Dhcpdiscover的失败。之后﹐基于使用者的选择﹐系统会继续在5分钟之后再重复一 次Dhcpdiscover的过程。
2.提供IP租用位址。当DHCP伺服器监听到客户端发出的Dhcpdiscover广播后﹐它会从那些还没有租出的位址范围内﹐选择最前面的的空置IP,连同其它TCP/IP设定,回应给客户端一个DHCPOFFER封包。
由 于客户端在开始的时候还没有IP位址﹐所以在其Dhcpdiscover封包内会带有其MAC位址信息﹐并且有一个XID编号来辨别该封包﹐DHCP伺服 器回应的Dhcpoffer封包则会根据这些资料传递给要求租约的客户。根据伺服器端的设定﹐Dhcpoffer封包会包含一个租约期限的信息。
3.接受IP租约。如果客户端收到网路上多台DHCP伺服器的回应﹐只会挑选其中一个Dhcpoffer而已(通常是最先抵达的那个)﹐并且会向网路发送一个Dhcprequest广播封包﹐告诉所有DHCP伺服器它将指定接受哪一台伺服器提供的IP位址。
同时﹐客户端还会向网路发送一个ARP封包﹐查询网路上面有没有其它机器使用该IP位址﹔如果发现该IP已经被占用﹐客户端则会送出一个DHCPDECLINE封包给DHCP伺服器﹐拒绝接受其Dhcpoffer﹐并重新发送Dhcpdiscover信息。
事实上﹐并不是所有DHCP客户端都会无条件接受DHCP伺服器的offer﹐尤其这些主机安装有其它TCP/IP相关的客户软体。客户端也可以用Dhcprequest向伺服器提出DHCP选择﹐而这些选择会以不同的号码填写在DHCPOptionField里面﹕
换一句话说﹐在DHCP伺服器上面的设定﹐未必是客户端全都接受﹐客户端可以保留自己的一些TCP/IP设定。而主动权永远在客户端这边。
4.租约确认。当DHCP伺服器接收到客户端的Dhcprequest之后﹐会向客户端发出一个DHCPACK回应﹐以确认IP租约的正式生效﹐也就结束了一个完整的DHCP工作过程。
如上的工作流程如下图:
DHCP发放流程
第一次登录之后﹕
一旦DHCP客户端成功地从 伺服器哪里取得DHCP租约之后﹐除非其租约已经失效并且IP位址也重新设定回0.0.0.0﹐否则就无需再发送Dhcpdiscover信息了﹐而会直 接使用已经租用到的IP位址向之前之DHCP伺服器发出Dhcprequest信息﹐DHCP伺服器会尽量让客户端使用原来的IP位址﹐如果没问题的话﹐ 直接回应Dhcpack来确认则可。如果该位址已经失效或已经被其它机器使用了﹐伺服器则会回应一个DHCPNACK封包给客户端﹐要求其从新执行 Dhcpdiscover。
至于IP的租约期限却是非常考究的﹐并非如我们租房子那样简单﹐以NT为例子﹕DHCP工作站除了在开机的时候发出 dhcprequest请求之外﹐在租约期限一半的时候也会发出dhcprequest﹐如果此时得不到DHCP伺服器的确认的话﹐工作站还可以继续使用 该IP﹔然后在剩下的租约期限的再一半的时候(即租约的75%)﹐还得不到确认的话﹐那么工作站就不能拥有这个IP了。至于为什么不是到租约期限完全结束 才放弃IP呢﹖﹐对不起﹐小弟也是不学无术之人﹐没有去深究了﹐只知道要回答MCSE题目的时候﹐您一定要记得NT是这么工作的就是了。
要是您想退租,可以随时送出DHCPLEREASE命令解约﹐就算您的租约在前一秒钟才获得的。
跨网路的DHCP运作
从 前面描述的过程中,我们不难发现:DHCDISCOVER是以广播方式进行的,其情形只能在同一网路之内进行﹐因为router是不会将广播传送出去的。 但如果DHCP伺服器安设在其它的网路上面呢﹖由于DHCP客户端还没有IP环境设定﹐所以也不知道Router位址﹐而且有些Router也不会将 DHCP广播封包传递出去﹐因此这情形下DHCPDISCOVER是永远没办法抵达DHCP伺服器那端的,当然也不会发生OFFER及其他动作了。要解决 这个问题,我们可以用DHCPAgent(或DHCPProxy)主机来接管客户的DHCP请求﹐然后将此请求传递给真正的DHCP伺服器﹐然后将伺服器 的回复传给客户。这里﹐Proxy主机必须自己具有路由能力,且能将双方的封包互传对方。
若不使用Proxy,您也可以在每一个网路之中安装DHCP伺服器﹐但这样的话﹐一来设备成本会增加﹐而且﹐管理上面也比较分散。当然啰﹐如果在一个十分大型的网路中﹐这样的均衡式架构还是可取的。端视您的实际情况而定了。
DHCP封包格式
以下为各栏位的简要说明:
OP
若是client送给server的封包,设为1,反向为2。
HTYPE
硬体类别,Ethernet为1。
HLEN
硬体位址长度,Ethernet为6。
HOPS
若封包需经过router传送,每站加1,若在同一网内,为0。
TRANSACTIONID
DHCPREQUEST时产生的数值,以作DHCPREPLY时的依据。
SECONDS
Client端启动时间(秒)。
FLAGS
从0到15共16bits,最左一bit为1时表示server将以广播方式传送封包给client,其余尚未使用。
ciaddr
要是client端想继续使用之前取得之IP位址,则列于这里。
yiaddr
从server送回client之DHCPOFFER与DHCPACK封包中,此栏填写分配给client的IP位址。
siaddr
若client需要透过网路开机,从server送出之DHCPOFFER、DHCPACK、DHCPNACK封包中,此栏填写开机程式码所在server之位址。
giaddr
若需跨网域进行DHCP发放,此栏为relayagent的位址,否则为0。
chaddr
Client之硬体位址。
sname
Server之名称字串,以0x00结尾。
file
若client需要透过网路开机,此栏将指出开机程式名称,稍后以TFTP传送。
options
允许厂商定议选项(Vendor-SpecificArea),以提供更多的设定资讯(如:Netmask、Gateway、DNS、等等)。其长度可变,同时可携带多个选项,每一选项之第一个byte为资讯代码,其后一个byte为该项资料长度,最后为项目内容。
DHCP的选项非常多,有空请查阅RFC或相关文献,并好好理解,这里不再叙述了。
DHCP协定之RFC文件
RFC-951﹑RFC-1084﹑RFC-1123﹑RFC-1533﹑RFC-1534﹑RFC-1497﹑RFC-1541
DHCP基本知识点
1 DHCP协议在RFC2131种定义,使用udp协议进行数据报传递,使用的端口是67以及68。
2 DHCP最常见的应用是,自动给终端设备分配ip地址,掩码,默认网关,但是DHCP也同样可以给终端设备自动配置其他options,比如DNS server, 域名(比如 net130.com),time zones, NTP servers 以及其他的配置内容,更有些厂家,利用自己开发的第3放软件,把自己的一些配置信息,利用dhcp协议来实现对终端设备的自动配置。
3 DHCP服务的系统最基本的构架是 client/server模式,并且如果client 和server不再同一个2层网络内(即广播可以到达的网络范围),则必须要有能够透过广播报文的中继设备,或者能把广播报文转化成单播报文的设备 (cisco的ios就引经了这种功能)
4 CISCO的路由器(IOS12.0 T1以后),可以配置为dhcp的中继设备,DHCP的客户端设备,也可以配置为DHCP的服务器。
5 同一个网段DHCP服务器可以有多个,这不会影响终端设备从服务器获取配置信息,终端设备以接受到的第一组配置信息为准。以后又服务器段返回的DHCP配置信息被抛弃。
6 DHCP 服务器往往遵守先来先服务的规则(first-come, first-served),或者说他能够建立一个IP地址和终端设备MAC地址之间的映射表(或者叫做database),由此可以保证特定的终端(也 就是特定的MAC)每次开机后都能够获得此相同的ip地址。