背景技术
DHCP(DynamicHostConfigurationProtocol,动态主机配置协议)是一种用来为网络设备动态分配IP(InternetProtocol,互联网协议)地址等网络配置参数的协议。
DHCP采用客户端(Client)/服务器(Server)的通信模式,由客户端向服务器提出配置申请,服务器返回给客户端分配的IP地址等相应的配置信息,以实现IP地址等信息的动态配置。在DHCP的典型应用中,一般包含一台DHCPServer和多台Client(如PC(PersonalComputer,个人计算机)、便携机),其网络架构示意图可以如图1所示。
DHCPServer使用租约来维护用户信息,租约中包括Client标识、租约IP、租约长度等信息。DHCPServer基于租约来进行用户地址分配,保证一个租约在一个时间段内唯一地分配给一个用户。而由于网络中除了动态地址配置方式外,还存在其他的地址配置方式,如手工配置方式。因此,为了避免将已分配出去的地址再次进行分配,DHCPServer在回应DHCP-OFFER(提供)报文之前,或DHCPClient在收到DHCP-ACK(肯定应答)报文,准备使用分配的地址之前需要确定请求分配或被分配的地址是否已被使用,即存在DHCP租约冲突。当DHCPServer得知存在租约冲突时(DHCPClient发现地址冲突,会发送Decline报文通知DHCPServer),DHCPServer会以冲突租约的形式记录下这些地址,在之后的地址分配中,DHCPServer会暂停使用这些地址。
DHCPServer将冲突地址记录在冲突租约中后,会在一定时间内禁止这些地址被再次分配。当DHCPServer上租约全部丢失(如DHCPServer重启),可能会出现以下情况:
DHCPServer上已有用户a1、a2、...an的租约,但DHCPServer发生重启,已有租约丢失;
新用户b1、b2、...bn上线,向DHCPServer请求分配地址。DHCPServer分配地址时会尝试分配用户a1、a2、...an的租约,并检测到地址冲突;DHCPServer将这些租约记录到冲突租约中,并向用户b1、b2、...bn分配新的租约。当用户a1、a2、...an请求续约时,由于a1、a2、...an租约中的地址均已记录到冲突租约中,续约将会失败。此时,若DHCPServer上地址规划充足,则可以分配新的地址给用户a1、a2、...an;否则,会出现老用户续约失败,用户掉线的情况。此外,即使用户a1、a2、...an分配到新的地址,但由于用户a1、a2、...an实际使用了多个地址,造成地址浪费。
针对上述问题,现有技术中主要存在两种解决方案:
方案一、通过双机热备机制,动态备份租约。当一台DHCPServer发生重启时,只要另外一台DHCPServer上的租约不丢失,就能保证不会出现租约分配混乱。
方案二、将租约以文件的形式保存,当DHCPServer发生重启后,重新从文件中读取租约。
在实现本发明的过程中,发明人发现现有技术中至少存在以下问题:
双机热备方案中,需要耗费较大的性能开销在热备上,且要求用户组网中至少存在两台DHCPServer;租约文件保存方案中,则需要耗费额外的存储空间。
发明内容
本发明提供了一种地址分配方法和设备,以实现在不增加额外存储开销的前提下,解决DHCP服务器租约丢失后,地址分配混乱的问题。
为了达到上述目的,本发明提供一种地址分配方法,应用于包括DHCP服务器和DHCP客户端的系统,其特征在于,包括:
DHCP服务器接收DHCP客户端发送的续约请求;
所述DHCP服务器判断请求续约的地址是否包含在自身记录的冲突租约中,并当判断为是时,所述DHCP服务器向所述DHCP客户端返回DHCP-NAK报文,并将所述请求续约的地址回收至DHCP地址池中;
当所述DHCP服务器接收该DHCP客户端之后发送的地址获取请求时,所述DHCP服务器从DHCP地址池中选择地址进行分配。
所述DHCP服务器将所述请求续约的地址回收至DHCP地址池中,具体为:
所述DHCP服务器判断接收到所述续约请求的时间与自身最近一次启动的时间的时间差是否超过预设时间阈值,并当判断为否时,所述DHCP服务器将所述请求续约的地址回收至DHCP地址池中。
还包括:
当所述DHCP服务器接收到所述续约请求的时间与自身最近一次启动的时间的时间差超过所述预设时间阈值时,所述DHCP服务器保持所述请求续约的地址的不可用状态。
所述预设时间阈值为所述DHCP服务器上配置的DHCP地址池中租约长度的上限。
本发明实施例还提供了一种DHCP服务器,应用于包括DHCP服务器和DHCP客户端的系统,该DHCP服务器包括:
接收模块,用于接收DHCP客户端发送的续约请求和地址获取请求;
判断模块,用于当所述接收模块接收到DHCP客户端发送的续约请求时,判断请求续约的地址是否包含在冲突租约中;
地址回收模块,用于当所述判断模块的判断结果为是时,将所述请求续约的地址回收至DHCP地址池中;
发送模块,用于当所述判断模块的判断结果为是时,向所述DHCP客户端返回DHCP-NAK报文;
地址分配模块,用于当所述接收模块接收到该DHCP客户端之后发送的地址获取请求时,从DHCP地址池中选择地址进行分配。
所述判断模块还用于,判断所述接收模块接收到续约请求的时间与DHCP服务器最近一次启动的时间的时间差是否超过预设阈值;
所述地址回收模块具体用于,当所述判断模块判断所述请求续约的地址包含在冲突租约中,且所述接收模块接收到续约请求的时间与DHCP服务器最近一次启动的时间的时间差未超过所述预设阈值时,将所述请求续约的地址配置为可用地址。
所述地址回收模块还用于,当所述判断模块判断所述请求续约的地址包含在冲突租约中,且所述接收模块接收到续约请求的时间与DHCP服务器最近一次启动的时间的时间差超过所述预设阈值时,保持所述请求续约的地址的不可用状态。
所述预设时间阈值为所述DHCP服务器上配置的DHCP地址池中租约长度的上限。
本发明的有益技术效果包括:
本发明中,若DHCP服务器接收到DHCP客户端发送的续约请求,所述DHCP服务器判断请求续约的地址是否包含在自身记录的冲突租约中,并当判断为是时,所述DHCP服务器向所述DHCP客户端返回DHCP-NAK报文,并将所述请求续约的地址回收至DHCP地址池中;当所述DHCPServer服务器接收到该DHCP客户端之后发送的地址获取请求时,从DHCP地址池中选择地址进行分配,在不增加额外存储开销的前提下,解决了单机设备租约丢失后,地址分配混乱,甚至导致老用户(DHCP服务器丢失的租约对应的DHCP客户端)掉线的问题。
具体实施方式
针对上述现有技术中存在的问题,本发明实施例提供了一种地址分配的技术方案,若DHCPServer接收到DHCPClient对冲突租约中的地址的续约请求,DHCPServer将对应的地址回收至DHCP地址池中,并向DHCPClient发送DHCP-NAK报文,当DHCP服务器接收到该DHCP客户端之后发送的地址获取请求时,从DHCP地址池中选择地址进行分配,在不增加额外存储开销的前提下,解决了单机设备租约丢失后,地址分配混乱,甚至导致老用户(DHCPServer丢失的租约对应的DHCPClient)掉线的问题。
为了更好地理解本发明实施例提供的技术方案,下面对DHCP系统中的IP地址动态获取流程进行简单的描述。
在DHCP系统中,DHCPClient从DHCPServer动态获取IP地址主要可以分为以下四个阶段进行,其示意图可以如图2所示:
(1)发现阶段,即DHCPClient寻找DHCP服务器的阶段。DHCPClient以广播方式发送DHCP-DISCOVER(发现)报文。
(2)提供阶段,即DHCPServer提供IP地址的阶段。DHCPServer接收到DHCP-DISCOVER报文后,根据IP地址分配的优先次序选出一个IP地址,与其他参数一起通过DHCP-OFFER报文发送给DHCPClient。
(3)选择阶段,即DHCPClient选择IP地址的阶段。如果有多台DHCPServer向该DHCPClient发送DHCP-OFFER报文,DHCPClient只接受第一个收到的DHCP-PFFER报文,然后以广播的方式发送DHCP-REQUEST(请求)报文,该报文中包含DHCPServer在DHCP-OFFER报文中分配的IP地址。
(4)确认阶段,即DHCPServer确认IP地址的阶段。DHCPServer收到DHCPClient发来的DHCP-REQUEST报文(其中会携带DHCPServer的IP地址)后,只有DHCPClient选择的DHCPServer会进行如下操作:如果确认将地址分配给该DHCPClient,则返回DHCP-ACK报文;否则,返回DHCP-NAK报文,表明地址不能分配给该DHCPClient。
其中,DHCPClient接收到DHCP-NAK报文后,会重新向DHCPServer发起地址获取请求。
下面结合附图对本发明实施例提供的技术方案进行描述。
如图3所示,为本发明实施例提供的地址分配方法的流程示意图,应用于包括DHCPServer和DHCPClient的系统,该方法流程可以包括以下步骤:
步骤301、DHCPServer接收DHCPClient发送的续约请求,并获取接收到的续约请求中携带的请求续约的地址。
具体的,DHCPClient从DHCPServer获取到IP地址后,会在某些特定的时间向DHCPServer发送续约请求,以保证获取到的IP地址的可用状态。其中,该续约请求中会携带DHCPClient请求续约的IP地址。
步骤302、DHCPServer判断请求续约的地址是否包含在自身记录的冲突租约中。若判断为是,则转至步骤303;否则,转至步骤304。
具体的,若DHCPServer上存储的租约全部丢失,当DHCPServer接收到DHCPClient发送的IP地址获取请求(DHCP-DISCOVER)时,DHCPServer会尝试分配所丢失的租约中的地址,如果使用该租约中的地址的用户在线,则DHCPServer会探知到冲突,并以冲突租约的形式记录相应的地址。
DHCPServer接收到续约请求后,可以通过查询自身记录的冲突租约判断请求续约的IP地址是否包含在冲突租约中。
步骤303、DHCPServer向DHCPClient返回DHCP-NAK报文,并将该请求续约的地址回收至DHCP地址池中。
具体的,当DHCPServer接收到的续约请求中的IP地址包含在自身记录的冲突租约中时,即DHCPClient请求对冲突租约中的IP地址进行续约,则表明DHCPClient在尝试重新使用此IP地址,DHCPServer将该IP地址配置回收至DHCP地址池中(即使其重新变为可用状态),并向DHCPClient返回DHCP-NAK报文,触发DHCPClient重新发送地址获取请求。
进一步的,为了兼容当前的冲突租约实现,避免多余的、重复的冲突探测,可以预先设定一个时间阈值,当DHCPServer接收到续约请求,且该请求续约的IP地址包含在自身记录的冲突租约中时,DHCPServer判断接收到该续约请求的时间与自身最近一次启动的时间的时间差是否超过预设时间阈值,并当判断为否时,将该请求续约的IP地址回收至DHCP地址池中;否则,DHCPServer保持该IP地址的不可用状态。其中,DHCPServer中记录有自身启动的时间。
优选地,上述预设时间阈值可以为DHCPServer上配置的DHCP地址池中租约长度的上限。当DHCPServer启动后的时间超过该时间段时,老用户在DHCPServer启动之后的第一续约应已完成,可以认为后续记录的冲突租约不是由于DHCPServer租约丢失造成的,可以按现有冲突租约实现进行处理。
步骤304、DHCPServer向DHCPClient返回DHCP-ACK报文。
具体的,当DHCP接收到的续约请求中的IP地址未包含在自身记录的冲突租约中时,DHCPServer根据现有续约流程进行相应处理(续约成功处理)。
步骤305、当DHCPServer接收到该DHCPClient之后发送的地址获取请求时,从DHCP地址池中选择地址进行分配。
具体的,DHCPServer接收到地址获取请求后的处理流程与现有技术中的DHCP系统中IP地址动态获取流程相同,在此不再赘述。由于DHCPServer丢失的租约中的IP地址被回收至DHCP地址池中,因此可以保证DHCPClient能申请到IP地址(DHCPServer规划的地址池的规模与实际可能的用户数相当),有效地避免了老用户因无法续约且申请不到新的IP地址而导致的掉线问题,同时,也避免了一个DHCPClient使用多个地址,造成地址浪费的问题。
通过以上描述可以得出,在本发明实施例提供的技术方案中,若DHCPServer接收到DHCPClient对冲突租约中的地址的续约请求,DHCPServer将对应的地址回收至DHCP地址池中,并向DHCPClient发送DHCP-NAK(否定应答)报文,当DHCP服务器接收到该DHCP客户端之后发送的地址获取请求时,从DHCP地址池中选择地址进行分配,在不增加额外存储开销的前提下,解决了单机设备租约丢失后,地址分配混乱,甚至导致老用户掉线的问题。
下面结合具体的应用场景对本发明实施例提供的技术方案进行更加详细的描述。
在该实施例中,DHCPServer重启之前,记录有用户(DHCPClient)a1、a2、...an的租约,DHCPServer因断电而发生重启,租约丢失。
在DHCPServer重启之后,新用户b1、b2、...bn上线,向DHCPServer请求分配地址。DHCPServer分配地址时会尝试分配用户a1、a2、...an的租约,并检测到地址冲突;DHCPServer将这些租约记录到冲突租约中,并向用户b1、b2、...bn分配新的租约。
当老用户a1、a2、...an请求续约时,DHCPServer根据请求续约的IP地址查询租约,发现租约不存在,且该请求续约的IP地址包含在自身记录的冲突租约中,DHCPServer向用户a1、a2、...an回应DHCP-NAK报文,触发用户a1、a2、...an重新发送地址获取请求(申请租约),并将用户a1、a2、...an请求续约的地址回收至DHCP地址池中。
老用户a1、a2、...an重新申请租约,得到相应的地址(可以是请求续约的地址,也可以是新的地址)。此时,由于相应的冲突租约中的地址已被回收至了DHCP地址池中,因此可以保证用户能申请到地址,有效地避免了老用户因无法续约且申请不到新的IP地址而导致的掉线问题,同时,也避免了一个DHCPClient使用多个地址,造成地址浪费的问题。
基于上述方法实施例相同的技术构思,本发明实施例还提供了一种DHCPServer可以应用于上述地址分配流程。
如图4所示,为本发明实施例提供的DHCPServer的结构示意图,可以包括:
接收模块41,用于接收DHCPClient发送的续约请求和地址获取请求;
判断模块42,用于当所述接收模块41接收到DHCPClient发送的续约请求时,判断请求续约的地址是否包含在冲突租约中;
地址回收模块43,用于当所述判断模块42的判断结果为是时,将所述请求续约的地址回收至DHCP地址池中;
发送模块44,用于当所述判断模块42的判断结果为是时,向所述DHCPClient返回DHCP-NAK报文;
地址分配模块45,用于当所述接收模块41接收到该DHCPClient之后发送的地址获取请求时,从DHCP地址池中选择地址进行分配。
其中,为了兼容当前的冲突租约实现,避免多余的、重复的冲突探测,所述判断模块42还可以用于,判断所述接收模块41接收到续约请求的时间与DHCPServer最近一次启动的时间的时间差是否超过预设阈值;
相应地,所述地址回收模块43则可以具体用于,当所述判断模块42判断所述请求续约的地址包含在冲突租约中,且所述接收模块41接收到续约请求的时间与DHCPServer最近一次启动的时间的时间差未超过所述预设阈值时,将所述请求续约的地址配置为可用地址。
所述地址回收模块43还可以用于,当所述判断模块42判断所述请求续约的地址包含在冲突租约中,且所述接收模块41接收到续约请求的时间与DHCPServer最近一次启动的时间的时间差超过所述预设阈值时,保持所述请求续约的地址的不可用状态。
优选地,所述预设时间阈值可以为DHCPServer上配置的DHCP地址池中租约长度的上限。当DHCPServer启动后的时间超过该时间段时,老用户在DHCPServer启动之后的第一续约应已完成,可以认为后续记录的冲突租约不是由于DHCPServer租约丢失造成的,可以按现有冲突租约实现进行处理。
其中,本发明装置的各个模块可以集成于一体,也可以分离部署。上述模块可以合并为一个模块,也可以进一步拆分成多个子模块。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台终端设备(可以是手机,个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。