SDN系統(tǒng)方法 | 1. 概述

隨著互聯(lián)網(wǎng)和數(shù)據(jù)中心流量的爆炸式增長,SDN已經(jīng)逐步取代靜態(tài)路由交換設(shè)備成為構(gòu)建網(wǎng)絡(luò)的主流方式,本系列是免費電子書《Software-Defined Networks: A Systems Approach》的中文版,完整介紹了SDN的概念、原理、架構(gòu)和實現(xiàn)方式。原文: Software-Defined Networks: A Systems Approach

當(dāng)我在1993年看到第一個Mosaic網(wǎng)頁瀏覽器時,全身都起了雞皮疙瘩,顯然有大事即將發(fā)生,但當(dāng)時并不知道有多大。后來互聯(lián)網(wǎng)迅速大規(guī)模爆發(fā),數(shù)以千計ISP(Internet Service Provider, 互聯(lián)網(wǎng)服務(wù)提供商)如雨后春筍般在各地出現(xiàn),每個都將互聯(lián)網(wǎng)擴(kuò)展到新的范圍。他們需要做的就是將可互操作的部件(傳統(tǒng)網(wǎng)絡(luò)設(shè)備供應(yīng)商出售的商用交換機(jī)、路由器、基站和接入點)連接在一起,而且不需要征求中央控制機(jī)構(gòu)的許可。早期路由器簡單而直接,只需要支持IP協(xié)議。去中心化的控制機(jī)制讓互聯(lián)網(wǎng)迅速發(fā)展。

路由器制造商面臨兩難境地: 銷售簡單直接的設(shè)備很難維持繁榮、有利可圖的業(yè)務(wù)。此外,如果由簡單設(shè)備組成的大型網(wǎng)絡(luò)易于遠(yuǎn)程管理,那么所有的智能(和價值)都將由網(wǎng)絡(luò)運營商提供,而不是路由器制造商。因此,設(shè)備商決定只提供最少的外部API("網(wǎng)絡(luò)管理"被認(rèn)為是一個笑話),路由器被新特性塞滿,將所有價值保留在內(nèi)部。到2000年代中期,ISP使用的路由器非常復(fù)雜,支持?jǐn)?shù)百種協(xié)議,源代碼超過1億行,其復(fù)雜性是有史以來最大的電話交換機(jī)的十倍以上?;ヂ?lián)網(wǎng)為這種復(fù)雜性付出了高昂的代價: 路由器臃腫、耗電量大、不可靠、難以保障安全,而且貴得離譜。最糟的是,很難改進(jìn)(ISP需要請求設(shè)備商增加新功能),而且ISP不可能自己增加新功能。網(wǎng)絡(luò)所有者抱怨路由器供應(yīng)商的"鉗制",研究機(jī)構(gòu)警告說互聯(lián)網(wǎng)已經(jīng)"僵化"。

本書將介紹接下來發(fā)生的事情,這是一個激動人心的故事。Larry, Carmelo, Brian, Thomas和Bruce通過具體的例子和開源代碼清楚的展現(xiàn)那些擁有以及運營大型網(wǎng)絡(luò)的人是如何開始編寫自己的代碼并構(gòu)建自己的交換機(jī)和路由器的。一些人選擇用更簡單、更容易維護(hù)的自研設(shè)備取代路由器,其他人則選擇將軟件從路由器移到遠(yuǎn)程集中控制平面。無論選擇哪條路,開源成為越來越重要的部分。開源在Linux、Apache、Mozilla和Kubernetes中已經(jīng)證明了自己,也就可以被信任用來運行我們的網(wǎng)絡(luò)。

本書解釋了SDN運動發(fā)生的原因。本質(zhì)上這是對控制權(quán)的爭奪,大型網(wǎng)絡(luò)的所有者和運營商控制了網(wǎng)絡(luò)的運行方式,從設(shè)備商那里奪取了創(chuàng)新的關(guān)鍵。SDN始于數(shù)據(jù)中心,由于他們無法使用現(xiàn)成的網(wǎng)絡(luò)設(shè)備構(gòu)建足夠大規(guī)模的可擴(kuò)展網(wǎng)絡(luò),因此他們購買交換芯片,自己編寫軟件。是的,這為他們節(jié)省了資金(通常是成本的五倍或更多),但更重要的是獲得了控制權(quán)。他們雇傭大量軟件工程師,促進(jìn)了網(wǎng)絡(luò)新思想的寒武紀(jì)大爆發(fā),使網(wǎng)絡(luò)更可靠,可更快修復(fù),并且更好的控制流量。今天,也就是2021年,所有的大型數(shù)據(jù)中心公司都打造了自己的網(wǎng)絡(luò)設(shè)備,通過修改開源控制軟件,或者自己編寫、提供軟件來控制自己的網(wǎng)絡(luò),他們已經(jīng)掌握了主動權(quán),互聯(lián)網(wǎng)服務(wù)提供商和5G運營商將是下一個。預(yù)計在十年內(nèi),企業(yè)和校園網(wǎng)絡(luò)將運行在開源控制軟件上,通過由云進(jìn)行管理。這是很好的變化,只有那些擁有和運營大規(guī)模網(wǎng)絡(luò)的人才知道如何做到最好。

這種變化被稱為軟件定義網(wǎng)絡(luò)(SDN, Software Defined Networking),是網(wǎng)絡(luò)構(gòu)建方式的一場革命,轉(zhuǎn)向由網(wǎng)絡(luò)運營商自行開發(fā)和維護(hù)軟件。本書作者從一開始就參與了這場革命,非常清楚這場革命是如何以及為什么發(fā)生的。

本書也將幫助我們看到未來的網(wǎng)絡(luò)會是什么樣子。網(wǎng)絡(luò)系統(tǒng)將是一個我們可以編程的平臺,而不是由一堆運行標(biāo)準(zhǔn)化互操作性協(xié)議的盒子組裝起來。網(wǎng)絡(luò)所有者將通過編寫任何希望的行為決定網(wǎng)絡(luò)如何工作,網(wǎng)絡(luò)專業(yè)的學(xué)生將學(xué)習(xí)如何為分布式系統(tǒng)編程,而不是研究傳統(tǒng)協(xié)議的神秘細(xì)節(jié)。

