什麽是DHCP

DHCP是DynamicHostConfigurationProtocol之缩写它的前身是BOOTP。BOOTP原本是用於无磁碟主机连接的网路上面的网路主机使用BOOTROM而不是磁碟起动并连接上网路BOOTP则可以自动地为那些主机设定TCP/IP环境。

DHCP可以说是BOOTP的增强版本它分为两个部份一个是伺服器端而另一个是客户端。所有的IP网路设定资料都由DHCP伺服器集中管理并负责处理客户端的HDCP要求而客户端则会使用从伺服器分配下来的IP环境资料。Client采用端口号68,DHCP Server采用端口号67。

 

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服务优点不少:网络管理员可以验证IP地址和其它配置参数,而不用去检查每个主机;DHCP不会同时租借相同的IP地址给两台主机;DHCP管理员可以约束特定的计算机使用特定的IP地址;可以为每个DHCP作用域设置很多选项;客户机在不同子网间移动时不需要重新设置IP地址。

但同时也存在不少缺点:DHCP不能发现网络上非DHCP客户机已经在使用的IP地址;当网络上存在多个DHCP服务器时,一个DHCP服务器不能查出已被其它服务器租出去的IP地址;DHCP服务器不能跨路由器与客户机通信,除非路由器允许BOOTP转发。

       工作流程

DHCP服务的工作过程是这样的:

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

Dhcpdiscover的等待时间预设为1秒也就是当客户端将第一个Dhcpdiscover封包送出去之後在1秒之内没有得到回应的话就会进行第二次Dhcpdiscover广播。在得不到回应的情况下客户端一共会有四次Dhcpdiscover广播(包括第一次在内)除了第一次会等待1秒之外其余三次的等待时间分别是9,13,16秒。如果都没有得到DHCP伺服器的回应客户端则会显示错误信息宣告Dhcpdiscover的失败。之後基於使用者的选择系统会继续在5分钟之後再重一次Dhcpdiscover的要求。

1143937813_ddvip_5785.jpg

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

由於客户端在开始的时候还没有IP地址所以在其Dhcpdiscover封包内会带有其MAC地址信息并且有一个XID编号来辨别该封包DHCP伺服器回应的Dhcpoffer封包则会根据这些资料传递给要求租约的客户。根据伺服器端的设定Dhcpoffer封包会包含一个租约期限的信息。

1143937813_ddvip_7202.jpg

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

同时客户端还会向网路发送一个ARP(Addre***esolutionProtocol)封包查询网路上面有没有其它机器使用该IP地址如果发现该IP已经被占用客户端则会送出一个Dhcpdeclient封包给DHCP伺服器拒绝接受其Dhcpoffer并重新发送Dhcpdiscover信息。

1143937813_ddvip_2403.jpg

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

事实上并不是所有DHCP客户端都会无条件接受DHCP伺服器的offer尤其这些主机安装有其它TCP/IP相关的客户软体。客户端也可以用Dhcprequest向伺服器提出DHCP选择而这些选择会以不同的号码填写在DHCPOptionField里面

号码代表意思
01Sub-netMask
03RouterAddress
06DNSServerAddress
0FDomainName
2CWINS/NBNSServerAddress
2EWINS/NBTNodeType
2FNetBIOSScopeID

换一句话说在DHCP伺服器上面的设定未必和所有客户端都一致客户端可以保留自己的一些TCP/IP设定。

IP租约确认当DHCP伺服器接收到客户端的Dhcprequest之後会向客户端发出一个Dhcpack回应以确认IP租约的正式生效也就结束了一个完整的DHCP工作过程。

1143937813_ddvip_6450.jpg

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

6.更新租约。DHCP服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其IP租约。DHCP客户机启动时和IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送更新其IP租约的信息。当然您也可以随时使用命令将DHCP租约release掉啦就算您的租约在前一秒钟才获得的。

跨网路的DHCP运作

以上的情形是在同一网路之内进行的但如果DHCP伺服器安设在其它的网路上面呢由DHCP客户端还没有IP环境设定所以也不知道Router地址而且有些Router也不一定会将DHCP广播封包传递出去这时候我们可以用DHCPAgent(或DHCPProxy)主机来接管客户的DHCP请求然後将此请求传递给真正的DHCP伺服器然後将伺服器的回覆传给客户。这里Proxy主机必须自己具有routing能力。

当然您也可以在每一个网路之中安装DHCP伺服器但这样的话一来设备成本会增加而且管理上面也比较分散。当然如果在一个十分大型的网路中这样的均衡式架构还是可取的。

 

为了便于理解,我们把DHCP客户机比做餐馆里的客人,DHCP服务器比做服务员(一个餐馆里也可以有多个服务员),IP地址比做客户需要的食物。那么可以这样描述整个过程:客人走进餐馆,问:“有没有服务员啊?”(DHCPdiscover),多个服务员同时回答:“有,我这有鸡翅”“有,我这有汉堡”(DHCPoffer)。客人说:“好吧,我要一份汉堡”(DHCPrequest,这个客人比较死板,总是选择第一次听到的食物),端着汉堡的服务员回应了一声:“来啦”(DHCPack),并把食物端到客人面前,供其享用(将网卡和IP地址绑定)。客人下次来的时候,就直接找上次那个服务员点自己喜欢的汉堡了(DHCPrequest),如果还有汉堡,服务员会再次确认并上菜(DHCPack),而如果已经卖完了,服务员则会告诉客人:“不好意思,已经卖完了”(DHCPnack)。当然,服务员隔一段时间会来收拾一次桌子,除非客人特别说明这菜还要继续吃的,服务员会将剩菜端走。

