一种网络数据包的多类型规则高速匹配方法及装置的制造方法_3

文档序号:9237990阅读:来源:国知局
80
[0083] 那么规则R1和R2在规则表中的存放地址,即其Hash值为:
[0084] Hash(Rl) =f(0, 192. 168. 10. 100, 0, 0, 0),假设等于 100
[0085]Hash(R2) =f(0, 0, 0, 80, 0),假设等于 200
[0086] 现在有2个匹配模块,将其对应的匹配掩码分别配成支持这2种规则类型,也就是 说,2个匹配模块的掩码分别被配置为:Ml:01000,M2 :00010。
[0087] 输入一个数据包,其五元组按照上式掩码域的顺序为:
[0088]D:6,192. 168. 10. 100,10. 10. 1. 1,23,16000。
[0089] 两个匹配模块分别根据这个数据包的五元组计算Hash值如下:
[0090]Hash(D,Ml) =f(0, 192. 168. 10. 100, 0, 0, 0)必然等于100
[0091] Hash(D,M2) =f(0,0,0, 0, 23, 0)可能等于任何数,假设等于 300。
[0092] 在规则表中读取地址100和地址300处的规则,可以判断得到100处的规则五元 组和掩码与数据包D相符,因此可以说明命中了规则R1,地址300处是不相符的。
[0093] 同样地,如果有一个源端口为80的数据包,也可以根据上述的方法得到命中规则 R2的结果。
[0094] 规则表单元,是使用哈希表方式进行存储的,对于存在多个规则类型的哈希表,可 以有两种存储方式:一种是独立存储方式,每个类型的规则在物理上都独立存储,占用物理 上独立的存储空间,另一种是混合存储方式,每个类型的规则在物理上混合存储,使用相同 的存储空间。当各种类型的规则混合存储在一起时,直接使用规则中的内容对不同类型进 行区分,当规则之间发生地址冲突时,直接按照整个规则哈希表的存储冲突解决方式即可。 混合存储方式的规则操作与独立存储方式相比,在复杂度上并没有明显的增加,然而当各 种规则类型的规则数会动态变化时,由于独立存储方式必须预先划分每种规则类型的存储 空间,混合存储方式在存储空间利用率上是更为高效的。
[0095] 对于独立存储方式,匹配模块进行匹配时,被配置为某种规则类型,则到该规则类 型的存储空间中进行匹配,对混合存储方式,匹配模块可以在整个存储空间中进行匹配。匹 配命中后,必须将规则读出与数据包五元组进行比较,这对独立存储和混合存储方式相同, 因此在匹配复杂度上,混合存储方式的与独立存储方式相比,在复杂度上也是相当的。
[0096] 匹配类型配置单元203,负责向用户提供一个接口,对多个匹配模块进行规则类型 的配置,使得每个匹配模块进行某一个规则类型的匹配操作,需要为每个匹配模块配置参 数,即配置规则类型的掩码。例如:对于TCP/IP协议中的五元组,配置一个5比特的掩码。
[0097] 假设有N种规则类型,那么就可以按照表1配置:
[0098]表1
[0099]
[0100] 规则配置模块i元204,负责用户提供一个接口,对-则表进行规则的配置操 作,同时还可以对规则之间的优先级进行配置,规则配置主要包括:规则添力卩、规则修改、规 则查询和规则删除等操作。
[0101] 假设存储的最大规则数为M,则可以按照表2配置规则表:
[0102] 表 2
[0103]
[0104] 在上i表2中规则有效标k域用于表示S规则是否"一条有效的M则,其中,1表 示有效,0表示无效,规则掩码域为这条规则所属规则类型的掩码,规则域存储该规则的具 体内容。
[0105] 匹配结果综合模块单元205,用于当一个数据包同时命中多条规则时,根据用户对 规则优先级的配置,选择出一个优先级最好的匹配结果,当仅命中一条规则时,唯一命中的 规则就是最终的匹配结果,当无规则命中时,给出无命中的匹配结果。
[0106] 下面给出一个支持8种TCP/IP协议五元组规则类型的实例。
[0107] 要求支持的规则类型可以包括:
[0108] 1)Protocol+SIP+DIP+Sport+Dport
[0109] 2)Protocol+SIP+DIP+Sport
[0110] 3)Protocol+SIP+DIP+Dport
[0111] 4)Protocol+SIP+DIP
[0112] 5)Protocol+SIP
[0113] 6)Protocol+DIP
[0114] 7)Protocol+Sport
[0115] 8)Protocol+Dport
[0116] 其中,规则类型与掩码之间的关系可以如表3所示,其中,掩码的各个比特从高到 低依次为Protocol,SIP,DIP,Sport,Dport。
[0117] 表 3
[0118]

