一种DHCP客户端多接口的实现方法与流程

文档序号:16735366发布日期:2019-01-28 12:35阅读:632来源:国知局
一种DHCP客户端多接口的实现方法与流程

本发明涉及dhcp客户端技术领域,尤其涉及一种dhcp客户端多接口的实现方法。



背景技术:

目前,动态主机配置协议(dynamichostconfigurationprotocol,dhcp)通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配ip地址,使网络环境中的主机动态的获得ip地址、gateway地址、dns服务器地址等信息,并能够提升地址的使用率。dhcp协议采用客户端/服务器模型,主机地址的动态分配任务由网络主机驱动,当dhcp服务器接收到来自网络主机申请地址的信息时,才会向网络主机发送相关的地址配置等信息,以实现网络主机地址信息的动态配置;dhcp客户端在第一次获取完地址之后,会在租约到期之前再次发送更新报文以达到续租地址的目的。

传统的dhcp客户端协议一般应用于单接口,并且采用while循环的形式,地址更新方式单一,很难满足于现代设备对多接口以及效率的要求。



技术实现要素:

本发明的目的是提供一种dhcp客户端多接口的实现方法,该方法能够突破dhcp客户端的接口数量限制,基于多接口的收发报文状态机,并能更精确合理的更新报文发送频率。

本发明的目的是通过以下技术方案实现的:

一种dhcp客户端多接口的实现方法,所述方法包括:

步骤1、通过链表存储多个接口的dhcp客户端信息,不同的接口具有不同的接口索引,通过所述接口索引来区分不同的接口;

步骤2、dhcp客户端状态机的进入通过相应的事件来触发,所述事件包括:命令行配置事件、定时器超时事件、报文接收事件和接口up/down事件;

步骤3、每个接口的dhcp客户端信息存储于接口的结构体中,当所述dhcp客户端状态机进入时,将所述dhcp客户端信息的状态值取出,用对应的临时指针变量指向状态值的地址;

步骤4、再基于绝对时间点二分法的方式实现地址更新时的报文发送过程。

在步骤1中,所述链表由节点链接组成,其中:

通过首节点找到第二个节点,再由第二个节点找到第三个节点,依次类推找到最后一个节点;

且每个节点保存有相应接口的结构体指针,所述结构体指针指向的接口的结构体保存有相应接口的dhcp信息。

所述dhcp信息包括:接口索引、接口的dhcp角色、客户端或中继信息。

在步骤2中,所述命令行配置事件用于处理来自命令行的dhcp客户端使能或禁止命令;

所述定时器超时事件用于应答报文超时时的报文重发或者租约到期时的租约更新;

所述报文接收事件用于处理收到的报文;

所述接口up/down事件用于处理接口的up、down消息。

在步骤3中,所述dhcp客户端状态机进入时的首次发包时间点为dhcp客户端状态机收到相应事件命令的时机;

此时会启动一个定时器,超时时间为0,dhcp客户端状态机会收到一个定时器超时事件命令,并进入发包流程。

所述步骤4的过程为:

当dhcp客户端申请地址成功时,以系统开机到某一时刻之间的时间秒数记为时间点,记录关键的时间点和时间值,包括地址申请成功的时间点记为start,租约值记为lease,租约的一半值记为t1,租约的0.875倍记为t2;

若地址申请时间到达地址租约的一半,即时间点到达start+t1时,开始发送单播形式的dhcp更新报文,t1以二分法接近t2,以start+t1作为下一个超时时间点;

若报文接收一直超时,当t1非常接近t2时,即时间点即将到达start+t2时,开始发送组播形式的dhcp更新报文,t2以二分法接近lease,以start+t2作为下一个超时时间点;

若报文接收一直超时,当t2非常接近lease时,即时间点即将到达start+lease时,地址更新失败,state状态置为初始状态;

再添加定时器超时事件,超时时间为0,开始一个新的申请过程。

多个接口的dhcp客户端信息可以哈希表的形式存储。

