1. 程式人生 > >自研DCI網絡路由交換協議DCIP-白牌交換機時代的企業網絡

自研DCI網絡路由交換協議DCIP-白牌交換機時代的企業網絡

周末 部分 互聯網公司 簡單 align ogl 私有 nts 展示

一轉眼從聽華為3Com的路由交換課程到如今已經13年有余了,依稀記得第一節課的時候我帶著老婆去聽的課(老婆是日語系的,那時還是女朋友。並不懂網絡,僅僅是跟著我去上課的)。搶了個頭排,講師宋巖老師提問了一個問題:“為什麽要學習網絡?”然後看沒人回答就要點名,可能是宋老師對美麗的女生感興趣吧。直接點名了我老婆...然後就尷尬了,只是沒想到老婆回答的還真不錯。自那以後,我也就開始了對網絡的興趣,對網絡設備的興趣,路由和交換這門課整體學的還不錯。只是。後來我成了程序猿。也就沒有機會去觸摸那些設備了。也算是遺憾。


我深深知道程序猿和網管之間有個鴻溝,但我就是無法填掉它,有時這道鴻溝就在我自己的心裏。如今,我依舊是個程序猿,以往我一向喜歡說自己是比較懂網絡可是編程編的不好的程序猿,以此展示一下我心中的那道鴻溝。SDN的時代來臨,軟件定義網絡,那道鴻溝能夠填補了,網絡不再是網管的專利,而是程序猿編碼的一個程序。


在《網絡虛擬化(SDN,NFV..)和企業骨幹網的演化》一文中。我的觀點比較原始且傳統。我描寫敘述的企業骨幹網是一個AS,通過IGP互聯,比方OSPF,這顯得企業骨幹就是一個IP骨幹網。

可是,事實上真有這個必要在企業網部署IGP嗎?我們看一下企業骨幹網的典型結構:

技術分享

企業骨幹網特別是互聯網公司的骨幹網事實上更大意義上是一個數據網而不是一個通信網。它的目的是數據的調度,而不是讓不同的節點互聯互通,這是企業骨幹網與運營商骨幹網的非常重要的差別。


基於這個差別,我們便能夠優化企業網的路由系統了。
細致觀察企業網的層級結構,就會發現它是一個基於胖樹的典型CLOS交換結構。之所以能夠規劃成這樣的規則的結構。源自於以下的事實:

1.企業網互聯的節點一般都是數據中心而不是接入點,而數據本來就是分層的。
2.企業的數據中心能夠自己規劃的。節點固定,穩定。


所以說。全然不是必需在這些數據中心之間執行OSPF這類路由協議。而應該將企業網做成真正交換型的網絡。
我來給出一個拍腦袋想出來的簡單的”交換協議“來替代復雜的IGP路由協議為企業骨幹網打通脈絡。在給出這個協議之前,我得先來解釋一下路由和交換的差別。在我這裏。路由指的是須要復雜計算的尋路過程,主要包含雙方面的計算開銷。一方面是動態路由協議的計算開銷(假設你是靜態配置的路由。那麽這部分開銷由你的腦力替代),還有一方面是為數據包查找路由表的開銷,這部分計算主要消耗在最長前綴匹配中。

如今看看什麽是交換,交換在我這裏指的是一個轉發動作,這個動作的計算開銷必須盡可能的小,比方僅僅須要固定幾步這樣的。像CPU的MMU執行的那種轉換操作那樣,所以交換應該非常easy用硬件實現,在交換網絡中,數據的轉發動作開銷是極小且固定的。基本不須要進行運算,而這些固定的步驟是怎樣做到數據的正確轉發的呢?交換機怎麽知道數據包該轉往那個port呢?轉發信息來源於兩種機制,一種機制是交換機自己學習。第二種是依靠路由表來生成。
假設轉發交換表是路由表生成的,那麽這樣的設備能夠看作是高端路由器。交換表便可視為路由表項的Cache。按照這樣的方式設計出來的硬件早就不知道跑了多少年了,無論是路由Cache,還是那種相似Cisco CEF機制,背後的原則都是一次路由。多次轉發。僅僅只是CEF的轉發表是主動生成的。而不是等到數據包到達的時候才生成的。所以說。這樣的方式實乃一種傳統的方式。


假設轉發交換表是自己學習生成的。那麽這樣的設備在常識上就是真正的交換機。

比方以太網交換機,靠MAC/Port映射表來轉發數據,比方MPLS交換機,靠標簽/Port映射表來轉發數據。無論哪種交換機,其映射表都是學習獲得的。比方以太網交換機有從幀頭學習MAC/Port映射的能力,而MPLS交換機則能夠通過標簽交換協議來生成映射。

此外還有很多其他的交換機。比方ATM交換機,也是有自己的虛電路協議的,已經快被淘汰了。故不多談。
我前面說過,要把數據中心連成一個交換網絡而不是一個IP路由網絡。那麽使用那種交換機呢?是以太網交換機。還是MPLS交換機呢?事實上,數據中心全然能夠承載在一張MPLS網上,那簡直比IP網要好太多,只是要是那樣。也就沒有本文了。本文的意思是,自己設計一種交換機,不須要不論什麽現有的協議交換機!