對于那些對編程感興趣的人來說,網(wǎng)絡(luò)又重新變得有趣起來,這本書是一個很好的開始。

Nick McKeown
斯坦福大學(xué), 加利福尼亞

前言

互聯(lián)網(wǎng)正處于轉(zhuǎn)型之中,從捆綁專有設(shè)備轉(zhuǎn)變?yōu)閷⒕W(wǎng)絡(luò)硬件(變成通用商業(yè)硬件)與控制軟件(可在云中擴(kuò)展)分離開來。這種轉(zhuǎn)變通常被稱為軟件定義網(wǎng)絡(luò)(SDN),但由于其對市場的顛覆性,從技術(shù)基礎(chǔ)和短期工程決策中理清業(yè)務(wù)定位是一個挑戰(zhàn)。本書希望讀者需要理解的最重要的事情是,基于SDN的網(wǎng)絡(luò)是運行在商業(yè)硬件上的可伸縮分布式系統(tǒng)。

任何上過基礎(chǔ)網(wǎng)絡(luò)課程的人都知道協(xié)議棧是描述網(wǎng)絡(luò)的規(guī)范框架,無論協(xié)議棧是七層還是只有三層,它塑造和限制了我們思考計算機(jī)網(wǎng)絡(luò)的方式,教材的編排也依此組織。SDN提出了另一種世界觀,一種伴隨著新的軟件棧的世界觀。本書圍繞這個新協(xié)議棧進(jìn)行組織,目的是自上而下展示SDN,不會留下任何讀者也許會懷疑只能用神奇的專有代碼來填補(bǔ)的重大空白。你可以在本書最后做一些實際的編程練習(xí),以證明其軟件棧是真實且完整的。

實現(xiàn)這一目標(biāo)的重要方面是開放源代碼。我們很大程度上是利用了兩個社區(qū)組織的優(yōu)勢,他們是這方面的領(lǐng)導(dǎo)者。一個是開放計算項目(OCP, Open Compute Project),它積極指定和認(rèn)證可以運行SDN軟件棧的商品硬件(例如,裸金屬交換機(jī))。第二個是開放網(wǎng)絡(luò)基金會(ONF, Open Networking Foundation),它正在積極構(gòu)建可以集成到端到端解決方案中的軟件組件。這個領(lǐng)域還有許多其他參與者,從設(shè)備供應(yīng)商到網(wǎng)絡(luò)運營商、初創(chuàng)公司、標(biāo)準(zhǔn)機(jī)構(gòu)和其他開源項目,每個人都對SDN是什么和不是什么給出了不同的解釋。我們討論這些不同的視角,并解釋它們是如何適應(yīng)更大的規(guī)劃的,但我們不會讓這些不同點妨礙我們介紹SDN本身的全部內(nèi)容。只有時間才能告訴我們SDN旅程將帶我們走向何方,但我們相信,了解機(jī)會的可能范圍非常重要。

本書假定讀者對互聯(lián)網(wǎng)有大致了解,不過對交換機(jī)和路由器在轉(zhuǎn)發(fā)以太網(wǎng)幀和IP包方面所起的作用有更深入的了解會更有幫助。鏈接到相關(guān)的背景信息,以幫助彌合任何差距。

本書是一個演進(jìn)中的工作,會不斷添加更新、澄清和新的材料。例如,最新版本(v2.0)包含了關(guān)于網(wǎng)絡(luò)虛擬化(第8章)和接入網(wǎng)絡(luò)(第9章)的新章節(jié)。我們渴望聽到反饋和建議,以便繼續(xù)改進(jìn)本書。

感謝

本書所描述的軟件要歸功于ONF工程團(tuán)隊以及合作開源社區(qū)的辛勤工作,感謝他們的貢獻(xiàn),特別感謝Yi Tseng, Max Pudelko和Charles Chan,感謝他們對相關(guān)學(xué)習(xí)教程的貢獻(xiàn),本書將其囊括進(jìn)來作為實踐練習(xí)。同時感謝Charles Chan, Jennifer Rexford, Nick McKeown, Kentaro Ebisawa, Motonori Shindo和Sina Ebrahimi的評論和反饋。

封面圖片是東京的Ueno地鐵站,由Athena Lam發(fā)表在Unsplash上。

Larry Peterson, Carmelo Cascone, Brian O’Connor, Thomas Vachuska, and Bruce Davie
2021年11月

第1章 概述

軟件定義網(wǎng)絡(luò)(SDN)是關(guān)于如何實現(xiàn)網(wǎng)絡(luò)的一種方法,對創(chuàng)新的速度有很大的影響,因此這一方法非常關(guān)鍵。SDN并不直接解決路由、擁塞控制、流量工程、安全、移動性、可靠性或?qū)崟r通信等方面的任何技術(shù)挑戰(zhàn),但又確實為創(chuàng)建和部署這些問題的創(chuàng)新解決方案提供了新的機(jī)會。本書將討論SDN到底是在業(yè)務(wù)和技術(shù)方面如何實現(xiàn)這一目標(biāo)。

我們的方法是系統(tǒng)化探索SDN,也就是說,我們將探索指導(dǎo)實現(xiàn)SDN的一系列設(shè)計原則(這是一個仍在進(jìn)行中的發(fā)展過程),而不只是談?wù)揝DN的單點解決方案。我們的方法強(qiáng)調(diào)概念(將抽象引入網(wǎng)絡(luò)是SDN最初案例的關(guān)鍵部分),但為了使討論具體化,我們還借鑒了過去六年來實現(xiàn)開源平臺集合的經(jīng)驗,這些平臺被用于向生產(chǎn)網(wǎng)絡(luò)(包括一級網(wǎng)絡(luò)運營商)交付基于SDN的解決方案。

