本发明涉及网络通信领域,特别涉及一种基于openflow交换机的流表表项空闲超时检测方法。
背景技术:
随着互联网的高速发展,互联网数据中心也迅速发展。而云计算的发展,使得更多的应用处理集中到云端,促使云计算数据中心的规模急剧增长。数据中心网络面临着诸多问题,如集中高效的网络管理要求,高效灵活的组网需求,虚拟机的部署和迁移需求,虚拟多租户业务支撑要求和全面的数据中心iaas要求。
对此,学界提出了软件定义网络(softwaredefinednetwork,sdn)的概念。sdn具有转发和控制分离、控制逻辑集中、网络虚拟化、网络能力开放化等特点。目前,控制层与转发层通信的主流标准是openflow协议。在sdn中,数据层与控制层分离,交换机将繁重的控制策略部分交由控制器来负责,而它仅根据控制器下发的规则对数据包进行快速转发。
下发的流表存储在交换机端,交换机端的存储空间是有限的,所以需要及时移除一些不常使用的流表表项,openflow也定义了空闲(idle_time)超时移除机制,并且时间粒度为秒,但是具体检测方法是由交换机端实现的。目前检测方法主要有:在对每一条流处理时,测量各个包的到达时间间隔,同时与idle_time做比较来检测超时。此方法的缺点就是同时检测所有表项,而且每条流上包与包之间间隔的检测也会引入很大的计算开销,而且在很大程度上影响了包转发效率。
技术实现要素:
本发明的目的在于克服已有的流表表项空闲超时检测方法计算开销较大、包转发效率较低的缺陷,从而提供一种能够减少计算开销、提高流表表项超时检测效率的方法。
为了实现上述目的,本发明提供了一种基于openflow交换机的流表表项空闲超时检测方法,包括:
建立以超时时刻为键值的哈希表,所述哈希表以秒为时间粒度来标识每个流表表项的最早可能出现的超时时刻;在接收到流表后,计算出每个流表表项最早可能出现的超时时刻,接着将流表表项id及该表项最近一次有包匹配的时间存入对应哈希表中;在交换机运行时,将所述哈希表作为超时检测用表,以当前时刻为键值遍历那些最可能在当前时刻超时的流表表项,从而检测出超时表项。
上述技术方案中,该方法进一步包括:
步骤1、建立超时配置哈希表;该步骤进一步包括:
步骤1-1、首先,在流表下发时,根据(1)式计算出流表表项的超时时刻,其中tc是指添加流表的时刻,ti是指流表表项的空闲超时时间,tout是指流表表项最早的可能出现空闲超时的时刻,即流表表项的超时时刻;
tout=tc+ti(1)
步骤1-2:以步骤1-1得到的流表表项的超时时刻tout为键值,通过(2)式,计算出哈希值h,然后将相应的流表表项id及此表项最近一次有包匹配的时间tlast插入哈希数组hash[h]所指向的链表中;其中,在插入链表时采用链表头插法,即每次插入新节点,都是hash[h]中指针指向该新节点,而新节点中的next指针则指向原hash[h]中指针指向的节点,tlast初始值为添加流表的时刻tc;
h=tout%tcycle(2)
其中,tcycle表示本发明的方法所能检测的最大超时时间,其大小为86400秒;
步骤1-3、按照之前的步骤1-1和步骤1-2,将后续其他流表表项id及该表项最近一次有包匹配的时间tlast插入哈希数组hash[h]所指向的链表中;
步骤2、在交换机运行时,每隔一定的间隔时间进行一次超时检测;其中,一次超时检测的具体实现步骤如下:
步骤2-1、首先获得当前时间tnow,然后以tnow为键值,将tnow代替(2)式中的tout计算出哈希值h,在哈希表中找到hash[h]所指向的链表;
步骤2-2、遍历该链表中的下一个表项,计算该表项的tlast是否满足(3)式,如果该表项tlast满足式(3),则表明该表项超时,通过表项id找到该表项并移除,同时移除该链表中相应表项的信息,然后再执行步骤2-3;
tnow-tlast≥ti(3);
如果该表项tlast不满足式(3),则通过(4)式计算出新的该表项最早的可能出现空闲超时的时刻tout,然后完成该表项在哈希表中的新位置的调整;接着再执行步骤2-3;
tout=tlast+ti(4);
其中,流表表项在哈希表中的新位置的调整包括:以流表表项的超时时刻tout为键值(key),通过(2)式,计算出哈希值h,然后将相应的流表表项id及此表项最近一次有包匹配的时间tlast插入哈希数组hash[h]所指向的链表中;
步骤2-3、判断哈希表中hash[h]所指向的链表中所有表项是否都检测完毕,如果哈希表中hash[h]所指向的链表中还有待检测表项,则继续执行步骤2-2;如果哈希表中hash[h]所指向的链表中所有表项都检测结束,则判断检测间隔是否到超时检测的间隔时间,如果是,则继续执行步骤2;如果不是,则等待。
上述技术方案中,所述间隔时间为1秒。
本发明的优点在于:
本发明的方法通过简单预处理来筛选出在某一时刻最有可能发生表项超时事件的流表进行超时检测,减少了计算开销,提高了流表表项超时检测效率。
附图说明
图1是超时配置哈希表的示意图;
图2是本发明的基于openflow交换机的流表表项空闲超时检测方法的流程图。
具体实施方式
现结合附图对本发明作进一步的描述。
考虑到现有的流表表项空闲超时检测方法在计算开销与包转发效率上的缺陷,本发明的方法建立一个以超时时刻为键值的哈希表,该哈希表以秒(second)为时间粒度来标识每个流表表项的最早可能出现的超时时刻。然后在接收到流表后,计算出每个流表表项最早可能出现的超时时刻,接着将流表表项id及该表项最近一次有包匹配的时间存入对应哈希表中。在交换机运行时,该哈希表作为超时检测用表,以当前时刻为键值遍历那些最可能在当前时刻超时的流表表项,从而检测出超时表项。本发明的方法在每一时刻都只检测那些最可能在那一时刻超时的流表表项,然后通过维护此超时检测哈希表来实现流表表项空闲超时的高效检测。
在本发明方法中,超时时间的选择需要权衡,时间过短,可能会导致流表的重新下发增多;时间过长,可能会导致流表占用空间过大,不能很好的发挥timeout的作用。流表超时时间配置更多以秒为粒度,而设置空闲时长为小时或天在实际中应用比较少。基于以上考虑,从工程实际出发并充分考虑流表空闲超时配置的灵活性,本发明的方法在实现时条件限制为:空闲超时值最大为一天,即86400s,在不超出这一值的前提下,超时时间可以是其他值,如1秒、10秒、100秒等。
如图2所示,本发明的基于openflow交换机的流表表项空闲超时检测方法包括以下步骤:
步骤201:建立超时配置哈希表。该步骤进一步包括:
首先,在流表下发时,根据(1)式计算出流表表项的超时时刻,其中tc是指添加流表的时刻,ti是指流表表项的空闲超时时间,tout是指流表表项最早的可能出现空闲超时的时刻,即流表表项的超时时刻。
tout=tc+ti(1)
然后,以流表表项的超时时刻tout为键值(key),通过哈希函数(2)式,计算出哈希值h,然后将相应的流表表项id及此表项最近一次有包匹配的时间tlast插入哈希数组hash[h]所指向的链表中。其中,在插入链表时采用链表头插法,即每次插入新节点,都是hash[h]中指针指向该新节点,而新节点中的next指针则指向原hash[h]中指针指向的节点,tlast初始值为添加流表的时刻tc。
h=tout%tcycle(2)
其中,tcycle表示本发明的方法所能检测的最大超时时间,其大小为86400秒。
接着,按照之前的步骤将后续其他流表表项id及该表项最近一次有包匹配的时间tlast插入哈希数组hash[h]所指向的链表中。
图1是所建立的超时配置哈希表的示意图,在该图中超时配置哈希表为hash[],其中键值h为可能的超时时刻。在哈希表的链表中存储的是流表表项id及此表项最近一次有包匹配的时间tlast及指向同一链表中的下一表项信息的指针。
步骤202:因为超时粒度为秒,所以在交换机运行时,我们每隔1秒要进行一次超时检测。开始检测。
步骤203:获得当前时间tnow,然后将tout赋值tnow作为键值代替(2)式中的tout,计算出哈希值h,在哈希表中找到hash[h]所指向的链表。
步骤204:遍历该链表中的下一个表项。
步骤205:计算该表项的tlast是否满足(3)式。
tnow-tlast≥ti(3)
步骤206:如果该表项tlast满足(3)式,则表明该表项超时,通过表项id找到该表项并移除。
步骤207:移除该链表中相应表项的信息。执行步骤210。
步骤208:如果该表项tlast不满足(3)式,则通过(4)式计算出新的该表项最早的可能出现空闲超时的时刻tout。
tout=tlast+ti(4)
步骤209:然后以tout为键值(key),通过哈希函数(2)式,计算出哈希值h,然后将相应的流表表项id及此表项最近一次有包匹配的时间tlast插入哈希数组hash[h]所指向的链表中,至此完成该表项在哈希表中的新位置的调整然后移除该链表中相应表项的信息。执行步骤210。
步骤210:判断哈希表中hash[h]所指向的链表中所有表项是否都检测完毕。
如果哈希表中hash[h]所指向的链表中还有待检测表项,则继续执行步骤204。
如果哈希表中hash[h]所指向的链表中所有表项都检测结束,则执行步骤211。
步骤211:判断检测间隔是否到1s,如果是,则继续执行步骤203。如果不是,则执行步骤212。
步骤212:等待间隔达到1秒,执行步骤211。
在上述实施例中,步骤211中所涉及的1s代表超时检测的间隔时间,这样设置的原因是考虑到openflow中的超时粒度为秒,在其他实施例中,超时检测的间隔时间也可以是其他值。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。