[0119] 具体的哈希算法可以是:将各个域和掩码相与后,每个字节折叠相加,具体可以 是:
[0120] Tl = protocol&Mask (4)
[0121] T21 = SIP&Mask(3)
[0122] T2 = T21&0xFF+((T21?8)&0xFF) + ((T21?16)&0xFF) + ((T21?24)&0xFF)
[0123] T31 = DIP&Mask(2)
[0124] T3 = T31&0xFF+((T31?8)&0xFF) + ((T31?16)&0xFF) + ((T31?24)&0xFF)
[0125] T41 = Sport&Mask (2)
[0126] T4 = T41&0xFF+((T41?8)&0xFF)
[0127] T51 = Dport&Mask (3)
[0128] T5 = T51&0xFF+((T51?8)&0xFF)
[0129] Hash(protocol, SIP, DIP, Sport, Dport, Mask) = T1+T2+T3+T4+T5
[0130] 哈希计算后的结果为8个比特,也就说明,哈希表中最多可存储2的8次方,也就 是256条规则。
[0131] 假设现在有如表4所示的8条规则:
[0132]表4
[0133]
[0134] 计算这8条规则的Hash值如下:
[0135] Hash(Rl) = 6
[0136] Hash(R2) = 123
[0137] Hash(R3) = 123
[0138] Hash(R4) = 145
[0139] Hash(R5) = 38
[0140] Hash(R6) = 113
[0141] Hash(R7) = 70
[0142] Hash(R8) = 70
[0143] 其中,对于Hash地址冲突问题,可以采用线性探测法解决,因此对应的规则表的 存储如表5所示:
[0144] 表 5
[0145]

[0146] 设定的匹配模块与规则类型掩码之间的对应关系如表6所示,每个匹配模块对应 一种规则类型。
[0147] 表 6
[0148]
[0149] 假设对数据报文D进行报文头部解析之后,得到的五元组为:Protocol= 6、SIP =0x0A000001、DIP= 0x0A001000、Sport= 80、Dport= 80。
[0150] 将其下发到8个匹配模块,这8个匹配模块同时对该五元组进行Hash计算,得到 的Hash计算结果为:
[0151] H1(D) =hash(D,11111) = 133
[0152] H2(D) =hash(D,11110) = 123
[0153] H3(D) =hash(D,11101) = 123
[0154] H4(D) = hash(D,11100) =43
[0155] H5(D) = hash(D,11000) =17
[0156] H6(D) = hash(D,10100) =33
[0157] H7(D) = hash(D,10010) =86
[0158] H8(D) = hash(D,10001) =86
[0159] 以上述计算得到的8个Hash值作为地址,到规则表中读取对应的规则,可以得到 以下结果:
[0160] 读取地址为133处的规则,为无效规则,不匹配。
[0161] 读取地址为123处的规则,为有效规则,且匹配,命中R2。
[0162] 读取地址为123处的规则,为有效规则,但不匹配R3;继续读取地址为124的规 贝1J,为有效规则,且匹配,命中R3。
[0163] 读取地址为43处的规则,为无效规则,不匹配。
[0164] 读取地址为17处的规则,为无效
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1