對軟件棧的關(guān)注是本書的中心主題。由于SDN是一種構(gòu)建網(wǎng)絡(luò)的方法,因此需要一組軟件和硬件工件來將該方法付諸實踐。我們使用的開源例子可以在GitHub上找到,本書還提供了代碼和實際編程練習(xí)的鏈接。

在深入討論細(xì)節(jié)之前,先了解一下SDN的起源故事很有幫助,SDN最初是計算機(jī)科學(xué)研究社區(qū)解決互聯(lián)網(wǎng)僵化問題的一項努力,目標(biāo)是使網(wǎng)絡(luò)能夠加快創(chuàng)新。這段歷史在Feamster、Rexford和Zegura的一篇文章中有很好的描述。

延伸閱讀:
N. Feamster, J. Rexford, and E. Zegura. The Road to SDN: An Intellectual History of Programmable Networks. SIGCOMM CCR, April 2014.

我們給這段歷史加上兩個腳注。第一個是2001年國家科學(xué)院的一份報告,該報告將互聯(lián)網(wǎng)的僵化問題作為主要挑戰(zhàn),從而引起了關(guān)注。在這一過程中,這份報告促成了一項長達(dá)20年的研發(fā)工作。這項研究的成果現(xiàn)在正直接影響著云提供商、企業(yè)和互聯(lián)網(wǎng)服務(wù)提供商部署的網(wǎng)絡(luò)。

延伸閱讀:
Looking Over the Fence at Networks: A Neighbor’s View of Networking Research. The National Academies Press, 2001.

第二個是Scott Shenker對SDN智能化場景所作的標(biāo)志性演講。理解Shenker演講的中心論點: 構(gòu)建和運營網(wǎng)絡(luò)的實踐迫切需要抽象來幫助管理復(fù)雜性,是理解本書中描述的系統(tǒng)、平臺、工具和接口的關(guān)鍵。

延伸閱讀:
S. Shenker. The Future of Networking and the Past of Protocols. Open Networking Summit, October 2011.

1.1 市場前景(Market Landscape)

要充分認(rèn)識SDN的作用和最終影響,首先要看市場格局。SDN在某種程度上被認(rèn)為是一種改變市場的方式,其靈感來自于計算機(jī)行業(yè)在過去幾十年所經(jīng)歷的轉(zhuǎn)變。

計算機(jī)行業(yè)在歷史上是一個垂直市場(vertical market),這意味著,想要解決某些問題(例如,財務(wù)、設(shè)計、分析)的客戶需要從單一供應(yīng)商(通常是像IBM這樣的大型主機(jī)公司)購買垂直集成的解決方案,包括從底層硬件(包括處理器芯片)到運行在硬件上的操作系統(tǒng),再到應(yīng)用程序本身的所有內(nèi)容。

圖1. 將垂直主機(jī)市場轉(zhuǎn)變?yōu)樗绞袌?,在每個層級上都有開放接口和多種選擇。

如圖1所示,微處理器(如Intel x86和Motorola 68000)和開源操作系統(tǒng)(如BSD Unix和Linux)的引入,幫助將垂直市場轉(zhuǎn)變?yōu)樗绞袌?,開放接口刺激了各個層面的創(chuàng)新。

當(dāng)SDN被視為變革性倡議時,是在網(wǎng)絡(luò)產(chǎn)業(yè)中刺激同樣變革的嘗試,正如2001年國家科學(xué)院的報告所觀察到的,網(wǎng)絡(luò)已經(jīng)僵化了。如圖2所示,最終目標(biāo)是建立一個水平生態(tài)系統(tǒng),在由商用硅交換芯片構(gòu)建的裸金屬交換機(jī)上啟用多個網(wǎng)絡(luò)操作系統(tǒng),從而實現(xiàn)豐富的網(wǎng)絡(luò)應(yīng)用市場[1]。

[1] 術(shù)語"裸機(jī)"起源于服務(wù)器,指沒有安裝操作系統(tǒng)或管理程序的機(jī)器。通過類比,該術(shù)語適用于沒有綁定操作系統(tǒng)或網(wǎng)絡(luò)應(yīng)用程序的交換機(jī),交換機(jī)的軟硬件分離是SDN的核心。

圖2. 垂直路由器市場向水平市場轉(zhuǎn)變,每個層級都有開放接口和多種選擇。

這種轉(zhuǎn)變的價值顯而易見,打開垂直整合、封閉、專有的市場,可以為創(chuàng)新創(chuàng)造機(jī)會?;蛘邠Q句話說,通過開放接口,有可能將控制權(quán)從銷售網(wǎng)絡(luò)設(shè)備的供應(yīng)商轉(zhuǎn)移到建設(shè)網(wǎng)絡(luò)以滿足用戶需求的網(wǎng)絡(luò)運營商。

為了更深入理解這一機(jī)會,我們需要深入了解技術(shù)細(xì)節(jié)(將在下一節(jié)介紹),但認(rèn)識到SDN作為改變網(wǎng)絡(luò)行業(yè)的方式的背景故事是重要的起點。

1.2 技術(shù)前景(Technical Landscape)

要理解SDN是一種系統(tǒng)方法而不是單點解決方案,這樣有助于為方法的核心定義設(shè)計原則。構(gòu)建設(shè)計空間是這部分的目標(biāo),但重要的是,最終狀態(tài)不止一種。每個網(wǎng)絡(luò)運營商可以自由選擇不同的設(shè)計點,并相應(yīng)構(gòu)建自己的網(wǎng)絡(luò)。

也就是說,本書著重描述SDN原則的最完整應(yīng)用,有時也被稱為標(biāo)準(zhǔn)SDN(pure play SDN)??紤]到SDN的全部意義在于顛覆現(xiàn)有垂直市場,因此,現(xiàn)有供應(yīng)商將提供與他們的既定商業(yè)模式相一致并且易于采用的混合解決方案。我們有時稱這些混合解決方案為SDN-lite,它們利用了SDN的某些方面,但不是全部。除了指出這些部分解決方案的存在之外,我們不打算以百科全書式的方式來介紹它們。我們的目標(biāo)是描繪SDN的全部潛力,并以當(dāng)今最先進(jìn)的技術(shù)所允許的盡可能多的深度來做到這一點。