這怎麽可能?假設在十幾年前,這樣的思路也僅僅能停留在大學或者Cisco,華為之類設備商的實驗室裏。然而在SDN時代,出現了叫做裸交換機和白牌交換機的東西。這些交換機說白了就是能夠隨意編程。這樣不論什麽公司都能夠自研定制的交換機了!自研交換機能夠更貼合自己的網絡,可謂是高端定制。

SDN時代是徹底結束了廠商壟斷的時代。SDN將網絡開放給了程序猿。CCIE將不再牛逼!
開始我的協議。


首先介紹一下網絡中每一臺設備裏的轉發表是什麽樣子:


技術分享


這個轉發規則非常easy。就是一個位圖,按照從上到下。從左到右的順序去匹配第一個bit為1的索引值,那就是要轉發出去的port。這個非常easy用硬件實現。順便說一下。這個跟Linux 2.6內核的O(1)進程調度器非常像。至於說鏈路負載均衡,那也不難,直接在位圖的同一行選擇多個鏈路就可以。
之所以能夠構建這個位圖,就是由於全交叉連線的胖樹在每個節點都有三個走向:
往樹葉方向:假設目標port位於源port的一個方向,那麽這就是近期的路徑。當然是首選;
往平行方向:不同目標ToR的最優選擇或者樹葉方向不可達時的次優選擇。
往樹根方向:樹葉方向,平行方向均無路可走時的默認選擇,相似默認路由。
那麽下一個問題。這個轉發交換表是怎麽生成的呢?
首先,我們要定義邊緣設備,在這樣的設備上,源IP地址和目標IP地址被轉換成源port和目標port。這樣在數據包進入這個網絡後,就能夠用port來交換了。這就避開了用最長前綴匹配計算的開銷,全然用port這個確定的一維數據來作為交換的根據。這個思路和MPLS是一致的。和MPLS不同的是。我這裏的網絡拓撲是確定的CLOS結構,這就讓內部的交換結構更加簡單,每個節點的三個固定走向分屬三個不同的優先級意義也正在此。IP地址和port之間的映射方式有非常多種,我首選的是HASH映射。這樣比較簡單而且高效。
以下說下節點的port學習,最簡單的方法往往是最高效的方法。在網絡初啟的時候,從每個邊緣設備發起以自己的portID為內容的Flood,每個Flood數據包傳遍全網。這樣全部的設備就能夠學習到特定port的方向信息,這個和以太網交換機是一致的。

不同的是。以太網交換機是帶內學習的,以太網本身就是一個廣播網絡。查詢映射表項失敗的情況下能夠用廣播來發送數據,而我這裏的協議交換機則是帶外學習的,由於我的目的是在傳輸數據之前就構建好每一臺設備的交換表,旨在高速轉發。



最後一個問題,這個交換網絡該怎麽維護呢?假設有一條線纜斷掉了,或者一臺設備宕機了,怎樣通知其他設備更新轉發交換表呢?這就須要一個新的協議。非常easy。僅僅須要往上遊和平行兩個方向傳播鏈路狀態變更就可以,不須要向葉子節點傳播,由於向上遊轉發總是最後的不得已的選擇。

為什麽能夠如此簡單?由於這是一棵棵樹組合而成的胖樹CLOS結構! 認識到這個特征。非常多設計都能夠非常easy。


理解了轉發交換表是怎麽生成的,終於的效果應該是以下這樣:


技術分享


我這個自研交換協議確實是拍腦袋的產物,由於我個人並不是做這一塊業務的。僅僅是興趣使然。不然也不會占周末的時間去搞這麽一個可能永遠也用不起來的東西。
之前像騰訊這樣的巨頭企業也設計過這樣的自研的協議,比方以下連接裏介紹的SRP:騰訊-SRP。然後,在彎曲評論上被噴了,在別的地方感興趣的也不多,僅僅是在某本吹水的SDN書籍上提到過。事實上,在廠商壟斷的時代。再牛逼的互聯網企業也僅僅能停留在做業務編程的水準,評論裏說騰訊做網絡外行。我想在廠商壟斷的年代。確實非常外行,真正的內行僅僅有Cisco,華為做核心交換的那幫人,再牛逼的編程者面對真正網絡技術而言,都是外行。

我自己在2013年的時候,也說過騰訊的網絡技術就是堆概念,拿著一大堆新的網絡技術胡來。

比方業內推出了SDN,趕緊就部署。Cisco的協議在騰訊的機房都能看到,裏面的人也能把這些概念背得滾瓜爛熟,可是做出來的網絡真真就是四不像。表面上看牛逼的樣子,事實上就是拿名詞嚇人的。

以我如今的觀念來看,當時確實苛求騰訊這樣的非網絡廠商了。僅僅要不是網絡廠商的人,誰都做不好,別說騰訊,換家美國的互聯網公司也一樣,要想做好網絡,好辦。買Cisco或者華為的方案就可以。然後他們派個project隊幫你實現了。全程不用你插手。知道網管多牛逼了吧,我經常搞不懂為什麽網吧的小混混網管怎麽能夠這麽牛逼哄哄,難道由於他們是混混嗎?後來見了外資銀行那些不紋身但穿西裝的網管也相同牛逼哄哄的時候,我才明確,原來人家玩的是壟斷,我能碰的東西。你們不能碰。
上學時老師就講過,網絡切分為資源子網和通信子網。互聯網公司的技術局限在資源子網,而通信子網差點兒壟斷在設備廠商的手中,他們就像網吧紋身的小混混網管一樣,屌的非常。在互聯網公司看來,所謂的網絡技術就是TCP,假設提到路由和交換,他們是不屑的,互聯網公司想當然地覺得TCP能解決一切問題,假設說再深入一些,無奈非常吃力地在IP協議上做點文章,搞搞網卡驅動,至於說數據出了網卡。他們真真的沒轍...我想我看到了程序猿和網管之間分歧的本質了。
回到騰訊的SRP,從技術上評價它,其最大的敗筆就是明明已經觸到了交換核心概念的邊緣。卻又回到了路由!

搞那麽復雜但高效的交換矩陣,到頭來就是為了設置路由!註意,是路由啊。已經觸碰到了成功的邊緣卻還是沒能突破邊界。所以遺憾。路由僅僅是概念並不是標準,否則,MPLS就不會被發明出來了。

我們在乎的是找一個出口把數據包發出去,而這件事為什麽非得靠路由來做呢?更何況,設備的控制權已經不在廠商手裏了,已經全然交給了程序猿。

人家都是那路由表生成交換表。騰訊的SRP卻反其道而行,設計出一個還不錯的鏈路狀態更新協議卻僅僅是為了生成路由表...
從彎曲評論裏的那個PDF中搞出一個SRP的結構圖:


技術分享


這實際上並不能算是一個路由協議,而是一種鏈路負載的協議,我之前設計過一個鏈路上的VRRP協議。詳見《LVrrp的設計過程-基於鏈路的vrrp》,我覺得SRP和這個LVRRP比較相似,LVRRP依賴底層的VRRP,而SRP依賴底層的靜態路由,都是在現有的底層上鋪設了一個控制平面而已。當然。以騰訊公司的人力和財力,在細節上肯定會設計的比較縝密。但我的意思是說。從內部看。SRP確實比較精細縝密。從外部往裏看,確實做的外行了。
來看看我本文裏設計的協議,姑且叫它DCIP(DCI Protocol)協議吧。其根本意義在又一次映射了數據平面,實際上就是一種Overlay。它的圖演示樣例如以下:


技術分享


這麽看來。DCIP本身就是一個數據平面的交換協議,而SRP則僅僅是一個控制平面協議。兩者結合會不會更好呢?
能如此設計DCIP有個前提,那就是交換機是裸交換機或者白牌交換機。

順便說一下,就是由於有了這樣的交換機,才會有越來越多的廠商聲稱自己的交換機是自研交換機,當然。自研的水平參差不齊,畢竟如今網絡技術研發才剛剛開放,以後全部公司的自研設備水平都會提高的,就跟業務編程一樣簡單。
...
以前我們聽說過一般企業網會部署OSPF,而ISP會部署IS-IS。以後。在設備的控制權掌握在自己手中之後,越來越多的企業網將會自研交換協議。而不再使用標準的路由協議,迫於這樣的客戶將脫韁的壓力,設備廠商不得已而為之。也陸續將設備的編程接口逐步開放,比方推出I2RS標準,讓客戶能夠折騰自己已經購買的設備,這樣鑒於大廠商的口碑,客戶依舊會購買大廠的設備而不會流失掉。

以前,網絡技術水平取決於你花錢的水平。花錢幹什麽呢?花錢來培訓。考證,學習配置命令。學習Cisco之類公司的私有協議,由於錢是最硬的門檻。所以網絡專家一般都是精英。如今呢,網絡技術水平全然取決於你的編程水平,買來裸機,編敲代碼,你就有了自研的協議...知道誰是精英了嗎?程序猿!

Google公司是SDN持續進化的推動力之中的一個。它本身作為一家互聯網公司並不生產網絡設備,可是它遍布全球的server卻須要強大的網絡技術支撐,所以自研肯定是最經濟的選擇,在SDN還是紙面概念的時候,Google就領先拿B4作為其試驗田。讓SDN成為了現實,緊隨其後,各大互聯網公司均開始引入SDN的思想...

... 明天有時間且有新內容的話再繼續

聲明:本文中的DCIP協議。僅僅是今早跑步時拍腦袋的產物。可是這並最好還是礙我今後會完好它,精細化它。

自研DCI網絡路由交換協議DCIP-白牌交換機時代的企業網絡