一種基于編程工具的協(xié)議無關(guān)網(wǎng)絡(luò)的轉(zhuǎn)發(fā)管理方法
【專利摘要】本發(fā)明公開了一種基于編程工具的協(xié)議無關(guān)網(wǎng)絡(luò)的轉(zhuǎn)發(fā)管理方法,其特征是網(wǎng)絡(luò)管理中心根據(jù)編程工具編寫協(xié)議無關(guān)網(wǎng)絡(luò)的傳輸協(xié)議和控制算法,對(duì)于協(xié)議無關(guān)網(wǎng)絡(luò)中交換機(jī)上交的數(shù)據(jù)包,編程工具根據(jù)傳輸協(xié)議和數(shù)據(jù)包運(yùn)行網(wǎng)絡(luò)算法,使用API路徑記錄網(wǎng)絡(luò)算法的執(zhí)行過程,根據(jù)API路徑生成路徑樹,最后將路徑樹轉(zhuǎn)化為轉(zhuǎn)發(fā)規(guī)則并下發(fā)給交換機(jī),交換機(jī)根據(jù)轉(zhuǎn)發(fā)規(guī)則進(jìn)行數(shù)據(jù)包的轉(zhuǎn)發(fā)處理,從而實(shí)現(xiàn)了協(xié)議無關(guān)網(wǎng)絡(luò)的轉(zhuǎn)發(fā)控制。本發(fā)明能實(shí)現(xiàn)通過算法編程來自動(dòng)生成交換機(jī)的轉(zhuǎn)發(fā)規(guī)則,從而能自動(dòng)進(jìn)行協(xié)議解析,并且屏蔽低層細(xì)節(jié),降低編程的復(fù)雜性。
【專利說明】
一種基于編程工具的協(xié)議無關(guān)網(wǎng)絡(luò)的轉(zhuǎn)發(fā)管理方法
技術(shù)領(lǐng)域
[0001] 本發(fā)明屬于協(xié)議無關(guān)網(wǎng)絡(luò)控制與管理領(lǐng)域,具體地說是一種基于編程工具的協(xié)議 無關(guān)網(wǎng)絡(luò)的轉(zhuǎn)發(fā)管理方法。
【背景技術(shù)】
[0002] 在當(dāng)前的網(wǎng)絡(luò)中,數(shù)據(jù)、應(yīng)用的規(guī)模都呈爆炸式的增長,人們對(duì)網(wǎng)絡(luò)中支持的協(xié)議 類型和設(shè)備種類的要求越來越多,而當(dāng)前基于TCP/IP協(xié)議的網(wǎng)絡(luò)協(xié)議的分布式管理的特點(diǎn) 導(dǎo)致難以對(duì)新設(shè)備和新協(xié)議進(jìn)行有效的添加和管理,并且其控制面和數(shù)據(jù)面高度耦合的特 點(diǎn)決定了網(wǎng)絡(luò)設(shè)備難以更改和數(shù)據(jù)面需要承擔(dān)越來越多的任務(wù)。為了解決對(duì)新設(shè)備、新協(xié) 議的支持,人們提出了基于協(xié)議無感知轉(zhuǎn)發(fā)技術(shù)的軟件定義網(wǎng)絡(luò)的概念,以下簡稱協(xié)議無 關(guān)網(wǎng)絡(luò)。協(xié)議無關(guān)網(wǎng)絡(luò)將控制面和數(shù)據(jù)面解耦合,使用集中的控制器對(duì)由交換機(jī)組成的轉(zhuǎn) 發(fā)網(wǎng)絡(luò)進(jìn)行統(tǒng)一的控制和管理。
[0003] 目前,對(duì)協(xié)議無關(guān)網(wǎng)絡(luò)中控制器的設(shè)計(jì)主要有兩種技術(shù):一是基于FloodLight的 協(xié)議無關(guān)網(wǎng)絡(luò)控制器,但是該控制器在進(jìn)行網(wǎng)絡(luò)編程時(shí)需要用戶按照轉(zhuǎn)發(fā)規(guī)則的格式逐條 的進(jìn)行手動(dòng)編寫,十分繁瑣且容易出錯(cuò);二是基于P0X的協(xié)議無關(guān)網(wǎng)絡(luò)控制器,該控制器也 需要逐條的編寫轉(zhuǎn)發(fā)規(guī)則,同時(shí)還要考慮字段的解析問題,這些低層的細(xì)節(jié)十分繁瑣,提高 了編程控制的復(fù)雜性。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明為了克服現(xiàn)有技術(shù)存在的不足之處,提供一種基于編程工具的協(xié)議無關(guān)網(wǎng) 絡(luò)的轉(zhuǎn)發(fā)管理方法,以期能實(shí)現(xiàn)通過算法編程來自動(dòng)生成交換機(jī)的轉(zhuǎn)發(fā)規(guī)則,從而能自動(dòng) 進(jìn)行協(xié)議解析,并且屏蔽低層細(xì)節(jié),降低編程的復(fù)雜性。
[0005] 為達(dá)到上述發(fā)明目的,本發(fā)明采用如下技術(shù)方案:
[0006] 本發(fā)明一種基于編程工具的協(xié)議無關(guān)網(wǎng)絡(luò)的轉(zhuǎn)發(fā)管理方法;所述協(xié)議無關(guān)網(wǎng)絡(luò)包 含一個(gè)控制器、n個(gè)交換機(jī)和網(wǎng)絡(luò)管理中心,并由所述n個(gè)交換機(jī)組成相應(yīng)的拓?fù)浣Y(jié)構(gòu);其特 點(diǎn)是:所述編程工具包括:協(xié)議解析模塊、算法執(zhí)行模塊、算法提取模塊、轉(zhuǎn)發(fā)規(guī)則生成模 塊;所述轉(zhuǎn)發(fā)管理方法是按如下步驟進(jìn)行:
[0007] 步驟1、所述網(wǎng)絡(luò)管理中心根據(jù)所述協(xié)議解析模塊提供的協(xié)議報(bào)文定義規(guī)范,編寫 所述協(xié)議無關(guān)網(wǎng)絡(luò)的傳輸協(xié)議;
[0008] 步驟2、所述網(wǎng)絡(luò)管理中心根據(jù)所述算法執(zhí)行模塊提供的調(diào)用接口 API,編寫所述 協(xié)議無關(guān)網(wǎng)絡(luò)的控制算法;
[0009] 步驟3、所述編程工具根據(jù)所述協(xié)議無關(guān)網(wǎng)絡(luò)的傳輸協(xié)議和控制算法進(jìn)行轉(zhuǎn)發(fā)處 理,得到轉(zhuǎn)發(fā)規(guī)則并發(fā)送給所述控制器;
[0010] 步驟3.1、所述協(xié)議解析模塊對(duì)所述傳輸協(xié)議進(jìn)行協(xié)議解析,獲得協(xié)議接口;
[0011] 步驟3.2、所述算法執(zhí)行模塊接收任一交換機(jī)發(fā)送的數(shù)據(jù)包,并為所述數(shù)據(jù)包分配 一段緩存,將所述緩存記為元數(shù)據(jù);
[0012] 根據(jù)所述控制算法中的調(diào)用接口 API利用所述協(xié)議接口獲取所述數(shù)據(jù)包中的字段 并進(jìn)行匹配,從而獲得所述數(shù)據(jù)包的轉(zhuǎn)發(fā)路徑;
[0013] 步驟3.3、所述網(wǎng)絡(luò)算法提取模塊根據(jù)所述算法執(zhí)行模塊中調(diào)用接口 API的處理過 程生成相應(yīng)的API路徑;并根據(jù)API路徑生成路徑樹;
[0014] 步驟3.4、所述轉(zhuǎn)發(fā)規(guī)則生成模塊根據(jù)所述路徑樹生成轉(zhuǎn)發(fā)規(guī)則;
[0015] 步驟4、所述控制器將所述轉(zhuǎn)發(fā)規(guī)則分發(fā)給n個(gè)交換機(jī),用于實(shí)現(xiàn)n個(gè)交換機(jī)之間的 數(shù)據(jù)傳輸。
[0016]本發(fā)明所述的轉(zhuǎn)發(fā)管理方法的特點(diǎn)也在于,
[0017] 所述步驟1中的傳輸協(xié)議是按如下過程編寫:
[0018] 步驟1.1、假設(shè)所述傳輸協(xié)議中有n層協(xié)議,第k層有nk個(gè)協(xié)議,kG[l,n];初始化k =1;
[0019] 步驟1.2、定義第k層協(xié)議包括:協(xié)議的名字、協(xié)議中每個(gè)字段的字段名和長度;
[0020] 步驟1.3、初始化j = l; jG [1,nk];
[0021] 步驟1.4、定義第k +1層協(xié)議的第j個(gè)協(xié)議,包括:協(xié)議的名字、協(xié)議中每個(gè)字段的字 段名和長度;并在第k層協(xié)議中設(shè)置跳轉(zhuǎn)到第k+1層協(xié)議中第j個(gè)協(xié)議的跳轉(zhuǎn)字段值;
[0022]步驟1.5、將j+1賦值給j;判斷j>nk是否成立,若成立,則執(zhí)行步驟1.6;否則,返回 步驟1.4;
[0023]步驟1.6、將k+1賦值給k;判斷k>n是否成立,若成立,則表示完成編寫;否則,返回 步驟1.3。
[0024]所述步驟2中的調(diào)用接口 API包括:數(shù)據(jù)包操作API、網(wǎng)絡(luò)拓?fù)洳樵傾PI和路徑規(guī)劃 API;所述控制算法是按如下步驟進(jìn)行編寫:
[0025]步驟2.1、利用所述數(shù)據(jù)包操作API獲取所述數(shù)據(jù)包的字段值;
[0026]步驟2.2、利用所述網(wǎng)絡(luò)拓?fù)洳樵傾PI查詢所述字段值在所述協(xié)議無關(guān)網(wǎng)絡(luò)中對(duì)應(yīng) 的交換機(jī)和主機(jī);
[0027] 步驟2.3、根據(jù)所述數(shù)據(jù)包的字段值所對(duì)應(yīng)的交換機(jī)和主機(jī)以及拓?fù)浣Y(jié)構(gòu),利用所 述路徑規(guī)劃API生成所述協(xié)議無關(guān)網(wǎng)絡(luò)中到達(dá)相應(yīng)交換機(jī)和主機(jī)的轉(zhuǎn)發(fā)路徑。
[0028] 所述協(xié)議解析包括:協(xié)議分析模塊和數(shù)據(jù)包解析模塊,所述步驟3.1中的協(xié)議接口 是按如下過程進(jìn)行協(xié)議解析:
[0029] 步驟3.1. 1、所述協(xié)議分析模塊將所述傳輸協(xié)議翻譯成有限狀態(tài)機(jī);
[0030] 步驟3.1.2、所述數(shù)據(jù)包解析模塊根據(jù)所述有限狀態(tài)機(jī)生成相應(yīng)的解釋器,用于提 供給所述調(diào)用接口 API。
[0031] 所述步驟3.3中所生成的API路徑的類型包括:讀取、比較、跳轉(zhuǎn)、寫元、讀元和路 徑;并按如下方式生成相應(yīng)的API路徑:
[0032]所述調(diào)用接口 API中的數(shù)據(jù)包操作API根據(jù)所述傳輸協(xié)議的字段名讀取所述數(shù)據(jù) 包相對(duì)應(yīng)的字段值,所述字段名記為field_l,所述字段值記為^,從而生成一條類型為"讀 取"的API路徑,記為R(field_l,v〇 ;
[0033]所述數(shù)據(jù)包操作API比較相應(yīng)數(shù)據(jù)包字段名對(duì)應(yīng)的字段值與被比較值,得到比較 結(jié)果;所述相應(yīng)數(shù)據(jù)包字段名記為field_2,所述被比較值記為v2,所述比較結(jié)果記為b,從 而生成一條類型為"比較"的API路徑,記為T(f ield_2,v2,b);
[0034]所述數(shù)據(jù)包操作API從所述數(shù)據(jù)包的當(dāng)前層協(xié)議進(jìn)入下一層協(xié)議時(shí),讀取當(dāng)前層 協(xié)議的字段名、字段值、跳轉(zhuǎn)流表、偏移量四個(gè)值,并將所讀取的字段名記為field_3,字段 值記為V3、跳轉(zhuǎn)流表記為tid、偏移量記為offset,從而生成一條類型為"讀取"的API路徑和 一條類型為"跳轉(zhuǎn)"的六?1路徑,分別記為1?(;1^1(1_3,¥3)和6(1:1(1,(^861:) ;
[0035]所述數(shù)據(jù)包操作API根據(jù)所述傳輸協(xié)議的字段名將所述數(shù)據(jù)包的字段值寫入所述 元數(shù)據(jù),并將所述傳輸協(xié)議的字段名記為field_4,所述字段值記為V4,從而生成類型為"寫 元"的API路徑,記為WM(field_4,V4);
[0036]所述數(shù)據(jù)包操作API根據(jù)所述傳輸協(xié)議的相關(guān)字段名從所述元數(shù)據(jù)讀取相應(yīng)的字 段值,并將所述相關(guān)字段名記為field_5,所述字段值記為^,從而生成類型為"讀元"的API 路徑,記為1^(;1^61(1_5,¥5);
[0037]所述調(diào)路徑規(guī)劃API將所生成的數(shù)據(jù)包的轉(zhuǎn)發(fā)路徑,記為route,從而生成類型為 "路徑"的API路徑,記為L(r〇Ute)。
[0038]所述步驟3.3中的路徑樹的結(jié)點(diǎn)類型包括:讀取、比較、跳轉(zhuǎn)、寫元、讀元和路徑;并 按如下方式生成相應(yīng)的路徑樹:
[0039]根據(jù)所述"讀取"的API路徑R(field_l,V1),生成類型為"讀取"的路徑樹結(jié)點(diǎn),包 括字段名、m個(gè)字段值和m個(gè)子樹,記為f (fielcLUKvhtOJvib),. . .,(Vi,ti),..., (Vm,tm)}),(Vi,ti)表示第i個(gè)字段值Vi和第i個(gè)子樹ti;對(duì)i G (1,m),若vi = vi,則將R(field_ 1,vi)記錄第i個(gè)子樹ti中;
[0040]根據(jù)所述"比較"的API路徑!'(^61(1_2^2,13),生成類型為"比較"的路徑樹結(jié)點(diǎn), 包括字段名、字段值和兩個(gè)子樹,記為T' (f ield_2,V2,t_true,t_false),t_true,t_false 分別表示兩個(gè)子樹,若b = true,則將T(f ield_2,V2,b)記錄在t_true子樹中,否則將T (field_2,V2,b)記錄在 t_false 子樹中;
[0041]根據(jù)所述"跳轉(zhuǎn)"的API路徑G(tid,〇ffset),生成類型為"跳轉(zhuǎn)"的路徑樹結(jié)點(diǎn),包 括跳轉(zhuǎn)流表、偏移量和一個(gè)子樹,記為G' (tid,ofTset,t),t表示所述一個(gè)子樹;并將G(tid, offset)記錄在t子樹中;
[0042]根據(jù)所述"寫元"的API路徑WM(field_4,V4),生成類型為"寫元"的路徑樹結(jié)點(diǎn),包 括字段名和一個(gè)子樹,記為WMlfield_4,w),w表示所述一個(gè)子樹;并將WM(field_4, V4)記 錄在w子樹中;
[0043 ]根據(jù)所述"讀元"的API路徑RM (f i e 1 d_5, V5),生成類型為"讀元"的路徑樹結(jié)點(diǎn),包 括字段名、q個(gè)字段值和q個(gè)子樹,記為RM' 、),...,(v%,t%)}),(V P,1/P)表示第 p 個(gè)字段值 V、和第 p 個(gè)子樹 1/P,對(duì) pG(l,q),若 V5 = v' p,則將RM(field_5,V5)記錄在第p個(gè)子樹匕中;
[0044]根據(jù)所述"路徑"的API路徑L(r〇Ute),生成類型為"路徑"的路徑樹結(jié)點(diǎn),記為1/ (route),并直接將L(route)記錄在1/ (route)路徑樹結(jié)點(diǎn)中。
[0045] 所述步驟3.4中的轉(zhuǎn)發(fā)規(guī)則包括:匹配項(xiàng)和指令集;并按如下方式生成:
[0046] 從根結(jié)點(diǎn)開始深度遍歷路徑樹;當(dāng)遍歷到"讀取"、"比較"、"讀元"類型的路徑樹結(jié) 點(diǎn),則生成所述匹配項(xiàng);當(dāng)遍歷到"寫元"、"跳轉(zhuǎn)"、"路徑"類型的路徑樹結(jié)點(diǎn),則生成所述指 令集;直到所有結(jié)點(diǎn)都遍歷完成。
[0047]與已有技術(shù)相比,本發(fā)明有益效果體現(xiàn)在:
[0048] 1、本發(fā)明設(shè)計(jì)一種基于編程工具的協(xié)議無關(guān)網(wǎng)絡(luò)的轉(zhuǎn)發(fā)管理方法,根據(jù)編程工具 提供的協(xié)議報(bào)文定義規(guī)范和調(diào)用接口 API分別編寫傳輸協(xié)議和控制算法,對(duì)于每個(gè)交換機(jī) 發(fā)來的數(shù)據(jù)包,編程工具根據(jù)傳輸協(xié)議和數(shù)據(jù)包執(zhí)行控制算法,并生成API路徑和路徑樹, 最終轉(zhuǎn)化為轉(zhuǎn)發(fā)規(guī)則,從而實(shí)現(xiàn)了通過編程語言來生成轉(zhuǎn)發(fā)規(guī)則。與基于FloodLight的協(xié) 議無關(guān)網(wǎng)絡(luò)控制器和基于P0X的協(xié)議無關(guān)網(wǎng)絡(luò)控制器相比,屏蔽了轉(zhuǎn)發(fā)規(guī)則的低層細(xì)節(jié),有 效的降低了編程的復(fù)雜性。
[0049] 2、本發(fā)明使用協(xié)議報(bào)文定義規(guī)范描述協(xié)議無關(guān)網(wǎng)絡(luò)中運(yùn)行的傳輸協(xié)議,并使用編 程工具的協(xié)議解析模塊對(duì)編寫的傳輸協(xié)議進(jìn)行解析,從而可以方便的支持和添加任意協(xié) 議,與基于P0X的協(xié)議無關(guān)網(wǎng)絡(luò)控制器相比,避免了用戶手動(dòng)的協(xié)議解析過程,降低了用戶 的負(fù)擔(dān),提高了編程效率。
[0050] 3、本發(fā)明使用調(diào)用接口 API編寫協(xié)議無關(guān)網(wǎng)絡(luò)中的控制算法,是以數(shù)據(jù)包為參數(shù) 運(yùn)行控制算法,從而生成對(duì)應(yīng)的API路徑,再依據(jù)API路徑生成路徑樹。通過路徑樹保存對(duì)數(shù) 據(jù)包的處理過程,將歷史數(shù)據(jù)包的執(zhí)行過程轉(zhuǎn)化為轉(zhuǎn)發(fā)規(guī)則下發(fā)給交換機(jī),從而避免了交 換機(jī)每次都要上交數(shù)據(jù)包,提高了協(xié)議無關(guān)網(wǎng)絡(luò)中交換機(jī)的轉(zhuǎn)發(fā)效率。
[0051] 4、本發(fā)明使用路徑樹產(chǎn)生轉(zhuǎn)發(fā)規(guī)則,通過路徑樹結(jié)點(diǎn)與轉(zhuǎn)發(fā)規(guī)則的對(duì)應(yīng)關(guān)系來自 動(dòng)的生成轉(zhuǎn)發(fā)規(guī)則,從而避免了用戶對(duì)轉(zhuǎn)發(fā)規(guī)則的直接接觸,用戶無需考慮轉(zhuǎn)發(fā)規(guī)則繁瑣 的組成內(nèi)容,從而屏蔽了低層細(xì)節(jié),提高了編程效率。
【附圖說明】
[0052]圖1為本發(fā)明使用調(diào)用接口 API編寫控制算法的流程圖;
[0053]圖2為本發(fā)明生成API路徑的實(shí)施實(shí)例圖;
[0054]圖3為本發(fā)明生成路徑樹的實(shí)施實(shí)例圖。
【具體實(shí)施方式】
[0055]本實(shí)施例中,一種基于編程工具的協(xié)議無關(guān)網(wǎng)絡(luò)的轉(zhuǎn)發(fā)管理方法;協(xié)議無關(guān)網(wǎng)絡(luò) 包含一個(gè)控制器、n個(gè)交換機(jī)和網(wǎng)絡(luò)管理中心,并由n個(gè)交換機(jī)組成相應(yīng)的拓?fù)浣Y(jié)構(gòu);編程工 具包括:協(xié)議解析模塊、算法執(zhí)行模塊、算法提取模塊、轉(zhuǎn)發(fā)規(guī)則生成模塊;轉(zhuǎn)發(fā)管理方法是 按如下步驟進(jìn)行:
[0056]步驟1.1、假設(shè)所述傳輸協(xié)議中有n層協(xié)議,第k層有nk個(gè)協(xié)議,kG[l,n];初始化k =1;
[0057] 步驟1.2、定義第k層協(xié)議包括:協(xié)議的名字、協(xié)議中每個(gè)字段的字段名和長度;
[0058] 步驟1.3、初始化j = l; jG [1,nk];
[0059] 步驟1.4、定義第k +1層協(xié)議的第j個(gè)協(xié)議,包括:協(xié)議的名字、協(xié)議中每個(gè)字段的字 段名和長度;并在第k層協(xié)議中設(shè)置跳轉(zhuǎn)到第k+1層協(xié)議中第j個(gè)協(xié)議的跳轉(zhuǎn)字段值;
[0060] 步驟1.5、將j+1賦值給j;判斷j>nk是否成立,若成立,則執(zhí)行步驟1.6;否則,返回 步驟1.4;
[0061] 步驟1.6、將k+1賦值給k;判斷k>n是否成立,若成立,則表示完成編寫;否則,返回 步驟1.3。
[0062]舉例說明,對(duì)于傳統(tǒng)網(wǎng)絡(luò)的MAC、IP雙層協(xié)議,使用協(xié)議報(bào)文定義規(guī)范定義如下:
[0063]首先定義第一層MAC協(xié)議,協(xié)議的名字為ethernet,協(xié)議中三個(gè)字段分別為48位目 的地址dl_dst,48位源MAC地址dl_src,16位協(xié)議類型dl_type。則定義MAC層協(xié)議的代碼為: header clhcrnot \ fields { dl_dst: 48;
[0064] dl_src : 48; dl typc : 16; }
[0065] 接著定義第二層協(xié)議,第二層只有一個(gè)協(xié)議:IP協(xié)議。使用同樣的方法定義協(xié)議的 名字、每個(gè)字段和長度,協(xié)議名字為ipv4,長度和字段名為分別為:4位版本號(hào)ver,4位首部 長度ihl,8位服務(wù)類型tos,16位總長度len,16位標(biāo)識(shí)id,3位標(biāo)志位flag,13位片偏移off,8 位生存時(shí)間ttl,8位協(xié)議類型nw_proto,16位首部校驗(yàn)和sum,32位源IP地址nw_src,32位目 的IP地址nw_dst,不定長的可選選項(xiàng)opt。 headeripv4 j fields { ver: 4; ihl :4; tos : 8; len : 16; id : 16; flag : 3;
[0066] off: 13; ttl ; 8; nvv proto : 8; sum : 16; nvv_src : 32; nw_dst: 32; opt; > }
[0067]最后在上一層的MAC協(xié)議中加入跳轉(zhuǎn)到當(dāng)前IP協(xié)議的跳轉(zhuǎn)值,規(guī)定當(dāng)dl_type的值 為0x0800時(shí)表示下一層協(xié)議為IP協(xié)議,對(duì)應(yīng)代碼為: header cthcrnct } fields ; dl_dst: 48; dl_src : 48; 「一i dljypc : 16;
[0068] } next select (dl typc); ease 0x0800: ipv4; } }
[0069] 第二層協(xié)議定義完成,傳輸協(xié)議編寫完成。
[0070] 步驟2、網(wǎng)絡(luò)管理中心根據(jù)算法執(zhí)行模塊提供的調(diào)用接口 API,編寫協(xié)議無關(guān)網(wǎng)絡(luò) 的控制算法,流程圖如圖1所示;
[0071 ]步驟2.1、利用數(shù)據(jù)包操作API獲取數(shù)據(jù)包的字段值;
[0072]步驟2.2、利用網(wǎng)絡(luò)拓?fù)洳樵傾PI查詢字段值在協(xié)議無關(guān)網(wǎng)絡(luò)中對(duì)應(yīng)的交換機(jī)和主 機(jī);
[0073] 步驟2.3、根據(jù)數(shù)據(jù)包的字段值所對(duì)應(yīng)的交換機(jī)和主機(jī)以及拓?fù)浣Y(jié)構(gòu),利用路徑規(guī) 劃API生成協(xié)議無關(guān)網(wǎng)絡(luò)中到達(dá)相應(yīng)交換機(jī)和主機(jī)的轉(zhuǎn)發(fā)路徑。
[0074] 步驟3、編程工具根據(jù)協(xié)議無關(guān)網(wǎng)絡(luò)的傳輸協(xié)議和控制算法進(jìn)行轉(zhuǎn)發(fā)處理,得到轉(zhuǎn) 發(fā)規(guī)則并發(fā)送給控制器;
[0075] 步驟3.1、協(xié)議解析模塊對(duì)傳輸協(xié)議進(jìn)行協(xié)議解析,獲得協(xié)議接口;
[0076] 步驟3.1.1、協(xié)議分析模塊將傳輸協(xié)議翻譯成有限狀態(tài)機(jī);
[0077] 步驟3.1.2、數(shù)據(jù)包解析模塊根據(jù)有限狀態(tài)機(jī)生成相應(yīng)的解釋器,用于提供給調(diào)用 接口 API。
[0078] 步驟3.2、算法執(zhí)行模塊接收任一交換機(jī)發(fā)送的數(shù)據(jù)包,并為數(shù)據(jù)包分配一段緩 存,將緩存記為元數(shù)據(jù);
[0079]根據(jù)控制算法中的調(diào)用接口 API利用協(xié)議接口獲取數(shù)據(jù)包中的字段并進(jìn)行匹配, 從而獲得數(shù)據(jù)包的轉(zhuǎn)發(fā)路徑;
[0080] 步驟3.3、網(wǎng)絡(luò)算法提取模塊根據(jù)算法執(zhí)行模塊中調(diào)用接口 API的處理過程生成相 應(yīng)的API路徑;并根據(jù)API路徑生成路徑樹;
[0081] 其中,所生成的API路徑的類型包括:讀取、比較、跳轉(zhuǎn)、寫元、讀元和路徑;并按如 下方式生成相應(yīng)的API路徑:
[0082]調(diào)用接口 API中的數(shù)據(jù)包操作API根據(jù)傳輸協(xié)議的字段名讀取數(shù)據(jù)包相對(duì)應(yīng)的字 段值,字段名記為field_l,字段值記為V1,從而生成一條類型為"讀取"的API路徑,記為R (f ield_l, vi);
[0083]數(shù)據(jù)包操作API比較相應(yīng)數(shù)據(jù)包字段名對(duì)應(yīng)的字段值與被比較值,得到比較結(jié)果; 相應(yīng)數(shù)據(jù)包字段名記為field_2,被比較值記為v2,比較結(jié)果記為b,從而生成一條類型為 "比較"的API路徑,記為T (f i e 1 d_2,v2,b);
[0084]數(shù)據(jù)包操作API從數(shù)據(jù)包的當(dāng)前層協(xié)議進(jìn)入下一層協(xié)議時(shí),讀取當(dāng)前層協(xié)議的字 段名、字段值、跳轉(zhuǎn)流表、偏移量四個(gè)值,并將所讀取的字段名記為field_3,字段值記為V3、 跳轉(zhuǎn)流表記為tid、偏移量記為offset,從而生成一條類型為"讀取"的API路徑和一條類型 為"跳轉(zhuǎn)"的八?1路徑,分另1」記為1?(;1^61(1_3,¥3)和6(1:1(1,(^861:) ;
[0085]數(shù)據(jù)包操作API根據(jù)傳輸協(xié)議的字段名將數(shù)據(jù)包的字段值寫入元數(shù)據(jù),并將傳輸 協(xié)議的字段名記為field_4,字段值記為V4,從而生成類型為"寫元"的API路徑,記為WM (field_4,V4);
[0086] 數(shù)據(jù)包操作API根據(jù)傳輸協(xié)議的相關(guān)字段名從元數(shù)據(jù)讀取相應(yīng)的字段值,并將相 關(guān)字段名記為field_5,字段值記為v5,從而生成類型為"讀元"的API路徑,記為RM(field_ 5,V5);
[0087] 調(diào)路徑規(guī)劃API將所生成的數(shù)據(jù)包的轉(zhuǎn)發(fā)路徑,記為route,從而生成類型為"路 徑"的API路徑,記為L(route) 〇
[0088]舉例說明,在圖2所示的API路徑實(shí)施例中,根據(jù)網(wǎng)絡(luò)管理中心編寫的控制算法,調(diào) 用接口 API首先使用數(shù)據(jù)包API中的read_packet函數(shù)來讀取數(shù)據(jù)包中字段名〃smac〃對(duì)應(yīng)的 字段值smaC1,因此對(duì)應(yīng)生成類型為"讀取"的API路徑R( 〃smac〃,smaC1);接著使用數(shù)據(jù)包API 中的write_metadata函數(shù)將字段名"dmac〃和其對(duì)應(yīng)的字段值dmaci寫入元數(shù)據(jù)中,因此對(duì) 應(yīng)生成類型為"寫元"的API路徑麗(〃dmac〃,dmaci);接著使用數(shù)據(jù)包操作API中的pull_ header函數(shù)從數(shù)據(jù)包的當(dāng)前層協(xié)議進(jìn)入下一層協(xié)議,讀取了字段名t、字段值t、跳轉(zhuǎn)流表 tid、偏移量offset四個(gè)值,因此對(duì)應(yīng)生成類型為"讀取"的API路徑以1〃山)和類型為"跳 轉(zhuǎn)"的API路徑6(〃2〃,10);接著使用數(shù)據(jù)包4?1中的^ &(1_口&(^的函數(shù)來讀取數(shù)據(jù)包中字段 名〃dip"對(duì)應(yīng)的字段值di Pl,因此對(duì)應(yīng)生成類型為"讀取"的API路徑R( "dip",diPl);最后使 用數(shù)據(jù)包API中的read_metadata函數(shù)從元數(shù)據(jù)中讀取字段值"dmac"對(duì)應(yīng)的字段值dmaci, 因此對(duì)應(yīng)生成類型為"讀元"的六?1路徑1^(〃(11]^(3〃,(11]^(31)。
[0089] 路徑樹的結(jié)點(diǎn)類型包括:讀取、比較、跳轉(zhuǎn)、寫元、讀元和路徑;并按如下方式生成 相應(yīng)的路徑樹:
[0090] 根據(jù)"讀取"的API路徑R(field_l,V1),生成類型為"讀取"的路徑樹結(jié)點(diǎn),包括字 段名、m 個(gè)字段值和 m 個(gè)子樹,記為 V (field j,{(vi,ti),(V2, t2),. . .,(vi,ti),. . .,(vm, tm)}),(Vi,ti)表示第i個(gè)字段值Vi和第i個(gè)子樹ti;對(duì)i G (1,m),若vi = vi,則將R(field_l, vi)記錄第i個(gè)子樹ti中;
[0091]根據(jù)"比較"的API路徑!'出61(1_2,^,13),生成類型為"比較"的路徑樹結(jié)點(diǎn),包括 字段名、字段值和兩個(gè)子樹,記為T' (f ield_2,V2,t_true,t_false),t_true,t_false分別 表示兩個(gè)子樹,若b = true,則將T (f ie 1 d_2,V2,b)記錄在t_true子樹中,否則將T(f ie 1 d_2, V2,b)記錄在t_false子樹中;
[0092]根據(jù)"跳轉(zhuǎn)"的API路徑G(tid,〇ffset),生成類型為"跳轉(zhuǎn)"的路徑樹結(jié)點(diǎn),包括跳 轉(zhuǎn)流表、偏移量和一個(gè)子樹,記為V (tid,offset,t),t表示一個(gè)子樹;并將G(tid,offset) 記錄在t子樹中;
[0093]根據(jù)"寫元"的API路徑WM(field_4,V4),生成類型為"寫元"的路徑樹結(jié)點(diǎn),包括字 段名和一個(gè)子樹,記為WIV^ (field_4,w),w表示一個(gè)子樹;并將WM(field_4,V4)記錄在w子樹 中;
[0094]根據(jù)"讀元"的API路徑RM(f ield_5,v5),生成類型為"讀元"的路徑樹結(jié)點(diǎn),包括字 段名、q個(gè)字段值和q個(gè)子樹,記為RM' (f ield_5,{(/ i,V 〇,(/ 2,V 2),? ? ?,(/ P,V P),? ? ?, (v%,t%)}),(/p,1/p)表示第p個(gè)字段值和第p個(gè)子樹1/P,對(duì)pG (1,q),若V5 = /p,則將 1^(;1^1(1_5,¥5)記錄在第?個(gè)子樹1:/1)中;
[0095] 根據(jù)"路徑"的API路徑L(r〇ute),生成類型為"路徑"的路徑樹結(jié)點(diǎn),記為1/ (route),并直接將L(route)記錄在1/ (route)路徑樹結(jié)點(diǎn)中。
[0096] 舉例說明,在圖3所示的路徑樹實(shí)施例中,根據(jù)圖1中的API路徑,首先對(duì)于R(" smac〃,smaci),對(duì)應(yīng)生成類型為"讀取"的路徑樹結(jié)點(diǎn)f (smac, {(smaci,ti)}),若在處理以 后的數(shù)據(jù)包時(shí)遇到字段名相同但字段值不同的API路徑以〃觀&,,觀 &(:2),則只需添加一個(gè) 子樹的分支,即f (smac,{(smaci,ti),(smac2,t2)});接著對(duì)于API路徑WM(〃dmac〃,dmaci), 對(duì)應(yīng)生成類型為"寫元"的路徑樹結(jié)點(diǎn)WiT (dmac,w),w表示結(jié)點(diǎn)唯一的子樹;對(duì)于G (〃2〃, 10),對(duì)應(yīng)生成類型為"跳轉(zhuǎn)"的路徑樹結(jié)點(diǎn)G' (2,10,t),t表示結(jié)點(diǎn)唯一的子樹;最后對(duì)于RM (〃dmac〃,dmaci),對(duì)應(yīng)生成類型為"讀元"的路徑樹結(jié)點(diǎn)麗'(dmac,{(dmaci,1/ 1)})。
[0097] 步驟3.4、轉(zhuǎn)發(fā)規(guī)則生成模塊根據(jù)路徑樹生成轉(zhuǎn)發(fā)規(guī)則;
[0098] 從根結(jié)點(diǎn)開始深度遍歷路徑樹;當(dāng)遍歷到"讀取"、"比較"、"讀元"類型的路徑樹結(jié) 點(diǎn),則生成匹配項(xiàng);當(dāng)遍歷到"寫元"、"跳轉(zhuǎn)"、"路徑"類型的路徑樹結(jié)點(diǎn),則生成指令集;直 到所有結(jié)點(diǎn)都遍歷完成。
[0099] 步驟4、控制器將轉(zhuǎn)發(fā)規(guī)則分發(fā)給n個(gè)交換機(jī),用于實(shí)現(xiàn)n個(gè)交換機(jī)之間的數(shù)據(jù)傳 輸。
【主權(quán)項(xiàng)】
1. 一種基于編程工具的協(xié)議無關(guān)網(wǎng)絡(luò)的轉(zhuǎn)發(fā)管理方法;所述協(xié)議無關(guān)網(wǎng)絡(luò)包含一個(gè)控 制器、η個(gè)交換機(jī)和網(wǎng)絡(luò)管理中心,并由所述η個(gè)交換機(jī)組成相應(yīng)的拓?fù)浣Y(jié)構(gòu);其特征是:所 述編程工具包括:協(xié)議解析模塊、算法執(zhí)行模塊、算法提取模塊、轉(zhuǎn)發(fā)規(guī)則生成模塊;所述轉(zhuǎn) 發(fā)管理方法是按如下步驟進(jìn)行: 步驟1、所述網(wǎng)絡(luò)管理中心根據(jù)所述協(xié)議解析模塊提供的協(xié)議報(bào)文定義規(guī)范,編寫所述 協(xié)議無關(guān)網(wǎng)絡(luò)的傳輸協(xié)議; 步驟2、所述網(wǎng)絡(luò)管理中心根據(jù)所述算法執(zhí)行模塊提供的調(diào)用接口 API,編寫所述協(xié)議 無關(guān)網(wǎng)絡(luò)的控制算法; 步驟3、所述編程工具根據(jù)所述協(xié)議無關(guān)網(wǎng)絡(luò)的傳輸協(xié)議和控制算法進(jìn)行轉(zhuǎn)發(fā)處理,得 到轉(zhuǎn)發(fā)規(guī)則并發(fā)送給所述控制器; 步驟3.1、所述協(xié)議解析模塊對(duì)所述傳輸協(xié)議進(jìn)行協(xié)議解析,獲得協(xié)議接口; 步驟3.2、所述算法執(zhí)行模塊接收任一交換機(jī)發(fā)送的數(shù)據(jù)包,并為所述數(shù)據(jù)包分配一段 緩存,將所述緩存記為元數(shù)據(jù); 根據(jù)所述控制算法中的調(diào)用接口 API利用所述協(xié)議接口獲取所述數(shù)據(jù)包中的字段并進(jìn) 行匹配,從而獲得所述數(shù)據(jù)包的轉(zhuǎn)發(fā)路徑; 步驟3.3、所述網(wǎng)絡(luò)算法提取模塊根據(jù)所述算法執(zhí)行模塊中調(diào)用接口API的處理過程生 成相應(yīng)的API路徑;并根據(jù)API路徑生成路徑樹; 步驟3.4、所述轉(zhuǎn)發(fā)規(guī)則生成模塊根據(jù)所述路徑樹生成轉(zhuǎn)發(fā)規(guī)則; 步驟4、所述控制器將所述轉(zhuǎn)發(fā)規(guī)則分發(fā)給η個(gè)交換機(jī),用于實(shí)現(xiàn)η個(gè)交換機(jī)之間的數(shù)據(jù) 傳輸。2. 根據(jù)權(quán)利要求1所述的轉(zhuǎn)發(fā)管理方法,其特征是:所述步驟1中的傳輸協(xié)議是按如下 過程編寫: 步驟1.1、假設(shè)所述傳輸協(xié)議中有η層協(xié)議,第k層有nk個(gè)協(xié)議,k e [ 1,η];初始化k = 1; 步驟1.2、定義第k層協(xié)議包括:協(xié)議的名字、協(xié)議中每個(gè)字段的字段名和長度; 步驟1.3、初始化 j = I; j e [ I,nk]; 步驟1.4、定義第k+1層協(xié)議的第j個(gè)協(xié)議,包括:協(xié)議的名字、協(xié)議中每個(gè)字段的字段名 和長度;并在第k層協(xié)議中設(shè)置跳轉(zhuǎn)到第k+Ι層協(xié)議中第j個(gè)協(xié)議的跳轉(zhuǎn)字段值; 步驟1.5、將j+Ι賦值給j;判斷j>nk是否成立,若成立,則執(zhí)行步驟1.6;否則,返回步驟 1.4; 步驟1.6、將k+Ι賦值給k;判斷k>n是否成立,若成立,則表示完成編寫;否則,返回步驟 1.3〇3. 根據(jù)權(quán)利要求1所述的轉(zhuǎn)發(fā)管理方法,其特征是:所述步驟2中的調(diào)用接口 API包括: 數(shù)據(jù)包操作API、網(wǎng)絡(luò)拓?fù)洳樵傾PI和路徑規(guī)劃API;所述控制算法是按如下步驟進(jìn)行編寫: 步驟2.1、利用所述數(shù)據(jù)包操作API獲取所述數(shù)據(jù)包的字段值; 步驟2.2、利用所述網(wǎng)絡(luò)拓?fù)洳樵傾PI查詢所述字段值在所述協(xié)議無關(guān)網(wǎng)絡(luò)中對(duì)應(yīng)的交 換機(jī)和主機(jī); 步驟2.3、根據(jù)所述數(shù)據(jù)包的字段值所對(duì)應(yīng)的交換機(jī)和主機(jī)以及拓?fù)浣Y(jié)構(gòu),利用所述路 徑規(guī)劃API生成所述協(xié)議無關(guān)網(wǎng)絡(luò)中到達(dá)相應(yīng)交換機(jī)和主機(jī)的轉(zhuǎn)發(fā)路徑。4. 根據(jù)權(quán)利要求1所述的轉(zhuǎn)發(fā)管理方法,其特征是:所述協(xié)議解析包括:協(xié)議分析模塊 和數(shù)據(jù)包解析模塊,所述步驟3.1中的協(xié)議接口是按如下過程進(jìn)行協(xié)議解析: 步驟3.1.1、所述協(xié)議分析模塊將所述傳輸協(xié)議翻譯成有限狀態(tài)機(jī); 步驟3.1.2、所述數(shù)據(jù)包解析模塊根據(jù)所述有限狀態(tài)機(jī)生成相應(yīng)的解釋器,用于提供給 所述調(diào)用接口 API。5. 根據(jù)權(quán)利要求1所述的轉(zhuǎn)發(fā)管理方法,其特征是:所述步驟3.3中所生成的API路徑的 類型包括:讀取、比較、跳轉(zhuǎn)、寫元、讀元和路徑;并按如下方式生成相應(yīng)的API路徑: 所述調(diào)用接口 API中的數(shù)據(jù)包操作API根據(jù)所述傳輸協(xié)議的字段名讀取所述數(shù)據(jù)包相 對(duì)應(yīng)的字段值,所述字段名記為field_l,所述字段值記為^,從而生成一條類型為"讀取" 的 API 路徑,記為 R(field_l,V1); 所述數(shù)據(jù)包操作API比較相應(yīng)數(shù)據(jù)包字段名對(duì)應(yīng)的字段值與被比較值,得到比較結(jié)果; 所述相應(yīng)數(shù)據(jù)包字段名記為field_2,所述被比較值記為V2,所述比較結(jié)果記為b,從而生成 一條類型為"比較"的API路徑,記為T(field_2,v 2,b); 所述數(shù)據(jù)包操作API從所述數(shù)據(jù)包的當(dāng)前層協(xié)議進(jìn)入下一層協(xié)議時(shí),讀取當(dāng)前層協(xié)議 的字段名、字段值、跳轉(zhuǎn)流表、偏移量四個(gè)值,并將所讀取的字段名記為field_3,字段值記 為v3、跳轉(zhuǎn)流表記為tid、偏移量記為offset,從而生成一條類型為"讀取"的API路徑和一條 類型為"跳轉(zhuǎn)"的六?1路徑,分別記為1?(;1^1(1_3,¥3)和6(1^(1,(^861:) ; 所述數(shù)據(jù)包操作API根據(jù)所述傳輸協(xié)議的字段名將所述數(shù)據(jù)包的字段值寫入所述元數(shù) 據(jù),并將所述傳輸協(xié)議的字段名記為field_4,所述字段值記為V4,從而生成類型為"寫元" 的 API 路徑,記為 WM(field_4,V4); 所述數(shù)據(jù)包操作API根據(jù)所述傳輸協(xié)議的相關(guān)字段名從所述元數(shù)據(jù)讀取相應(yīng)的字段 值,并將所述相關(guān)字段名記為field_5,所述字段值記為^,從而生成類型為"讀元"的API路 g3BSRM(field_5,V5); 所述調(diào)路徑規(guī)劃API將所生成的數(shù)據(jù)包的轉(zhuǎn)發(fā)路徑,記為route,從而生成類型為"路 徑"的API路徑,記為L(route) 〇6. 根據(jù)權(quán)利要求5所述的轉(zhuǎn)發(fā)管理方法,其特征是:所述步驟3.3中的路徑樹的結(jié)點(diǎn)類 型包括:讀取、比較、跳轉(zhuǎn)、寫元、讀元和路徑;并按如下方式生成相應(yīng)的路徑樹: 根據(jù)所述"讀取"的API路徑R(f ield_l,V1),生成類型為"讀取"的路徑樹結(jié)點(diǎn),包括字段 名、m個(gè)字段值和m個(gè)子樹,記為f (field_l,{(vi,ti),(V2,t2), · · ·,(vi,ti), · · ·,(Vm,tm)}), <^山)表示第;[個(gè)字段值¥1和第;[個(gè)子樹1^;對(duì);^(1,111),若¥1 = ¥1,則將1?(;1^1(1_1,¥1)記錄 第i個(gè)子樹ti中; 根據(jù)所述"比較"的API路徑1'(行61(1_2^2,13),生成類型為"比較"的路徑樹結(jié)點(diǎn),包括字 段名、字段值和兩個(gè)子樹,記為f (f ield_2,V2,t_true,t_false),t_true,t_false分別表 示兩個(gè)子樹,若& = 1:1'116,則將1'(;1^61(1_2,¥2,13)記錄在1:_1:1'116子樹中,否則將1'(;1^61(1_2,¥2, b)記錄在t_false子樹中; 根據(jù)所述"跳轉(zhuǎn)"的API路徑G(tid,〇ffset),生成類型為"跳轉(zhuǎn)"的路徑樹結(jié)點(diǎn),包括跳 轉(zhuǎn)流表、偏移量和一個(gè)子樹,記為G' (tid,offset,t),t表示所述一個(gè)子樹;并將G(tid, offset)記錄在t子樹中; 根據(jù)所述"寫元"的API路徑WM(field_4,V4),生成類型為"寫元"的路徑樹結(jié)點(diǎn),包括字 段名和一個(gè)子樹,記為WM7 (field_4,w),w表示所述一個(gè)子樹;并將WM(field_4,V4)記錄在w 子樹中; 根據(jù)所述"讀元"的API路徑RM(field_5,v5),生成類型為"讀元"的路徑樹結(jié)點(diǎn),包括字 段名、q個(gè)字段值和q個(gè)子樹,記為Rif (f ield_5,{(/ iV 〇,(/ 2,V 2),· · ·,(/ P,V P),· · ·, (>%,1/(1)}),(>/1),1:/1))表示第口個(gè)字段值¥ /1)和第口個(gè)子樹1:/1),對(duì)1)£(1,9),若¥5 = ¥/1),則將 1^(;1^1(1_5,¥5)記錄在第?個(gè)子樹1:/1)中 ; 根據(jù)所述"路徑"的API路徑Uroute),生成類型為"路徑"的路徑樹結(jié)點(diǎn),記為1/ (route),并直接將L(route)記錄在I/ (route)路徑樹結(jié)點(diǎn)中。7.根據(jù)權(quán)利要求6所述的轉(zhuǎn)發(fā)管理方法,其特征是:所述步驟3.4中的轉(zhuǎn)發(fā)規(guī)則包括:匹 配項(xiàng)和指令集;并按如下方式生成: 從根結(jié)點(diǎn)開始深度遍歷路徑樹;當(dāng)遍歷到"讀取"、"比較"、"讀元"類型的路徑樹結(jié)點(diǎn), 則生成所述匹配項(xiàng);當(dāng)遍歷到"寫元"、"跳轉(zhuǎn)"、"路徑"類型的路徑樹結(jié)點(diǎn),則生成所述指令 集;直到所有結(jié)點(diǎn)都遍歷完成。
【文檔編號(hào)】H04L29/06GK105959154SQ201610471597
【公開日】2016年9月21日
【申請(qǐng)日】2016年6月22日
【發(fā)明人】田野, 馮新宇, 郭浩然, 何春暉, 常坤
【申請(qǐng)人】中國科學(xué)技術(shù)大學(xué)