1.2.1 分離控制平面和數(shù)據(jù)平面

SDN背后的重要思想是,網(wǎng)絡(luò)有不同的控制平面和數(shù)據(jù)平面,這兩個平面的分離應(yīng)該被編碼在開放接口中。用最基本的術(shù)語來說,控制平面決定網(wǎng)絡(luò)的行為,而數(shù)據(jù)平面負(fù)責(zé)在單個數(shù)據(jù)包上實現(xiàn)該行為。例如,控制平面的一個工作是確定數(shù)據(jù)包通過網(wǎng)絡(luò)應(yīng)該遵循的路由規(guī)則(也許通過運行BGP、OSPF、RIP這樣的路由協(xié)議實現(xiàn)),數(shù)據(jù)平面的工作是根據(jù)路由規(guī)則轉(zhuǎn)發(fā)數(shù)據(jù)包,對于每個包,交換機(jī)逐跳做出轉(zhuǎn)發(fā)決策。

實踐中,分離控制面和數(shù)據(jù)面表現(xiàn)為并行但不同的數(shù)據(jù)結(jié)構(gòu): 控制面維護(hù)包含所有輔助信息的路由表,在給定時間選擇最好的路由(例如考慮可選路徑,各自成本,以及任何策略約束),數(shù)據(jù)面維護(hù)轉(zhuǎn)發(fā)表優(yōu)化快速數(shù)據(jù)包處理(例如決定任何到達(dá)端口i的目的地址為D的數(shù)據(jù)包都應(yīng)該通過端口j轉(zhuǎn)發(fā),新目的地址為D')。路由表通常被稱為路由信息庫(RIB, Routing Information Base),轉(zhuǎn)發(fā)表通常被稱為轉(zhuǎn)發(fā)信息庫(FIB, Forwarding Information Base),如圖3所示。

圖3. 控制面(及其對應(yīng)的RIB)與數(shù)據(jù)面(及其對應(yīng)的FIB)解耦。

解耦網(wǎng)絡(luò)控制平面和數(shù)據(jù)平面的價值沒有爭議,這是網(wǎng)絡(luò)中的成熟實踐,在SDN之前,封閉/專有路由器就采用了這種級別的模塊化。但是SDN的第一個原則是控制平面和數(shù)據(jù)平面之間的接口應(yīng)該是定義良好且開放的,這種強(qiáng)大的模塊化通常被稱為解耦,它使每個平面由不同的參與方負(fù)責(zé)成為可能。

原則上,解耦意味著網(wǎng)絡(luò)運營商應(yīng)該能夠從供應(yīng)商X處購買控制平面,從供應(yīng)商Y處購買數(shù)據(jù)平面。盡管這一切并沒有立即發(fā)生,但解耦的一個自然后果是數(shù)據(jù)平面組件(即,交換機(jī))成為通用包轉(zhuǎn)發(fā)設(shè)備(通常稱為裸金屬交換機(jī)),所有智能都在軟件中實現(xiàn),并在控制平面中運行[2]。這正是發(fā)生在計算機(jī)行業(yè)的事情,微處理器成為了通用商業(yè)化產(chǎn)品。第4章更詳細(xì)介紹了裸金屬交換機(jī)。

[2] 根據(jù)我們的統(tǒng)計,今天有超過15個開源和專有的解耦控制平面可用。

解耦控制平面和數(shù)據(jù)平面意味著需要定義良好的轉(zhuǎn)發(fā)抽象,也就是說,需要一種通用的方式讓控制平面指示數(shù)據(jù)平面以特定方式轉(zhuǎn)發(fā)數(shù)據(jù)包。請記住,解耦不應(yīng)該限制交換機(jī)供應(yīng)商如何實現(xiàn)數(shù)據(jù)平面(例如,其轉(zhuǎn)發(fā)表的確切形式或轉(zhuǎn)發(fā)數(shù)據(jù)包的過程),這種轉(zhuǎn)發(fā)抽象不應(yīng)該假定(或依賴)某個數(shù)據(jù)平面的實現(xiàn)。

2008年引入的OpenFlow是最早的支持解耦的接口[3]。盡管它在SDN發(fā)展過程中起到了巨大作用,但被證明只是今天定義SDN的一小部分。將SDN與OpenFlow等同起來明顯低估了SDN的價值,但它是一個重要的里程碑,因為它引入了流規(guī)則(Flow Rules)作為一種簡單但強(qiáng)大的方式來指定轉(zhuǎn)發(fā)行為。

[3] OpenFlow實際上并不是第一個這樣做的,但它是最吸引人的。早期工作包括Ipsilon的GSMP和IETF的ForCES。

流規(guī)則是一組匹配規(guī)則和對應(yīng)的動作(Match-Action pair),任何和規(guī)則匹配的數(shù)據(jù)包都應(yīng)該執(zhí)行相應(yīng)的動作。例如,一個簡單的流規(guī)則可能指定任何目的地址為D的數(shù)據(jù)包在輸出端口i上轉(zhuǎn)發(fā)。原始的OpenFlow規(guī)范允許圖4中所示的報頭字段包含在規(guī)則的Match部分中。例如,一個Match可能指定數(shù)據(jù)包的MAC報頭Type字段等于0x800(表示幀攜帶IP數(shù)據(jù)包),它的IP報頭DstAddr字段包含某些子網(wǎng)(例如192.12.69/24)。

圖4. 原生OpenFlow規(guī)范匹配報文字段。

原生動作包括"將數(shù)據(jù)包轉(zhuǎn)發(fā)到一個或多個端口"以及"丟棄包",或者"將數(shù)據(jù)包發(fā)送到控制面",從而將任何需要控制面進(jìn)一步處理的數(shù)據(jù)包發(fā)送給控制器(controller)(該術(shù)語代表在控制面中負(fù)責(zé)控制交換機(jī)的進(jìn)程)。隨著時間的推移,支持的操作集變得更加復(fù)雜,稍后將繼續(xù)介紹。

基于流規(guī)則抽象,每個交換機(jī)維護(hù)一個流表來保存控制器傳給它的流規(guī)則集。實際上,流表是本節(jié)開始介紹的轉(zhuǎn)發(fā)表的OpenFlow抽象。OpenFlow還定義了一個安全協(xié)議,通過該協(xié)議,可以在控制器和交換機(jī)之間傳遞流規(guī)則,從而可以在交換機(jī)之外運行控制器,如圖5所示。

圖5. 控制器將流規(guī)則安全的傳遞給啟用了OpenFlow的交換機(jī),交換機(jī)維護(hù)流表。

隨著時間的推移,OpenFlow規(guī)范變得越來越復(fù)雜(當(dāng)然,其定義比之前介紹的精確得多),但最初的想法很簡單。在當(dāng)時(2008年),在傳統(tǒng)的轉(zhuǎn)發(fā)路徑之外,建立一個包含“OpenFlow選項”的交換機(jī)的想法非常激進(jìn),是通過研究項目提出的。事實上,最初的OpenFlow出版物是作為對研究界的行動呼吁而撰寫的。

延伸閱讀:
N. McKeown, et. al. OpenFlow: Enabling Innovation in Campus Networks. SIGCOMM CCR, March 2008.

今天,OpenFlow規(guī)范已經(jīng)經(jīng)歷多次修訂,并且正在用更靈活(即可編程)的替代方案來取代。我們將在第四章繼續(xù)探討OpenFlow和P4(另一種編程語言)。

在本節(jié)最后,我們提醒注意兩個相關(guān)但截然不同的概念: 控制(Control)配置(Configuration) 。OpenFlow(以及一般的SDN)的思想是定義控制數(shù)據(jù)平面的接口,這意味著需要對鏈路和交換機(jī)故障以及其他數(shù)據(jù)平面事件做出實時決策。如果數(shù)據(jù)面報告了故障,控制面通常需要在毫秒內(nèi)了解這個故障并提供補(bǔ)救(例如,下發(fā)新的Match/Action流規(guī)則),否則SDN所暗示的解耦將不可行[4]

[4] 還有一些事件需要在亞毫秒響應(yīng)時間內(nèi)關(guān)注。在這種情況下,有必要在數(shù)據(jù)平面中實施補(bǔ)救措施,然后通知控制平面,讓它有機(jī)會重新編程數(shù)據(jù)平面。OpenFlow中的快速故障轉(zhuǎn)移組就是一個例子。

同時,運維人員習(xí)慣于自己配置交換機(jī)和路由器,在歷史上他們一直使用命令行接口(CLI)或(不太常見的)像SNMP這樣的管理協(xié)議來完成?;仡^看一下圖3,它對應(yīng)于到RIB的北向接口(與RIB和FIB之間的接口相反)。該接口能夠配置新的路由,這在表面上似乎相當(dāng)于配置新的流規(guī)則。如果交換機(jī)僅僅暴露了可編程配置界面,而不是傳統(tǒng)的CLI,會被認(rèn)為是"支持SDN(SDN-capable)"的嗎?

答案可能是否定的,最終需要在通用性和性能上都達(dá)到目標(biāo)。雖然定義良好的可編程配置接口肯定是對傳統(tǒng)CLI的改進(jìn),但目的是修改控制平面的各種設(shè)置(如RIB條目)和其他設(shè)備參數(shù)(如端口速率/模式),而不是修改數(shù)據(jù)平面的FIB。因此,這樣的配置接口即不太可能支持控制/數(shù)據(jù)平面接口隱含的全部可編程性,又不太可能支持控制/數(shù)據(jù)平面解耦所需的實時控制回路。簡而言之,SDN的發(fā)展勢頭的一個副作用是改善了交換機(jī)和路由器供應(yīng)商公開的配置接口(我們將在第5章中描述這種接口的最先進(jìn)技術(shù)),但這樣做并不能替代SDN所需要的控制粒度。

需要說明的是,交換機(jī)中的所有元素都需要配置。數(shù)據(jù)平面需要配置端口速率等內(nèi)容,平臺需要配置風(fēng)扇、LED和其他外圍設(shè)備,交換機(jī)軟件需要知道在客戶端連接時應(yīng)該使用什么證書,以及應(yīng)該設(shè)置什么日志級別??刂破矫娼M件也需要配置,例如路由代理需要知道它的IP地址、相鄰節(jié)點,以及是否有靜態(tài)路由。關(guān)鍵區(qū)別在于目的,定量來說是更新速度: 配置意味著每天可能有數(shù)千次更新,而控制意味著每秒可能有數(shù)千次更新。

1.2.2 控制平面: 中心化 vs 分布式

在解耦控制平面和數(shù)據(jù)平面之后,接下來要考慮的是如何實現(xiàn)控制平面。一種選擇是在交換機(jī)上運行實現(xiàn)控制面的軟件。這樣做意味著每個交換機(jī)都作為自治設(shè)備運行,與整個網(wǎng)絡(luò)中的對等交換機(jī)通信,以構(gòu)建本地路由表。為了方便起見,已經(jīng)存在一組可用于此目的的協(xié)議: BGP、OSPF、RIP等。這正是過去30多年來互聯(lián)網(wǎng)一直采用的分布式控制平面。

這種場景自有其價值。由于解耦帶來了使用商用硅交換芯片構(gòu)建低成本裸金屬交換機(jī)的可能性,網(wǎng)絡(luò)運營商可以從裸金屬交換機(jī)供應(yīng)商購買硬件,然后從其他供應(yīng)商購買適當(dāng)?shù)目刂破矫孳浖?,甚至可能使用這些軟件的開源版本。這樣做可能會降低成本和復(fù)雜性(因為只需要將所需的控制模塊加載到設(shè)備上),但不一定能實現(xiàn)SDN所承諾的創(chuàng)新速度。因為運營商仍然停留在緩慢的標(biāo)準(zhǔn)化過程中,這是今天的標(biāo)準(zhǔn)化協(xié)議所暗示的,也沒能實現(xiàn)SDN先驅(qū)們所設(shè)想的新的網(wǎng)絡(luò)抽象(例如Shenker在上面的演講中提到的)。

