深入思考SDN的核心本質:從SDN=OpenFlow回到軟體定義網路
本人註解:本文沒有寫SDN的結構,而是指出SDN的目的,也就是這玩意到底是幹嘛用的,這比那些上來不介紹技術目的就開始拋概念的裹腳布文章強太多了。
而且對SDN的目的理解比較深刻,沒有侷限於轉控分離,所謂轉控分離其實是實現手段,不是目的,目的是讓軟體更多參與網路控制管理。
編者按:SDN到底是什麼?雖然這個概念已經被炒了很多年,但還沒有人對其給出一個明確的概念。盛科網路總監張衛峰撰寫了自己關注SDN以來,對其認識的四個階段,最後一個階段又回到了SDN字面的意思軟體定義網路,每個階段作者的新觀點,也會給我們帶來一些啟發。以下為原文:
SDN的概念從提出到現在已經過了4年多了,但是關於SDN最基本的問題,“什麼是SDN”的爭論和探討從來都沒停止過,就像一些哲學家經常思考的“我是誰”,“我從哪裡來”,“我要去哪裡”一樣。有人跟我說,越討論越迷糊,有時候覺得清楚了,再跟不同的人討論,又迷糊了。因為工作的關係,在過去一年的時間內,我到處去跟各個運營商,網際網路公司,電商,裝置商,普通企業,高校,研究所的不同人進行交流,曾經跟一個朋友自嘲說除了ONF的執行總裁Dan Pitt,可能我是世界上跟別人講SDN講得最多的了。在這個過程中我不斷反思,不斷歸納總結,現在我當然不敢說我的想法就一定是對的,但是我認為我有必要把我的看法分享出來,供大家參考,是否認同不要緊,但是希望能對大家所有啟發。
我對SDN的認識可以分為四個階段,最後一個階段是在第三個階段基礎上的頓悟。
第一階段:SDN=OpenFlow?
跟很多其他人一樣,我最初接觸SDN是從OpenFlow開始的,那個時候甚至都沒去思考什麼是SDN的問題,本能的就認為OpenFlow就是SDN,SDN就是Openflow,其實潛意識中,就是把SDN看作是一個具體的技術和協議,在將近有半年的時間裡,都處於這種認識,因為那個時候還沒有接觸實際案例,也沒有廣泛去網上了解關於SDN的技術文章,這是最原始的第一階段。實際上,就算是現在很多人嘴裡面說SDN不等於Openflow,但是潛意識裡面還會自覺不自覺地將SDN往Openflow靠攏。為什麼呢?因為Openflow是大多數人唯一看得到的具體化的SDN的實現形式(實際上當然還有別的實現形式,但是很多人並沒有看到或者看到了也沒意識到)。
第二階段:SDN的三個本質屬性
後來隨著對各種SDN產品瞭解和網上諸多技術文章的閱讀,逐漸意識到,SDN只是一種架構,一種思想,具體的實現多種多樣,OpenFlow只是其中一種。我自己總結出SDN的三個本質屬性,認為只要符合控制跟轉發分離、有開放的程式設計介面、集中式的控制就可以認為是SDN。基於這樣一種理念,某個產品或者方案,哪怕沒有使用Openflow,只要它符合這三個原則,也可以認為是SDN。比如Juniper的Open Contrail,不支援Openflow,但是也是SDN。在很長一段時間內,我都堅定不移地認為這是最符合SDN思想的定義。包括我開始寫《深度解析SDN》那本書的期間,也是這樣認為。
第三階段:狹義SDN、廣義SDN、超廣義SDN
後來突然看到阿里巴巴推出了自己的SDN方案,在2013 GITC會議期間,我詳細聽了阿里巴巴專家的介紹,發現他們這種SDN跟我理解中的控制跟轉發分離並不相同,他們自己也說他們的SDN不是大家一般所理解中的SDN,他們的SDN是通過軟體控制指令碼,讓這些指令碼向遠端的交換機發送命令(不清楚是NetConf還是直接的命令列)來控制交換機,交換機上仍然運行了傳統的二三層協議,控制跟轉發並沒有分離,分離的是管理和控制。剛看到這個方案的時候,我馬上就問自己,這算不算SDN?我反覆思考了這個問題,他們為什麼要這麼做,而不是使用更徹底的控制跟轉發分離?我個人理解是他們網路中已經有了大量傳統的交換機,他們不可能把這些交換機都替換掉,但是又想通過軟體自動化來代替手動操作,所以就採取了這樣一種折衷的做法。這種做法有沒有價值?肯定是有,否則他們不會這麼幹。那算不算SDN?我一時陷入了迷茫。幾經思考之後,我認為,其實SDN並沒有確切的定義,只要能實現網路自動化,能夠滿足特定場景的需求,哪怕這種做法對別的使用者沒有意義,它也應該算SDN。只是從通用的角度來看,這種SDN靈活性比不上控制與轉發分離的那種架構,但是不可否認的是,它能解決特定客戶特定場景的需求。認識到這一點之後,我在對外宣講的PPT中,將SDN定義歸為三類,第一類是狹義SDN(等同於Openflow),第二類是廣義SDN(控制與轉發分離),第三類是超廣義SDN(管理與控制分離)。而且我認為,第二類定義中的SDN,是最通用,最有價值的一種。
第四階段:返璞歸真,回到軟體定義網路
在跟中國電信研究院的專家們一次交流中,我講了我對SDN的看法之後,研究院的王老師向我提出了一個問題:從SDN的字面意思來看,根本看不出控制與轉發分離的意思,你怎麼看這個問題?雖然我當時噼裡啪啦講了一堆,回答了這個問題。但是回來之後,我又深入的思考了一下王老師的這個問題,很慚愧,這麼一個明顯的問題,我之前居然都沒去思考過。思考的過程中,我突然有種醍醐灌頂的感覺,就像佛語經常說的那樣:看山是山->看山不是山->看山還是山。無論是控制與轉發分離,還是管理與控制分離其實都不是SDN的本質定義,SDN的本質定義就是軟體定義網路,也就是說希望應用軟體可以參與對網路的控制管理,滿足上層業務需求,通過自動化業務部署簡化網路運維,這是SDN的核心訴求,控制與轉發分離不是。但為了滿足這種核心訴求,不分離控制與轉發,比較難以做到,至少是不靈活。換句話說,控制與轉發分離只是為了滿足SDN的核心訴求的一種手段,如果某些場景中有別的手段可以滿足,那也可以,比如管理與控制分離。
作者簡介:張衛峰,@盛科張衛峰 ,熟悉二三層路由交換、PTN/IPRAN技術、晶片設計,對SDN/OpenFlow技術也有深刻的研究和理解。著有《深度解析SDN》。