Schema of a typical DHCP session

Schema of a typical DHCP session

  附:服务器上配置DHCP

接下来,我们就向大家说明如何在服务器上配置DHCP服务,我们选取了两种最为常见的服务器操作系统Windows2000Server和Linux作为讲解实例,另外我们还会介绍如何在常见的网络设备上配置DHCP。
Windows2000Server
Windows2000Server在DHCP上下了很大的功夫,不仅解决了NT4.0中的种种问题,而且还增加了许多新的特性。例如和DNS的集成,加强的DHCP监视和管理,DHCP集群服务器,DHCP目录授权等等。
下面是在Windows2000中配置DHCP服务的实例
1.安装DHCP服务。用管理员账号登录,在控制面板中双击“添加/删除程序”,选择“添加/删除Windows组件”,启动Windows组件向导,选中“网络服务”,单击“详细信息”,选中“动态主机分配协议”,单击“确定”,即可在该服务器上安装DHCP服务。
2.要想使刚安装的DHCP服务器能为客户机分配IP地址,必须首先在域中为该服务器授权。使用管理员账号登录计算机,在“管理工具”菜单中打开DHCP控制台;在控制树中,右键单击想要授权的服务器,在弹出菜单中,单击“授权”,即可完成对该服务器的授权。
小知识:授权(Authorize),这个功能非常实用和必要,因为在旧版本的DHCP服务器中任何用户都可以创建一台DHCP服务器,该服务器也可以为用户分配IP地址,这样就可能造成地址冲突,在Windows2000Server中这个问题得到了有效的解决:任何DHCP服务器只有在目录服务中被授权之后才能为客户分配IP地址,否则即使该服务器收到租用请求,也不能为客户机分配IP地址。
3.创建并配置作用域。在控制树中,右键单击要用来分配地址的服务器,选中“新建作用域”,在接下来的向导中,依次设置作用域名、作用域的起始地址、输入子网掩码、排除的地址或地址范围、DHCP租约期限信息。名称项只是作提示用,可填任意内容。IP地址范围中有起始地址、结束地址和子网掩码的选项,我们可以分别填入10.0.0.1,10.255.255.254,255.0.0.0(如图1)。如果有必要,可在后面的选项中输入要保留的IP地址或IP地址范围。租约期限选项可设定DHCP服务器所分配的IP地址的有效期,比如设8天。最后,分配好DNS、WINS服务器,并激活作用域。

 

1143938045_ddvip_2355.jpg设置IP地址范围

RedHatLinux
在Linux上配置DHCP需要的文件有/etc/dhcpd.conf,/var/state/dhcp/
dhcpd.leases,相关工具有/etc/rc.d/init.d/dhcpd。下面是在RedHatLinux上配置DHCP的实例:
1.设置DHCP服务器的FQDN名
optiondomain-name"clinet.com"
2.设置DNS的服务器地址
optiondomain-name-servers10.1.1.1;
3.设置子网掩码
optionsubnet-mask255.255.0.0;
4.设置租约时间
如果客户端不能请求一个指定的租用期,就使用该参数来定义该地址租用的时间长度default-lease-time1200;
如果客户端可以请求一个制订的租用期,就使用该命令来定义最长的租用时间max-lease-time87600
5.设置子网的网段及相关范围配置
subnet10.0.0.0netmask255.0.0.0;
{
range10.0.0.210.10.10.10;//指定子网的IP范围
optionbroadcast-address10.0.0.255;//指定子网的广播地址
optionrouters10.0.0.1;//指定网关的IP
}
6.给客户绑定静态IP
hostclinet{
hardwareethernet00:50:BA:CA:2E:D2;
fixed-address10.10.10.10;
}
网络设备
有时候,在一些中高端的网络设备(路由器、交换机)上已经集成了DHCP服务,我们便可以在网络设备上实现DHCP服务,不使用专门的主机做DHCP服务器,以节省成本。
下面是在cisco路由器上配置DHCP的实例
1.指定不自动分配的IP地址范围
ipdhcpexcluded-address10.1.1.110.1.1.19//指定从10.1.1.1到10.1.1.19的IP地址是手工分配的
2.设置DHCP地址池
ipdhcppoolglobal//这条命令指定了DHCP地址池的名称
network10.1.0.0255.255.0.0//动态分配的IP地址范围,这里是10.1.0.0网段所有的IP地址(前面指定的非自动分配地址除外)
3.设置DHCP附加信息
domain-nameclient.com//为客户机配置域后缀
dns-server10.1.1.110.1.1.2//为客户机配置DNS服务器的地址,这里是10.1.1.1和10.1.1.2
netbios-name-server10.1.1.510.1.1.6//为客户机配置WINS服务器地址,这里是10.1.1.5和10.1.1.6
netbios-node-typeh-node//为客户机配置节点模式(影响名称解释的顺利如h-node是先通过wins服务器解释)
default-router10.1.0.10010.1.0.101//为客户机配置默认网关
4.设置租约期限
lease8//设置租约时间为8天
5.有时候我们需要为DHCP服务器设置子地址池,例如我们希望10.1.1.0/24这个网段的客户机的网关为10.1.1.100,我们这样设置:
ipdhcppoolsubglobal
network10.1.1.0255.255.255.0//global的子地址池,将从global继承域名等选项
default-router10.1.1.10010.1.1.101//为客户机配置默认网关
6.相关的DHCP调试命令
noservicedhcp//停止DHCP服务
showipdhcpbinding//显示地址分配情况
showipdhcpconflict//显示地址冲突情况。