另一種選擇是控制平面完全獨立于數(shù)據(jù)平面,并在邏輯上集中管理,這是SDN的第二個設(shè)計原則。這意味著控制平面是部署在交換機(jī)之外的,例如可以在云上運行控制器。為了完整起見,我們注意到也可以采用混合方法,在云托管的控制器中,一些控制功能運行在交換機(jī)上,一些運行在交換機(jī)之外。

我們說邏輯集中是因為收集狀態(tài)的控制器需要維護(hù)全局?jǐn)?shù)據(jù)結(jié)構(gòu)(相對于在每個交換機(jī)上維護(hù)路由表),這個數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)仍然可以分布在多個服務(wù)器上,通過云的最佳實踐,實現(xiàn)服務(wù)的水平擴(kuò)展,這對于可伸縮性和可用性都很重要,其中關(guān)鍵是這兩個平面是獨立配置和擴(kuò)展的。如果需要增加數(shù)據(jù)平面容量,可以增加裸金屬交換機(jī)。如果控制平面需要更多容量,可以添加計算服務(wù)器(或者更可能的是虛擬機(jī))。

圖6. 網(wǎng)絡(luò)操作系統(tǒng)(NOS)托管一組控制應(yīng)用程序,并為底層網(wǎng)絡(luò)數(shù)據(jù)平面提供邏輯上集中的控制點。

