作為一個在校的本科生,我們學習的SDN著眼點與已工作的人有所不同。說說我的學習路線吧:去年上半年,我大二,老師科研項目其中一個分支就是有關OpenFlow/SDN的,有幸參與其中,我也由此開始踏上網絡學習之路。
剛開始的時候我完全不懂網絡相關知識,所以花了兩個月惡補網絡知識順便考了CCNA,所以說學習SDN的重要前提是你得熟悉傳統網絡相關知識。在此推薦謝希仁的《計算機網絡》和Todd Lammle的《CCNA學習指南》。后者雖然是一本考試認證教材,但其介紹的網絡基礎知識由淺入深通俗易懂。
在對網絡基礎知識有一定了解后,了解了OpenFlow的前世今生和發展路線。認真看了OpenFlow協議1.0版,侯杰老師在其著作《深入淺出MFC》中說“莫在浮沙筑高臺”,所以即使現在主流的版本已經是OF1.3了,也建議由淺入深,認真讀一下各版本的OF標準,了解其演進路線,及每一次演進背后的驅動力。在此推薦 @李呈大神的博客,其中有一篇博文用圖表形式表示了OpenFlow各消息的報文格式,特別贊。
理論知識再扎實,也還是要落實到實踐上來驗證。下一步就該搭個實驗環境玩了。一個SDN環境無非由控制器、OpenFlow交換機和HOST組成,選一個自己看對眼的控制器,一個虛擬機,一個Mininet或幾個OpenvSwitch,只需一臺電腦,一個實際的SDN環境就已經在運行了。前面學了這么多理論,看到一個環境真切地在你眼前運行,使用著OF協議來通信,你甚至可以抓到每一次交互的報文,和OF標準里說的一模一樣,那感覺,amazing!SDN的核心目標是什么?是流表匹配,是為每一條流找到一條似乎就是為它量身定做的轉發路徑。如何去實現這一目標?靠控制器上層應用。每一個控制器都有北向接口,現在一般的標準是以REST API的方式來提供,這樣的好處是你可以用任何一種能解析JSON的語言來編寫應用。通過你的應用,每一個數據包都按照你的意志在網絡里被傳送,amazing++!
網絡環境多種多樣,控制器不可能能處理所有的需求,這就要求能深入控制器內部,安裝你自己編寫的模塊,處理南向數據,或許還需要向北向提供接口。你可能會擔心控制器的代碼規模是如此龐大,不知道怎樣甚至不敢動其內部的代碼。好在面向對象和模塊化程序設計的思想已經深入人心并被實實在在的踐行在控制器的編寫過程中,控制器的每一個構件,像一塊塊樂高積木,彼此關聯累積,再加一塊新的積木,相信對你來說也是游刃有余的。完成了這一步,amazing2!
終于,現有的控制器已經不能滿足你了,天哪,地球已經阻止不了你了啊少年。于是你開啟超級變換形態,去吧皮卡丘,自己編寫控制器吧!這應該是學習SDN的最高境界了,所謂大音希聲,大象無形,眼前有碼,心中無碼。
總之,SDN發展到現在,各種組織各種項目百家爭鳴。找你的key words,google之,先了解,再模仿,然后理解,最后創造。能在正年輕的時候參與到SDN這一革命浪潮里來,多么幸運。