流表創(chuàng)建及查詢方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)通信領(lǐng)域中的數(shù)據(jù)報文轉(zhuǎn)發(fā)控制技術(shù),具體涉及流表創(chuàng)建及查詢方法。
【背景技術(shù)】
[0002]在數(shù)據(jù)通信設(shè)備如路由器中,轉(zhuǎn)發(fā)面需要處理一些控制業(yè)務(wù)如ACUAccessControl List,訪問控制列表)、Q0S(Quality Of Service,服務(wù)質(zhì)量)等,這些業(yè)務(wù)的處理一般需要查詢比較大的表,查表比較耗時,一般不能滿足數(shù)據(jù)報文轉(zhuǎn)發(fā)性能要求。
[0003]ACL、Q0S等控制業(yè)務(wù)需要使用報文中的五元組(源地址、源端口、目的地址、目的端口和層四協(xié)議號)或者七元組(源地址、源端口、目的地址、目的端口、層四協(xié)議號、服務(wù)類型(Tos,Type Of Service)和層4標志)對報文進行控制。
[0004]為此,以報文的六元組(源地址、源端口、目的地址、目的端口、層四協(xié)議號和接口索引)或者九元組(源地址、源端口、目的地址、目的端口、層四協(xié)議號、分片標志、服務(wù)類型、層4標志和接口索引)可以唯一定義一條流,使用六元組或者九元組作為KEY值構(gòu)建流表項,流表項中包括KEY值和其它字段。接口接收到報文后,先在流表中查找流表項,把查找的流表項保存在特定的位置(如報文描述符中,報文描述符是存儲報文信息的控制塊)。ACL、Q0S等控制業(yè)務(wù)直接在特定位置獲取流表項,ACL、Q0S等控制業(yè)務(wù)可以一次查找結(jié)果,將結(jié)果記錄在流表項中,后續(xù)直接使用流表項中記錄的結(jié)果。
[0005]目前,流表已經(jīng)成為加速控制業(yè)務(wù)的一種重要手段,那么如何快速查找流表則對于提高流表查詢速度實現(xiàn)報文快速轉(zhuǎn)發(fā)具有實際意義。
【發(fā)明內(nèi)容】
[0006]本發(fā)明所要解決的技術(shù)問題是:提出一種流表創(chuàng)建及查詢方法,提高流表查詢速度實現(xiàn)報文快速轉(zhuǎn)發(fā)。
[0007]本發(fā)明解決上述技術(shù)問題所采用的方案是:流表創(chuàng)建方法,包括:
[0008]采用HASH表組織流表并創(chuàng)建流表項,HASH值的范圍為0到2N,所述流表項中包括以報文六元組或者九元組構(gòu)成的KEY值及利用所述KEY值計算出來的32位HASH值;以32位HASH值的低N位作為HASH表的HASH值,將所述流表項添加到低N位HASH值對應(yīng)的沖突鏈上。
[0009]進一步的,在創(chuàng)建流表項時,將所述KEY值及利用所述KEY值計算出來的32位HASH值作為流表項中開始部分的字段。
[0010]進一步的,所述六元組包括:源地址、源端口、目的地址、目的端口、層四協(xié)議號和接口索引;所述九元組包括源地址、源端口、目的地址、目的端口、層四協(xié)議號、服務(wù)類型、層四標志和接口索引。
[0011]此外,本發(fā)明還提出了一種流表查詢方法,包括:
[0012]當設(shè)備從接口接收到報文后,采用報文的六元組或九元組作為KEY值,并對所述KEY值進行HASH計算,獲得32位HASH值,以所述32位HASH值的低N位作為HASH表的HASH值,在所述HASH值對應(yīng)的沖突鏈上查找流表。
[0013]進一步的,該流表查詢方法還包括:
[0014]若查找到流表則對流表項進行相應(yīng)操作,若未查找到流表,則創(chuàng)建流表項。
[0015]具體的,若未查找到流表,則創(chuàng)建流表項包括:創(chuàng)建的流表項中包括六元組或者九元組或轉(zhuǎn)發(fā)信息,將創(chuàng)建的流表項保存在其KEY值在HASH表中對應(yīng)的沖突鏈的末尾。
[0016]進一步的,所述對流表項進行相應(yīng)操作包括:
[0017]對流表項進行刷新操作,并且將流表項記錄保存到特定位置。
[0018]進一步的,所述特定位置為報文描述符。
[0019]進一步的,所述對流表項進行相應(yīng)操作還包括:根據(jù)流表信息轉(zhuǎn)發(fā)報文。
[0020]進一步的,該流表查詢方法還包括:
[0021]若某個流表項在一定時間內(nèi)未被報文刷新,則將該流表項進行老化處理。
[0022]進一步的,在所述HASH值對應(yīng)的沖突鏈上查找流表的方法為:
[0023]使用32位HASH值和KEY值依次與沖突鏈上各個流表項的32位HASH值和KEY值進行比較運算,若二者都相等,則所對應(yīng)的流表項就是需要查找的流表項。
[0024]本發(fā)明的有益效果是:使用報文中的六元組或者九元組構(gòu)造流表KEY值,通過所述KEY值計算出32位HASH值,流表中包括32位HASH值字段和KEY值字段,取出32位HASH值中的低16位作為HASH表的HASH值。報文在HASH表的沖突鏈中通過32位HASH值和KEY值創(chuàng)建流表和查找流表,這樣提高了 KEY值中前面大部分字段相同的流表的查找速度。
【附圖說明】
[0025]圖1為采用HASH表組織流表的結(jié)構(gòu)示意圖;
[0026]圖2為流表項構(gòu)成示意圖;
[0027]圖3為進行優(yōu)化后的流表結(jié)構(gòu)示意圖;
[0028]圖4為設(shè)備使用流表轉(zhuǎn)發(fā)報文流程圖。
【具體實施方式】
[0029]本發(fā)明旨在提出一種流表查詢方法,提高流表查詢速度實現(xiàn)報文快速轉(zhuǎn)發(fā)。在本發(fā)明中,使用HASH表組織流表,HASH值的范圍為0到2N (N是一個經(jīng)驗值,與系統(tǒng)中流表的規(guī)模相關(guān))。
[0030]在進行流表創(chuàng)建時需要為流表項分配存儲空間,其中定義流表中的流表項的方法為:使用報文的六元組(源地址、源端口、目的地址、目的端口、層四協(xié)議號和接口索引)或者九元組(源地址、源端口、目的地址、目的端口、層四協(xié)議號、服務(wù)類型、分片標志、層四標志和接口索引)作為KEY值。對所述KEY進行HASH計算,計算出32位的HASH值。使用所述32位HASH值和所述KEY值作為流表項中開始部分的字段,然后以32位HASH值的低N位作為HASH表的HASH值,將所述流表項添加到低N位HASH值對應(yīng)的沖突鏈上。
[0031]本發(fā)明中的流表查詢方法為:接口接收到報文后,以六元組或者九元組為KEY值,并計算出所述KEY值的32位HASH值,以所述32位HASH值的低N位作為HASH表的HASH值,在所述HASH值對應(yīng)的沖突鏈上查找流表。查找流表時,使用32位HASH值和KEY值依次與沖突鏈上各個流表項的32位HASH值和KEY值進行比較運算,若二者都相等,則所對應(yīng)的流表項就是需要查找的流表項,流表項查找到以后需要對流表進行刷新操作,并且把流表項記錄到特定位置(如報文描述中)。在進行流表查詢時,若未查找到流表,則需要進行流表的創(chuàng)建。
[0032]實施例:
[0033]如圖1所示,在進行流表創(chuàng)建時,使用HASH表組織流表,HASH值的范圍為0?216;
[0034]流表項中包括所述32位HASH值字段,其值為H32,流表項中包括所述KEY值字段,其值為K,流表項中還包括其它信息字段,
[0035]使用報文六元組或者九元組作為KEY值。對所述KEY進行HASH計算,計算出32位的HASH值。如圖2所示,使用所述32位HASH值和所述KEY值作為流表項中開始部分的字段,流表項中還包括其它信息字段,最后將流表項添加到低16位HASH值對應(yīng)的沖突鏈上,這樣優(yōu)化后的流表組織結(jié)構(gòu)如圖3所示。
[0036]如圖4所示,設(shè)備從接口接收到IPv4報文后,獲取報文的六元組或者九元組作為KEY值。通過KEY計算出32位HASH值,使用所述32位HASH值的低16位作為HASH值在HASH表中查找流表項,如果查找到相應(yīng)流表項則可以根據(jù)流表信息轉(zhuǎn)發(fā)報文,如查找不成功則創(chuàng)建流表項。
[0037]流表查找的過程為:使用所述六元組或者九元組作為KEY值K,通過所述KEY值計算出32位HASH值H32,所述32位HASH值中的低16位作為H16值,根據(jù)H16值定位到查找的HASH表的沖突鏈的位置,然后在沖突鏈上依次比較流表項中的32位HASH值與H32是是否相等,且流表項中的KEY值與K相等,如果沖突鏈上某個流表項的32位HASH值與H32相等,且KEY值與K相等,則該流表項就是所查找的流表項。如果查找不到流表項,則進行流表項創(chuàng)建。
[0038]通過不同的六元組或者8元組計算的32位HASH值H32,H32中的低16值H16,在H16相等而H32也相等的幾率很小,幾乎為0。因此,一個沖突鏈上的流表項中的32位HASH值幾乎互不相等。
[0039]在查詢流表時,先比較所述32位Hash值是否相等,如果不等,則比較下一個流表的32位Hash值是否相等。這樣,16位Hash值H16對應(yīng)8個流表項,即使是查詢第八個流表項,也只需要做8次32位數(shù)的比較后,然后再比較KEY值即可。
[0040]某些情況下,KEY值的九元組中前面的大部分元組相同,最后少部分不同,本發(fā)明將比較多個個元素簡化為比較一個元素,提高了流表的查詢速度。
[0041]報文查詢到流表項后需要對流表項進行刷新,如果某個流表項一段時間沒有被報文刷新,則老化所述流表項,釋放其所占用的存儲空間。
[0042]本發(fā)明方案不僅適用于IPv4報文,還適用于IPv6和其它類型的報文。
【主權(quán)項】
1.流表創(chuàng)建方法,其特征在于,包括: 采用HASH表組織流表并創(chuàng)建流表項,HASH值的范圍為0到2N,所述流表項中包括以報文六元組或者九元組構(gòu)成的KEY值及利用所述KEY值計算出來的32位HASH值;以32位HASH值的低N位作為HASH表的HASH值,將所述流表項添加到低N位HASH值對應(yīng)的沖突鏈上。2.如權(quán)利要求1所述的流表創(chuàng)建方法,其特征在于,在創(chuàng)建流表項時,將所述KEY值及利用所述KEY值計算出來的32位HASH值作為流表項中開始部分的字段。3.如權(quán)利要求1所述的流表創(chuàng)建方法,其特征在于,所述六元組包括:源地址、源端口、目的地址、目的端口、層四協(xié)議號和接口索引;所述九元組包括源地址、源端口、目的地址、目的端口、層四協(xié)議號、服務(wù)類型、分片標志、層四標志和接口索引。4.流表查詢方法,其特征在于,包括: 當設(shè)備從接口接收到報文后,采用報文的六元組或九元組作為KEY值,并對所述KEY值進行HASH計算,獲得32位HASH值,以所述32位HASH值的低N位作為HASH表的HASH值,在所述HASH值對應(yīng)的沖突鏈上查找流表。5.如權(quán)利要求4所述的流表查詢方法,其特征在于,在所述HASH值對應(yīng)的沖突鏈上查找流表的方法為: 使用32位HASH值和KEY值依次與沖突鏈上各個流表項的32位HASH值和KEY值進行比較運算,若二者都相等,則所對應(yīng)的流表項就是需要查找的流表項。6.如權(quán)利要求5所述的流表查詢方法,其特征在于,還包括:若查找到流表則對流表項進行相應(yīng)操作,若未查找到流表,則創(chuàng)建流表項。7.如權(quán)利要求6所述的流表查詢方法,其特征在于,所述若未查找到流表,則創(chuàng)建流表項包括:創(chuàng)建的流表項中包括六元組或者九元組或者轉(zhuǎn)發(fā)信息,將創(chuàng)建的流表項保存在其KEY值在HASH表中對應(yīng)的沖突鏈的末尾。8.如權(quán)利要求7所述的流表查詢方法,其特征在于,該流表查詢方法還包括:若某個流表項在一定時間內(nèi)未被報文刷新,則將該流表項進行老化處理。9.如權(quán)利要求7所述的流表查詢方法,其特征在于,所述特定位置為報文描述符。10.如權(quán)利要求6-9任意一項所述的流表查詢方法,其特征在于,所述對流表項進行相應(yīng)操作還包括: 根據(jù)流表信息轉(zhuǎn)發(fā)報文。
【專利摘要】本發(fā)明涉及數(shù)據(jù)通信領(lǐng)域中的數(shù)據(jù)報文轉(zhuǎn)發(fā)控制技術(shù),其公開了一種流表創(chuàng)建及查詢方法,提高流表查詢速度實現(xiàn)報文快速轉(zhuǎn)發(fā)。本發(fā)明采用HASH表組織流表并創(chuàng)建流表項,HASH值的范圍為0到2N,所述流表項中包括以報文六元組或者九元組構(gòu)成的KEY值及利用所述KEY值計算出來的32位HASH值;以32位HASH值的低N位作為HASH表的HASH值,將所述流表項添加到低N位HASH值對應(yīng)的沖突鏈上。本發(fā)明適用于各種類型報文的轉(zhuǎn)發(fā)控制。
【IPC分類】H04L12/741, H04L12/743
【公開號】CN105357128
【申請?zhí)枴緾N201510731215
【發(fā)明人】何三波
【申請人】邁普通信技術(shù)股份有限公司
【公開日】2016年2月24日
【申請日】2015年10月30日