圖6描述了與分布式數(shù)據(jù)平面相關(guān)聯(lián)的集中式控制平面,但是更進(jìn)一步,還引入了這種方法所隱含的關(guān)鍵組件: 網(wǎng)絡(luò)操作系統(tǒng)(Network Operating System, NOS)。服務(wù)器操作系統(tǒng)(如Linux, iOS、Android、Windows)提供了一組高級抽象,可以更容易實現(xiàn)應(yīng)用程序(例如,用戶可以讀取和寫入文件,而不是直接訪問磁盤驅(qū)動器),NOS與此類似,可以更容易實現(xiàn)網(wǎng)絡(luò)控制功能,也稱為控制應(yīng)用程序(Control Apps)。

NOS背后的思想是抽象交換機(jī)細(xì)節(jié),并向應(yīng)用開發(fā)人員提供網(wǎng)絡(luò)分布(Network Map) 抽象。NOS檢測底層網(wǎng)絡(luò)變化(例如,交換機(jī)、端口和連接的可用狀態(tài)),而控制應(yīng)用只是在這個抽象上實現(xiàn)想要的行為。這意味著NOS承擔(dān)了收集網(wǎng)絡(luò)狀態(tài)的負(fù)擔(dān)(分布式算法中最困難的部分,例如鏈路狀態(tài)和距離向量路由協(xié)議等),而應(yīng)用可以免費使用相關(guān)抽象,并在圖上運行簡單的最短路徑算法,并將構(gòu)建的流規(guī)則加載到底層交換機(jī)。下面是關(guān)于鏈路狀態(tài)(Link-State)和距離矢量路由算法(Distance-Vector routing algorithms)的在線介紹。

延伸閱讀:
Routing. Computer Networks: A Systems Approach, 2020.

通過集中化相關(guān)邏輯,可以實現(xiàn)以前在分布式網(wǎng)絡(luò)中不可能實現(xiàn)的事情: 計算全局優(yōu)化解決方案。正如在后面章節(jié)中討論的那樣,已經(jīng)公布的來自云供應(yīng)商的證據(jù)證實了這種優(yōu)勢。多年來大家都很清楚,互聯(lián)網(wǎng)完全分布式的方法并不適合全局優(yōu)化,但直到SDN,還沒有真正可行的替代方案。SDN使這種可能性成為現(xiàn)實,這就是提供集中式網(wǎng)絡(luò)抽象的力量。

"收集網(wǎng)絡(luò)狀態(tài)"的想法是SDN和NOS所扮演角色的核心。我們不討論收集網(wǎng)絡(luò)遙測數(shù)據(jù)的所有使用方式,例如解決配置錯誤或做長期規(guī)劃,但我們會談?wù)摽赡苄枰刂破矫媪⒓醋龀龇磻?yīng)的精確控制,一個明顯的例子是每個端口上發(fā)送和接收的字節(jié)/數(shù)據(jù)包的數(shù)量。像OpenFlow這樣的協(xié)議定義了向NOS報告此類統(tǒng)計報告的方法,此外還為NOS提供了基于其收集的信息配置新流規(guī)則的方法。

中心化控制平面還有一個相關(guān)好處,隨著我們討論SDN用例,這個好處將變得更加清晰。邏輯集中的控制平面提供了單一的網(wǎng)絡(luò)公開API。將可編程API放在單個交換機(jī)和路由器上的想法已經(jīng)出現(xiàn)了幾十年,但沒有產(chǎn)生多大影響,相比之下,對于整個交換機(jī)或路由器集合的中心API可以支持各種各樣新用例。其中包括網(wǎng)絡(luò)虛擬化、網(wǎng)絡(luò)自動化和網(wǎng)絡(luò)驗證。以自動化為例,將BGP配置這樣的事情自動化是相當(dāng)困難的,因為很難推斷當(dāng)一組BGP節(jié)點開始彼此交互時如何回應(yīng)。但是,如果中央控制平面公開了API,可以通過API實現(xiàn)"創(chuàng)建一個連接以下端點集的隔離網(wǎng)絡(luò)",那么將該請求作為自動化配置系統(tǒng)的一部分就相當(dāng)合理了。這正是許多現(xiàn)代云中的情況,其中網(wǎng)絡(luò)資源和策略的供應(yīng)可以與所有其他類型的操作(如綁定虛擬機(jī)或容器)一起自動化。