由上述本发明提供的技术方案可以看出,方法能够突破dhcp客户端的接口数量限制,基于多接口的收发报文状态机,并能更精确合理的更新报文发送频率,方便的应用于对多接口高性能dhcp客户端有需求的路由器等网络产品。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。

图1为本发明实施例提供的dhcp客户端多接口的实现方法流程示意图;

图2为本发明实施例所述链表存储结构示意图。

具体实施方式

下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明的保护范围。

下面将结合附图对本发明实施例作进一步地详细描述,如图1所示为本发明实施例提供的dhcp客户端多接口的实现方法流程示意图,所述方法包括:

步骤1、通过链表存储多个接口的dhcp客户端信息,不同的接口具有不同的接口索引,通过所述接口索引来区分不同的接口;

具体实现中,所述链表由节点(node)链接组成,如图2所示为本发明实施例所述链表存储结构示意图,图2中:

通过首节点找到第二个节点,再由第二个节点找到第三个节点,依次类推找到最后一个节点;

且每个节点保存有相应接口的结构体指针(data),所述结构体指针指向的接口的结构体保存有相应接口的dhcp信息。

所述dhcp信息包括:接口索引、接口的dhcp角色(角色包括客户端、服务器端、中继)、客户端或中继信息。

另外,除上述存储形式外,多个接口的dhcp客户端信息也可以哈希表的形式存储。

步骤2、dhcp客户端状态机的进入通过相应的事件来触发,所述事件包括:命令行配置事件、定时器超时事件、报文接收事件和接口up/down事件;

该步骤中,所述命令行配置事件用于处理来自命令行的dhcp客户端使能或禁止命令(dhcp客户端使能命令意味着整个dhcp状态机开始运行);

所述定时器超时事件用于应答报文超时时的报文重发或者租约到期时的租约更新(定时器超时事件意味着dhcp状态机即将进入发包流程);

所述报文接收事件用于处理收到的报文(报文接收事件意味着dhcp状态机即将进入收包流程);

所述接口up/down事件用于处理接口的up、down消息。

这里,事件触发的优点在于提高代码运行效率,摆脱固有的循环机制的限制,而且流程规范,状态机状态变化过程清晰。

步骤3、每个接口的dhcp客户端信息存储于接口的结构体中,当所述dhcp客户端状态机进入时,将所述dhcp客户端信息的状态值取出,用对应的临时指针变量指向状态值的地址;

这样多接口的状态机变成和单接口的状态机处理方式相同,化难为简,由此巧妙实现多接口的收发报文状态机。

具体实现中,所述dhcp客户端状态机进入时的首次发包时间点为dhcp客户端状态机收到相应事件命令的时机;

此时会启动一个定时器,超时时间为0,dhcp客户端状态机会收到一个定时器超时事件命令,并进入发包流程。

步骤4、再基于绝对时间点二分法的方式实现地址更新时的报文发送;

在该步骤中,具体过程为:

当dhcp客户端申请地址成功时,以系统开机到某一时刻之间的时间秒数记为时间点,记录关键的时间点和时间值,包括地址申请成功的时间点记为start,租约值记为lease,租约的一半值记为t1,租约的0.875倍记为t2;

地址申请时间到达地址租约的一半时,即时间点到达start+t1时,开始发送单播形式的dhcp更新报文,t1以二分法接近t2,以start+t1作为下一个超时时间点;

若报文接收一直超时,当t1非常接近t2时,即时间点即将到达start+t2时,开始发送组播形式的dhcp更新报文,t2以二分法接近lease,以start+t2作为下一个超时时间点;

若报文接收一直超时,当t2非常接近lease时,即时间点即将到达start+lease时,地址更新失败,state状态置为初始状态;

再添加定时器超时事件,超时时间为0,开始一个新的申请过程。

值得注意的是,本发明实施例中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

综上所述,本发明实施例所提供的方法可实现多接口dhcp客户端动态地址的申请以及更新,并且采用事件触发的形式提高了程序运行效率,巧妙实现基于多接口的dhcp客户端状态机,并基于绝对时间点采用二分法的方式实现更精确更合理的地址更新时的报文发送。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1