Frenetic和Pyretic如何簡化OpenFlow SDN編程
網絡配置非常復雜,所以很容易出錯。SDN和OpenFlow協議通過使用一種統一語言來替換各個供應商的私有配置語法,以簡化網絡配置任務。
在一個OpenFlow SDN環境中,工程師不再需要用生成樹等協議去管理各個設備,而是將網絡的控制面板解耦,將它轉移到一個中央SDN控制器上。然后,這個控制器能夠為網絡上的所有設備作出數據包轉發決策。
但是,OpenFlow接口也非常復雜,所以研究人員開發了一些網絡編程語言,如Frenetic和Pyretic,它們可以簡化OpenFlow SDN編程。
OpenFlow SDN背后的復雜過程
雖然OpenFlow控制器使管理員不需要再逐個配置和管理數量龐大的設備,但是這個系統所使用的路由選擇決策過程仍然非常復雜。
在一個基于控制器的SDN環境中,如果有一個數據包的來源和目標從未見過,當它到達一個網絡設備時,這個設備就會把數據包發送到控制器上。這個控制器負責決定如何轉發這個數據包。然后,它會在設備上配置轉發規則,有相同來源和目標的后續數據包就可以根據這個規則轉發。
來源與目標信息對就稱為流(Flow)。控制器會為每一個流創建一條轉發規則,然后在每一個設備上為路徑配置這一條規則。轉發規則可能基于各種因素,如流量負載、安全性或延遲要求。
流規則可能指定一個來源和目標信息對,也可能包含一些通配符地址。每一個設備都會保存一組按優先級排列的流規則。當一個數據包到達設備時,它會對比流規則列表,然后根據最高優先級的規則進行轉發。
通配符規則一定要小心定義,避免那些本應該發送到控制器上單獨處理的數據包被通配符規則提前轉發出去。如果一個流基于多個條件轉發數據包,那么必須有一條規則包含所有的條件。否則,這個流將會基于列表中第一條規則來轉發數據包,而后續規則將會被忽略。這些都是需要簡化的復雜因素。
網絡編程語言可以簡化OpenFlow
Frenetic和Pyretic是普林斯頓和康奈爾大學教師和學生正在研究的編程語言。這兩種語言都是高級語言,它們的目標是隱藏SDN編程的復雜性和減少出錯概率。這兩個語言的研發都在Frenetic Project的整體框架中進行。
Frenetic包含了基于Ocaml編程語言的編程語法和運行時刻。它主要設計用來操作開源NOX控制器的。Pyretic基于Python,可以操作POX控制器。
這兩種語言將數量龐大的OpenFlow命令替換為少數高級命令,從而可以加快網絡策略的開發。此外,它們也能夠簡化策略的創建過程。
使用底層OpenFlow命令指定多個交換機操作是有難度且容易出錯的。每一個操作的語句必須按順序發出,才能保證命令按正確順序執行。例如,配置一個交換機同時轉發數據包并進行計數,需要將OpenFlow命令組合到一系列命令中。寫入一個策略模塊,由它配置一個設備基于當前鏈路負載、數據包優先級和安全來轉發數據包,同時完成數據包計數,這是一個非常有難度的任務。
通過使用語言接口,程序員就可以為每一個操作或條件指定一個策略。然后,他們可以使用Frenetic或Pyretic將每一個策略組件寫為一個獨立模塊。這些語言的運行時刻可以通過組合策略來創建OpenFlow命令,實現所有的條件并將它們按正確順序排列。這樣就可以防止執行一個策略的命令時與其它策略的命令發生沖突。
此外,語言和運行時刻也可以避免出現一些常見編程錯誤,如無法處理可能出現的競爭條件。在新數據包流的第一個數據包出現時,就經常發生這種情況。在控制器將新規則下發到這個設備之前,第二個數據包可能已經到達了路徑中的下一個設備。
第二個數據包可能也會被發送到控制器上,從而產生不必要的計算時間,或者由于所部署的通配符規則而出現錯誤轉發。運行時有一些規則可以防止出現這個情況。此外,運行時還可以在策略更新期間消除設備之間的不一致性。它們可以保證所有的數據包全部都按舊策略或新策略進行轉發。
Frenetic和Pyretic采用了不同的方法
Frenetic和Pyretic采用了不同的策略模塊解析方法。Frenetic提供了一個并行模型。在程序員看來,進入控制器的每一個數據包都由一個對應的策略模塊處理,也就是說模塊是并行執行的。支持多個條件的策略看起來也是并行執行的,如基于鏈路轉發同時計算數據包數量。
Pyretic也支持并行執行,但是它也支持順序執行。例如,Pyretic程序員可以規定一個訪問控制模塊在負載均衡模塊之前執行。此外,程序員也可以讓策略隨時間推移而變化。
監控網絡狀態是一個重要功能。控制器必須快速知道各個鏈路的負載或鏈路出現的問題。這些語言包含了一些命令,運行時可以通過解析這些命令來創建一組OpenFlow命令,檢測網絡事件、記錄計數和組合統計信息,從而提供關于網絡運行狀況的總體視圖。
Frenetic和Pyretic繼續向前發展
這兩個語言的研發工作仍在繼續。Pyretic團隊增加了一些特性,如支持服務質量,正在開發RADIUS和DHCP服務器等應用。其他研究人員也開始關注它們。佐治亞理工學院的教師與學生還使用Pyretic重新實現了它的Resonance控制器。所有工作在一天內就完成了,完成的代碼行數減少了六倍。Frenetic團隊正在改進其編譯器的效率,同時也在驗證所生成代碼的正確性。
在研究機構推出這些語言并應用到商業領域之后,它們將會大大加快SDN的應用速度。