摘要:這篇文章是對論文《The Road to SDN:An Intellectual History of Programmable Networks》的讀後總結。本文主要分爲四個部分:第一個部分是對SDN的簡單介紹;第二個部分追溯了可編程網絡的發展歷史,包括在主動網絡、早期分離控制面和數據面方面所作的工做以及OpenFlow和網絡操做系統的相關介紹。第三部分介紹了網絡虛擬化。第四部分是簡要的總結。文中也揭示了關於一些技術的誤解。算法
軟件定義網絡(Software Defined Network,SDN)是由美國斯坦福大學CLean State課題研究組提出的一種新型網絡創新架構,是網絡虛擬化的一種實現方式。其核心技術OpenFlow經過將網絡設備的控制面與數據面分離開來,從而實現了網絡流量的靈活控制,使網絡做爲管道變得更加智能,爲核心網絡及應用的創新提供了良好的平臺。編程
SDN產生的一些緣由
網絡設備的複雜性和難以管理。從交換機到路由器,這中間就存在着許多設備。網絡管理員經過配置接口來配置設備,可是不一樣供應商或者同一供應商的不一樣設備間的配置接口也是不一樣的。這些因素在增長網絡管理複雜性的同時也增長了網絡的運營成本。所以產生了SDN(軟件定義網絡)這一新的網絡設計和網絡管理方式。緩存
SDN的兩個特性安全
控制面是如何控制數據面的呢?
經過應用程序編程接口(API)進行控制。例如OpenFlow。服務器
OpenFlow:是一種網絡通訊協議,屬於數據鏈路層,可以控制網上交換器或路由器的轉發平面(forwarding plane),藉此改變網絡數據包所走的網絡路徑。網絡
SDN近期的狀況
近年來,SDN在行業中得到巨大的吸引力,許多商業交換機支持OpenFlow API。與此同時也出現了許多控制平臺,程序員可使用這些控制平臺建立了許多應用程序。如:動態訪問控制、網絡虛擬等。大量信息技術有限公司加入到了SDN的行業聯盟中。如:Open Networking Foundation、Daylight Initiative等。架構
SDN的歷史能夠分爲三個階段,每一個階段都有本身的貢獻:
① 主動網絡(20世紀90年代中期~21世紀初)
② 將控制面與數據面分離(2001~2007年)
③ OpenFlow API和網絡操做系統(2007~2010年左右)框架
主動網絡:主動網絡有兩個含義:一是被稱爲ANN的網絡中間節點(如路由器、交換機),不只完成存儲轉發等網絡功能,並且能夠對包含數據和代碼的所謂主動包和普通包進行計算;。二是用戶根據網絡應用和服務的要求能夠對網絡進行編程以完成這些計算。ssh
主動網絡的基本思想:將程序注入數據包,使程序和數據一塊兒隨數據包在網絡上傳輸;網絡的中間節點運行數據包中的程序,利用中間節點的計算能力,對數據包中的數據進行必定的處理;從而將傳統網絡中「存儲——轉發」的處理模式改變爲「存儲——計算——轉發」的處理模式。
主動網絡採起的兩種編程模型
① 囊模型:在節點中須要執行的代碼由數據包攜帶
② 可編程路由器/交換機模型:在節點上執行的代碼由帶外機制創建
其中囊模型與主動網絡的聯繫最爲緊密,囊模型設想在網絡上安裝新的數據面功能,以數據包的形式攜帶代碼,並使用緩存來提升代碼分發的效率。可編程路由器將可擴展性交給網絡運營商。
促進主動網絡的發展
一些資助機構對主動網絡的興趣也是促進其發展的重要因素。例如:DARPA(美國國防部高級研究計劃局)在20世紀90年代中期到21世紀初建立並支持主動網絡項目。
人們對主動網絡的懷疑
因爲主動網絡強調的是演示、項目的相互操做性以及必定程度的開發工做,在短時間內缺少一些實例,由此引發了一些人員的懷疑,這多多少少會對某些工做產生影響。
在傳統的路由器和交換機中,數據面和控制面是緊密耦合的,而這種耦合使得各類網絡管理任務都極具挑戰性。爲了應對這種挑戰,各類分離數據面和控制面的研究開始出現。
隨着網絡規模和範圍的日益增加,對可靠性和新服務的需求(如虛擬網絡)、以及服務器內存和處理器處理資源的能力的不斷增大,催生了兩項創新。
控制面和數據面之間的開放接口:如IETF(互聯網工程任務組)標準化的ForCES接口(轉發和控制元素分離)、Netlink接口(Linux內核級包轉發功能)。
ForCES是Forwarding and Control Element Separation的簡稱,致力於轉發件和控制件的分離,ForCES協議對轉發和控制面的信息交互進行了標準化。
Netlink套接字是用以實現用戶進程與內核進程通訊的一種特殊的進程間通訊(IPC) ,也是網絡應用程序與內核通訊的最經常使用的接口。
在邏輯上對網絡進行集中控制:如路由控制平臺(RCP)、軟路由架構、路徑計算原件(PCE)協議。
軟路由是指利用臺式機或服務器配合軟件造成路由解決方案,主要靠軟件的設置,達成路由器的功能;而硬路由則是以特有的硬設備,包括處理器、電源供應、嵌入式軟件,提供設定的路由器功能。
路徑計算元件(PCE)是可以肯定和找到用於在源和目的地之間傳送數據的合適路線的系統組件,應用或網絡節點。
邏輯上集中的路由控制器下降了標準的實施障礙;服務器技術的進步則意味着單一的商品服務器能夠存儲的全部的路由狀態,併爲一個大型網絡計算全部的路由決策。
批評的人對這些新架構的懷疑主要在於他們認爲邏輯上集中的路由控制會違反「共享」的原則,這是由於控制器可能會獨立於負責流量轉發的設備出現故障。
主要的設備供應商幾乎沒有採用ForCES這樣的標準數據面API,由於開放的API會使新的競爭者進入市場。所以只能依賴現有的路由協議來控制數據面。爲了拓寬控制面與數據面分離的應用面,研究人員探索了一些邏輯集中控制的全新架構。如:The 4D project.
4D項目倡導了4個層次:
① 數據面------基於配置規則來處理包
② 發現面------拓撲收集和流量監測
③ 傳播面------安裝包處理規則
④ 決策面------由邏輯上集中的控制器組成,這些控制器將網絡級目標轉換爲包處理狀態
OpenFlow是一種網絡通訊協議,屬於數據鏈路層,可以控制網上交換機或路由器的轉發平面(forwarding plane),藉此改變網絡數據包所走的網絡路徑。
網絡操做系統 ,是一種能代替操做系統的軟件程序,是網絡的心臟和靈魂,是向網絡計算機提供服務的特殊的操做系統,藉由網絡互相傳遞數據與各類消息。分爲服務器(Server)和客戶端(Client)。服務器的主要功能是管理服務器和網絡上的各類資源和網絡設備的共用,加以統合並控管流量,避免有癱瘓的可能性;客戶端能接收服務器所傳遞的數據並加以運用,能夠清楚地搜索所需的資源。
① 第一個誤解是每一個流量的第一個數據包必須交由控制器進行處理。實際上SDN(尤爲是OpenFlow)並不會對規則的粒度或控制器是否處理流量進行響應。
② 第二個誤解是控制器在物理上必須是集中的。事實上Onix(Online Information eXchange,線上資訊交換標準)和ONOS(Open Network Operating System,開放網絡操做系統)就說明了SDN控制器能夠並且應該是分佈式的。
③ 第三個誤解是認爲SDN和OpenFlow是等價的。事實上OpenFlow只是SDN的一個實例。
SDN早期的一個突出實例就是網絡虛擬化,網絡虛擬化提供了一個與底層物理設備解耦的抽象網絡。網絡虛擬化容許多個虛擬網絡在共享的基礎設施上運行,並且每一個虛擬網絡都具備比底層物理網絡更加簡單的拓撲結構。
在SDN出現以前的虛擬網絡被限制在只能在現有的網絡協議上運行,這給新技術的部署帶了困難,因此研究人員採起了運行覆蓋網絡的方法,在傳統網絡上創建知足要求的拓撲結構。不一樣於主動網絡,覆蓋網絡不須要網絡設備或網絡服務提供者的支持,這使得覆蓋網絡更易於部署。
覆蓋網絡(Overlay network)是一種建立在另外一網絡之上的計算機網絡。覆蓋網絡中的節點能夠被認爲是經過虛擬或邏輯連接相連,其中每一個連接對應一條路徑(Path)。節點之間也可能經過下層網絡中的多個物理鏈接實現相連。 例如對等網絡或客戶-服務器應用這類分佈式系統均可視爲覆蓋網絡,由於它們的節點都運行在因特網之上。 因特網自身最初也是做爲一個電話網絡之上的覆蓋網絡構建,而當今(藉由VoIP的引入),電話網絡正愈來愈變成一個建立在因特網之上的覆蓋網絡。
SDN是做爲一種支持網絡虛擬化的技術
雲計算使網絡虛擬化的做用更加突出,它容許多個用戶共享網絡基礎設施。例如:Ncira的網絡虛擬化平臺就提供了這種抽象,而不須要任何來自底層網絡硬件的支持。
Nicira是一家專一於軟件定義網絡(SDN)和網絡虛擬化的公司。它由Martin Casado,Nick McKeown和Scott Shenker於2007年創立。Nicira建立了本身的OpenFlow,Open vSwitch和OpenStack網絡項目的專有版本。
網絡虛擬化能夠用於測試和評估SDN
SDN控制應用程序與底層數據面分離的功能使得在將控制應用程序佈置到操做網絡上以前,能夠在虛擬環境中測試和評估SDN控制應用程序。例如:Mininet是用基於進程的虛擬機來運行多個OpenFlow交換機、終端主機和SDN控制器,每一個進程都單獨地運行在相同的虛擬機上。
Mininet是由一些虛擬的終端節點(end-hosts)、交換機、路由器鏈接而成的一個網絡仿真器,它採用輕量級的虛擬化技術使得系統能夠和真實網絡相媲美。
Mininet能夠很方便地建立一個支持SDN的網絡:host就像真實的電腦同樣工做,可使用ssh登陸,啓動應用程序,程序能夠向以太網端口發送數據包,數據包會被交換機、路由器接收並處理。有了這個網絡,就能夠靈活地爲網絡添加新的功能並進行相關測試,而後輕鬆部署到真實的硬件環境中。
對SDN進行虛擬化
在傳統網絡中,對路由器和交換機的虛擬化比較複雜,由於每一個虛擬組分都須要運行自身的控制面軟件,而虛擬化一個SDN交換機就容易多了。例如:FlowVisor系統使得大學可以支持在承載流量的相同物理設備上進行網絡研究的實驗平臺,主要思想是:將流量進行分片,其中每一個分片共享網絡資源,並由不一樣的SDN控制器管理。
FlowVisor是創建在OpenFlow之上的虛擬化網絡平臺,它能夠將物理網絡分紅多個邏輯網絡,從而實現開放軟件定義網絡(SDN)。它爲管理員提供了廣泛的定義規則來管理網絡而不是經過調整路由器和交換機來管理網絡。
人們常常提到的一些所謂的「SDN的好處」,好比攤銷成本或在多用戶的環境中動態配置網絡,這些實際上都來自網絡虛擬化。雖然SDN促進了網絡虛擬化,但必須認識到SDN提供的功能並不直接提供這些好處。
這篇文章介紹了可編程網絡的前世此生,可編程網絡的最初概念來自於主動網絡,兩者之間有許多相同的願景。可是主動網絡缺少明確的用例,也缺少大量部署的路徑。在互聯網騰飛的時代事後,人們的目光轉向了實用主義,爲了使網絡更便於管理,分離數據面和控制面的想法開始出現。隨後OpenFlow和網絡操做系統的研究工做使得對應用程序進行網絡範圍的控制成爲可能。SDN在這個過程當中只是扮演着解決網絡問題的工具的角色。SDN倡導的是「開箱即用」的網絡編程方式,而不能受當前技術的限制。在設計SDN應用程序時不能簡單地只考慮當前的OpenFlow協議,而應當考慮但願對數據面具備什麼樣的控制,並在這種設想和實際的部署策略之間找到平衡。