假設如果已經實作了控制平面和資料轉發平面的分離,即SDN,那麼網絡協定就被弱化了!為何如此放狂言?還得從曆史說起!
如果上面的假設不成立,那麼如何實作獨立的控制平面和獨立的資料平面,對于控制平面,簡單,軟體定義一切,對于資料平面呢?很難!這得從軟體硬體的邊界說起!
首先要指出的一點是,近期思考的一些東西沒有考慮相容性與成本,很多都是推倒重來的想法,步子大了一點,也挺蛋疼,是以不要拿現在即有的理論來框這些想法。
為何會有協定?想過嗎?協定天生帶有分布性與第三方可公證性,是彼此平等但陌生的你和我之間達成的共識。如果你和我非常熟悉就不需要協定,代之以慣例或曰不成文規定,如果你和我之間不平等,也不需要協定,代之以指令或服從。在考慮網絡協定之前首先看下中國和歐洲的協定精神。
中國人長期固定于一塊土地,安土重遷,人口流動性比較若,同一區域的人之間彼此都很熟悉,同一家庭内實行父權家長制,不符合産生協定的兩大要素。看看西歐,羅馬帝國末期以來,民族遷徙,中世紀的教會,王權,貴族,城市四方角力導緻人口流動頻繁(實際上,古希臘海洋性的特征也遺傳了下來起了一定作用),彼此之間平等又陌生,這正是促使協定精神發展的溫床。于是你就看到了很多所謂的條約,實際上就是約定的雙方必須遵守的共識,顯然,條約都是平等的,條約沒有不平等的,是的,可能你要支付賠款,但人家不是停戰了麼?打不過人家是自己的問題,和條約沒關系!如果簽約雙方有一方違約了,好辦,他會受到第三方而不是對方的懲罰,比如第三方授權對方拒絕支付工資,比如市場不準入,總之以後人家就不把違約方作為平等角色了,一句話,人家不跟你玩了,你就panic吧!有點扯遠了...
從以上我的胡拉亂扯中,你也許隐約知道了什麼是協定,三要素,執行雙方是陌生關系,執行雙方是平等關系,存在一個第三方公證機構起制約監督作用。這就說明協定本身不管從任何方面講,其執行,其監督都是分布式的,也就是說是自控制的,如果存在一個權威性的中心控制,那麼将不再需要協定,一切都以赦令/服從的方式執行。
在網絡的設計之初,目的是互聯彼此分離的計算機實作通信,自然而然的方案就是各個計算機自己控制如何通信,當然,在阿帕網設計的同時,也有人提到過一個集中控制的結構,但是由于當時聯網的中心是計算機而不是網絡本身,是以添加額外的控制器無疑增加了複雜性。這種集中控制的政策過于早熟,在整個産業還不發達的時候,無疑是不可能實作的,那個時候,計算機技術不發達,晶片技術不發達,App幾乎沒有,機器完全是屬于大型組織的,個人PC想都别想,是以網絡流量完全在自控制可以解決的範疇,正如在車流量非常少的地方,沒有必要建立統一控制管理的高速公路一樣。
現在是雲和移動的時代,SDN在這個時代啟發了君主革命。如果控制器被完美實作,那麼既有的分層協定還需要嗎?這個提問有些兇,我的回答當然是不再需要!資料不再像以往那樣通過IP路由逐跳發往目的地,甚至IP位址也可以退化成一個身份/位置編址系統而不再擔任路由功能,如何發送資料全由SDN控制器掌控,是以就需要一系列的機制代替IP路由,政策路由,防火牆,負載均衡器之類的東西,确認“如何發送資料”,此時TLV便是一個比較好的格式,它天生地支援變長且不固定的格式,和TCP/IP分層協定頭形成了鮮明的對比。TLV的通用解析邏輯是SDN資料平面的最佳選擇。實際上,如果你熟悉Linux的iptables就會明白這一點,Linux系統中,所有的iptables規則在核心記憶體中的布局實際上就是類似TLV,雖然不是那麼嚴格。我們知道一條iptables規則可用擁有理論上任意多的match,是以它的長度是不固定的,對于每一個match,由于match是自定義的比對,其長度與格式也不固定,那麼其存儲就隻能用類似TLV的鍊式存儲,即你無法越過某N個規則直接去比對第N+1之後的規則,同樣對于match也一樣,任何規則以及任何一個規則任何match的位置都由前一個相同的結構體給出,類似IPv6協定頭的“下一個頭”這個字段所表示的含義。實作了鍊式布局以後,如何解析以及如何比對自定義的match是下一個重要的問題,iptables的方法是每一個match對應一個xt_match結構體去負責,這些結構體動态注冊到核心中。通過以上的iptables例子可以看出,這種方式對于SDN如何定義一個流,如何針對一個流執行政策是多麼好的一種方式,這正是軟體的靈活性所能提供的,任何一個狂熱的人不禁疾呼,SDN要成功了,然而卻忽略了軟體和硬體之間的邊界,該邊界就是機制和政策之間的邊界!硬體實作機制,軟體提供政策。可是當我們在高喊“TLV形式的完全通用的轉發接口”的時候,我們突然發現,沒有任何機制可以抽取出來,即,具體的政策之間沒有交集或者很少有交集,然而SDN資料平面的高效率轉發需求呼喚必須用硬體實作,這個胡同很難突破!
現有的協定頭,一般都是一個固定長度固定格式的頭,加上一個可選的變長option,這在解析起來非常容易,解析邏輯的固定化十分容易用硬體直接實作,然而如果用硬體實作TLV解析難度就大了,因為TLV是無格式變長的,沒有統一的邏輯。在工程意義上,接口越通用,實作越複雜,這是一個工程學上的真理,不僅僅局限于程式設計方面。對于成熟的硬體晶片而言,其生成周期要比軟體久,一旦成型,修改成本也巨高昂,是以,你根本無法像修改,擴充xt_match那樣去修改,擴充晶片,晶片裡的代碼可以成為firmware,其中的firm字首說明了一切!
我無意給SDN潑冷水,我隻是覺得,不管什麼事,最終都是理論派和務實派之間妥協的結果-有可能一個人扮演兩個角色,讀過曆史就會知道,自盤古開天地,一直到我寫下這個字的現在,政治,軍事,文化,科學,哲學,工程,愛情,仇恨,理想,工作,學習,生活,沒有一個不是妥協的結果。是以,最終的SDN沒有狂熱者說的那麼靈活,也許還是在現有的經過改進的晶片上轉發資料,當然,硬體ASIC也是要有所改進的,也許是突破,但是絕對突破不到SDN理論家所要求的那般田地;由于上述妥協,TCP/IP協定會弱化,但是決不會消失。你說呢?
本文轉自 dog250 51CTO部落格,原文鍊http://blog.51cto.com/dog250/1370163接: