如何玩轉數據中心以太網技術
以太網技術從誕生到現在已經走過了41年。在這41年里,從粗同軸電纜上運行2.94Mbps網絡,到今天運行在光纖、銅或無線上的40G/100G網絡,四十多年來,以太網不斷向前發展、演進。以太網已經成為數據中心網絡內部必選的網絡技術,成為局域網領域的網絡標準。翻開以太網的RFC文檔,里面對各種協議做了詳實的描述,到現在已經有了6476篇,這些協議構成了今天復雜多樣的網絡。隨著各種應用層出不窮,以太網協議也讓人看得愈加復雜,尤其是在數據中心里,這里充滿著各種軟硬件設備,如何讓這些系統互聯并高效工作,就全要靠以太網技術了,久而久之以太網技術已經衍生成為一門網絡學科,成為網絡技術人員必須要掌握的基礎技術。然而要完全掌握以太網技術,不是那么簡單的事情,沒有誰能將6000多篇的RFC文檔吃透,甚至根本沒有精力去將所有的RFC文檔讀完,關于以太網技術的講解書籍更是琳瑯滿目,讓人眼花繚亂。其實任何人都不可能全部掌握以太網技術,但是卻可以領悟出其實現的精髓,本文將分析以太網技術的綜合特點,讓大家真正地認識以太網技術,從而玩轉以太網技術。
以太網這個名字起源于一個科學假設:聲音是通過空氣傳播的,那么光呢?在外太空沒有空氣光也能傳播,所以有人說光是通過一種叫以太的物質傳播,從而以太網技術就出現了,當然實際上世界上根本就不存在以太這種物質。以太網技術最初誕生時就是一種局域網技術,使用CSMA/CD技術,用于PC的互連。PC之間實現互訪和傳送數據就需要兩者之間遵循一定的標準,以太網就是來制定這樣傳輸標準的技術。以太網將網絡分為7層,不同的網絡層傳輸不同的網絡協議,從而完成不同層次的數據轉發。在RFC文檔中對不同層次的協議都有明確定義,這6000多份的標準協議有兩個共同的特點,幾乎是所有的網絡協議都要遵守的,就是報文格式和狀態機。
首先就是報文格式,兩個通過網絡互連的設備要傳送數據,那么發送端設備發出的數據格式,接收端設備一定要能識別才能完成傳送,所以兩者要遵循相同的以太網標準。比如對于TCP數據傳輸,發送端設備發出的一定都是TCP報文,而接收端設備要能識別TCP報文,這樣才能完成傳輸。一個數據流到底是TCP還是UDP、ICMP等,就是通過以太網標準來定義的。對于不同的協議,以太網定義了不同的報文格式,通過不同字段來標識不同的協議,這樣發送端將要傳送的數據之前加上報文頭進行數據封裝,通過報文頭來表明數據本身所具有的特征,然后接收端設備收到后,就知道是什么協議,從而遵循協議標準進行解封裝,得到數據包。不管是新提出的協議,還是老掉渣的協議都是遵循著這樣的標準,之所以新的協議還是不斷出現,更多的是發現原有的標準定義的格式都有缺陷,新的協議是來進行優化的。
其次有了報文格式還不行,發送端設備不能說想什么時候發送就什么時候發送,要和接收端建立好鏈接關系,這樣接收端設備才能知道。比如做FTP下載,傳送的是TCP流量,那么就需要在發送端設備和接收端設備之間建立TCP鏈接,建立好了之后,數據流量才能由發送端發往接收端。由于網絡環境不是一成不變的,總是會有波動,所以為了能夠更好地完成數據傳送,還需要適時監控鏈接的狀態,一旦出現問題自動進行網絡調整,這就是狀態機。也就是發送端和接收端只有在一定的狀態下才可能完成數據傳輸,當出現異常狀態時,數據傳輸也會終止。狀態機是以太網技術的精髓,不管哪種協議都有狀態機,比如OSFP、STP、VRRP等等,RFC詳細定義了各種協議的狀態機狀態和工作原理。比如OSPF協議,當兩臺網絡設備之間要互通、要共享路由信息,就會用到OSFP協議,這個是域內廣泛使用的路由技術,除此之外還有ISIS、BGP,并稱以太網三大路由技術。兩臺網絡設備要共享路由,則要先建立OSPF鄰居,建立鄰居要經歷Init/Exstart/Full等狀態機的變化,才能建立鄰居,一旦鄰居建立起來,就周期性地通過Hello報文維持鄰居狀態。在鄰居狀態正常的情況下,可以進行路由計算、路由學習和切換。對于二層環路協議STP也如此,有Block/Discarding/Forwarding等狀態機,通過這些狀態機,網絡設備就知道了其它設備的工作狀態,并通過周期性地發送監控消息,來保持狀態的整網同步。
以太網的協議報文格式定義了設備之間傳輸數據內容的標準,讓所有的設備都要遵從。而協議狀態機則定義了設備之間如何進行數據傳輸,任何一種協議都是由報文格式和狀態機構成的,區別僅在于格式定于的區別和狀態機定義的差異。所以一旦明白了這個道理,人人都可以設計以太網協議標準,都可以提交RFC,不過如果這樣那RFC的標準就會更多了。其現有的數千條協議標準已經將以太網技術發揮到了極致,再提出新的協議困難很大。原因在于新提出的協議一定要比原有的協議有很大的改進,經過40多年的發展,以太網已經發展得很完善,可改進的空間越來越小。還有最大的限制就是報文格式的長度是一定的,為了減少傳輸的效率,報文頭長度越短,傳輸的效率就越高。現有的協議已經將報文能變化的BIT都派上用場了,除非再增加長度。對于IPV4報文頭長度是固定的,無法再增加,對于IPV6報文頭可以增加Option選項來增加長度,但是每增加一個字節意味著網絡開銷就要增加不少,因為每個數據包都要增加一個字節,原本數據要1000字節的100個數據包轉送完,數據包長度增加一個字節就要多傳送100個字節,增加了網絡開銷。另外報文格式設計得越復雜也不利于傳輸數據,比如傳送一個數據,接收設備每接收到一個報文都要檢查目的MAC、目的IP、端口號、協議特征等這些信息是否與自己想要接收的數據相符,這些檢查和判斷大大增加了接收設備的計算負載,所以報文格式越簡化越好。所以報文格式和狀態機的設計本不是難事,但是要考慮到網絡開銷和計算花費,就不是那么容易設計的事了。
不管怎樣,只要掌握了報文格式和狀態機,就對這個協議的工作機制有了了解,迅速掌握了這個協議的工作原理,將以太網技術玩轉于掌間就不難了。基于這樣的思路再去看以太網協議以及RFC文檔,就會發現都是千變一律,反復都是在描述這個協議的報文格式和狀態機的工作方式,只要關注這個協議具有區別于別的協議的格式和狀態機特征就可以了。現有的協議有數千種,除了處于不同網絡層的工作原理差別較大外,處于同一網絡層次的協議報文格式和狀態機差別不大,學習了一種協議,然后舉一反三,在短時間內就可掌握多種網絡協議。參透了這點,迅速會有一種“會當凌絕頂,一覽眾山小”的感覺,玩轉數據中心以太網技術。
文章版權歸西部工控xbgk所有,未經許可不得轉載。