回到集中式控制平面與分布式控制平面的最初問題,后者的支持者往往基于互聯(lián)網(wǎng)首先采用分布式路由協(xié)議的歷史原因: 規(guī)?;腿蒎e。需要注意的是,任何集中式解決方案都會導(dǎo)致瓶頸,也就是單點故障。在服務(wù)器集群上分布式部署集中化控制平面可以緩解這兩個問題,因為基于分布式系統(tǒng)開發(fā)的技術(shù)可以確保此類集群的高可用性和可伸縮性。

關(guān)于控制平面集中化的第二個問題是,由于控制平面是遠(yuǎn)程的(即在交換機(jī)之外),兩個平面之間的鏈接增加了脆弱的攻擊面。相反的觀點是,非SDN網(wǎng)絡(luò)已經(jīng)有(并依賴)帶外管理網(wǎng)絡(luò),所以這種攻擊面由來已久。控制器可以使用這些管理網(wǎng)絡(luò),就像其他管理軟件一樣。還有一種觀點認(rèn)為,少量的集中式控制器比大量的分布式控制器所呈現(xiàn)的攻擊面更小??梢赃@么說,雖然意見不同,但肯定有很多人支持中心化方法。

控制域(Domain of Control)

本節(jié)的"集中式vs分布式"框架旨在描述SDN設(shè)計空間的一個維度,而不是表明網(wǎng)絡(luò)運營商面臨非此即彼的情況。有許多因素會影響給定運營商在這個問題上的決定,但首先要確定SDN應(yīng)用的域的范圍。我們將在第2章中討論示例用例,但是網(wǎng)絡(luò)的自然發(fā)展突出了這個思考過程。

從歷史上看,每個交換機(jī)都有一個控制平面實例,它們在同一個機(jī)器上運行。當(dāng)簡單的路由器發(fā)展為機(jī)架式路由器時,M個線卡通常對應(yīng)有N個控制平面實例,在獨立的硬件上運行,并通過管理網(wǎng)絡(luò)相互通信。隨著機(jī)架式路由器從普通交換機(jī)發(fā)展為多機(jī)架結(jié)構(gòu),SDN提出了一種設(shè)計,將轉(zhuǎn)發(fā)元素集中在一個可以運行在任何地方的控制平面下,并構(gòu)建一個分布式系統(tǒng)。這樣一個系統(tǒng)的優(yōu)勢在于可以使用現(xiàn)代技術(shù)來進(jìn)行狀態(tài)分發(fā)和管理,而不用受制于標(biāo)準(zhǔn),關(guān)鍵是找到能夠有可能使用集中式邏輯控制平面優(yōu)化性能的域。本書介紹了SDN可以提供提供價值的幾個這樣的領(lǐng)域。

1.2.3 數(shù)據(jù)平面: 可編程與固定功能

設(shè)計空間的最后一個維度是考慮數(shù)據(jù)平面交換機(jī)是可編程的還是固定功能的,我們需要多說一點交換機(jī)的實現(xiàn),從而理解這意味著什么。

前面我們用一個簡單模型討論交換機(jī),交換機(jī)的主要處理邏輯是從輸入端口接收數(shù)據(jù)包,查找目的地址的FIB(或者使用OpenFlow的術(shù)語流表),然后根據(jù)匹配的表項將數(shù)據(jù)包輸出到端口或端口組,這是低端交換機(jī)的合理實現(xiàn)策略(通用處理器上可以通過軟件實現(xiàn)這一主處理循環(huán)),但高性能交換機(jī)采用基于硬件的轉(zhuǎn)發(fā)流水線。

我們將在第4章深入介紹處理流水線,但目前重要的特征是,該流水線是否僅限于匹配數(shù)據(jù)包報頭中的固定字段集(例如圖4所示字段),并執(zhí)行固定的操作,或者是否將匹配的位模式和要執(zhí)行的動作動態(tài)編程到交換機(jī)中。前者被稱為固定功能流水線(fixed-function pipelines),后者被稱為可編程流水線(programmable pipelines)。但首先我們必須回答這個問題: "轉(zhuǎn)發(fā)流水線到底是什么?"

一種方式是考慮轉(zhuǎn)發(fā)流水線而不是單個流表,就像前一節(jié)介紹的那樣,交換機(jī)實際上實現(xiàn)了一系列流表,每個表項關(guān)注一個頭字段的子集,也許跟某一個流規(guī)則相關(guān)聯(lián)(例如,一個表項匹配MAC頭,一個匹配IP報頭,等等),給定數(shù)據(jù)包被多個流表按順序處理,這就是流水線,并最終決定如何轉(zhuǎn)發(fā)。圖7基于OpenFlow規(guī)范給出了這種流表流水線的一般示意圖。其思想是,在數(shù)據(jù)包流經(jīng)流水線時收集一組操作,并在最后階段作執(zhí)行。

圖7. OpenFlow轉(zhuǎn)發(fā)流水線簡單示意圖。

乍一看似乎并不重要,因為如圖4所示的頭字段都是眾所周知的,交換機(jī)很容易對每個包計算偏移量(例如,表0匹配MAC頭字段,表1嘗試匹配IP字段,等等)。在這一點上,SDN的最初想法是有意不涉及數(shù)據(jù)平面,并完全專注于可編程開放控制平面,但早期實施SDN控制器的經(jīng)驗暴露出兩個問題。

第一個問題是,隨著SDN從研究實驗階段逐漸成熟,成為傳統(tǒng)專有交換機(jī)的可行替代品,性能變得越來越重要。雖然流規(guī)則足以說明控制器想要編程到交換機(jī)中的轉(zhuǎn)發(fā)行為,但交換機(jī)不一定有能力以有效方式實現(xiàn)該功能。為了確保高轉(zhuǎn)發(fā)性能,流表使用高度優(yōu)化的數(shù)據(jù)結(jié)構(gòu)來實現(xiàn),這些數(shù)據(jù)結(jié)構(gòu)需要專門的內(nèi)存,比如三元內(nèi)容尋址內(nèi)存(TCAM, Ternary Content Addressable Memory)。結(jié)果是只支持有限數(shù)量的條目,這意味著控制器必須謹(jǐn)慎使用。

