一种高并发网络环境下快速流表查找方法和系统的制作方法

文档序号:10691004阅读:232来源:国知局
一种高并发网络环境下快速流表查找方法和系统的制作方法
【专利摘要】本发明涉及一种高并发网络环境下快速流表查找方法和系统。该方法包括:1)对进入网络接口的流量进行统计,根据统计的当前的流量状况设定缓冲区的缓冲窗口;2)根据设定的缓冲窗口的大小,利用五元组信息对到达的数据包执行分组操作;3)根据预设的调度策略对各个缓存的分组进行调度,依次将各个分组送往连接管理模块;4)连接管理模块抽取出各个分组的五元组信息,进行流表查找过程,找到对应的流表项,并使用分组内的数据包更新流表项的信息。本发明主要适用于骨干链路的高速网络流量处理系统中,能够优化高速网络环境下连接管理模块的访问开销,提高流表的访问效率。
【专利说明】
-种高并发网络环境下快速流表查找方法和系统
技术领域
[0001] 本发明属于网络安全技术领域,具体设及一种面向高并发网络环境的快速流表查 找方法和系统。
【背景技术】
[0002] 在高速网络环境下,高效率的连接管理已经成为现有网络流量处理系统(如入侵 检测、流量计费等系统)的一个关键模块,通常流量处理系统架构主要分为Ξ大模块:流量 获取、连接管理、业务处理。连接管理为业务处理提供流追溯功能,包括查找、更新和删除运 Ξ种操作。为准确的记录每一条连接,连接管理模块必须维护一个连接表(或会话表),其中 每一个连接表项追溯网络中的一条连接,负责记录连接的标识ID、状态等相关信息,其中连 接标识是全局唯一的,一般由TCP^P头部的五元组信息构成。
[0003] 现有流量处理系统采用单包调度的策略:数据包首先缓存在网卡缓冲区中,之后 按缓冲区内的到达顺序依次送往连接管理模块,执行连接的状态更新与维护操作。在高速 网络环境中,单包处理不仅会带来大量的函数回调开销,也会导致流表访问的性能瓶颈。随 着并发连接数的增加,连接表的规模不断增加。受限于硬件资源的限制和哈希表结构自身 的局限,哈希表槽数需要预先设定且动态调整非常困难,冲突链的增长使得单包流表查找 效率下降。在现有10化PS流量的高速网络中,包速达到lOMpps甚至更高,而网络中绝大多数 包都需要执行流表查找操作,流表的查找频率和包到达速率相当,流表查找效率已经成为 流处理系统的重要性能之一。基于此,有必要设计一种可扩展、高效的流表查找方法,来应 对骨干网络的高速并发环境。
[0004] 目前的流表查找操作被分为Ξ类实现方法:哈希表,布鲁姆过滤器,内容寻址存储 器。对采用哈希表结构的流表而言,一次哈希表查找包括哈希值的计算和冲突链比较两步 操作。用连接法处理哈希冲突的最坏情况性能很差:所有N个关键字都被插入到同一个槽 中,从而产生一个长度为N的链表,运时的最坏查找长度为0(N)。
[0005] 基于此,很多工作都集中在尽量使得每个槽上的冲突链长度均衡,W保证平均查 找长度接近最好情况的〇(1+α),α为装载因子。要实现运一点需要好的哈希算法,尽管可W 借助复杂的密码学哈希方法(MD5、SHA-1)来实现哈希表中的所有冲突链长度分布均衡,但 是好的哈希函数通常会消耗大量的CPU。
[0006] 相对于前面提到的一重哈希,多重哈希的效果会更好。多重哈希将会计算多次哈 希值,最终插入到多个子表中最短的一个,但运使得每次查找都要查找多个冲突链,在包数 密集的骨干网络里将带来较大的查找开销。
[0007] 在借助网络局部性优化查找操作方面,使用FPGA和SRAM实现流表的高速cache可 W加快访问速度,受限于FPGA的电路复杂性W及SRAM的容量限制,流表的规模受到了存储 容量的限制,在高并发网络环境中,受流量波动性和突发流量的影响,大量活动连接将会被 迫替换掉,导致系统漏检。

【发明内容】

