介绍DHCP服务器是如何为DHCP客户端自动分配IP地址,以及DHCP服务在跨子网中是如何实施DHCP中继代理的。
一 DHCP服务的自动IP地址分配原理
DHCP使用客户端/服务器(Client/Server)模型。网络管理员建立一个或多个维护TCP/IP配置信息,并将其提供给客户端的DHCP服务器。服务器数据库包含以下信息。
网络上所有客户端的有效配置参数。
在指派到客户端的地址池中维护的有效IP地址,以及用于手动指派的保留地址。
服务器提供的租约持续时间。
通过在网络上安装和配置DHCP服务器,启用DHCP的客户端可在每次启动并加入网络时动态地获得其IP地址和相关配置参数。DHCP服务器以地址租约的形式将该配置提供给发出请求的客户端。
在以下3种情况下,DHCP客户机将申请一个新的IP地址。
计算机第一次以DHCP客户机的身份启动。
DHCP客户机的IP地址因某种原因(如租约期到了,或断开连接了)已经被服务器收回,并提供给其他DHCP客户机使用。
DHCP客户机自行释放已经租用的IP地址,要求使用一个新的IP地址。
DHCP客户机申请一个新的IP地址的总体过程如图6所示。其具体的过程如下。
(1)DHCP客户机设置为"自动获得IP地址"后,因为还没有IP地址与其绑定,此时称为处于"未绑定状态"。这时的DHCP客户机只能提供有限的通信能力,如可以发送和广播消息,但因为没有自己的IP地址,所以自己无法发送单播的消息。
(2)DHCP客户机试图从DHCP服务器那里"租借"到一个IP地址,这时DHCP客户机进入"初始化状态"。这个未绑定IP地址的DHCP客户机会向网络上发出一个源IP地址为广播地址0.0.0.0的DHCP探索消息,寻找看哪个DHCP服务器可以为它分配一个IP地址。
(3)子网络上的所有DHCP服务器收到这个探索消息。各DHCP服务器确定自己是否有权为该客户机分配一个IP地址。
(4)确定有权为对应客户机提供DHCP服务后,DHCP服务器开始响应,并向网络广播一个DHCP提供消息,包含了未租借的IP地址信息以及相关的配置参数。
(5)DHCP客户机会评价收到的DHCP服务器提供的消息并进行两种选择。一是认为该服务器提供的对IP地址的使用约定(称为"租约")可以接受,就发送一个请求消息,该消息中指定了自己选定的IP地址并请求服务器提供该租约。还有一种选择是拒绝服务器的条件,发送一个拒绝消息,然后继续从第(1)步开始执行。
(6)DHCP服务器在收到确认消息后,根据当前IP地址的使用情况以及相关配置选项,对允许提供DHCP服务的客户机发送一个确认消息,其中包含了所分配的IP地址及相关DHCP配置选项。
(7)客户机在收到DHCP服务器的消息后,绑定该IP地址,进入"绑定状态"。这样客户机就有了自己的IP地址,就可以在网络上进行通信了。
二 DHCP中继代理原理
在大型的网络中,可能会存在多个子网。DHCP客户机通过网络广播消息获得DHCP服务器的响应后得到IP地址。但广播消息是不能跨越子网的。因此,如果DHCP客户机和服务器在不同的子网内,客户机还能不能向服务器申请IP地址呢?这就要用到DHCP中继代理。DHCP中继代理实际上是一种软件技术,安装了DHCP中继代理的计算机称为DHCP中继代理服务器,它承担不同子网间的DHCP客户机和服务器的通信任务。
中继代理是在不同子网上的客户端和服务器之间中转DHCP/BOOTP消息的小程序。根据征求意见文档(RFC),DHCP/BOOTP中继代理是DHCP和BOOTP标准和功能的一部分。
1.路由器的DHCP/BOOTP中继代理支持
在TCP/IP网络中,路由器用于连接称做"子网"的不同物理网段上使用的硬件和软件,并在每个子网之间转发IP数据包。要在多个子网上支持和使用DHCP服务,连接每个子网的路由器应具有在RFC 1542中描述的DHCP/BOOTP中继代理功能。
要符合RFC 1542并提供中继代理支持,每个路由器必须能识别BOOTP和DHCP协议消息并相应处理(中转)这些消息。由于路由器将DHCP消息解释为BOOTP消息(例如,通过相同的UDP端口编号发送,并包含共享消息结构的UDP消息),具有BOOTP中继代理能力的路由器可中转网络上发送的DHCP数据包和任何BOOTP数据包。
如果路由器不能作为DHCP/BOOTP中继代理运行,则每个子网都必须有在该子网上作为中继代理运行的DHCP服务器或另一台计算机。如果配置路由器支持DHCP/BOOTP中继不可行或不可能,您可以通过安装DHCP中继代理服务来配置运行Windows NT Server 4.0或更高版本的计算机充当中继代理。
在大多数情况下,路由器支持DHCP/ BOOTP中继。如果您的路由器不支持,则应与路由器制造商或供应商联系以查明是否有软件或固件升级提供对该功能的支持。
2.中继代理的工作原理
中继代理将它连接的其中一个物理接口(如网卡)上广播的DHCP/BOOTP消息中转到其他物理接口连至的其他远程子网。图7显示了子网2上的客户端C是如何从子网1上的DHCP服务器1获得DHCP地址租约的。具体过程如下。
(1)DHCP客户端C使用众所周知的UDP服务器67号端口在子网2上以"用户数据报协议(UDP)"的数据报广播DHCP/BOOTP查找消息(DHCPDISCOVER)。67号UDP端口是BOOTP和DHCP服务器通信所保留和共享的。
(2)中继代理,在DHCP/BOOTP允许中继的路由器的情况下,检测DHCP/BOOTP消息头中的网关IP地址字段。如果该字段有IP地址0.0.0.0,代理文件会在其中填入中继代理或路由器的IP地址,然后将消息转发到DHCP服务器1所在的远程子网1。
(3)远程子网1上的DHCP服务器1收到此消息时,它会为该DHCP服务器可用于提供IP地址租约的DHCP作用域检查其网关IP地址字段。
(4)如果DHCP服务器1有多个DHCP作用域,网关IP地址字段(GIADDR)中的地址会标识将从哪个DHCP作用域提供IP地址租约。
例如,如果网关IP地址(GIADDR)字段有10.0.0.2的IP地址,DHCP服务器会检查其可用的地址作用域集中是否有与包含作为主机的网关地址匹配的地址作用域范围。在这种情况下,DHCP服务器将对10.0.0.1和10.0.0.254之间的地址作用域进行检查。如果存在匹配的作用域,则DHCP服务器从匹配的作用域中选择可用地址以便在对客户端的IP地址租约提供响应时使用。
(5)当DHCP服务器1收到DHCPDISCOVER消息时,它会处理IP地址租约(DHCPOFFER)并将其直接发送给在网关IP地址(GIADDR)字段中标识的中继代理。
(6)路由器然后将地址租约(DHCPOFFER)转发给DHCP客户端。此时客户端的IP地址仍旧无人知道,所以它必须在本地子网上广播。同样,根据RFC 1542,DHCPREQUEST消息从客户端中转发服务器,而DHCPACK消息从服务器转发到客户端。