基于任意字段匹配的數(shù)據(jù)報文轉(zhuǎn)發(fā)方法
【專利摘要】本發(fā)明提出了基于任意字段匹配的數(shù)據(jù)報文轉(zhuǎn)發(fā)方法。該方法是在同一個轉(zhuǎn)發(fā)表中同時容納不同格式的用戶任意指定字段的轉(zhuǎn)發(fā)規(guī)則。用戶通過基址、偏移量、長度三元組來指定匹配報文任意字段,通過多個三元組或者普通知名字段組成所需鍵值,一條轉(zhuǎn)發(fā)表項包含靜態(tài)字段表區(qū)和動態(tài)字段表區(qū)。同時,還給出用戶配置增加轉(zhuǎn)發(fā)表項的方法以及報文轉(zhuǎn)發(fā)查表方法。
【專利說明】基于任意字段匹配的數(shù)據(jù)報文轉(zhuǎn)發(fā)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種基于任意字段匹配的數(shù)據(jù)報文轉(zhuǎn)發(fā)方法,屬于報文轉(zhuǎn)發(fā)【技術(shù)領(lǐng)域】。
【背景技術(shù)】
[0002]傳統(tǒng)路由器和交換機中的路由表(MAC轉(zhuǎn)發(fā)表或者流表)由若干表項構(gòu)成,所有表項長度相同(均包含相同數(shù)目的比特位),所有表項的相應比特位代表的含義均相同,譬如以太網(wǎng)二層交換機上的MAC轉(zhuǎn)發(fā)表,每一條表項均為48比特,其含義是計算機網(wǎng)絡(luò)二層MAC地址。又如openf low交換機上的流表,一個流表項目雖然可以包括多個字段,譬如入端口、源IP地址、目的IP地址、源MAC地址、目的MAC地址等等,但是同一個流表中所有流表項的格式,包含的字段,以及字段的長度、位置都是固定不變的。
[0003]基于這種固定格式的轉(zhuǎn)發(fā)表,傳統(tǒng)路由器和交換機對數(shù)據(jù)報文進行查表前均需要根據(jù)轉(zhuǎn)發(fā)表所規(guī)定的格式從到達的數(shù)據(jù)報文中提取相應字段,并按照轉(zhuǎn)發(fā)表規(guī)定的格式組織成鍵值,用來進行查表匹配使用。參見附圖1中描述的openflow交換機報文字段提取流程圖,這種報文處理方法的優(yōu)勢在于成本低廉,由于所有表項共享相同的格式,因此只需要進行一次報文字段提取,得到的鍵值即可以與所有表項之間進行比較。而且,由于處理流程簡單,所以一般可以通過ASIC硬件實現(xiàn)。然而,其缺陷也是明顯的,這種固定格式的轉(zhuǎn)發(fā)表不支持同一個轉(zhuǎn)發(fā)表中存在不同格式的表項。譬如,一個交換機上配置了三條轉(zhuǎn)發(fā)規(guī)則,第一條規(guī)則只包含目的MAC地址字段,第二條規(guī)則包含源IP地址和目的IP地址,第三條規(guī)則是用戶自定義的從報文荷載開始的前100比特的內(nèi)容。
[0004]在現(xiàn)有交換機上同時實現(xiàn)以上三條規(guī)則有兩種方法,一是使用TCAM通配,每一條表項同時包含所有可能的字段,但是只對自身關(guān)注的部分字段賦值,其余部分設(shè)置為通配。那么,第一條規(guī)則所占用的長度為目的MAC地址字段(48比特),加上源IP (32比特)、目的IP (32比特)和報文荷載(100比特),共212比特,其中有效位占比僅為22%。隨著其他表項需要用到的字段種類增加,這個比例將進一步減小。因此使用TCAM通配的方式會導致非常低的存儲空間利用率。
[0005]第二種方式是使用多級轉(zhuǎn)發(fā)表,即三條規(guī)則分別放在三張不同格式的轉(zhuǎn)發(fā)表中。當數(shù)據(jù)報文到達時,先在第一張轉(zhuǎn)發(fā)表中進行匹配查找,如果不匹配,則跳至第二張表進行匹配,如果仍不匹配,再跳至第三張表。每次查表前均需要根據(jù)表的規(guī)定從數(shù)據(jù)報文進行相應字段鍵值提取。這種實現(xiàn)方式的弊端在于轉(zhuǎn)發(fā)表數(shù)目隨表項類型增加而增加,而且隨著轉(zhuǎn)發(fā)表級數(shù)增多,報文處理延遲增大,影響網(wǎng)絡(luò)性能。
【發(fā)明內(nèi)容】
[0006]為了解決現(xiàn)有技術(shù)中的技術(shù)問題,本發(fā)明提出了基于任意字段匹配的數(shù)據(jù)報文轉(zhuǎn)發(fā)方法。簡單來說,該方法是在同一個轉(zhuǎn)發(fā)表中同時容納不同格式的用戶任意指定字段的轉(zhuǎn)發(fā)規(guī)則。[0007]具體地,本發(fā)明采用如下技術(shù)方案:
[0008]一種基于任意字段匹配的數(shù)據(jù)報文轉(zhuǎn)發(fā)方法,其特征在于:用戶通過基址、偏移量、長度三元組來指定匹配報文任意字段,通過多個三元組或者普通知名字段組成所需鍵值;一條轉(zhuǎn)發(fā)表項包含靜態(tài)字段表區(qū)和動態(tài)字段表區(qū),靜態(tài)字段區(qū)的字段類型和數(shù)目在轉(zhuǎn)發(fā)表初始化階段由靜態(tài)字段描述符設(shè)定,所有轉(zhuǎn)發(fā)表項的靜態(tài)字段區(qū)的字段類型和數(shù)目均相同,動態(tài)字段區(qū)中的字段類型和數(shù)目是在轉(zhuǎn)發(fā)表項增加時由新增對應的動態(tài)字段描述符設(shè)定,同一張轉(zhuǎn)發(fā)表中不同表項的動態(tài)字段區(qū)相互獨立。
[0009]靜態(tài)字段描述符和動態(tài)字段描述符均是由一個或多個知名字段或者三元組組成的序列串。
[0010]靜態(tài)字段表區(qū)是以靜態(tài)字段提取器獲得的待匹配值作為輸入,進行通配查表,并輸出匹配表項序號或者無表項命中信號。靜態(tài)字段表區(qū)由靜態(tài)字段表項組成,每一條靜態(tài)字段表項包含三部分,分別是靜態(tài)字段鍵值、靜態(tài)字段掩碼和動態(tài)字段表項首地址。
[0011]靜態(tài)字段鍵值和靜態(tài)字段掩碼的長度相等且均由靜態(tài)字段描述符所規(guī)定。
[0012]動態(tài)字段表區(qū)是對靜態(tài)表區(qū)的擴展,動態(tài)字段表區(qū)的地址存儲在靜態(tài)字段表區(qū)的動態(tài)字段地址區(qū)中。
[0013]動態(tài)字段表區(qū)包括三部分,分別是動態(tài)字段描述符區(qū)、動態(tài)字段鍵值區(qū)和動態(tài)字段掩碼區(qū)。
[0014]每張轉(zhuǎn)發(fā)表只有一個靜態(tài)字段描述符,在轉(zhuǎn)發(fā)表初始化階段由用戶通過配置腳本或者配置命令的方式來設(shè)置該轉(zhuǎn)發(fā)表的靜態(tài)字段描述符。
[0015]采用字段提取器,字段提取器每次能從字段描述符所指定的報文位置提取出相應全部字段內(nèi)容,并且將字段內(nèi)容按照字段描述符中字段的先后次序組合成待匹配值供字段區(qū)進行查找匹配。
[0016]采用基于任意字段匹配的數(shù)據(jù)報文轉(zhuǎn)發(fā)方法進行用戶配置增加轉(zhuǎn)發(fā)表項的方法:其特征在于:
[0017](I)依據(jù)轉(zhuǎn)發(fā)表靜態(tài)字段描述符包含字段及其先后次序,向表項中靜態(tài)字段表區(qū)填入靜態(tài)字段鍵值和靜態(tài)字段掩碼,用戶沒有指定的靜態(tài)字段設(shè)置為缺省通配;
[0018](2)若表項需要匹配靜態(tài)字段描述符以外的動態(tài)字段,則包括三步操作:
[0019]a)根據(jù)動態(tài)字段的類型和數(shù)目為動態(tài)字段表區(qū)分配空間;
[0020]b)根據(jù)用戶配置的動態(tài)字段,構(gòu)造動態(tài)字段描述符以及配置動態(tài)字段鍵值區(qū)和動態(tài)字段掩碼區(qū);
[0021]c)將動態(tài)字段表區(qū)的地址寫到靜態(tài)字段表區(qū)中的動態(tài)字段表地址,實現(xiàn)動態(tài)字段表區(qū)關(guān)聯(lián)。
[0022]配置該條表項工作流程如下:
[0023](I)配置靜態(tài)字段區(qū);
[0024](2)為動態(tài)字段區(qū)分配空間;
[0025](3)配置動態(tài)字段區(qū);
[0026](4)關(guān)聯(lián)動態(tài)字段,將動態(tài)字段表區(qū)的地址寫入到靜態(tài)字段表區(qū),完成表項關(guān)聯(lián)。
[0027]—種報文轉(zhuǎn)發(fā)查表方法,其特征在于:報文轉(zhuǎn)發(fā)查表大致流程分為兩階段,第一階段是靜態(tài)字段表區(qū)查找,找出報文靜態(tài)字段命中的全部表項,作為候選命中表項;第二階段,把各個候選表項按優(yōu)先級自高向低逐一與報文進行動態(tài)字段匹配。
[0028]第一階段,靜態(tài)字段表區(qū)匹配查找,包含以下步驟:
[0029](I)靜態(tài)字段提取,根據(jù)靜態(tài)字段描述符對字段提取器進行配置,字段提取器從數(shù)據(jù)報文中指定位置提取出全部靜態(tài)字段,并且合并成待匹配值;
[0030](2)靜態(tài)字段查表,將帶匹配值與靜態(tài)字段表區(qū)的所有表項逐一進行匹配,若匹配成功則將表項加入到候選命中表項序列中;
[0031](3)若查找結(jié)束后,候選命中表項序列不為空,即至少有一條表項的靜態(tài)字段區(qū)命中,則進行第二階段動態(tài)字段匹配;否則,表示沒有一條表項的靜態(tài)字段區(qū)被命中,即轉(zhuǎn)發(fā)表中沒有可以匹配的表項,查表結(jié)束并輸出無命中。
[0032]第二階段,動態(tài)字段表區(qū)匹配,按照候選命中表項序列中次序,用每一個候選表項對數(shù)據(jù)報文進行如下匹配:
[0033](I)判斷候選表項靜態(tài)字段表區(qū)中的動態(tài)字段區(qū)地址是否被賦值,是否關(guān)聯(lián)動態(tài)字段表區(qū),若沒有關(guān)聯(lián),表示該表項僅包含靜態(tài)字段表區(qū),且已經(jīng)命中,因此該表項被命中,第二階段匹配結(jié)束,輸入當前候選命中表項的序號;若該表項有關(guān)聯(lián)動態(tài)字段表區(qū),執(zhí)行
(2);
[0034](2)通過動態(tài)字段區(qū)地址找到動態(tài)字段表區(qū),根據(jù)動態(tài)字段描述符對字段提取器進行配置并從數(shù)據(jù)報文中提出待匹配動態(tài)字段值;
[0035](3)將待匹配動態(tài)字段值與動態(tài)字段表區(qū)中動態(tài)字段鍵值和動態(tài)字段掩碼進行匹配,若匹配成功,表不表項的動態(tài)字段表區(qū)與數(shù)據(jù)報文匹配,同時由于第一階段靜態(tài)報文查找中已經(jīng)確認該表項靜態(tài)字段與報文匹配,因此該表項與報文匹配成功,查找結(jié)束,輸出當前命中表項;否則,查看下一條候選命中表項,執(zhí)行(I);
[0036](4)若全部候選命中表項均不能與數(shù)據(jù)報文動態(tài)字段匹配,則查找結(jié)束,輸出無命中。
[0037]本方法的創(chuàng)新點主要有兩處:
[0038]1.引入基址,偏移量,長度三元組靈活定義任意字段,便于支持新型網(wǎng)絡(luò)協(xié)議開發(fā)部署。
[0039]2.引入動態(tài)字段區(qū),通過定義動態(tài)字段區(qū),同一個轉(zhuǎn)發(fā)表中不同表項可靈活配置不同的任意字段,能夠解決傳統(tǒng)交換機轉(zhuǎn)發(fā)表數(shù)量膨脹問題和多級查表轉(zhuǎn)發(fā)延遲變大問題;本方法中不同表項的動態(tài)字段區(qū)相互獨立,無需冗余字段,能夠解決傳統(tǒng)交換機靜態(tài)字段轉(zhuǎn)發(fā)表方式由于字段類型的多樣性導致的字段利用效率低下問題。
【專利附圖】
【附圖說明】
[0040]圖1是【背景技術(shù)】中openflow交換機報文字段提取流程圖。
[0041]圖2是通過基址、偏移量、長度三元組指定匹配報文任意字段示意圖。
[0042]圖3是轉(zhuǎn)發(fā)表項示意圖。
[0043]圖4是靜態(tài)字段表項示意圖。
[0044]圖5是動態(tài)字段表區(qū)三部分示意圖。
[0045]圖6是查表第一階段:靜態(tài)字段匹配示意圖。
[0046]圖7是查表第二階段:動態(tài)字段匹配示意圖?!揪唧w實施方式】
[0047]下面結(jié)合附圖和具體實施例對本發(fā)明的技術(shù)方案進行詳細描述。
[0048]如附圖2所示的通過基址、偏移量、長度三元組指定匹配報文任意字段示意圖。用戶通過基址、偏移量、長度三元組來指定匹配報文任意字段,通過多個三元組或者普通知名字段組成所需鍵值?;肥侵缸侄芜x取的定位標志,可能的枚舉值為Layer2,Layer3,Layer4,payload等,分別代表二層、三層、四層及荷載的起始位置。偏移量是指字段相對基址位置偏移的字節(jié)數(shù),長度是指字段占用字節(jié)數(shù)。
[0049]如附圖3所的轉(zhuǎn)發(fā)表項意圖。一條轉(zhuǎn)發(fā)表項包含靜態(tài)字段表區(qū)和動態(tài)字段表區(qū)(可選)。靜態(tài)字段區(qū)的字段類型和數(shù)目在轉(zhuǎn)發(fā)表初始化階段由靜態(tài)字段描述符設(shè)定,所有轉(zhuǎn)發(fā)表項的靜態(tài)字段區(qū)的字段類型和數(shù)目均相同。動態(tài)字段區(qū)中的字段類型和數(shù)目是在轉(zhuǎn)發(fā)表項增加時由新增對應的動態(tài)字段描述符設(shè)定,同一張轉(zhuǎn)發(fā)表中不同表項的動態(tài)字段區(qū)相互獨立。
[0050]字段描述符:靜態(tài)字段描述符和動態(tài)字段描述符均是由一個或多個知名字段或者三元組組成的序列串,譬如:
[0051]{目的 IP 地址,TCP 目的端 口號,[Layer3,10,10],[Layer7, 5,40]}
[0052]該字段描述符包含四個字段,第一和第二個字段是知名字段,第三個和第四個是用戶通過三元組自定義的字段。知名字段長度由其所對應的網(wǎng)絡(luò)協(xié)議所規(guī)定,譬如,IPv4協(xié)議規(guī)定目的IP地址為4字節(jié),TCP協(xié)議規(guī)定TCP目的端口號位2字節(jié)。而自定義字段的長度由三元組中的“長度”域來指定。
[0053]靜態(tài)字段描述符:每個轉(zhuǎn)發(fā)表只有一個靜態(tài)字段描述符,在轉(zhuǎn)發(fā)表初始化階段由用戶通過配置腳本或者配置命令的方式來設(shè)置該轉(zhuǎn)發(fā)表的靜態(tài)字段描述符。譬如,用戶為轉(zhuǎn)發(fā)表配置的靜態(tài)字段描述符為如下:
[0054]{目的 IP 地址,[Layer3,10,1]}
[0055]該靜態(tài)字段描述符包含一個知名字段(目的IP地址)和一個自定義字段,靜態(tài)字段描述符的作用有三方面。
[0056]一、轉(zhuǎn)發(fā)表根據(jù)靜態(tài)字段描述符中的字段對靜態(tài)字段提取器進行配置,使得靜態(tài)字段提取器每次能從靜態(tài)字段描述符所指定的所有報文位置提取出相應字段內(nèi)容;
[0057]二、轉(zhuǎn)發(fā)表根據(jù)靜態(tài)字段描述符對靜態(tài)字段表區(qū)進行初始化配置,主要是靜態(tài)字段表區(qū)存儲空間分配。譬如上面的例子中,靜態(tài)字段描述符包含的兩個字段總長度為5個字節(jié),則轉(zhuǎn)發(fā)表為靜態(tài)字段表區(qū)每一條表項預留14字節(jié)空間,其中包括5字節(jié)存儲鍵值和5字節(jié)存儲掩碼和4字節(jié)存儲動態(tài)字段表項地址。靜態(tài)字段表區(qū)總空間大小為每條表項大小與轉(zhuǎn)發(fā)最大流表項數(shù)目的乘積。
[0058]三、用戶在配置靜態(tài)字段表區(qū)的表項賦值時,轉(zhuǎn)發(fā)表會根據(jù)靜態(tài)字段描述符中每個字段進行檢查,然后按照字段次序合并成表項鍵值和表項掩碼,并寫入表項空間。
[0059]字段提取器:字段提取器每次能從字段描述符所指定的報文位置提取出相應全部字段內(nèi)容,并且將字段內(nèi)容按照字段描述符中字段的先后次序組合成待匹配值供字段區(qū)進行查找匹配。譬如,字段提取器根據(jù)靜態(tài)字段描述符{目的IP地址,[Layer3,10,l]}從報文中提取出來兩個字段內(nèi)容分別為192.168.0.15和OxCO,組合成一個鍵值為0xC0A8000FCO,前面C0A8000F是目的IP (192.168.0.15)的十六進制表示,后面CO是自定義字段,總共
5字節(jié)長度。
[0060]靜態(tài)字段表區(qū):靜態(tài)字段表區(qū)是以靜態(tài)字段提取器獲得的待匹配值作為輸入,進行通配查表,并輸出匹配表項序號或者無表項命中信號。靜態(tài)字段表區(qū)由靜態(tài)字段表項組成,每一條靜態(tài)字段表項包含三部分,分別是靜態(tài)字段鍵值、靜態(tài)字段掩碼和動態(tài)字段表項首地址。如上所述,靜態(tài)字段鍵值和靜態(tài)字段掩碼的長度相等且均由靜態(tài)字段描述符所規(guī)定。
[0061]參見附圖4靜態(tài)字段表項示意圖,用戶配置新增一條表項時,需要對靜態(tài)字段描述符所指定的全部字段逐一進行配置,包括字段鍵值和字段掩碼。譬如,用戶根據(jù)靜態(tài)字段描述符{目的IP地址,[Layer3,10,1]},分別配置目的IP地址為192.168.0.0/24,配置自定義字段為0x10,自定義字段掩碼為OxFF。
[0062]為防止用戶配置錯誤,轉(zhuǎn)發(fā)表依據(jù)靜態(tài)字段描述符的設(shè)定對用戶配置腳本(或命令)進行正確性檢查。檢查通過后,轉(zhuǎn)發(fā)表將各個靜態(tài)字段的鍵值和掩碼分別進行合并,并且寫入表項中。如上述例子,轉(zhuǎn)發(fā)表得到合并后的靜態(tài)字段鍵值為0XC0A8000010,靜態(tài)字段掩碼為OxFF FF FF00FF,然后將其分別寫入到表項靜態(tài)字段鍵值區(qū)和靜態(tài)字段掩碼區(qū)。
[0063]若用戶在配置表項時沒有指定靜態(tài)字段描述符中某些字段,則這些字段缺省鍵值為全零,缺省掩碼為全零。譬如,用戶配置表項時只配置了目的IP地址為192.168.0.0/24,沒有配置自定義字段區(qū),則轉(zhuǎn)發(fā)表對該表項的自定義字段采用默認配置,即鍵值為0x00,掩碼為0x00,最終得到的靜態(tài)字段鍵值區(qū)為Ox C0A8000000,靜態(tài)字段掩碼區(qū)為OxFF FFFi7OOOO。
[0064]用戶在配置表項時可選配置關(guān)聯(lián)動態(tài)字段表項,若無配置關(guān)聯(lián)動態(tài)字段表項,則靜態(tài)字段表區(qū)命中即表示表項被命中,直接返回表項序號;若用戶配置了關(guān)聯(lián)動態(tài)字段表項,則靜態(tài)字段表區(qū)和動態(tài)字段表區(qū)同時命中方可表示表項被命中。
[0065]若用戶沒有配置關(guān)聯(lián)動態(tài)表項,則改表項的靜態(tài)字段表區(qū)中最后的動態(tài)字段表項地址區(qū)缺省為全零,表示該表項沒有關(guān)聯(lián)動態(tài)字段表區(qū);否則,靜態(tài)字段表區(qū)中該位置存儲其關(guān)聯(lián)動態(tài)字段表項的地址,當待匹配靜態(tài)字段值命中當前靜態(tài)字段表區(qū)后,轉(zhuǎn)發(fā)表可以通過該地址找到動態(tài)字段表區(qū),以進行第二階段動態(tài)字段匹配。
[0066]動態(tài)字段表區(qū):
[0067]動態(tài)字段表區(qū)是對靜態(tài)表區(qū)的擴展,由于靜態(tài)字段描述符指定了靜態(tài)字段表區(qū)存儲字段的種類和數(shù)目,假如用戶需要對表項進行擴展,來匹配其他不被靜態(tài)字段描述符所指定的字段,需要為該表項增加動態(tài)字段表區(qū),并將動態(tài)字段表區(qū)與靜態(tài)字段表區(qū)關(guān)聯(lián)起來,即將動態(tài)字段表區(qū)的地址存儲在靜態(tài)字段表區(qū)的動態(tài)字段地址區(qū)中。
[0068]動態(tài)字段表區(qū)包括三部分,分別是動態(tài)字段描述符區(qū)、動態(tài)字段鍵值區(qū)和動態(tài)字段掩碼區(qū)。如附圖5動態(tài)字段表區(qū)三部分示意圖所示。
[0069]與靜態(tài)字段描述符類似,動態(tài)字段描述符用來描述動態(tài)字段表區(qū)所包含的字段,其區(qū)別在于三方面:
[0070]初始化時刻不同。靜態(tài)字段描述符在轉(zhuǎn)發(fā)表初始化階段生成并由用戶進行配置,靜態(tài)字段描述符為所有表項的靜態(tài)字段表區(qū)共用;動態(tài)字段描述符在用戶配置轉(zhuǎn)發(fā)表項時生成,用戶配置動態(tài)字段表區(qū)需要配置其專用動態(tài)字段描述符、動態(tài)字段鍵值區(qū)和動態(tài)字段掩碼區(qū)。
[0071]作用報文范圍不同。靜態(tài)字段描述符對靜態(tài)字段提取器進行配置,對所有需要查表的數(shù)據(jù)報文進行所有靜態(tài)字段提取和組合;而動態(tài)字段描述符配置字段提取器只對命中該流表靜態(tài)字段表區(qū)的數(shù)據(jù)報文進行指定動態(tài)字段的提取和合并。
[0072]分配空間的方式不同。靜態(tài)字段描述符所描述的字段的總長度決定了所有表項的靜態(tài)字段表區(qū)的存儲空間大??;動態(tài)字段描述符所描述的字段總長度只影響所在單一流表的動態(tài)字段表區(qū)的空間分配。
[0073]動態(tài)字段鍵值區(qū)和動態(tài)字段掩碼區(qū)的空間分配和配置方式與靜態(tài)字段鍵值區(qū)和靜態(tài)字段掩碼區(qū)類似,唯一區(qū)別在于其依賴于動態(tài)字段描述符。
[0074]用戶配置增加轉(zhuǎn)發(fā)表項方法:
[0075]依據(jù)轉(zhuǎn)發(fā)表靜態(tài)字段描述符包含字段及其先后次序,向表項中靜態(tài)字段表區(qū)填入靜態(tài)字段鍵值和靜態(tài)字段掩碼,用戶沒有指定的靜態(tài)字段設(shè)置為缺省通配;
[0076]若表項需要匹配靜態(tài)字段描述符以外的動態(tài)字段,則包括三步操作
[0077]根據(jù)動態(tài)字段的類型和數(shù)目為動態(tài)字段表區(qū)分配空間;
[0078]根據(jù)用戶配置的動態(tài)字段,構(gòu)造動態(tài)字段描述符以及配置動態(tài)字段鍵值區(qū)和動態(tài)字段掩碼區(qū);
[0079]將動態(tài)字段表區(qū)的地址寫到靜態(tài)字段表區(qū)中的動態(tài)字段表地址,實現(xiàn)動態(tài)字段表區(qū)關(guān)聯(lián)。
[0080]譬如,用戶配置一條轉(zhuǎn)發(fā)表項如下:
[0081]目的IP地址為192.168.0.15/32,TCP目的端口號為6000,TCP荷載的第一個字節(jié)為 0x33
[0082]當前轉(zhuǎn)發(fā)表的靜態(tài)字段描述符為{目的IP地址,[Layer3,10,I]},因此,用戶需要配置的表項中只有目的IP地址這一項在靜態(tài)字段表區(qū),其余兩項需要添加到動態(tài)字段表區(qū)。具體配置該條表項工作流程如下:
[0083]配置靜態(tài)字段區(qū)。目的IP地址鍵值為0xC0A8000F,目的IP地址掩碼為OxFF FFFF FF,由于靜態(tài)字段描述符中另一個字段沒有被配置,因此采用缺省賦值,即鍵值0x00,掩碼0x00。合并后,靜態(tài)字段鍵值區(qū)為0xC0A8000F00,掩碼區(qū)為OxFF FF FFFF00。
[0084]為動態(tài)字段區(qū)分配空間。用戶配置TCP目的端口號和自定義字段總長度為3字節(jié),因此總共分配空間大小為:動態(tài)字段描述符大小+動態(tài)字段鍵值區(qū)(3字節(jié))+動態(tài)字段掩碼區(qū)(3字節(jié))。動態(tài)字段描述符大小與其包含字段個數(shù)和種類有關(guān)。
[0085]配置動態(tài)字段區(qū)。利用用戶動態(tài)字段配置信息構(gòu)造動態(tài)字段描述符{TCP目的端口號,[layer5,0,1]},并且對動態(tài)字段鍵值區(qū)和掩碼區(qū)進行賦值。TCP目的端口號鍵值區(qū)為0x1770,掩碼區(qū)為OxFF FF,自定義字段的鍵值區(qū)為0x33,掩碼區(qū)為OxFF。合并后,動態(tài)字段鍵值區(qū)為0x177033,動態(tài)字段掩碼區(qū)為OxFF FF FF。
[0086]關(guān)聯(lián)動態(tài)字段。將動態(tài)字段表區(qū)的地址寫入到靜態(tài)字段表區(qū),完成表項關(guān)聯(lián)。
[0087]報文轉(zhuǎn)發(fā)查表方法:
[0088]報文轉(zhuǎn)發(fā)查表大致流程分為兩階段,第一階段是靜態(tài)字段表區(qū)查找,找出報文靜態(tài)字段命中的全部表項,作為候選命中表項;第二階段,把各個候選表項按優(yōu)先級自高向低逐一與報文進行動態(tài)字段匹配。[0089]第一階段,靜態(tài)字段表區(qū)匹配查找。如附圖6所示。
[0090]靜態(tài)字段提取。根據(jù)靜態(tài)字段描述符對字段提取器進行配置,字段提取器從數(shù)據(jù)報文中指定位置提取出全部靜態(tài)字段,并且合并成待匹配值。
[0091]靜態(tài)字段查表。將帶匹配值與靜態(tài)字段表區(qū)的所有表項逐一進行匹配,若匹配成功則將表項加入到候選命中表項序列中。
[0092]若查找結(jié)束后,候選命中表項序列不為空,即至少有一條表項的靜態(tài)字段區(qū)命中,則進行第二階段動態(tài)字段匹配;否則,表示沒有一條表項的靜態(tài)字段區(qū)被命中,即轉(zhuǎn)發(fā)表中沒有可以匹配的表項,查表結(jié)束并輸出無命中。
[0093]譬如,用戶配置了一個轉(zhuǎn)發(fā)表,靜態(tài)字段描述符為{目的IP地址,[Layer3,10,I]},其中第k條表項的靜態(tài)字段表區(qū)配置為:靜態(tài)字段鍵值區(qū)0xC0A8000000,掩碼區(qū)OxFFFF FF0000,即要求目的IP地址匹配192.168.0.0/24,自定義字段通配。假設(shè)一個數(shù)據(jù)報文進入第一階段查表,字段提取器從該報文中目的IP地址字段和自定義字段提取得到待匹配值為OxCOASOOOF E2,當該匹配值與第k條表項的靜態(tài)字段表區(qū)進行匹配時,首先將匹配值與掩碼區(qū)進行與運算,即0xC0A8000F E2&0xFF FF FF0000,得到0xC0A8000000,再將計算結(jié)果與靜態(tài)字段鍵值區(qū)進行對比,如果兩者相同表示靜態(tài)字段表區(qū)被命中,否則沒被命中。在這個例子中,第k條表項的靜態(tài)字段表區(qū)被命中,因此,將第k條表項加入到候選命中項序列中。
[0094]第二階段動態(tài)字段表區(qū)匹配。如附圖7所示。
[0095]按照候選命中表項序列中次序,用每一個候選表項對數(shù)據(jù)報文進行如下匹配:
[0096]判斷候選表項靜態(tài)字段表區(qū)中的動態(tài)字段區(qū)地址是否被賦值(是否關(guān)聯(lián)動態(tài)字段表區(qū)),若沒有關(guān)聯(lián),表示該表項僅包含靜態(tài)字段表區(qū),且已經(jīng)命中,因此該表項被命中,第二階段匹配結(jié)束,輸入當前候選命中表項的序號;若該表項有關(guān)聯(lián)動態(tài)字段表區(qū),執(zhí)行
b);
[0097]通過動態(tài)字段區(qū)地址找到動態(tài)字段表區(qū),根據(jù)動態(tài)字段描述符對字段提取器進行配置并從數(shù)據(jù)報文中提出待匹配動態(tài)字段值。
[0098]將待匹配動態(tài)字段值與動態(tài)字段表區(qū)中動態(tài)字段鍵值和動態(tài)字段掩碼進行匹配。若匹配成功,表不表項的動態(tài)字段表區(qū)與數(shù)據(jù)報文匹配,同時由于第一階段靜態(tài)報文查找中已經(jīng)確認該表項靜態(tài)字段與報文匹配,因此該表項與報文匹配成功,查找結(jié)束,輸出當前命中表項;否則,查看下一條候選命中表項,執(zhí)行a);
[0099]若全部候選命中表項均不能與數(shù)據(jù)報文動態(tài)字段匹配,則查找結(jié)束,輸出無命中。
[0100]本發(fā)明技術(shù)方案帶來的有益效果有:
[0101]1.引入基址,偏移量,長度三元組靈活定義任意字段,便于支持新型網(wǎng)絡(luò)協(xié)議開發(fā)部署。
[0102]2.引入動態(tài)字段區(qū),通過定義動態(tài)字段區(qū),同一個轉(zhuǎn)發(fā)表中不同表項可靈活配置不同的任意字段,能夠解決傳統(tǒng)交換機轉(zhuǎn)發(fā)表數(shù)量膨脹問題和多級查表轉(zhuǎn)發(fā)延遲變大問題;本方法中不同表項的動態(tài)字段區(qū)相互獨立,避免冗余字段,能夠解決傳統(tǒng)交換機靜態(tài)字段轉(zhuǎn)發(fā)表方式由于字段類型的多樣性導致的存儲空間利用效率低下問題。
[0103]本發(fā)明所述并不限于【具體實施方式】所述的實施例,只要是本領(lǐng)域技術(shù)人員根據(jù)本發(fā)明方案得出其他的實施方式,同樣屬于本發(fā)明的技術(shù)創(chuàng)新及保護的范圍。
【權(quán)利要求】
1.一種基于任意字段匹配的數(shù)據(jù)報文轉(zhuǎn)發(fā)方法,其特征在于:用戶通過基址、偏移量、長度三元組來指定匹配報文任意字段,通過多個三元組或者普通知名字段組成所需鍵值;一條轉(zhuǎn)發(fā)表項包含靜態(tài)字段表區(qū)和動態(tài)字段表區(qū),靜態(tài)字段區(qū)的字段類型和數(shù)目在轉(zhuǎn)發(fā)表初始化階段由靜態(tài)字段描述符設(shè)定,所有轉(zhuǎn)發(fā)表項的靜態(tài)字段區(qū)的字段類型和數(shù)目均相同,動態(tài)字段區(qū)中的字段類型和數(shù)目是在轉(zhuǎn)發(fā)表項增加時由新增對應的動態(tài)字段描述符設(shè)定,同一張轉(zhuǎn)發(fā)表中不同表項的動態(tài)字段區(qū)相互獨立。
2.如權(quán)利要求1所述的基于任意字段匹配的數(shù)據(jù)報文轉(zhuǎn)發(fā)方法,其特征在于:靜態(tài)字段描述符和動態(tài)字段描述符均是由一個或多個知名字段或者三元組組成的序列串。
3.如權(quán)利要求2所述的基于任意字段匹配的數(shù)據(jù)報文轉(zhuǎn)發(fā)方法,其特征在于:靜態(tài)字段表區(qū)是以靜態(tài)字段提取器獲得的待匹配值作為輸入,進行通配查表,并輸出匹配表項序號或者無表項命中信號。靜態(tài)字段表區(qū)由靜態(tài)字段表項組成,每一條靜態(tài)字段表項包含三部分,分別是靜態(tài)字段鍵值、靜態(tài)字段掩碼和動態(tài)字段表項首地址。
4.如權(quán)利要求3所述的基于任意字段匹配的數(shù)據(jù)報文轉(zhuǎn)發(fā)方法,其特征在于:靜態(tài)字段鍵值和靜態(tài)字段掩碼的長度相等且均由靜態(tài)字段描述符所規(guī)定。
5.如權(quán)利要求2所述的基于任意字段匹配的數(shù)據(jù)報文轉(zhuǎn)發(fā)方法,其特征在于:動態(tài)字段表區(qū)是對靜態(tài)表區(qū)的擴展,動態(tài)字段表區(qū)的地址存儲在靜態(tài)字段表區(qū)的動態(tài)字段地址區(qū)中。
6.如權(quán)利要求5所述的基于任意字段匹配的數(shù)據(jù)報文轉(zhuǎn)發(fā)方法,其特征在于:動態(tài)字段表區(qū)包括三部分,分別是動態(tài)字段描述符區(qū)、動態(tài)字段鍵值區(qū)和動態(tài)字段掩碼區(qū)。
7.如權(quán)利要求2所述的基于任意字段匹配的數(shù)據(jù)報文轉(zhuǎn)發(fā)方法,其特征在于:每張轉(zhuǎn)發(fā)表只有一個靜態(tài)字段描述符,在轉(zhuǎn)發(fā)表初始化階段由用戶通過配置腳本或者配置命令的方式來設(shè)置該轉(zhuǎn)發(fā)表的靜態(tài)字段描述符。
8.如權(quán)利要求1-3中任一項所述的基于任意字段匹配的數(shù)據(jù)報文轉(zhuǎn)發(fā)方法,其特征在于:采用字段提取器,字段提取器每次能從字段描述符所指定的報文位置提取出相應全部字段內(nèi)容,并且將字段內(nèi)容按照字段描述符中字段的先后次序組合成待匹配值供字段區(qū)進行查找匹配。
9.一種采用權(quán)利要求1-8任一項所述的基于任意字段匹配的數(shù)據(jù)報文轉(zhuǎn)發(fā)方法進行用戶配置增加轉(zhuǎn)發(fā)表項的方法:其特征在于: (1)依據(jù)轉(zhuǎn)發(fā)表靜態(tài)字段描述符包含字段及其先后次序,向表項中靜態(tài)字段表區(qū)填入靜態(tài)字段鍵值和靜態(tài)字段掩碼,用戶沒有指定的靜態(tài)字段設(shè)置為缺省通配; (2)若表項需要匹配靜態(tài)字段描述符以外的動態(tài)字段,則包括三步操作: a)根據(jù)動態(tài)字段的類型和數(shù)目為動態(tài)字段表區(qū)分配空間; b)根據(jù)用戶配置的動態(tài)字段,構(gòu)造動態(tài)字段描述符以及配置動態(tài)字段鍵值區(qū)和動態(tài)字段掩碼區(qū); c)將動態(tài)字段表區(qū)的地址寫到靜態(tài)字段表區(qū)中的動態(tài)字段表地址,實現(xiàn)動態(tài)字段表區(qū)關(guān)聯(lián)。
10.如權(quán)利要求9所述的用戶配置增加轉(zhuǎn)發(fā)表項方法:其特征在于:配置該條表項工作流程如下: (I)配置靜態(tài)字段區(qū);(2)為動態(tài)字段區(qū)分配空間; (3)配置動態(tài)字段區(qū); (4)關(guān)聯(lián)動態(tài)字段,將動態(tài)字段表區(qū)的地址寫入到靜態(tài)字段表區(qū),完成表項關(guān)聯(lián)。
11.一種采用權(quán)利要 求1-8任一項所述的基于任意字段匹配的數(shù)據(jù)報文轉(zhuǎn)發(fā)方法進行報文轉(zhuǎn)發(fā)查表方法,其特征在于:報文轉(zhuǎn)發(fā)查表大致流程分為兩階段,第一階段是靜態(tài)字段表區(qū)查找,找出報文靜態(tài)字段命中的全部表項,作為候選命中表項;第二階段,把各個候選表項按優(yōu)先級自高向低逐一與報文進行動態(tài)字段匹配。
12.如權(quán)利要求11所述的報文轉(zhuǎn)發(fā)查表方法,其特征在于:所述第一階段,靜態(tài)字段表區(qū)匹配查找,包含以下步驟: (1)靜態(tài)字段提取,根據(jù)靜態(tài)字段描述符對字段提取器進行配置,字段提取器從數(shù)據(jù)報文中指定位置提取出全部靜態(tài)字段,并且合并成待匹配值; (2)靜態(tài)字段查表,將帶匹配值與靜態(tài)字段表區(qū)的所有表項逐一進行匹配,若匹配成功則將表項加入到候選命中表項序列中; (3)若查找結(jié)束后,候選命中表項序列不為空,即至少有一條表項的靜態(tài)字段區(qū)命中,則進行第二階段動態(tài)字段匹配;否則,表示沒有一條表項的靜態(tài)字段區(qū)被命中,即轉(zhuǎn)發(fā)表中沒有可以匹配的表項,查表結(jié)束并輸出無命中。
13.如權(quán)利要求11所述的報文轉(zhuǎn)發(fā)查表方法,其特征在于:所述第二階段,動態(tài)字段表區(qū)匹配,按照候選命中表項序列中次序,用每一個候選表項對數(shù)據(jù)報文進行如下匹配: (1)判斷候選表項靜態(tài)字段表區(qū)中的動態(tài)字段區(qū)地址是否被賦值,是否關(guān)聯(lián)動態(tài)字段表區(qū),若沒有關(guān)聯(lián),表示該表項僅包含靜態(tài)字段表區(qū),且已經(jīng)命中,因此該表項被命中,第二階段匹配結(jié)束,輸入當前候選命中表項的序號;若該表項有關(guān)聯(lián)動態(tài)字段表區(qū),執(zhí)行(2); (2)通過動態(tài)字段區(qū)地址找到動態(tài)字段表區(qū),根據(jù)動態(tài)字段描述符對字段提取器進行配置并從數(shù)據(jù)報文中提出待匹配動態(tài)字段值; (3)將待匹配動態(tài)字段值與動態(tài)字段表區(qū)中動態(tài)字段鍵值和動態(tài)字段掩碼進行匹配,若匹配成功,表不表項的動態(tài)字段表區(qū)與數(shù)據(jù)報文匹配,同時由于第一階段靜態(tài)報文查找中已經(jīng)確認該表項靜態(tài)字段與報文匹配,因此該表項與報文匹配成功,查找結(jié)束,輸出當前命中表項;否則,查看下一條候選命中表項,執(zhí)行(I); (4)若全部候選命中表項均不能與數(shù)據(jù)報文動態(tài)字段匹配,則查找結(jié)束,輸出無命中。
【文檔編號】H04L12/741GK104009921SQ201410174192
【公開日】2014年8月27日 申請日期:2014年4月28日 優(yōu)先權(quán)日:2014年4月28日
【發(fā)明者】李丹, 唐勇 申請人:開網(wǎng)科技(北京)有限公司