NFV與SDN到底是什么關系?
什么叫網絡虛擬化?先上兩張簡單粗暴的圖。
所有的通信應用無非就是兩部分組成:計算和網絡。這兩者關系密不可分,但兩者關系嚴重缺乏對稱性,網絡一直拖累著計算。
4G網絡RAN將會不斷進化,據說,未來的4G網絡空口速率將是現在的10倍。隨著智能硬件的爆發,大量的應用接入4G網絡,人們的流量需求如同海嘯般洶涌而至,我們似乎趕上了好時代。不過,傳統的通信網絡里,每一類服務對應基于專用集成電路的帶有專用處理器的專用服務器。網絡里的設備很多,但是,這些家伙就像霸道總裁的辦公室,僅供總裁專用,不管他在與不在,位置都占在那里,誰也不敢冒然挪用。
這樣下去,網絡會嚴重拖計算的后腿。于是,有人想到了虛擬化。
或者,可以這么理解,服務器覺得老這樣拖著網絡跑不是辦法,遲早會被累死,就開始向網絡扔磚頭了!

專用的硬件對應專用的服務,這樣的花費是昂貴的,為了節省成本,我們得想想物盡其用。
想想你有一棟超級大的空置的公寓,你想出租,但是每一位租客的需求是不一樣的。這個時候,你想到了“虛擬化”。根據租客的需求,把這棟公寓虛擬化成不同的建筑風格。于是,你對租客1說,“我有兩棟公寓要出租,你喜歡紅色那一棟還是藍色那一棟?”。然后你對租客2說,“我有三棟公寓要出租,大、中、小,你喜歡哪一棟?”。接著租客3。。。 繼續忽悠。。。 然后,所有的租客都住進了你的虛擬公寓,你按住宿時間和使用空間來收租金。

2012年10月,13家運營商發起在ETSI組織下正式成立網絡功能虛擬化工作組,即ETSI ISG NFV,致力于實現網絡虛擬化的需求定義和系統架構制定。
談到虛擬化,首先得了解什么是虛擬化技術?最常用的虛擬化技術有操作系統中內存的虛擬化,實際運行時用戶需要的內存空間可能遠遠大于物理機器的內存大小,利用內存的虛擬化技術,用戶可以將一部分硬盤虛擬化為內存,而這對用戶是透明的。又如,可以利用虛擬專用網技術(VPN)在公共網絡中虛擬化一條安全,穩定的“隧道”,用戶感覺像是使用私有網絡一樣。
NFV就是基于大型共享的OTS(Off-The-Shelf,成品)服務器,通過軟件定義的方式,探索網絡實體的虛擬化使用。在NFV中使用的虛擬機(Virtual Machines,VMs)技術是虛擬化技術的一種。
基于軟件定義的虛擬機部署成本低,而且可以快速適應網絡需求變化。虛擬機就像是將所有能想到的東西都放在一臺物理服務器(physical server)上,有了云計算和虛擬化,那些冗余的服務器都可以部署在獨立的物理服務器上,不但可以并行處理,滿足網絡峰值需求,還可以根據網絡需求隨時釋放資源,方便部署,利于故障管理,快速升級,快速滿足市場需求。
NFV技術顛覆了傳統電信封閉專用平臺的思想,同時引入靈活的彈性資源管理理念,因此,ETSI NFV提出了突破傳統網元功能限制、全新通用的NFV架構下圖所示。

NFV技術主要由3個部分構成:VNF(虛擬網絡層,Virtualized Network Function)、NFVI(網絡功能虛擬化基礎設施NFVI,NFV Infrastructure)和MANO(NFV管理與編排,Management and Orchestration)。
(1)虛擬網絡層是共享同一物理OTS服務器的VNF集。對應的就是各個網元功能的軟件實現,比如EPC網元、IMS網元等的邏輯實現。
(2)NFVI,你可以將它理解為基礎設施層,從云計算的角度看,就是一個資源池。NFVI需要將物理計算/存儲/交換資源通過虛擬化轉換為虛擬的計算/存儲/交換資源池。NFVI映射到物理基礎設施就是多個地理上分散的數據中心,通過高速通信網連接起來。
(3)NFVMANO。基于不同的服務等級協議(Service Level Agreements ,SLAs),NFVMANO運營支撐層負責“公平”的分配物理資源,同時還負責冗余管理、錯誤管理和彈性調整等,相當于目前目前的OSS/BSS系統。
這樣一來,現在的移動通信網絡結構就變成了這樣:

上圖頂部的VNF對應了網元功能的邏輯實現,比如,由多個VNF組成的VNF-FG(VNF Forwarding Graph)定義了LTE網絡服務。
那么軟件定義網絡(SDN)和NFV又有什么關系呢?
NFV負責各種網元的虛擬化,而SDN負責網絡本身的虛擬化(比如,網絡節點和節點之間的相互連接)。我們先來看看一個典型的網絡結構圖。

如上圖,一個網絡由網絡節點和節點間的鏈路組成。每一個節點都有一個控制面和與其它節點交換的網絡信息。在上圖中,右邊的H節點獲知一個新的網絡(10.2.3.x/24)存在,現在它需要將這一信息告訴給網絡中的其它節點。然而,節點H只和節點F和G直接相連,節點H通過鏈路狀態通告(Link State Advertisements ,LSAs)通知節點F和G,F和G再將信息傳遞給它們的鄰近節點,最終該消息傳達到整個網絡。這樣,網絡內每個節點都會更新自己的路由表,以確保數據可以傳送到網絡10.2.3.x/24。
如果節點C和E之間的鏈路中斷,盡管C和E知道C-E鏈路中斷,但節點A并不知道,節點A會繼續通過C-E鏈路向網絡10.2.3.x/24傳送數據包。由于節點的“近視”,導致數據堆積在該節點,這需要花一些時間來向整個網絡傳送網絡狀態更新信息和完成糾錯。網絡越大,這種情況就越容易發生。
我們再來看看節點G,它由控制面(control plane)和數據面(data plane)組成。為了適應快速更新,控制面基本上是基于軟件的,這實際上意味著控制消息的處理時長比基于硬件的邏輯單元(比如,數據面)要慢5到10倍。一直以來,我們僅要求控制面能夠靈活更新,但對時延要求并不是太高。相對于數據面來講,時延要求較高,我們希望數據包能夠傳送得越快越好,所以它必須是基于硬件來實現的。盡管基于軟件實現的控制面能滿足目前的要求,但隨著設備的大量接入,特別是物聯網的應用,控制面的時延也需要進一步提升。
軟件定義網絡(SDN)負責分離控制面和數據面,將網絡控制面整合于一體。這樣,網絡控制面對網絡數據面就有一個宏觀的全面的視野。路由協議交換、路由表生成等路由功能均在統一的控制面完成。實現控制平面與數據平面分離的協議叫OpenFlow,OpenFlow是SDN一個網絡協議。如下圖所示:

從上圖中,我們可以看到,首先需要通過OpenFlow將網絡拓撲鏡像到控制面,控制面初始化網絡拓撲,初始化完成后,控制面會實時更新網絡拓撲。
控制面完成初始化后,會向每個轉發節點發送轉發表,根據轉發表用戶數據在網絡內傳送。假設現在節點H獲知新的網絡 (10.2.3.x/24)。節點H將通過OpenFlow告知控制面,因為控制面統領全局,它可以快速的為每一個轉發節點創建新的路由表,這樣用戶數據就可以傳送到這個新網絡。