自SDN出現(xiàn)以來,關于SDN的研究一直沒有停止,只是不同的階段關于SDN的研究的重點不同。比如最開始的時候,探討最多的是SDN的可行性,以及如何將SDN應用到對應的網(wǎng)絡場景中。本文是筆者在最近閱讀2015年至今的若干SDN論文后總結的SDN最新研究進展,希望對讀者提供一些幫助。
SDN/NFV
SDN和NFV都是當下網(wǎng)絡界研究的熱點,而如何將兩者整合部署,也是研究的熱點之一。設計SDN/NFV整合部署框架的研究是這個研究方向的主要研究切入點之一,比如參考文獻[1]中就提出了一個SDN/NFV的整體架構??蚣苤械腘FV協(xié)調器可以和云管理平臺配合使用,SDN控制器也支持與云平臺結合。由于此類方案是SDN與其他技術/框架的集合,本身沒有太多創(chuàng)新性,論文中也僅僅介紹了其實現(xiàn)方案,所以此處不加贅述。
SDN/NFV結合還可以部署在很多場景,比如WiFi場景。OpenSDWN[2]就是一種軟件定義的家庭/企業(yè)WiFi架構框架。 將SDN與其他技術結合并應用在特定網(wǎng)絡場景是一種主要的研究方向之一。
流表優(yōu)化
OpenFlow所支持的細粒度流管理是SDN最大的優(yōu)勢之一,但是細粒度的管理是需要付出代價的。為滿足細粒度的管理,則需要更粒度的流表項。但是像OpenFlow協(xié)議這種細粒度的管理會帶來一定的時延,對于實驗敏感的短流業(yè)務而言,這個時延帶來的影響是不可忽視的,這很可能會抵消了SDN帶來的好處。所以如何通過流表來匹配流,從而減少流表項下發(fā)次數(shù),是降低時延影響的有利手段。
此外,當網(wǎng)絡流數(shù)目過多時,交換機的流表空間就無法滿足需求。當流表滿時,為了下發(fā)新的流表項,就需要將其他活躍的流表項刪除,這會讓更多的數(shù)據(jù)包轉發(fā)給控制器,從而增加了控制器的負擔,還也帶來了更大的時延,也會發(fā)生數(shù)據(jù)包丟棄現(xiàn)象。對于大象流而言,等待下發(fā)流表項的時延并沒有太大的影響。但是,對于短流而言,特別是對時間敏感的短流而言,時延的影響就很明顯。為了避免這種情況出現(xiàn),很有必要對流表項進行聚合優(yōu)化。
OpenFlow協(xié)議支持通過通配符的方式來將數(shù)據(jù)流進行聚合,從而將多條流聚合成一條流來進行處理,比如交換機可以將目的IP為10.0.3.0/16的數(shù)據(jù)包都統(tǒng)一處理,發(fā)送到端口1,而不是對每一個IP都下發(fā)一條流表項。這種通配符的方式大大減少了流表項的數(shù)目。但是,通配的方式也存在問題,比如使用通配符會提高編程復雜度。為了降低使用通配流表項的難度,也為了提高性能,ReWiFlow[3]提出了限制型通配符。限制型通配符定義了完整的匹配域排序規(guī)則,使得匹配域不能任意搭配,必須按照順序搭配。低優(yōu)先級的匹配域需要在高優(yōu)先級的匹配域被填充使用時才可以被使用。這樣的排序限制了匹配域組合的自由度,但是卻讓管理流表項更容易。由于匹配域是固定順序的,所以可以通過前綴屬性來更簡單地管理流表項集合。
此外,為滿足更多的流表項需求,ReWiFlow還支持使用多維度、不同匹配域優(yōu)先序列的流表項。在實驗中,可以通過5組ReWiFlow的規(guī)則就可以描述超過1600條的ACL表項。這樣的流表空間壓縮率是非??捎^的。
關于流表項的優(yōu)化一直都是SDN/OpenFlow領域研究的熱點和重點,讀者可以通過ReWiFlow的參考文獻順藤摸瓜進行深入研究。
數(shù)據(jù)分類/流表查找
本質上,交換機將數(shù)據(jù)分類的過程也就是流表查找的過程。目前的OpenFlow支持的匹配域已經(jīng)超過了40個,所以數(shù)據(jù)分類是一個漫長的過程。而且隨著新技術的出現(xiàn),這個匹配域將會繼續(xù)增加。所以如何設計一個更高效、更具有可拓展性的分類算法來解決數(shù)據(jù)分類過程中的問題是下一階段SDN領域的研究方向之一。
數(shù)據(jù)分類的關鍵問題在于提升數(shù)據(jù)查找的速度。面對超過40維度的查找,如果簡單的逐維度,順序匹配,那會帶來十分高的時間復雜度。許多網(wǎng)絡業(yè)務對時延很敏感,這種低效率的做法無法適應網(wǎng)絡設備的要求。從算法的角度來講,通過多次模糊查找,逐漸分類并縮小查找范圍,最后再精確查找是一種可行的思路。
”Many-Field Packet Classification for Software-Defined Networking Switches“[4]論文就提出了一種可拓展的多域數(shù)據(jù)分類算法,其由選擇性位連接的多維度劃分來實現(xiàn)數(shù)據(jù)分類算法(A scalable many-field packet
classification algorithm using multidimensional-cutting via selective bit-concatenation (MC-SBC) for OpenFlow-based SDN switches)。其核心的思路是通過獲取多個域的不同比特位,并將其連到一起作為key,然后具體有相同key的流規(guī)則放在一個集合中。不同的比特位選取的結果左右不同的樣本空間,從而形成多維度的樣本空間。在查找時,通過取不同比特位組合的key可以快速地找到樣本空間,然后取樣本空間的交集即為對應的分類,也就是對應的流表項。
圖1. 分類器架構圖
Policies Composition/Consistency
網(wǎng)絡中存在著許多網(wǎng)絡策略,比如ACL和SFC。同時,網(wǎng)絡中的策略往往是由不同人群制定的,他們可能是網(wǎng)絡的管理員或用戶,也可能是虛擬租戶網(wǎng)的租戶。不同網(wǎng)絡使用者的決策是相互獨立的,也是動態(tài)的,所以很多時候不同的策略之間會產生策略沖突。目前的策略沖突解決方案僅僅實現(xiàn)了運行態(tài)的沖突檢測,即只有當策略被部署之后,網(wǎng)絡在運行時發(fā)生故障,性能出現(xiàn)惡化時,安全漏洞等問題才暴露出來。而這只是一種沖突檢測,其無法實現(xiàn)沖突的預防,更不能實現(xiàn)策略的編排,解決策略沖突。
為解決這個問題,PGA(Policy Graph Abstraction)[5]提出了使用圖結構來檢測來自多個用戶之間的策略沖突,并實現(xiàn)沖突解除。PGA支持在策略下發(fā)到底層設備之前完成策略沖突檢測和沖突解除,且其提供的抽象模型實現(xiàn)了策略與底層網(wǎng)絡之間的解耦合,從而降低了用戶在制定網(wǎng)絡策略時的壓力。PGA支持ACL以及SFC等多種策略的沖突檢測和協(xié)調,其關注點只是部署策略前的檢測和協(xié)調,并不關注運行態(tài)的沖突檢測。通過使用大型企業(yè)網(wǎng)數(shù)據(jù)的測試,驗證了PGA其可行性,證明了PGA不僅支持大量數(shù)據(jù)的處理,同時時延表現(xiàn)還很好。
此外,多控制器在協(xié)同工作的時候,還需要對數(shù)據(jù)進行同步。在沒有數(shù)據(jù)同步的情況下,相互獨立的控制器對交換機安裝的策略都是沒有經(jīng)過沖突檢測的,可能存在競爭和沖突,所以多控制器系統(tǒng)的信息同步非常有必要。交換機上發(fā)生策略沖突主要是因為控制器沒有辦法獲取到交換機上的策略狀況,無法進行策略沖突檢測,所以如果能在交換機上進行策略沖突檢測,就可以解決這個問題。相比通過帶外方式實現(xiàn)的控制平面的數(shù)據(jù)同步和策略沖突檢測,在交換機上實現(xiàn)沖突檢測的辦法更簡單,消耗的資源更少。
“In-Band Synchronization for Distributed SDN Control Planes”[6]論文提出了通過帶內方式實現(xiàn)的分布式控制平面的同步機制。其核心的思想是使用交換機的部分配置內存來做沖突檢測,然后保證所有的事務都是原子操作,從而保障數(shù)據(jù)的一致性。當多控制器同時并發(fā)給交換機寫入策略時,很可能帶來競爭和沖突,所以很有必要通過加鎖來實現(xiàn)策略寫入的原子性,從而保障數(shù)據(jù)讀取和修改的一致性。論文中提出了使用部分交換機的內存作為沖突檢測所需的內存,用于存儲那些等待執(zhí)行的指令。論文還設計了“compare and set”原語集,支持命令執(zhí)行的沖突檢測等行為。在安裝FlowMod等操作時,需要檢測是否有策略沖突,若無沖突,則可以安裝,否則放棄??刂破饕部梢酝ㄟ^讀取狀態(tài)原語來獲取交換機上的配置信息,以便作出沒有沖突的策略。本質上,這是一種在數(shù)據(jù)平面上保證數(shù)據(jù)一致性的解決方案。
但是,就算控制器策略計算正確,多控制器之間操作也沒有沖突,也無法保證數(shù)據(jù)包在數(shù)據(jù)平面按照控制器制定的策略去處理。目前關注于控制器平面的策略正確性的研究已經(jīng)很多,他們普遍努力于如何解決策略沖突,但是控制平面的正確策略不能保障數(shù)據(jù)平面的正確,所以還需要對數(shù)據(jù)平面進行監(jiān)控,來保證數(shù)據(jù)平面的策略一致性。
VeriDP[7]提出了監(jiān)控數(shù)據(jù)平面策略一致性的解決方案。其核心思想十分簡單:控制器在計算數(shù)據(jù)轉發(fā)路徑的時候,將數(shù)據(jù)包頭和轉發(fā)路徑信息映射關系存儲起來;在數(shù)據(jù)平面上,交換機需要對轉發(fā)的數(shù)據(jù)打標簽,從而記錄數(shù)據(jù)轉發(fā)的路徑;當數(shù)據(jù)離開網(wǎng)絡之前,將數(shù)據(jù)包頭和標簽上報給VeriDP服務器;VeriDP服務器可以將報頭信息和控制器存儲的映射關系進行對比,若匹配成功則說明數(shù)據(jù)平面的實際表現(xiàn)和策略一致,否則數(shù)據(jù)平面出現(xiàn)了故障。選擇集中式的服務器進行檢驗是因為單節(jié)點的交換機無法感知全局的策略,所以在數(shù)據(jù)包丟失等情況時,并不知道這是策略指導還是發(fā)生了故障,但集中的控制器掌握全局的策略,所以它的信息可以用來進行判斷策略一致性。
當然,除了以上的問題,流表一致性問題也是值得研究的課題??刂破鹘o多個交換機下發(fā)新流表時,沒有辦法做到同時修改,所以必然存在一個時間段,使得有的交換機的流表項已經(jīng)更新,而其他的交換機還保留了原有的流表項,這就可能造成環(huán)路或者丟包的現(xiàn)象。為解決這一問題,“Monitoring Dynamic Modification of Routing Information in OpenFlow Networks”[8]論文提出了一種監(jiān)控和分析解決方案,可以對路由信息改變時網(wǎng)絡的行為進行監(jiān)控,并對其行為進行系統(tǒng)整合分析,從而進行優(yōu)化,減少丟包率等現(xiàn)象。
安全相關
SDN的集中控制給解決網(wǎng)絡安全問題提供了很多方便。一直以來,網(wǎng)絡安全都是研究的課題,當SDN出現(xiàn)之后,如何利用SDN去更好地解決網(wǎng)絡安全問題成為了新的研究課題。此外,SDN本身的安全成為了新的研究課題。比如攻擊者可以通過數(shù)據(jù)包返回的時間來獲取到什么樣的數(shù)據(jù)包會上交控制器,進而利用這一信息攻擊控制器[9]。
Debugging/Trouble Shooting
網(wǎng)絡與軟件不同,其調試和故障排查十分復雜,所以SDN的調試和故障排查一直是研究熱點。
“One Tool to Rule Them All”[10]這篇論文主要提出的是一個輕量級的框架,可以靈活組合現(xiàn)有的故障排查工具來實現(xiàn)復雜而多樣的故障排查功能。由于計算機網(wǎng)絡的分布和異構,在網(wǎng)絡中進行故障排查一直以來都是非常困難的事情。而SDN的到來也帶來了更多的問題,不僅需要檢查網(wǎng)絡的故障,控制器/VNF/交換機等軟件的實現(xiàn)是否存在BUG也成為新的需要解決的問題。
面對這么多的問題需要排查,目前已經(jīng)有了許多解決方案,比如NICE[11]等。但是這些解決方案都是針對特定的網(wǎng)絡問題,無法全面地解決網(wǎng)絡故障。然而在解決一個網(wǎng)絡故障時,往往需要到多個軟件組合才能完成。所以還需要一個整合平臺來實現(xiàn)多個工具之間的靈活組合,這就是“One Tool to Rule Them All”論文的主要切入點和貢獻。論文中設計了故障排除的圖(Trouble Shooting Graph)來給故障排除建模。然后針對故障模型,可以配置對應的故障排除信息,從而通過調用多個工具來實現(xiàn)復雜的網(wǎng)絡故障排除。
在很多網(wǎng)絡業(yè)務場景中,需要掌握數(shù)據(jù)包的轉發(fā)路徑信息,從而更好地診斷網(wǎng)絡。原有的轉發(fā)路徑跟蹤解決方案的思路主要有帶外和帶內兩種?;趲獾慕鉀Q方案需要消耗大量的流表空間,也產生大量的帶外數(shù)據(jù),但是帶外方式節(jié)省了報頭的空間,沒有對數(shù)據(jù)包進行額外的修改?;趲鹊慕鉀Q方案則對數(shù)據(jù)包頭進行了修改,從而節(jié)省了大量的流表空間,也不會產生帶外的開銷。極端的帶內解決方案是給網(wǎng)絡中的鏈路獨立的編號,然后將編號插入到數(shù)據(jù)包的報頭,從而實現(xiàn)數(shù)據(jù)包轉發(fā)路徑的追蹤,但是這樣產生了過大的報頭開銷。
CherryPickp[12]則在現(xiàn)有帶內解決方案的基礎上進行了改進。由于數(shù)據(jù)中心網(wǎng)絡Fattree拓撲的規(guī)律性,可以通過計算關鍵鏈路來映射出完整的轉發(fā)路徑,從而節(jié)省報頭開銷。CherryPick的主要貢獻是設計了一套算法,從而將報頭開銷降到最小,其規(guī)則如下:
ToR: 如果ToR收到了Agg發(fā)來的數(shù)據(jù)包,而且數(shù)據(jù)包的源地址與目的地址都在同一個pod內,則ToR記錄連到Agg的入口鏈路的ID。如果源地址和目的地址都在同一個pod內,而且不經(jīng)過Agg,也即在一個ToR上,將忽略入端口。其他情況下,均不記錄鏈路。Agg: 如果Agg從ToR收到數(shù)據(jù)包,且數(shù)據(jù)包的終點在同一個pod內,則入鏈路被選中,其他情況將不記錄鏈路。(有的時候,數(shù)據(jù)包會在ToR和Agg中轉圈,然后再到達真正的目的地)Core: 核心層交換機始終只挑選入鏈路。
在此算法之下,可以通過記錄路徑上的關鍵鏈路來映射出完整的數(shù)據(jù)包的轉發(fā)路徑,從而將報頭開銷降到最小。
圖2.CheeryPick選取關鍵鏈路示意圖
SDN應用到WiFi無線場景, IOT,ADHOC等場景
SDN作為一種新的網(wǎng)絡模式,目前正在被用于如5G網(wǎng)絡,IOT,Ad-Hoc等網(wǎng)絡場景,也產出了OpenSDWN等研究成果[2]。將新技術框架放在不同場景的做法是研究中最常見的做法之一,但這和SDN本身的研究并沒有太大關系,所以此處不再展開,有興趣的讀者可以自行研究。
SDN Large Scale Scalability
SDN的控制平面能力是有限的,當SDN的規(guī)模擴展到足夠大的時候,就需要對其進行分域治理。而且出于業(yè)務場景的要求,許多大的網(wǎng)絡的子網(wǎng)絡分別使用著不同的網(wǎng)絡技術,使用著不同的控制平面,所以就需要實現(xiàn)多控制器之間的合作。多域控制器的協(xié)同工作一直是SDN研究領域的一個大方向,但同時也是一個很艱難的方向。
STRAUSS[13]項目提出了一個解決方案。其設計了一個“控制器的控制器”作為Domain控制器的協(xié)調者,從而實現(xiàn)跨域端到端的通信。由于各個域采用的技術不同,所以這些異構的域在相互協(xié)同時就需要進行抽象,從而消除具體技術帶來的差異性,進而讓網(wǎng)絡編排控制器統(tǒng)一管理。為實現(xiàn)控制器之間的通信,論文設計了一種COP協(xié)議(Control Orchestration Protocol)。
同樣的解決思路還有OXP協(xié)議,其協(xié)議內容目前還無法公開。OXP實現(xiàn)的多域異構控制器之間的協(xié)調工作,提升了SDN的可拓展性。此外,其還提供了多種模式,可適應多種網(wǎng)絡場景的具體需求。
更多的關于SDN可拓展行的研究[14],讀者可以閱讀相關調研[15]。
Fault Tolerance/Consistency
由于SDN是一種集中式的架構,所以單節(jié)點的控制器成為了整個網(wǎng)絡的中心。當控制器產生故障或者錯誤時,網(wǎng)絡就會癱瘓。為了解決控制器故障給網(wǎng)絡帶來的故障,分布式控制器等多控制器方案早就已經(jīng)被提出。相比單控制器而言,多控制器可以保證高可用性(High Availability),從而使得在某個控制器實例發(fā)生故障時,不影響整體網(wǎng)絡的運行。另外,為保障業(yè)務不終端、不沖突,多控制器之間信息還需要保持一致性,才能實現(xiàn)Fault Tolerance。
當故障發(fā)生時,多控制器之間的信息一致性能為接管的控制器提供正確管理交換機的基礎。然而,當前的一致性研究內容還僅僅關于控制器狀態(tài)信息方面,而沒有考慮到交換機的狀態(tài)信息,這將導致交換機重復執(zhí)行命令等問題。然而,許多操作并非冪等操作,多次操作將帶來更多問題,所以不能忽略命令重新執(zhí)行的問題。而且由于沒有關于交換機狀態(tài)的記錄,交換機也無法回退到一個安全的狀態(tài)起點,所以簡單狀態(tài)回退也是不可取的。更好的辦法是記錄接收事件的順序以及處理信息的順序及其狀態(tài)。此外,還需要利用分布式系統(tǒng)保持全局的log信息一致性,才能讓交換機在切換控制器時不會重復執(zhí)行命令。
因此Jennifer教授團隊提出了Ravana[16],設計了一個擁有兩個階段的協(xié)議,用于記錄事件接收順序和事件處理順序。當事件從交換機上報給主控制器時,主控制器會將這個事件的順序信息記錄下來,然后與從控制器同步。當交換機執(zhí)行完事件的處理命令時,會返回執(zhí)行完成信號給主控制器。主控制器從而結束整個事件/事務處理的周期,并將處理完成的狀態(tài)信息同步給所有的從控制器,從而完成數(shù)據(jù)同步。通過這種方式,控制器可以收集到事件處理的具體狀態(tài),從而使得當控制器發(fā)生故障時,其他控制器可以精確地了解到事件處理的狀態(tài),從而繼續(xù)完成事件處理。這種設計不但保障了控制器狀態(tài)的一致性,也同步了交換機的狀態(tài)數(shù)據(jù),使得無論控制器還是交換機發(fā)生故障時,都不會影響到業(yè)務的正常進行,從而實現(xiàn)無故障的應用運行。
SDN與大數(shù)據(jù)
SDN與大數(shù)據(jù)等其他技術的結合也是一個研究方向。當大數(shù)據(jù)和SDN[17]結合時,SDN可以提高大數(shù)據(jù)網(wǎng)絡的性能,而大數(shù)據(jù)的數(shù)據(jù)處理能力也可以給SDN決策提供更好的指導。由于這種研究屬于應用范疇,不加贅述。
總結
在筆者閱讀論文的時候,發(fā)現(xiàn)目前主要的SDN研究方向有:多控制器協(xié)同的可拓展性問題,網(wǎng)絡調試和故障排查,策略編排,流表優(yōu)化等方向。當然SDN與NFV、大數(shù)據(jù)等其他技術的結合也是一個研究方向。此外,SDN應用在各種網(wǎng)絡場景中的研究依然層出不窮。在2015年到2016年這段時間內,還沒有更多關于SDN數(shù)據(jù)平面可編程性的研究成果,其主要原因在與2014年左右的POF和P4已經(jīng)走在前列,而更多的研究還來不及發(fā)表。但筆者堅信,SDN數(shù)據(jù)平面可編程性以及SDN編程語言等研究將是未來研究的一個大方向。但是這個方向門檻較高,所以研究的人員比其他方向少一些。本文是筆者最近調研成果,希望可以給讀者帶來一些幫助。