軟件定義網(wǎng)絡(luò)中的流表下發(fā)方法、報文轉(zhuǎn)發(fā)方法及設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及軟件定義網(wǎng)絡(luò)(SDN, Software Defined Network)技術(shù)領(lǐng)域,具體涉及 一種軟件定義網(wǎng)絡(luò)中的流表下發(fā)方法、報文轉(zhuǎn)發(fā)方法及設(shè)備。
【背景技術(shù)】
[0002] 軟件定義網(wǎng)絡(luò)(SDN),是由美國斯坦福大學Clean Slate研究組提出的一種新型 網(wǎng)絡(luò)架構(gòu)。其核心思想是將網(wǎng)絡(luò)設(shè)備的控制平面和數(shù)據(jù)轉(zhuǎn)發(fā)平面分離,采用統(tǒng)一的控制器 (Controller)控制網(wǎng)絡(luò)中數(shù)據(jù)的轉(zhuǎn)發(fā),從而實現(xiàn)網(wǎng)絡(luò)流量的靈活控制,并為網(wǎng)絡(luò)及應(yīng)用的 開發(fā)創(chuàng)新提供平臺。
[0003] 開放流(OpenFlow)作為SDN控制平面和轉(zhuǎn)發(fā)平面交互的標準化接口,近年來得 到廣泛的關(guān)注和認可。OpenFlow將網(wǎng)絡(luò)中的數(shù)據(jù)流量定義為"流",并通過控制平面增加、 更新、刪除轉(zhuǎn)發(fā)平面流表的方式控制網(wǎng)絡(luò)中數(shù)據(jù)流的走向。流表由流表項組成。各流表 項(Flow Entry)包含頭域(Header,也稱作匹配域Match Field)用于與特定流匹配,計數(shù) 器(Counter)用于記錄相應(yīng)流的個數(shù)和上次到達時間,和操作域(Action,也稱作指令集 Instructions)用于表達對相應(yīng)流所做的操作。支持OpenFlow的網(wǎng)絡(luò)架構(gòu)圖如圖1所示, 很多廠商已開發(fā)出了支持OpenFlow協(xié)議的路由器。路由器分為控制器和轉(zhuǎn)發(fā)設(shè)備兩部分, 轉(zhuǎn)發(fā)設(shè)備僅負責轉(zhuǎn)發(fā)數(shù)據(jù),控制器用于分析數(shù)據(jù)并下發(fā)流表。
[0004] 目前,OpenFlowl. 3版本已定義了大量流表操作,用于完成各類網(wǎng)絡(luò)服務(wù)。通過增 加新的流表項匹配域和指令,可以定義新的網(wǎng)絡(luò)服務(wù)。然而,目前OpenFlow協(xié)議指令存在 一定問題,為了適應(yīng)不同的數(shù)據(jù)通信協(xié)議,需不斷在流表增加匹配域和指令,轉(zhuǎn)發(fā)設(shè)備如需 識別某種數(shù)據(jù)通信協(xié)議的數(shù)據(jù)包,則需要理解該協(xié)議格式,即轉(zhuǎn)發(fā)設(shè)備必須知道該數(shù)據(jù)包 中的各個字段的含義,進而根據(jù)該通信協(xié)議對數(shù)據(jù)包進行解析,確定各個字段的值。顯然, 這種處理方式嚴重影響了 OpenFlow協(xié)議的擴展性。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明實施例要解決的技術(shù)問題是提供一種軟件定義網(wǎng)絡(luò)中的流表下發(fā)方法、 報文轉(zhuǎn)發(fā)方法及設(shè)備,能夠有效降低OpenFlow中數(shù)據(jù)通信協(xié)議擴展的實現(xiàn)復雜度,實現(xiàn) OpenFlow的擴展應(yīng)用。
[0006] 為解決上述技術(shù)問題,本發(fā)明實施例提供的軟件定義網(wǎng)絡(luò)中的流表下發(fā)方法,包 括:
[0007] 控制器接收轉(zhuǎn)發(fā)設(shè)備發(fā)送的未知數(shù)據(jù)包,所述未知數(shù)據(jù)包是未能與轉(zhuǎn)發(fā)設(shè)備的本 地流表匹配上的數(shù)據(jù)包;
[0008] 控制器對所述未知數(shù)據(jù)包進行協(xié)議分析,生成對應(yīng)于所述未知數(shù)據(jù)包的流表,所 述流表的頭域包括有至少一個匹配項,所述匹配項包括有第一偏移量、第一長度值和第一 匹配值,用于表示所述匹配項匹配的數(shù)據(jù)包中,以所述第一偏移量為起始位、且長度等于所 述第一長度值的第一字段的值為所述第一匹配值;
[0009] 控制器將所述流表下發(fā)至所述轉(zhuǎn)發(fā)設(shè)備,以供所述轉(zhuǎn)發(fā)設(shè)備根據(jù)所述流表中的匹 配項中的所述第一偏移量、第一長度值和第一匹配值,對所述未知數(shù)據(jù)包進行流表匹配,并 根據(jù)匹配上的流表執(zhí)行轉(zhuǎn)發(fā)處理。
[0010] 上述方案中,所述流表的操作域包括有至少一個指令項,所述指令項包括有預(yù)設(shè) 指令、第二偏移量和第二長度值,用于指示所述轉(zhuǎn)發(fā)設(shè)備對所述流表匹配的數(shù)據(jù)包中,以所 述第二偏移量為起始位、且長度等于所述第二長度值的第二字段,執(zhí)行所述預(yù)設(shè)指令定義 的操作。
[0011] 上述方案中,所述指令項還包括有第二匹配值,用于指示所述轉(zhuǎn)發(fā)設(shè)備根據(jù)所述 第二匹配值,對所述第二字段執(zhí)行所述預(yù)設(shè)指令定義的操作。
[0012] 上述方案中,所述對所述未知數(shù)據(jù)包進行協(xié)議分析,生成對應(yīng)于所述未知數(shù)據(jù)包 的流表,包括 :
[0013] 判斷所述未知數(shù)據(jù)包是否需要進行應(yīng)用層網(wǎng)關(guān)ALG變換;
[0014] 在所述未知數(shù)據(jù)包需要進行ALG變換時,根據(jù)預(yù)設(shè)的ALG變換信息生成對應(yīng)于所 述未知數(shù)據(jù)包的流表。
[0015] 本發(fā)明實施例還提供了一種軟件定義網(wǎng)絡(luò)中的報文轉(zhuǎn)發(fā)方法,包括:
[0016] 轉(zhuǎn)發(fā)設(shè)備接收一數(shù)據(jù)包;
[0017] 轉(zhuǎn)發(fā)設(shè)備根據(jù)預(yù)設(shè)的流表匹配順序,將所述數(shù)據(jù)包與本地流表逐條進行匹配,其 中,所述本地流表的頭域包括有至少一個匹配項,所述匹配項包括有第一偏移量、第一長度 值和第一匹配值,在所述數(shù)據(jù)包中的以所述第一偏移量為起始位、且長度等于所述第一長 度值的第一字段的值,等于所述匹配項中的第一匹配值時,判斷所述數(shù)據(jù)包與所述匹配項 相匹配;
[0018] 在所述數(shù)據(jù)包與當前本地流表的頭域中的所有匹配項均匹配時,根據(jù)該當前本地 流表對所述數(shù)據(jù)包進行轉(zhuǎn)發(fā)處理;
[0019] 在所述數(shù)據(jù)包與當前本地流表的頭域中的所有匹配項部分匹配或均不匹配時,繼 續(xù)將所述數(shù)據(jù)包與下一條本地流表進行匹配,直至最后一條本地流表。
[0020] 上述方案中,在所述數(shù)據(jù)包與最后一條本地流表的所有匹配項部分匹配或均不匹 配時,將所述數(shù)據(jù)包發(fā)送至控制器;
[0021] 接收控制器下發(fā)的針對所述數(shù)據(jù)包的流表并保存在本地,以及,根據(jù)所述針對所 述數(shù)據(jù)包的流表,對所述數(shù)據(jù)包進行轉(zhuǎn)發(fā)處理。
[0022] 上述方案中,所述本地流表的操作域包括有至少一個指令項,所述指令項包括有 預(yù)設(shè)指令、第二偏移量和第二長度值;
[0023] 所述轉(zhuǎn)發(fā)設(shè)備在根據(jù)該當前本地流表對所述數(shù)據(jù)包進行轉(zhuǎn)發(fā)處理時,對所述數(shù)據(jù) 包中以所述第二偏移量為起始位、且長度等于所述第二長度值的第二字段,執(zhí)行所述預(yù)設(shè) 指令定義的操作。
[0024] 上述方案中,所述指令項還包括有第二匹配值;
[0025] 所述轉(zhuǎn)發(fā)設(shè)備在根據(jù)該當前本地流表對所述數(shù)據(jù)包進行轉(zhuǎn)發(fā)處理時,進一步根據(jù) 所述第二匹配值,對所述第二字段執(zhí)行所述預(yù)設(shè)指令定義的操作。
[0026] 本發(fā)明實施例還提供了一種軟件定義網(wǎng)絡(luò)中的控制器,包括:
[0027] 報文接收單元,用于接收轉(zhuǎn)發(fā)設(shè)備發(fā)送的未知數(shù)據(jù)包,所述未知數(shù)據(jù)包是未能與 轉(zhuǎn)發(fā)設(shè)備的本地流表匹配上的數(shù)據(jù)包;
[0028] 流表生成單元,用于對所述未知數(shù)據(jù)包進行協(xié)議分析,生成對應(yīng)于所述未知數(shù)據(jù) 包的流表,所述流表的頭域包括有至少一個匹配項,所述匹配項包括有第一偏移量、第一長 度值和第一匹配值,用于表示所述匹配項匹配的數(shù)據(jù)包中,以所述第一偏移量為起始位、且 長度等于所述第一長度值的第一字段的值為所述第一匹配值;
[0029] 流表下發(fā)單元,用于將所述流表下發(fā)至所述轉(zhuǎn)發(fā)設(shè)備,以供所述轉(zhuǎn)發(fā)設(shè)備根據(jù)所 述流表中的匹配項中的所述第一偏移量、第一長度值和第一匹配值,對所述未知數(shù)據(jù)包進 行流表匹配,并根據(jù)匹配上的流表執(zhí)行轉(zhuǎn)發(fā)處理。
[0030] 上述方案中,所述流表的操作域包括有至少一個指令項,所述指令項包括有預(yù)設(shè) 指令、第二偏移量和第二長度值,用于指示所述轉(zhuǎn)發(fā)設(shè)備對所述流表匹配的數(shù)據(jù)包中,以所 述第二偏移量為起始位、且長度等于所述第二長度值的第二字段,執(zhí)行所述預(yù)設(shè)指令定義 的操作。
[0031] 上述方案中,所述指令項還包括有第二匹配值,用于指示所述轉(zhuǎn)發(fā)設(shè)備根據(jù)所述 第二匹配值,對所述第二字段執(zhí)行所述預(yù)設(shè)指令定義的操作。
[0032] 上述方案中,所述流表生成單元,進一步用于判斷所述未知數(shù)據(jù)包是否需要進行 應(yīng)用層網(wǎng)關(guān)ALG變換;在所述未知數(shù)據(jù)包需要進行ALG變換時,根據(jù)預(yù)設(shè)的ALG變換信息生 成對應(yīng)于所述未知數(shù)據(jù)包的流表。
[0033] 本發(fā)明實施例還提供了一種軟件定義網(wǎng)絡(luò)中的轉(zhuǎn)發(fā)設(shè)備,包括:
[0034] 報文接收單元,用于接收一數(shù)據(jù)包;
[0035] 流表匹配單元,用于根據(jù)預(yù)設(shè)的流表匹配順序,將所述數(shù)據(jù)包與本地流表逐條進 行匹配,并在所述數(shù)據(jù)包與當前本地流表的頭域中的所有匹配項部分匹配或均不匹配時, 繼續(xù)將所述數(shù)據(jù)包與下一條本地流表進行匹配,直至最后一條本地流表,其中,所述本地流 表的頭域包括有至少一個匹配項,所述匹配項包括有第一偏移量、第一長度值和第一匹配 值,在所述數(shù)據(jù)包中的以所述第一偏移量為起始位、且長度等于所述第一長度值的第一字 段的值,等于所述匹配項中的第一匹配值時,判斷所述數(shù)據(jù)包與所述匹配項相匹配;
[0036] 轉(zhuǎn)發(fā)處理單元,用于在所述數(shù)據(jù)包與當前本地流表的頭域中