DHCP(Dynamic Host Configuration Protocol)动态主机配置协议,安装了该服务的服务器就是DHCP服务器,在DHCP服务器端,设定一个地址池,为本网段内那些开机前时没有IP地址的主机分配动态IP地址,当客户端下线时,又把分发出去的IP收回来,以便下一次继续使用。在这个过程中,DHCP服务器扮演着重要的作用。
DHCP的由来:
  DHCP是从原有的BootP协议发展起来的,原来的目的是为无盘工作站分配IP地址的协议,当前更多的用于集中管理IP地址。然而DHCP协议也有其缺点,例如一台DHCP客户计算机没有一个固定的IP地址,而对于提供网络服务的服务器来讲,经常变化的IP地址并不适合。并且当前的DNS协议并不能和DHCP协作,为DHCP客户直接提供主机名解析任务。
  DHCP的工作过程:
  DHCP工作时要求客户机和服务器进行交互,由客户机通过广播向服务器发起申请IP地址的请求,然后由服务器分配一个IP地址以及其他的TCP/IP设置信息。整个过程可以分为以下步骤:
DHCPdiscover: (IP地址租用申请)DHCP客户机的TCP/IP首次启动时,就要执行DHCP客户程序,以进行TCP/IP 的设置。由于此时客户机的TCP/IP还没有设置完毕,就只能使用广播的方式发送DHCP请求信息包,广播包使用 UDP端口67和68进行发送,广播信息中包括了客户机的网络界面的硬件地址和计算机名字,以提供DHCP服务器进行分配。
DHCPoffer : (IP地址租用提供)当接收到DHCP客户机的广播信息之后,所有的DHCP服务器均为这个客户机分配一个合适的IP地址,将这些IP地址、网络掩码、租用时间等信息,按照DHCP客户提供的硬件地址发送回DHCP客户机。这个过程中对DHCP服务器没有对客户计算机进行限制,因此客户机能收到多个IP地址提供信息。
DHCPrequest:( IP地址租用选择)由于客户机接收到多个服务器发送的多个IP地址提供信息,客户机将选择一个IP地址,拒绝其他提供的IP地址,以便这些地址能分配给其他客户。客户机将向它选择的服务器发送选择租用信息。
DHCPack: (IP地址租用确认)服务器将收到客户的选择信息,如果也没有例外发生,将回应一个确认信息,将这个IP地址真正分配给这个客户机。客户机就能使用这个IP地址及相关的TCP/IP数据,来设置自己的TCP/IP堆栈。
当客户机的地址租约达到50%时,将会向服务器发起续租请求,DHCPresquest
  DHCPrequest:(更新租用)DHCP中,每个IP地址是有一定租期的,若租期已到,DHCP服务器就能够将这个IP地址重新分配给其他计算机。因此每个客户计算机应该提前不断续租它已经租用的IP地址,服务器将回应客户机的请求并更新该客户机的租期设置。一旦服务器返回不能续租的信息,那么DHCP客户机只能在租期到达时放弃原有的IP地址,重新申请一个新 IP地址。为了避免发生问题,续租在租期达到50%时就将启动,如果没有成功将不断启动续租请求过程。
