动态主机配置协议( 五 )


6. 客户可以通过发送DHCPRELEASE包取消租用 。客户在消息中放置“客户标记”或”chaddr”和网络地址 。假如客户在租用的时候使用了“客户标记”,在取消租用的时候必须还使用这一标记项 。
假如客户希望再次使用过去使用过的网络地址,客户就不需要进行上面说的一些步骤,对老客户的服务要方便一些吗 。下面的时间图就能够帮助您理解这一过程 。
1. 客户在自己的子网里广播一个DHCPREQUEST消息,在此消息的“请求IP地址”选项中包括了客户现在的网络地址 。(这里要注重一点,假如客户目前没有网络地址,"ciaddr"域绝对不能填写) 。BOOTP转发代理把这个消息发送到不在同一子网内的DHCP主机上 。假如客户当时申请租用地址的时候使用了“客户标记”,这个新发的包内也必须使用相同的“客户标记”,说自己是老客户总要有证据 。
2. 这个时候服务器已经知道客户是个老客户,也知道了它的配置参数,就返回一个DHCPACK消息 。此时服务器不负责检查网络地址是否已经被使用,这个工作要客户自己完成 。既然说自己是老客户了,那有些事情自己办了 。
假如客户的请求无效(可以客户已经移到另外一个子网内了),服务器应该以DHCPNAK返回,假如服务器不能确认发送到的消息是否准确,它干脆什么都不返回 。我们可以想象一个,假如一个服务器接收到一个应该属于别的服务器治理的网络地址,它就不要返回DHCPNAK包了,自己不知道的事情就不要说不 。
假如包内的"giaddr"域为零说明客户和服务器处于同一子网内,服务器不会轻信这样的好事的,它会发向0xffffffff发送广播,它担心这个客户已经离开这个子网,或者它的子网掩码不正确,即使客户接收到了这个消息,也不需要发送ARP 。假如服务器知道客户不在这个子网内,它只需要按照"giaddr"内记录的地址发送一个消息给BOOTP转发代理就是了,转发代理会将服务器发送的包发到客户手中,即使客户此时已经处于新的子网中了 。
3. 客户接收了带配置参数的DHCPACK信息,客户最后对参数进行检查,标记了租用时间 。指定的租用时间由包内的“客户标记”或"chaddr"字段确定,这时客户也就配置好了 。假如客户检测到地址冲突,客户必须以DHCPDECLINE包通知服务器并重新开始请求网络地址 。假如客户接收到DHCPNAK包,它不能再使用当前地址了,它必须重新开始配置过程以获得新的网络地址 。假如客户既然没有收到DHCPACK或DHCPNAK,它必须重新发送DHCPREQUEST包以进行配置 。客户应该在一定时间再次发送DHCPREQUEST请求 。在地址没有过期的时候,假如客户既没有收到DHCPACK或DHCPNAK,客户可以继续使用这个地址及相应的参数 。
4. 客户可能通过DHCPRELEASE包取消租用 。在这个取消的包中包括了“客户标记”或"chaddr"和网络地址 。
客户租用某一地址是有时间限制的,当然也可以是无期限限制的 。在整个DHCP中,时间的单位是秒,而0xffffffff表示无限 。在分布式系统中有一个重要的问题就是时间的同步,服务器和客户的时间可能是不同步的,为了实现时间的同步,要靠在一定时间内发送DHCP包以客户本地时间来表示 。这个时间是由一个无符号的32位数表示,它可以表示0到100年,这对于现行的系统来说够用了 。在上面的图中,我们假定时间是同步的,假如两者时间上有一点差别,服务器可以给客户发一个把租期稍微延长一点,这样就可以了 。
假如客户通过别的手段获得了网络地址,它可以使用DHCPINFORM请求获得其它配置参数,服务器接收到DHCPINFORM包,并建立一个DHCPACK消息,在其中包括一些合适客户的配置参数,只是不包括分配网络地址,检查现有的绑定,在信息中不填充"yiaddr"字段或租用时间参数 。服务器取得DHCPINFORM包内的"ciaddr"地址,而返回DHCPACK包 。

推荐阅读