簡而言之,控制器必須知道流水線的詳細(xì)信息,以便配置一組交換機(jī)可以映射到硬件的流規(guī)則。因此,許多控制應(yīng)用程序隱式的綁定到特定的轉(zhuǎn)發(fā)流水線。這類似于編寫只能在x86處理器上運行的Java或Python程序,并且不容易移植到ARM處理器上。事實證明,對轉(zhuǎn)發(fā)流水線有更多的控制是必要的,因為我們不想將自己限制在單個供應(yīng)商的流水線上,還需要抽象方法來指定流水線的行為,從而可以映射到任何給定交換機(jī)的物理流水線上。

第二個問題是協(xié)議棧以意想不到的方式發(fā)生了變化,這意味著可能需要匹配的所有報頭字段都是公開的這一假設(shè)是有缺陷的。例如,雖然OpenFlow(以及早期的轉(zhuǎn)發(fā)流水線)正確的包含了對VLAN標(biāo)記的支持,這是在企業(yè)網(wǎng)絡(luò)中創(chuàng)建虛擬網(wǎng)絡(luò)的基礎(chǔ),但4096個可能的VLAN不足以支撐云可能承載的所有租戶。

為了解決這個問題,IETF引入了一種新的封裝,稱為虛擬可擴(kuò)展LAN(VXLAN, Virtual Extensible LAN)。與之前的方法(將虛擬以太網(wǎng)幀封裝在另一個以太網(wǎng)幀中)不同,VXLAN將虛擬以太網(wǎng)幀封裝在UDP包中。圖8顯示了VXLAN報頭,以及交換機(jī)為了做出轉(zhuǎn)發(fā)決定可能必須處理的所有包報頭。

圖8. VXLAN報頭封裝在UDP/IP報文中。

向OpenFlow添加對VXLAN的支持已經(jīng)足夠困難了,因為標(biāo)準(zhǔn)的批準(zhǔn)需要時間,但是向固定功能的轉(zhuǎn)發(fā)流水線添加對VXLAN的支持則是更為耗時: 需要改變硬件! 有人可能會說,有了VXLAN,我們現(xiàn)在就完成了協(xié)議棧的變更,但這是不可能的。例如,當(dāng)與HTTP一起使用時,QUIC正逐漸成為TCP的替代方案。另一個即將出現(xiàn)的例子是MPLS vs SRv6。甚至VXLAN在某些情況下也被一種稱為GENEVE的更靈活的新封裝所取代。

可編程轉(zhuǎn)發(fā)流水線,加上可用于對流水線進(jìn)行編程的高級語言,是對這兩個問題的一個可行應(yīng)對。這兩者都是在最近幾年出現(xiàn)的,以協(xié)議獨立交換體系架構(gòu)(PISA, Protocol Independent Switching Architecture)P4 編程語言的形式出現(xiàn)。我們將在第4章中更詳細(xì)討論這兩個問題,但目前最大的收獲是,SDN已經(jīng)超越了其作為控制平面編程手段的最初目標(biāo)。今天,SDN還囊括了可編程數(shù)據(jù)平面的可能性。

1.3 SDN: 定義

綜上所述,SDN的初始定義很簡單:

控制平面和轉(zhuǎn)發(fā)平面在物理上相互隔離,一個控制平面可以控制多臺轉(zhuǎn)發(fā)設(shè)備的網(wǎng)絡(luò)。
-- 來自Nick McKeown 2013年題為"軟件定義網(wǎng)絡(luò)"的演講。

這是第1.2.1節(jié)和第1.2.2節(jié)大段內(nèi)容的簡潔表述。從最初的定義開始,SDN就被不同的利益相關(guān)方解釋為更少(例如,對網(wǎng)絡(luò)設(shè)備的可編程配置接口被稱為SDN)和更多(例如,SDN還包括具有可編程轉(zhuǎn)發(fā)流水線的交換機(jī)),本書以更廣闊的視角涵蓋了整個領(lǐng)域。

另一種定義SDN的方法是把它看作兩個階段。階段1中,網(wǎng)絡(luò)運營商獲得了控制平面的所有權(quán),現(xiàn)在在階段2中,他們正在控制如何在數(shù)據(jù)平面中處理數(shù)據(jù)包。第二階段仍處于開發(fā)階段,但正如Nick McKeown所假設(shè)的那樣,理想的最終狀態(tài)是:

"網(wǎng)絡(luò)(理想情況下)將更多的被編程,更少的被運維操作。"

也就是說,SDN不僅僅是將控制權(quán)從設(shè)備商轉(zhuǎn)移到運營商,最終,它是將控制權(quán)從設(shè)備商轉(zhuǎn)移到運營商,再轉(zhuǎn)移到用戶。這是一個長期目標(biāo),其靈感來自于商用服務(wù)器和開源軟件對計算機(jī)行業(yè)的貢獻(xiàn)。但是我們?nèi)匀挥泻荛L的路要走,所以我們在第10章中對SDN旅程的下一階段進(jìn)行了適度的預(yù)測。

延伸閱讀:
N. McKeown. FutureNet 2019. October 2019.

你好,我是俞凡,在Motorola做過研發(fā),現(xiàn)在在Mavenir做技術(shù)工作,對通信、網(wǎng)絡(luò)、后端架構(gòu)、云原生、DevOps、CICD、區(qū)塊鏈、AI等技術(shù)始終保持著濃厚的興趣,平時喜歡閱讀、思考,相信持續(xù)學(xué)習(xí)、終身成長,歡迎一起交流學(xué)習(xí)。
微信公眾號:DeepNoMind

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容