DHCPrelease :( 释放IP地址租用)客户机可以主动释放自己的IP地址请求,也可以不释放,但也不续租,等待租期过期而释放占用的IP地址资源。
由于DHCP依赖于广播信息,因此一般的情况下,客户机和服务器应该位于同一个网络之内。然而可以设置网络中的路由器为可以转发BootP广播包,使得服务器和客户机可以位于两个不同的网络中。然而配置转发广播信息,不是一个很好的解决办法,更好的办法为使用DHCP中继,DHCP中继机和DHCP客户端位于同一个网络中,来回应客户机的租用请求,然而它不维护DHCP数据和拥有IP地址资源,它只是将请求通过TCP/IP转发给位于另一个网络上的DHCP服务器,进行实际的IP地址分配和确认。
下面就以实验的方式简单介绍一下DHCP的基本用法。前提是要确保dhcp这个软件包要安装上。
DHCP配置文件的介绍
实验一:地址动态分配
DHCP服务器IP地址为192.168.80.1,通过服务器向客户端分发192.168.80.10—20网段之间的地址,
DHCP的主配置文件在/etc/dhcpd.conf内,编辑这个文件,定义所负责的范围是192.168.80.0网段。routers地址为192.168.80.1,域名服务器地址为192.168.80.1,如图所示:
接着是定义要动态分配出去的地址池,范围是192.168.80.10—20.
设置完成后,保存退出,重启httpd服务,命令为:service httpd restart
开启客户端机器,要确保本机IP地址是通过DHCP的方式动态获取到的。具体操作就是用Tab键切换到Use DHCP一栏,按下空格键选中即可。
接着就是重启本机(客户端)的网络服务;
通过使用ifconfig命令查看一下本机的IP地址,可以发现,本机IP地址为:192.168.80.19
再回想一下刚才在DHCP服务器上设置的地址段是192.168.80.10—20,本机的IP地址最后一段为19,在所设定的地址段内,由此,可以说明该实验是成功的。或许在这里你会有疑问,为什么是19,而不是11、15、或者18呢?如果你能想到这个方面,那只能说明你是真正考虑了这个实验。那么这个问题的答案呢?
实际情况是:当DHCP服务器动态分配IP地址时,并不是随机分配的,而是按照一定顺序来分配IP地址的。在linux下,是按照由大到小的顺序来分配客户端IP地址的。linux下的DHCP服务器总是把最大的IP地址分配给第一个来申请IP地址的客户端。而Windows下的DHCP服务器却反之。
实验二:地址绑定
接着将实验往下拓展吧?如果客户端想一直都使用同一个IP地址来登录服务器。那么我们的服务器该如何来配置呢?这个问题不难,以下就是步骤:
打开主配置文件/etc/httpd.conf ,编辑用“host ns ”括起来的部分。next-server与该实验无关,可以不用考虑,在hardware ethernet后面跟客户端的MAC地址,fixed-address后面跟的是要分配给客户端的IP地址,当然,切记要小心,后面分号要写上。保存退出。

切换到客户端主机测试一下,重启网络服务,再用ifconfig命令查看一下该主机额的当前IP。
实验结果为,客户端得到了一个通过DHCP分配的动态IP地址。Hadd和DHCP服务器上设置的是对应起来的。
实验三: DHCP中继
再将问题深入化,下面在不同的网段之间看能否实现DHCP服务,先来划分内网和外网吧!内网网段为192.168.80.0/24 ,外网为192.168.90.0/24 ,内网与外网之间是通过路由器(由linux来充当路由器)来链接的,DHCP服务器在内网里面。当外网用户需要向DHCP服务器申请IP地址时,该如何设置才能达到目的呢?
还是先来配置DHCP服务器吧!编辑DHCP主配置文件/etc/dhcp.conf
要设定两个subnet范围,一个负责内网客户端申请IP地址,一个负责外网客户端申请IP地址。
在试验一的基础上对DHCP服务器添加解析外网网段的subnet。
好的,DHCP服务器已经配置完成了,接下来就是路由器的配置了,
路由器需要配置两块网卡:eth0,内网网卡,与DHCP服务器相连。eth2,外网网卡,与客户端相连。在路由器上的配置很简单。编辑/etc/sysconfig/dhcrelay文件,修改内容:
INTERFACES=”eth1” 指定路由器监听哪个网段的数据信息,
DHCPSERVER=”192.168.80.1” 指定DHCP服务器地址
配置完成后,保存退出,然后重启dhcrelay中继服务。
切换到客户端机器上来,重启网卡以获得新的IP地址。另外一种通过DHCP获得IP地址的方法是使用dhclient eth0或者dhclient -d eth0。加不加-d是有一些区别的,来!自己动手验证一下吧? 重启网卡的结果如下:
用ifconfig命令查看网卡地址。