BOOTP协议演化而来,它们同属于TCP/IP协议族,是目前以太网上使用较多的自动进行客户机TCP/IP配置的协议。作为被广泛使用的网络操作系统,NT Server 4.0和Linux都提供了对DHCP的支持,本文就以NT Server 4.0自带的DHCP服务器和Linux下最常见的dhcpd 2.0为例来分析两种系统下DHCP的使用和区别。
一、DHCP协议的工作原理
每个基于TCP/IP协议的网络主机(Host)都需要一个唯一确定的32位IP地址来与网络通信,如果每台主机的IP地址都用手工设定的话,工作量将是不可想象的,能不能让主机在启动时就被自动配置IP地址从而正常工作呢?这正是DHCP协议设计的初衷。一台配置了DHCP的主机启动时会强制发送一个有限地址广播(32位全为1的IP地址即255.255.255.255被称为有限广播地址,对此地址的广播称为有限地址广播或本地网络广播)。当本地网络中的DHCP服务器收到广播后,会根据收到的物理地址(Physical Address)在服务器上查找相应配置,并从划定的IP池中发送某个IP地址及附加选项(如租用到期时间等)给客户机,由于使用广播,没有中转的DHCP显然不能跨越子网,而且有可能一个客户机的信息被几个服务器响应,所以客户机总是回答最先收到的DHCP响应,收到响应后客户机还要发送一条注册消息,以告诉服务器该IP已被租用,以防止IP地址冲突。整个注册过程实际上是一套相当复杂的程序。双方要进行多次信息交换,才能最终注册成功。
二、NT:图形化的DHCP管理
NT一向以良好的操作界面著称,DHCP Server也不例外,通过图形化的DHCP管理器,可以直观地获得目前的DHCP客户机IP使用状况,可以方便地对整个服务项目及客户机配置进行修改。NT的DHCP服务器支持相当多的DHCP选项,但是Windows客户机(包括NT自身)仅支持IP地址、子网掩码、默认网关、DNS服务器名、域名、WINS服务器名、WINS节点类型、租用期等较少的选项,不过这已涵盖了局域网中的绝大部分配置。
NT DHCP服务器通过定义一个或多个IP地址范围来为客户机提供可用的IP、子网掩码、默认网关,但在一个子网内只能有一个IP地址范围。然后,可以通过DHCP选项为客户机提供更多的附加设置,NT的附加设置与RFC1541一致,如006是DNS服务器名、044是WINS服务器名等。如果一台DHCP客户机租用了某个IP地址,那么附加的选项也将传递给它,前提是客户机没有对这些附加选项进行配置,因为本机配置总是优先的。
如果需要给某些主机特定的IP而不是自动选择,可以添加相应的保留位置,并输入该主机以太网卡的48位物理地址作为唯一标识符,同时也能对那些特定的主机进行特定的配置。每当具有此物理地址的客户机登录时,服务器都会给它固定的IP地址和选项。
NT 4.0 DHCP服务器的优点是操作直观简单,易于管理,并且一个有趣的地方是Windows客户机总会优先选择NT的DHCP服务(和前面的总是回答第一个响应似乎有些矛盾,但事实如此,在一个全部由Windows主机组成的子网里,如果存在NT DHCP 服务器,那么Linux DHCP服务器几乎不会被使用)。它的主要缺陷在于不能有效地控制未知用户租用IP,也就是说,只要还有未用地址,任何收到的请求都会被接受,而且在需要对较多的客户机进行单独配置时仍然会很繁琐。
三、Linux:给你更多的""自由""
Linux作为自由软件的代表,其优势是Windows系列不可比拟的。Dhcpd就是遵守GPL规则的一款DHCP服务器软件。现在最新版是3.0.1,不过大部分Linux自带的是2.0及以下版本。本文即以较低的版本为例。
Dhcpd使用非常简单,在/etc/dhcpd.conf文件中定义好相应的规则和选项,再执行dhcpd eth?就能在相应的网络接口上工作了,如果只有一个网卡,则可以省略该参数。
前面说过,DHCP必须依靠有限地址广播,通常Linux并没有配置这个特殊地址,因此,首先要使用route命令添加一条路由,例如要在eth0上接收广播,就是route add -host 255.255.255.255 dev eth0(要想启动时系统自动添加该路由,请将此命令加入/etc/rc.d/rc.local文件末尾)。Dhcpd的配置文件dhcpd.conf不像NT使用标准编号规则,而是使用类似于C语言的定义方法,语句都以分号结尾,以下举例说明:
定义一个从192.168.0.2到192.168.0.254的IP地址范围:
subnet 192.168.0.0 netmask 255.255.255.0
{
range 192.168.0.2 192.168.0.254;
}
指定一个客户机使用特定的IP地址:
host mycomputer1
{
hardware ethernet 00:b0:d0:78:0b:84;
fixed-address 192.168.0.2;
}
默认租用期限(秒):
default-lease-time 2592000;
最大租用期限(dhcpd并没指出-1可用作特殊的最大期限,但是Windows客户机能使用这个期限,效果和NT DHCP服务器的""-1--没有期限""一样):
max-lease-time -1;
其他选项大部分都以option开头,如指定默认网关是option routers 192.168.0.254,还有域名服务器名称(domain-name-servers)、域名(domain-name)、子网掩码(subnet-mask)、广播地址(broadcast-address)、WINS服务器地址(netbios-name-servers)等,要特别指出的是,它可以指定对未知用户的处理规则,即是否允许未知用户获得合法IP,在subnet段中加入deny unknown-clients;就会禁止未知用户获取此网段内合法的IP,这对需要严格控制IP地址使用的情况非常有用,这也是与NT DHCP服务相比最大的优势。
NT的图形化界面是出了名的,但同时也屏蔽了系统的细节。如果出现任何错误,只能依赖NT自身的恢复能力,对于问题的解决,我们其实无能为力。因此,NT的DHCP服务推荐给已习惯使用Windows系列的网管,不需要知道什么底层操作也能很快配置和使用这项服务。
Linux下的DHCP服务(及其他服务)则以直接、高效著称,可以最大限度利用现有的资源,而且,这些服务提供的都是最基本的网络信息,一旦出现问题,通过检查Log就能一针见血地发现问题的所在,而且故障的恢复也很方便。
如果你希望更多地与网络""交互"",笔者推荐Linux。