记录这条租约 没有冲突 地址冲突检查 收到 DHCPDISCOVER 记录接收报文的接口IP 根据接口IP查找地址池 创建租约:IP+Client ID+租期 从地址池中分配一个IP 将租约期限设为60秒,租约状态为OFFER 记录这条租约 冲突 释放租约,把IP加入冲 突列表,并重新分配IP 图 2-3 DHCP提供阶段服务器的处理
3. 选择阶段
客户端选择某台DHCP服务器提供的网络配置参数的阶段。如果客户端收到网络上多台DHCP服务器的响应,但它只选择接收到的第一个DHCPOFER报文,然后它以广播形式发送一个DHCPREQUEST报文作为响应,表示已接收其中某一个DHCP服务器提供的IP,该消息中包含向它所选定的第一个OFFER报文中的网络配置参数和它选择的DHCP服务器的消息。这样,其他的服务器收到整个消息后就会收回它们的OFFER,并随时准备向下一个客户端提供IP地址。这一过程也被称为客户端选择IP租约(IP Lease Selection)。在这一过程中,客户端还会向网络发送一个ARP消息,查询网络上面有没有其它机器使用该IP地址,如果发现该IP已经被占用,客户端则会发送一个DHCPDECLINE消息给DHCP服务器,拒绝接受其DHCPOFFER,并重新发送DHCPDISCOVER信息。事实上,并不是所有DHCP客户端都会无条件接受DHCP服务器的OFFER,尤其是主机上有安装其它TCP/IP相关的客户软件。客户端也可以用DHCPREQUEST向服务器提出DHCP选择,而这些选择会以不同的号码填写在 DHCP Option Field 里面:换一句话说,在DHCP服务器上面的设定,未必是客户端全都接受,客户端可以保留自己的一些TCP/IP设定,而主动权永远在客户端这边。 4. 确认阶段
DHCP服务器确认所提供的网络配置参数。当DHCP服务器接收到客户端的DHCPREQUEST消息之后,便向客户端发出一个DHCPACK响应,包含它所提供的IP地址及其他配置信息的DHCPACK确认报告,以确认IP租约的正式生效,也就结束了一个完整的DHCP工作过程。这一过程叫确认IP租约(IP Lease Acknowledgement)。确认阶段服务器的处理如下图 2-4所示。
收到
DHCPREQUEST 根据客户端ID
查找租约 找到租约 比较租约中的IP是否等于Request IP Address 相等 不相等 将租约状态改为Commit 发送DHCPNAK 发送DHCP ACK 图 2-4 DHCP确认阶段服务器的处理
确认阶段客户端的处理如下图 2-5所示:
收到DHCP消息 判断消息类型 是DHCPNAK 重新开始申请 是DHCPACK
发送免费ARP 地址冲突检查 有冲突 无冲突 发送DHCPCLINE 绑定IP和其他配置参数进入BOUND状态 重新开始申请 等待续约 图 2-5 DHCP确认阶段客户端的处理
2.2.3 DHCP客户端再次登录与续约机制
首次地址申请“租约”形成后,DHCP服务发挥作用,在不同的“租用期限”将会经历以下几个阶段[5]
重新登录:它将尝试更新上次关机时拥有的IP租用,即客户端直接发REQUEST请求报文,该REQUEST报文和第一次的REQUEST报文不同之处在于没有DHCP服务器的消息,所有的DHCP 服务器都会收到该报文。如果先收到ACK报文,则继续使用现有IP地址,并更新其租期;如果先收到NAK报文,则发送DISCOVER报文,开始新一轮的IP租用过程;如果未收到任何服务器的ACK或NAK报文,客户端将尝试联系现有IP租用中列出的缺省网关,如果联系成功且租用尚未到期,客户端则认为自己仍然处于现有IP租用时的相同子网上(没有被移走),继续使用现有的IP地址。如果未能与缺省网关联系成功,客户机则认为自己已经被移到不同的子网上,将会开始新一轮的IP租用过程。客户端重新登录网络地址申请如图 2-6所示。
DHCP Server Selected 客户机 Client 开始初始化 Begins initialization DHCP Server No Selected 广播请求报文阶段 DHCPREQUEST 决定配置 广播请求报文阶段 DHCPREQUEST 决定配置 DHCPRACK DHCPRACK 忽略其它DHCPRACK 图 2-6客户端重新登录网络地址申请
更新租约阶段:DHCP协议使用租约机制实现网络地址的动态配置。一旦DHCP客户端成功地从服务器那里获得网络地址时,服务器上就会生成一个该客户端的租约表项,该表项记录了客户端标识,网络地址及租约期限等。系统约定,客户端的IP租约到1/2期限时,进入RENEWING状态,客户端会直接使用已经租用到的IP地址,向DHCP服务器单播发出DHCPREQUEST报文。如果服务器是可用的,通常回送一个DHCPACK报文,同意客户端的请求,客户端继续使用现有IP地址,并更新其租期;如果服务器是不可用的,通常回送一个DHCPNAK报文,客户端可以继续使用现有IP地址,但不更新其租期。
重新捆绑阶段:当客户端的租约到7/8的期限时,进入REBINDING状态,客户端会再次试图更新租用期。如果服务器是可用的,通常回送一个DHCPACK消息,同意客户端的请求,客户端继续使用现有IP地址,并更新其租期;如果服务器是不可用的,通常回送一个DHCPNAK报文,客户端可以继续使用现有IP地址,但不更新其租期,直到客户端租约已满,客户端重新执行DHCPDISCOVER报文。
上述过程就是DHCP客户端的再次登录和续约过程,续约成功后,客户端的租约会重新进行计算。
2.2.4 地址的手动释放
当DHCP客户端正常下线或者不想再使用原来的网络地址时,就会向服务器发送一个DHCPRELEASE消息。服务器收到该消息就会收回分配给客户端的网络地址,并删除相应的租约表项,该网络地址以后可以继续分配给该客户端或者其它客户端。
2.3 DHCP中继
2.3.1 DHCP服务器的应用
在DHCP网络中,DHCP服务器的放置位置[6]通常有以下三种方式: (1)分布式,每个物理网络至少有一台DHCP服务器。 (2)集中式,多个物理网络共用一台DHCP服务器。 (3)混合式,多个物理网络共用几台DHCP服务器。 这三种放置位置的特点如下:
分布式: 每个物理网络至少配置一台DHCP服务器,仅管理该网络的IP分配,功能专一,响应速度快。当物理网络主机数量很少时,将造成硬件资源的极大浪费。
集中式:DHCP服务器放置在网络的中央位置,多个物理网络共用一台DHCP 服务器,节省硬件资源,但需要DHCP中继代理的转发功能,且当距离相隔较远的低速网络时,响应速度较慢。
混合式: 既解决了分布式硬件资源的浪费,又解决了集中式低速网络流量的问题。但需要DHCP中继。 2.3.2 DHCP中继简介
DHCP中继[7](DHCP Relay)也叫做DHCP中继代理。如果DHCP客户端与DHCP服务器在同一物理网段,则客户端可以正确地获取动态分配的IP地址。如果不在同一物理网段,则需要DHCP中继代理(DHCP RelayAgent)。用DHCP中继代理可以去掉在每个物理的网段都要有DHCP服务器的必要,它可以传递消息到不在同一物理子网的DHCP客户端。
2.3.3 DHCP中继原理
1.当DHCP客户端启动并进行DHCP初始化时,它会在本地网络广播配置请求报文。
2. 如果本地网络存在DHCP服务器,则可以直接进行DHCP配置,不需要DHCP中继。
3. 如果本地网络没有DHCP服务器,则与本地网络相连的具有DHCP中继功能的网络设备收到该广播报文后,将进行适当处理并转发给指定的其他网络上的DHCP服务器。
4.DHCP服务器根据DHCP客户端提供的信息进行相应的配置,并通过DHCP中继将配置信息发送给DHCP客户端,完成DHCP客户端的动态配置。
DHCP中继消息传递如下图 2-7所示。