流表项查询方法、设备及系统的制作方法
【技术领域】
[0001] 本发明涉及网络通信领域,特别涉及一种流表项查询方法、设备及系统。
【背景技术】
[0002] 软件定义网络是一种将控制平面与转发平面相分离的网络,能使网络管理员集中 和自动化管理网络设备,大大降低了网络复杂度。实现软件定义网络的方法有多种,其中 化enflow(开放流)是最受关注的方法之一。化enflow是一种进行转发策略控制的核必数 据结构,支持化enflow的网络中,交换机能够实现数据层和控制层的分离,每个交换机都 配置有流表,用来进行数据包的查找和转发。
[0003] 现有技术中,基于现场可编程口阵列(英文;Field-ProgrammableGateArray; 简称;FPGA)方案实现的交换机,包括H态内容寻址存储器(英文;TernaryContent AcMress油IeMemoir;简称;TCAM)和静态随机存储器(英文;StaticRandomAccess Memory;简称;SRAM)两部分流表资源,通过TCAM流表资源和SRAM流表资源设计的9级流 表来查找和转发数据包。其中,通配流表存储在TCAM流表资源中,精确流表存储在SRAM流 表资源中。每个流表包含多个流表项,为了获取数据包转发的目的端口,采用哈希算法对精 确流表项进行查询,采用逐条查找方法对精确流表项进行批量查询。
[0004] 数据包采用哈希算法查询精确流表项是比较快的,但是当控制器批量查询精确流 表项时,由于使用的是逐条查找方法,速度比较慢,特别是当精确流表项记录达到上万条 时,遍历整个精确流表的速度是非常慢的,因此精确流表项的查询速度较慢。
【发明内容】
[0005] 为了解决批量查询精确流表项时的查询速度较慢的问题,本发明实施例提供了一 种流表项查询方法、设备及系统。所述技术方案如下:
[0006] 第一方面,提供一种流表项查询方法,所述方法包括:
[0007] 接收控制器发送的第一流模型消息,所述第一流模型消息指示对精确流表的流表 项进行批量查询;
[0008] 在所述精确流表中确定所述第一流模型消息中的匹配域对应的第一索引表;
[0009] 确定所述第一索引表的类型,所述类型为第一类型或第二类型,所述第二类型为 包括第二字段的类型,所述第一类型为不包括所述第二字段的类型,所述第二字段的有效 值种类的数量级大于百级;
[0010] 当所述第一索引表的类型为所述第一类型,根据所述匹配域的值和所述第一索引 表,采用二分法查询得到流表项;
[0011] 当所述第一索引表的类型为所述第二类型,通过哈希算法查询得到流表项。
[0012] 结合第一方面,在第一种可实现方式中,
[0013] 所述根据所述匹配域的值和所述第一索引表,采用二分法查询得到流表项,包 括:
[0014] 根据所述匹配域的值,采用二分法对所述第一索引表进行查询;
[0015] 在所述第一索引表中确定与所述匹配域的值相等的索引值所对应的位置;
[0016] 获取所述位置记录的流表项作为查询得到的流表项。
[0017] 结合第一方面,在第二种可实现方式中,
[0018] 所述在所述精确流表中确定所述第一流模型消息中的匹配域对应的第一索引表, 包括:
[0019] 获取所述第一流模型消息中的匹配域的匹配字段组合;
[0020] 根据所述匹配字段组合依次查找所述精确流表中建立的各个索引表;
[0021] 如果某个索引表的匹配域与所述匹配字段组合相同,确定所述索引表为第一索引 表。
[0022] 结合第一方面,在第H种可实现方式中,
[0023] 在所述接收控制器发送的第一流模型消息之前,所述方法还包括:
[0024] 接收所述控制器发送的用于指示增加流表项的第二流模型消息,所述第二流模型 消息包括第一流表项;
[00巧]确定所述第一流表项的类型;
[0026] 当所述第一流表项的类型为通配流表项,将所述第一流表项保存在通配流表中;
[0027] 当所述第一流表项的类型为精确流表项,将所述第一流表项保存在精确流表中。
[0028] 结合第H种可实现方式,在第四种可实现方式中,
[0029] 所述确定所述第一流表项的类型包括:
[0030] 检测所述第一流表项的匹配域中是否存在掩码;
[0031] 当所述第一流表项的匹配域中不存在掩码,确定所述第一流表项为精确流表项;
[0032] 当所述第一流表项的匹配域中存在掩码,确定所述第一流表项为通配流表项。
[0033] 结合第H种可实现方式或第四种可实现方式,在第五种可实现方式中,
[0034] 在所述将所述第一流表项保存在精确流表中之后,所述方法还包括:
[0035] 当所述第一流表项的匹配域字段包括所述第二字段,为所述第一流表项建立第二 类型的索引表;
[0036] 当所述第一流表项的匹配域字段不包括所述第二字段,为所述第一流表项建立第 一类型的索引表。
[0037] 结合第五种可实现方式,在第六种可实现方式中,
[0038] 在所述为所述第一流表项建立第一类型的索引表之后,所述方法还包括:
[0039] 采用动态数组方式存储所述第一类型的索引表中的字段值,并将所述字段值作为 所述第一类型的索引表的索引值。
[0040] 结合第一方面,在第走种可实现方式中,
[0041] 在所述接收控制器发送的第一流模型消息之前,所述方法还包括:
[0042] 在与所述控制器握手成功之后,向所述控制器上报九级流表;
[0043] 其中,每级所述流表支持开放流协议定义的所有匹配域,支持所述开放流协议定 义的所有动作,每个所述匹配域都支持通配。
[0044] 第二方面,提供一种流表项查询设备,所述流表项查询设备包括:
[0045] 第一接收单元,用于接收控制器发送的第一流模型消息,所述第一流模型消息指 示对精确流表的流表项进行批量查询;
[0046] 第一确定单元,用于在所述精确流表中确定所述第一流模型消息中的匹配域对应 的第一索引表;
[0047] 第二确定单元,用于确定所述第一索引表的类型,所述类型为第一类型或第二类 型,所述第二类型为包括第二字段的类型,所述第一类型为不包括所述第二字段的类型,所 述第二字段的有效值种类的数量级大于百级;
[0048] 第一获取单元,用于在所述第一索引表的类型为所述第一类型时,根据所述匹配 域的值和所述第一索引表,采用二分法查询得到流表项;
[0049] 第二获取单元,用于在所述第一索引表的类型为所述第二类型时,通过哈希算法 查询得到流表项。
[0050] 结合第二方面,在第一种可实现方式中,
[0051] 所述第一获取单元,包括:
[0052] 查询模块,用于根据所述匹配域的值,采用二分法对所述第一索引表进行查询;
[0053] 第一确定模块,用于在所述第一索引表中确定与所述匹配域的值相等的索引值所 对应的位置;
[0054] 第一获取模块,用于获取所述位置记录的流表项作为查询得到的流表项。
[00巧]结合第二方面,在第二种可实现方式中,
[0056] 所述第一确定单元,包括:
[0057] 第二获取模块,用于获取所述第一流模型消息中的匹配域的匹配字段组合;
[0058] 查找模块,用于根据所述匹配字段组合依次查找所述精确流表中建立的各个索引 表;
[0059] 第二确定模块,用于在某个索引表的匹配域与所述匹配字段组合相同时,确定所 述索引表为第一索引表。
[0060] 结合第二方面,在第H种可实现方式中,所述流表项查询设备还包括:
[0061] 第二接收单元,用于接收所述控制器发送的用于指示增加流表项的第二流模型消 息,所述第二流模型消息包括第一流表项;
[0062] 第H确定单元,用于确定所述第一流表项的类型;
[0063] 第一保存单元,用于在所述第一流表项的类型为通配流表项时,将所述第一流表 项保存在通配流表中;
[0064] 第二保存单元,用于在所述第一流表项的类型为精确流表项时,将所述第一流表 项保存在精确流表中。
[0065] 结合第H种可实现方式,在第四种可实现方式中,
[0066] 所述第H确定单元,包括:
[0067] 检测模块,用于检测所述第一流表项的匹配域中是否存在掩码;
[0068] 第H确定模块,用于在所述第一流表项的匹配域中不存在掩码时,确定所述第一 流表项为精确流表项;
[0069] 第四确定模块,用于在所述第一流表项的匹配域中存在掩码时,确定所述第一流 表项为通配流表项。
[0070] 结合第H种可实现方式或第四种可实现方式,在第五种可实现方式中,
[0071] 所述流表项查询设备还包括:
[0072] 第一建立单元,用于在所述第一流表项的匹配域字段包括所述第二字段时,为所 述第一流表项建立第二类型的索引表;
[0073] 第二建立单元,用于在所述第一流表项的匹配域字段不包括所述第二字段时,为 所述第一流表项建立第一类型的索引表。
[0074] 结合第五种可实现方式,在第六种可实现方式中,
[00巧]所述流表项查询设备还包括:
[0076] 存储单元,用于采用动态数组方式存储所述第一类型的索引表中的字段值,并将 所述字段值作为所述第一类型的索引表的索引值。
[0077] 结合第二方面,在第走种可实现方式中,
[0078] 所述流表项查询设备还包括:
[0079] 上报单元,用于在与所述控制器握手成功之后,向所述控制器上报九级流表;
[0080] 其中,每级所述流表支持开放流协议定义的所有匹配域,支持所述开放流协议定 义的所有动作,每个所述匹配域都支持通配。
[0081] 第H方面,提供一种流表项查询系统,包括:
[0082] 第二方面任一所述的流表项查询设备;
[0083]W及控制器和终端。
[0084] 本发明提供了一种流表项查询方法、设备及系统,由于能够在精确流表中确定流 模型消息中的匹配域对应的索引表,并根据索引表的类型,采用二分法查询或哈希算法批 量查询流表项,相较于现有的批量查询流表项时采用的逐条查询,该查询方法的速度更快。 因此,在流表项批量查询过程中,提高了精确流表项的查询速度。
【附图说明】
[0085] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使 用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于 本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可W根据送些附图获得其他 的