[0008] 为了优化高速网络环境下连接管理模块的访问开销,基于骨干链路的高并发,慢 更新,存在一定程度局部性的流量特征,本发明提供了一种快速流表查找方法和系统,主要 适用于骨干链路的高速网络流量处理系统中。
[0009] 本发明的主要内容包括:(1)高效的网络流量分组算法,对网卡缓冲区内的数据包 按照流标号进行分组;(2)阔值调度策略,对于已经分组的数据包进行调度;(3)流表查找。
[0010] 本发明的快速流表查找方法的核屯、是将网络中的数据包分组送往连接管理模块, W减少流表查找的比较次数和回调开销。分组后每个连接到达的包数越多,快速查找方法 带来的积极效果越好。因此,高效的分组算法是快速流表查找方法的基础。基于此,分组算 法的设计主要包含W下几个方面:
[0011] 1)分组依据为TCP/IP头部的五元组信息。连接管理模块中的连接是W网络通信中 的源IP、目的IP、源端口、目的端口 W及传输层通信协议类型五元组信息唯一确定。
[0012] 2)分组算法的高效性和灵活性。分组操作会引入一定的时间开销,好的数据结构 可W极大降低分组操作的开销,使得快速查找方法带来更多的积极效果。
[0013] 3)对于分组后的每一组数据包来说,它们的五元组相同,来自同一个连接,需要高 效地索引起来,W便调度策略可W高效地对各个分组进行调度、维护。
[0014] 4)分组算法操作的对象是网卡缓冲区内的数据包,缓冲窗口的大小需要折中考 虑。窗口太大,不仅会消耗一定的内存空间,也会导致数据包从捕获到处理的延时增加;窗 口太小,则会导致每个连接缓存的包数太少,带来的积极效果有限。
[0015] 对于已经分组过的数据包,需要一定的调度策略将各个分组送往连接管理模块, 好的调度策略不仅可W使每个分组内的数据包都能得到公平的调度机会,同时也会为快速 查找方法带来更多的积极效果。调度策略的设计主要包含W下设计内容:
[0016] 1)对于已缓存的分组,包数多的分组应当优先被调度,包数少的分组应当延后调 度,等待缓存更多的数据包,运可W减少更多流表访问开销。
[0017] 2)被延后调度的分组不应出现饥饿现象,即长时间没有得到调度机会,运会使得 系统漏检。
[0018] 本发明提供的快速流表查找方案,将网络中的数据包分组送往连接管理模块,W 减少流表查找的比较次数和回调开销,并通过合理的调度策略使每个分组内的数据包都能 得到公平的调度机会。该方法主要适用于骨干链路的高速网络流量处理系统中,能够优化 高速网络环境下连接管理模块的访问开销,提高流表的访问效率。
【附图说明】
[0019] 图1是本发明系统结构示意图。
[0020] 图2是数据流分组结构示意图。
[0021 ]图3是Q1Q2队列迁移示意图。
[0022] 图4是场景A中流表访问时间对比图。
[0023] 图5是场景A中流表查找长度对比图。
[0024] 图6是场景帥流表访问时间对比图。
[0025] 图7是场景B中流表查找长度对比图。
【具体实施方式】
[0026] 下面通过具体实施例和附图,对本发明做进一步说明。
[0027] 本发明的总体框架如图1所示,由网络接口、缓冲区窗口管理模块、数据流分组模 块、饥饿避免模块、分组调度器、连接管理模块六个部分组成,运行步骤如下:
[0028] 1)流量进入网络接口的同时对流量情况进行统计,并将流量统计信息送入缓冲区 窗口管理模块;缓冲区窗口管理模块根据当前的流量状况,从预置的窗口大小中选择一个;
[0029] 2)根据设定的窗口大小,数据流分组模块对到达的数据包执行分组操作,当调度 时机到达时,触发分组调度器;
[0030] 3)分组调度器收到触发指令后,对各个缓存的分组按照调度策略进行调度,依次 将各个分组送往连接管理模块;
[0031] 4)饥饿避免模块负责从分组调度器采集调度信息,并适时触发分组调度器对未调 度的分组进行调度;
[0032] 5)连接管理模块抽取出分组调度器送来的各个分组的五元组信息,进行一次真实 的流表查找过程,找到对应的流表项,之后使用分组内的数据包依次更新流表项的状态等 信息。
[0033] 下面,就运行步骤做详细地论述。
[0034] 缓冲区窗口管理模块:通过对当前包到达速度和包间隔信息进行采集,结合系统 的延时容忍程度选择一个合适的窗口大小K,如窗口大小预置了 64、256、512Ξ个值,默认选 择为256,其单位为"个",用W描述可容纳多少个数据包。所述延时容忍度是指系统或者项 目可承受的数据包处理延时。若系统延时容忍度为lOOusW内,窗口选择为Κ = 64;若系统延 时容忍度为100~500US,窗口选择Κ = 256;否则窗口选Κ = 512大小。
[0035] 数据流分组模块:如图2,为了实现高效的数据流分组,算法采用了哈希表(图2中 ΡΤ)为主结构进行数据包的分组,同时引入了索引队列(图2中Q1和Q2)对已经分组的数据包 进行索引,并在哈希表和索引队列之间建立双向索引关系,具体步骤如下:
[0036] 1)每当一个数据包X到达时,当前缓冲区的总包数cached_num增加1,抽取X的五元 组信息代表其流标号X. f id,并由X. f id计算出X在PT中的位置j。转2)。
[0037] 2)若PT[j]为空,表明X不属于任何一个当前已缓存的分组,需要执行3)建立一个 新分组并建立PT与Q1之间的双向索引;若PT[j]不为空,执行4)。
[003引3)将X及其五元组信息存入PT[j]位置,PT[j]已经缓存的包数PT[j].pkt_count增 加1,并在Q1尾部t处增加一项j,建立起Q1到PT[j]的单向索引,Q1中的元素个数增加了一 个,Q1中的总包数Ql.pkt_count增加1;同时在PT。']位置增加 Q1和t信息:PT[j].Q=Ql,PT 山.idx = t,建立起PT到Q1的单向索引,此时PT山与Q1之间的双向索引建立成功。转6)。
[0039] 4)PTU]不为空,表明PT的j位置已经维护了一个分组和索引信息。将PT[j].fid与 X.fid做比较,若相等,表示X属于PT[j]维护的分组,执行5);若不相等,意味着分组过程发 生了哈希冲突,将冲突标记submitf lag置1,转6)。
[0040] 5)将X存储到ΡΤ[ j]中,ΡΤ[ j]已经缓存的包数ΡΤ[ j].地*_(3〇1111*增加1,j所对应的Q (Q1或Q2)中总包数Q.pkt_count增加1;转6)。
[0041 ] 6)若submitflag为1,将submitflag置0,触发分组调度器进行调度,调度之后ΡΤ
[j ]的位置为空,执行4);或者,如果当前缓冲区的总包数cached_num = K,表示缓冲区已经 满了,也应触发分组调度器进行调度;之后,继续回到1)。
[0042] 分组调度器:
[0043] 1)对于数据分组模块中4)和5),若分组过程发生了哈希冲突,或者若PT[j].pkt_ count超过历史平均值,则执行过程2)将PT[j]从Q1中转移到Q2中;
[0044] 2)如图3所示。其中(a)图为将Q1中的ΡΤ[2]迁移到Q2中,图中的虚线表示为将要在 Q2中增加的索引,Q1中ΡΤ[2]将会被移除)。化)图为完成迁移操作后的索引情况,虚线表示 的单向索引已经更新为了实线的双向索引,同时,Q1中尾部的ΡΤ山填补了被移除的ΡΤ[2], 与ΡΤ[1]对应的索引Ql:3页更新为了 Ql:2,在Q2的尾部t处增加一项元素 j,Q2的元素个数增 加1,建立起Q2到PT [ j ]的单向索引,Q2. pkt_count加上PT [ j ]. pkt_count。通过PT [ j ]到Q1的 单向索引,找到其在Q1中的位置PT[j].idx,通过Q1尾部t存储的元素 i找到PT[i],将PT[i] .idx设置为PT[j].idx相同值,同时将Q1中的位置PT[j].idx处的元素设置为i,将Q1的元素 个数减1,Q1中总包Q1.pkt_count减去ΡΤ[ j].pkt_count,至此完成将ΡΤ[ j]从Q1中删除的操 作。将ΡΤ[ j ]. idx设置为t,ΡΤ[ j ]. Q设置为Q2,建立ΡΤ[ j ]到Q2的索引。
[0045] 3)若调度由数据流分组模块触发,则将Q2索引的分组按组提交到连接管理模块; 若调度由饥饿避免模块触发,则将Q1中索引的分组按组提交到连接管理模块。
[0046] 饥饿避免模块:
[0047] 1)通过采集数据流分组模块中6)的触发信息,适时触发分组调度器提交Q1中索引 的分组。
[004引2)设计分组模块冲突计数器C1和Q2调度计数器C2,前者负责记录分组模块的哈希 冲突次数,每发生一次冲突C1增加1,每当缓冲区满时C1减1(若C1小于0则置0);后者负责记 录Q2累计调度的总包数,每次调度Q2时,C2累加 Q2.pkt_count,当Q1被调度时,C2被置0; [0049] 3)每当Q1 .pkt_count = K或者C1超过3或者C2的值超过Q1 .pkt_count的10倍时,就 触发调度器调度Q1,并清空计数器的值为0。
[0化日]连接管理模块:
[0051] 1)对于调度器模块送来的Q(Q1或者Q2),对于Q中每一项i,找到对一个的PT[i],用 ΡΤ[ i ]中的第一个包进行真实流表的查找过程。
[0052] 2)若找到对应的流表项,使用ΡΤ[ i ]中的每个包依次更新该流表项。若未找到,贝U 建立一个新的流表项,并依次更新流状态。
[0053] 采用两个数据集对本发明进行评估,数据集基本信息如表1所示。
[0054] 表1.数据集基本信息
[ο化5]
[0056] 通过在不同时间刻度下对是否采用快速流表查找方法作为对照来评估本发明的 效果。评价指标采用流表平均查找长度和流表平均访问时间两个维度。结果如图4-7所示, 其中图4是场景A中流表访问时间对比图,图5是场景A中流表查找长度对比图,图6是场景Β 中流表访问时间对比图,图7是场景B中流表查找长度对比图。实验结果表明,在多种流量环 境下,本发明提出的快速流表查找方法均有很好的性能提升,可W提高流表的访问效率。
[0057] 本发明的具体步骤使用了哈希表和队列的实现方式,但不局限与运两种数据结 构,也可W使用其他线性结构(如找)代替队列,用其他可实现键值映射类数据结构(如红黑 树)代替哈希表结构。
[005引 W上实施例仅用W说明本发明的技术方案而非对其进行限制,本领域的普通技术 人员可W对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本 发明的保护范围应W权利要求书所述为准。
【主权项】
1. 一种高并发网络环境下快速流表查找方法,其特征在于,包括以下步骤: 1) 对进入网络接口的流量进行统计,根据统计的当前的流量状况设定缓冲区的缓冲窗 P; 2) 根据设定的缓冲窗口的大小,利用五元组信息对到达的数据包执行分组操作; 3) 根据预设的调度策略对各个缓存的分组进行调度,依次将各个分组送往连接管理模 块; 4) 连接管理模块抽取出各个分组的五元组信息,进行流表查找过程,找到对应的流表 项,并使用分组内的数据包更新流表项的信息。2. 如权利要求1所述的方法,其特征在于,步骤1)通过对当前包到达速度和包间隔信息 进行采集,结合系统的延时容忍程度选择合适的缓冲窗口大小。3. 如权利要求1所述的方法,其特征在于,步骤2)采用哈希表为主结构进行数据包的分 组,同时引入索引队列对已经分组的数据包进行索引,并在哈希表和索引队列之间建立双 向索引关系。4. 如权利要求1所述的方法,其特征在于,步骤3)所述调度策略包括: a) 对于已缓存的分组,包数多的分组优先被调度,包数少的分组延后调度,等待缓存更 多的数据包,以减少流表访问开销; b) 被延后调度的分组不应出现饥饿现象,即长时间没有得到调度机会,以避免产生系 统漏检。5. -种采用权利要求1所述方法的高并发网络环境下快速流表查找系统,其特征在于, 包括缓冲区窗口管理模块、数据流分组模块、分组调度器、饥饿避免模块和连接管理模块; 所述缓冲区窗口管理模块用于缓存流量统计信息,并根据当前的流量状况设定缓冲区 的缓冲窗口; 所述数据流分组模块根据设定的缓冲窗口大小,对到达的数据包执行分组操作,并当 调度时机到达时触发所述分组调度器; 所述分组调度器收到触发指令后,对各个缓存的分组按照预设的调度策略进行调度, 依次将各个分组送往所述连接管理模块; 所述饥饿避免模块负责从所述分组调度器采集调度信息,并适时触发所述分组调度器 对未调度的分组进行调度; 所述连接管理模块抽取出分组调度器送来的各个分组的五元组信息,进行流表查找过 程,找到对应的流表项,并使用分组内的数据包更新流表项的信息。6. 如权利要求6所述的系统,其特征在于,所述缓冲区窗口管理模块通过对当前包到达 速度和包间隔信息进行采集,结合系统的延时容忍程度选择合适的窗口大小。7. 如权利要求5或6所述的系统,其特征在于,所述数据流分组模块采用哈希表为主结 构进行数据包的分组,同时引入索引队列对已经分组的数据包进行索引,并在哈希表和索 引队列之间建立双向索引关系。8. 如权利要求7所述的系统,其特征在于,所述数据流分组模块进行分组的步骤如下: 1) 每当一个数据包X到达时,当前缓冲区的总包数cached_num增加1,抽取X的五元组信 息代表其流标号X. f id,并由X. f id计算出X在PT中的位置j,转2); 2) 若PT[j]为空,表明X不属于任何一个当前已缓存的分组,执行3)建立一个新分组并 建立PT与索引队列Q1之间的双向索引;若PT[j]不为空,执行4); 3) 将X及其五元组信息存入PT[j]位置,PT[j]已经缓存的包数PT[j].pkt_count增加1, 并在Q1尾部t处增加一项j,建立起Q1到PT[ j]的单向索引;Q1中的总包数Q1 .pkt_count增加 1,同时在?!'[」]位置增加叭和4言息:?1'[」].〇 = 〇1,?1'[」].丨如=1建立起?1'到叭的单向索 弓丨,此时PT[ j ]与Q1之间的双向索引建立成功,转6); 4. PT[j]不为空,表明PT的j位置已经维护了一个分组和索引信息,将PT[j].fid与 X. f id做比较,若相等,表示X属于PT [ j ]维护的分组,执行5);若不相等,意味着分组过程发 生了哈希冲突,将冲突标记submitflag置1,转6); 5) 将X存储到PT[ j ]中,PT[ j ]已经缓存的包数PT[ j ]. pkt_count增加1,j所对应的Q(Q1 或Q2)中总包数Q.pkt_count增加1;转6); 6) 若submitflag为1,将submitflag置0,触发所述分组调度器进行调度,调度之后PT [j ]的位置为空,执行4);或者,如果当前缓冲区的总包数cached_num=K,表示缓冲区已满, 也触发所述分组调度器进行调度;之后,继续回到1)。9. 如权利要求8所述的系统,其特征在于,所述分组调度器进行调度的步骤如下: 1] 对于数据分组模块中进行分组的步骤4)和5),若分组过程发生了哈希冲突,或者若 PT[j].pkt_c〇unt超过历史平均值,则执行过程2]将PT[j]从索引队列Q1中转移到索引队列 Q2中; 2] 在Q2的尾部t处增加一项元素 j,Q2的元素个数增加1,建立起Q2到PT[j]的单向索引, Q2. pkt_count加上PT[ j ]. pkt_count;通过PT[ j]到Q1的单向索引,找到其在Q1中的位置PT [j ]. idx,通过Q1尾部t存储的元素 i找到PT[i ],将PT[ i]. idx设置为PT[ j]. idx相同值,同时 将Q1中的位置PT[ j ]. idx处的元素设置为i,将Q1的元素个数减1,Q1中总包Q1. pkt_count减 去PT[ j ]. pkt_count,至此完成将PT[ j ]从Q1中删除的操作;将PT[ j ]. idx设置为t,PT[ j ]. Q 设置为Q2,建立PT[ j]到Q2的索引; 3] 若调度由数据流分组模块触发,则将Q2索引的分组按组提交到连接管理模块;若调 度由饥饿避免模块触发,则将Q1中索引的分组按组提交到连接管理模块。10. 如权利要求9所述的系统,其特征在于,所述饥饿避免模块的处理过程为: 1] 通过采集数据流分组模块中步骤6)的触发信息,适时触发分组调度器提交Q1中索引 的分组; 2] 设计分组模块冲突计数器C1和Q2调度计数器C2,C1负责记录分组模块的哈希冲突次 数,每发生一次冲突C1增加1,每当缓冲区满时C1减1,若C1小于0则置0;C2负责记录Q2累计 调度的总包数,每次调度Q2时,C2累加 Q2. pkt_count,当Q1被调度时,C2被置0; 3] 每当Q1 .pkt_count = K或者C1超过3或者C2的值超过Q1 .pkt_count的10倍时,就触发 调度器调度Q1,并清空计数器的值为0。
【文档编号】H04L12/865GK106059957SQ201610330417
【公开日】2016年10月26日
【申请日】2016年5月18日
【发明人】刘庆云, 王鹏, 周舟, 李佳, 杨威, 方滨兴, 郭莉
【申请人】中国科学院信息工程研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1