0. 引言
網絡設備管理(lǐ)的一大(dà)煩惱來(lái)自(zì)于不同廠(chǎng)商的設備使用(yòng)不同的操作(zuò)系統,,這(zhè)些(xiē)系統命令格式不統一, 對(duì)協議(yì)的支持程度不一緻,甚至在系統邏輯上(shàng)也(yě)不一緻. 筆(bǐ)者所管理(lǐ)的網絡有十幾個品牌的系統,,在系統升級,版本管理(lǐ), 漏洞與安全管理(lǐ)上(shàng)都要花(huā)費較多的時(shí)間和(hé)精力。
SONiC 的出現(xiàn),較好(hǎo)地緩解了(le)這(zhè)些(xiē)痛苦, 它的統一系統、不宕機升級、高(gāo)度定制化等等特性, 幫助筆(bǐ)者節約了(le)大(dà)量的時(shí)間和(hé)精力 。
正文(wén)開(kāi)始前, 請(qǐng)允許我介紹一下(xià)開(kāi)源、開(kāi)放(fàng)網絡和(hé) SDN。後續的文(wén)章中會(huì)對(duì)其概念有較多的引用(yòng),掌握這(zhè)些(xiē)概念, 我們上(shàng)手 SONiC 的速度就快(kuài)了(le)很(hěn)多。
1.開(kāi)源、開(kāi)放(fàng)網絡和(hé) SDN 概念
什(shén)麽是開(kāi)源,什(shén)麽是開(kāi)放(fàng)型網絡,什(shén)麽是軟件定義網絡,他(tā)們又有如何的關系,有哪些(xiē)不同呢(ne)?我們先來(lái)看(kàn)一下(xià)下(xià)面的這(zhè)個圖:
可以看(kàn)出,它們三者互爲關系,但(dàn)是又有很(hěn)多相同和(hé)不同點。我們先來(lái)了(le)解一下(xià)概念吧。
1.1.SDN (SoftWare-Defined Networking, 軟件定義網絡) [1]
SDN (軟件定義網絡, SoftWare-Defined Networking )通常被認爲是一種将控制平面與網絡内的包轉發(數據)平面解耦的體系結構。在這(zhè)種情況下(xià),可以從(cóng)中心位置進行網絡配置和(hé)管理(lǐ),而不是通過網絡連接每個特定的交換機或服務器。這(zhè)使得企業和(hé)服務提供商能(néng)夠快(kuài)速響應業務需求的變化。
SDN 的主要組成部分之一是SDN控制器。它通過應用(yòng)程序編程接口 (api) 與應用(yòng)程序通信。與此同時(shí),它還使用(yòng)OpenFlow 等接口與交換機或路由器通信。因爲 OpenFlow 協議(yì)是網絡中普遍存在的開(kāi)源組件的一個例子,所以有些(xiē)人認爲 SDN 和(hé)開(kāi)源軟件是一樣的。實際上(shàng),大(dà)多數 SDN 架構仍然在第三方或商業硬件上(shàng)使用(yòng)閉源軟件或開(kāi)源軟件。
1.2.開(kāi)源 (Open Sources) [2]
“開(kāi)源”這(zhè)個術語指的是人們可以修改和(hé)共享的東西,因爲它的設計(jì)是公開(kāi)可訪問的。這(zhè)個術語起源于軟件開(kāi)發中,指創建計(jì)算(suàn)機程序的特定方法。然而今天,“開(kāi)源”代表了(le)更廣泛的價值,我們稱之爲“開(kāi)源方式”。開(kāi)源方式可以是項目、産品或計(jì)劃,具備以下(xià)原則,開(kāi)放(fàng)的交流、協作(zuò)參與、快(kuài)速的原型設計(jì)、透明(míng)的、可被管理(lǐ)的和(hé)面向社區(qū)的開(kāi)發過程。
1.3.開(kāi)源軟件 (Open Source Software) [3]
開(kāi)源軟件即是開(kāi)放(fàng)源代碼的軟件,是任何人都可以檢查、修改和(hé)增強源代碼的軟件。“源代碼”是大(dà)多數計(jì)算(suàn)機用(yòng)戶從(cóng)未見過的軟件的組成;它是計(jì)算(suàn)機程序員可以操縱的代碼,以改變軟件(程序或應用(yòng)程序)的工(gōng)作(zuò)方式。可以訪問計(jì)算(suàn)機程序源代碼的程序員可以通過添加特性或修複不能(néng)正常工(gōng)作(zuò)的部分來(lái)改進程序。“開(kāi)源軟件”是相對(duì)于“閉源軟件”而言的,有些(xiē)軟件的源代碼隻有創建它的個人、團隊或組織才能(néng)修改,并且保持對(duì)它的獨占控制。人們稱這(zhè)種軟件爲“專有的”或“閉源的”軟件。
但(dàn)是現(xiàn)在我們在互聯網領域聽到(dào)的大(dà)多數 Open Source 多指開(kāi)源軟件,其實已經遠遠縮小(xiǎo)了(le) Open Source 的概念了(le)。
在了(le)解開(kāi)放(fàng)型網絡之前,需要了(le)解一下(xià)開(kāi)放(fàng)型網絡是如何來(lái)的,起源來(lái)自(zì)于一個開(kāi)放(fàng)計(jì)算(suàn)項目。
1.4. 開(kāi)放(fàng)計(jì)算(suàn)項目 (Open Compute Project) [4]
開(kāi)放(fàng)計(jì)算(suàn)項目 (OCP,Open Compute Project),開(kāi)放(fàng)計(jì)算(suàn)項目 (OCP) 是一個協作(zuò)社區(qū),專注于重新設計(jì)硬件技術,以有效地支持對(duì)計(jì)算(suàn)型基礎設施不斷增長的需求。 故事(shì)源于2009年,Facebook 爲數百萬人提供一種新的服務,這(zhè)種服務是一個分享照片和(hé)視(shì)頻的社交平台,平台呈指數級增長。展望未來(lái),該公司意識到(dào),它必須重新考慮其基礎設施的成本,通過控制成本和(hé)能(néng)源消耗來(lái)承載大(dà)量湧入的新用(yòng)戶和(hé)數據。就在那時(shí),Facebook 啓動了(le)一個項目,設計(jì)世界上(shàng)最節能(néng)的數據中心,以盡可能(néng)低(dī)的成本處理(lǐ)前所未有規模的數據。一個由工(gōng)程師組成的小(xiǎo)團隊花(huā)了(le)兩年時(shí)間從(cóng)頭開(kāi)始設計(jì)和(hé)建造數據中心,涉及内容包含:軟件、服務器、機架、電源和(hé)冷卻系統。目前這(zhè)個數據中心着落在俄勒岡州的普林(lín)維爾。與該公司之前的設施相比,這(zhè)個全新的數據中心節能(néng)率提高(gāo)了(le)38%,運營成本降低(dī)了(le)24%,與此同時(shí)帶來(lái)了(le)更大(dà)的創新。 2011年,Facebook 與 Intel 和(hé) Rackspace、高(gāo)盛和(hé) Andy Bechtolsheim 共同發起了(le)開(kāi)放(fàng)計(jì)算(suàn)項目,并成立了(le)開(kāi)放(fàng)計(jì)算(suàn)項目基金(jīn)會(huì)。五名成員希望在硬件領域發起一場運動,就像我們在開(kāi)源軟件中看(kàn)到(dào)的那種創造力和(hé)協作(zuò),這(zhè)就是正在發生的事(shì)情。
1.5.開(kāi)放(fàng)型網絡 (Open Networking) [5]
1.5.1.什(shén)麽是開(kāi)放(fàng)型網絡?
開(kāi)放(fàng)型網絡的根基需要幾個條件,首先是建立在開(kāi)放(fàng)标準之上(shàng),通常我們常聽到(dào)的開(kāi)放(fàng)标準例如 OpenFlow 協議(yì)等,再有就是能(néng)夠支持開(kāi)放(fàng)網絡的硬件,我們稱之爲“裸設備”,再其次就是可以自(zì)由選擇自(zì)主安裝的網絡操作(zuò)系統,隻有具備這(zhè)些(xiē)才能(néng)打破軟件和(hé)硬件在網絡層面的固有特性,使我們能(néng)夠拿到(dào)一個可交付的、靈活的、可伸縮的、可編程的以及适應各種需求的網絡。
1.5.2.開(kāi)放(fàng)型網絡簡史 [6]
我們把開(kāi)放(fàng)型網絡定義爲從(cóng)2013年開(kāi)始,爲什(shén)麽開(kāi)放(fàng)型網絡定義爲從(cóng)2013開(kāi)始?在互聯網上(shàng)一直存在着某種程度的開(kāi)放(fàng)型網絡,這(zhè)次我們可以把重點放(fàng)在,什(shén)麽時(shí)候開(kāi)放(fàng)型網絡硬件和(hé)軟件成爲主流和(hé)易于使用(yòng),什(shén)麽時(shí)候開(kāi)放(fàng)型網絡安裝環境的定義和(hé)發布。首先我們來(lái)看(kàn)一下(xià)開(kāi)放(fàng)型網絡中比較重點的定義:
1.5.3. 開(kāi)放(fàng)性網絡安裝環境 (ONIE) [7]
開(kāi)放(fàng)性網絡安裝環境, ONIE – Open Network Install Environment
輕量級 Linux 環境,允許安裝、卸載、調試的網絡操作(zuò)系統,開(kāi)放(fàng)性網絡安裝環境使得開(kāi)放(fàng)型網絡成爲可能(néng)。
我們通過一個例子來(lái)對(duì)比一下(xià)開(kāi)放(fàng)性網絡安裝環境在定義前後我們的使用(yòng)上(shàng)有何不同。
開(kāi)放(fàng)性網絡安裝環境未定義前,我們對(duì)網絡設備安裝調試可能(néng)的步驟:
1) 開(kāi)打交換機移除 CF/SD卡
2) 在 CF/SD 卡上(shàng)制作(zuò)鏡像文(wén)件
3) 把 CF/SD 卡放(fàng)回交換機
4) 啓動交換機進入對(duì)話(huà)模式
5) 挂載 CF/SD卡
6) 拷貝/解壓鏡像在 CF/SD/卡上(shàng)
7) 設置啓動參數
8) 保存和(hé)重置新的鏡像
開(kāi)放(fàng)性網絡安裝環境定義後,我們對(duì)網絡設備安裝調試可能(néng)的步驟:
1) 通過 USB 安裝開(kāi)放(fàng)性網絡安裝環境 (如果預先未安裝開(kāi)放(fàng)性網絡安裝環境的情況)
2) 啓動交換機并在開(kāi)放(fàng)網絡安裝環境中選擇需要的操作(zuò)
a) 安裝操作(zuò)系統
b) 打開(kāi)命令行模式
c) 卸載操作(zuò)系統
3) 升級開(kāi)放(fàng)網絡安裝環境
4) 完成
可以看(kàn)出,通過開(kāi)放(fàng)性網絡安裝環境,可更爲方便地管理(lǐ)網絡設備,省去了(le)頻繁的硬件操作(zuò),從(cóng)開(kāi)放(fàng)性網絡安裝環境層面實現(xiàn)了(le)網絡操作(zuò)系統的變更。
當然,要組成開(kāi)放(fàng)型網絡,除了(le)解決了(le)安裝環境,還需要硬件支持,當然開(kāi)放(fàng)型網絡需要包含開(kāi)放(fàng)的計(jì)算(suàn)硬件/開(kāi)放(fàng)的網絡硬件 (Switches)。
1.5.4. 開(kāi)放(fàng)的網絡硬件(Open Switches) [8]
1.5.4.1.怎麽理(lǐ)解硬件開(kāi)放(fàng)?
開(kāi)放(fàng)可以代表很(hěn)多東西,從(cóng)安裝不同的網絡操作(zuò)系統到(dào)向公衆提供完整的設計(jì)包,最具代表的是“源于開(kāi)放(fàng)計(jì)算(suàn)項目網絡組”,對(duì),就是我們前面提到(dào)的那個組織 Open Compute Project (OCP),網絡組建立于2013年,硬件設計(jì)貢獻者包含 Edge-Core, Quanta, Facebook, Mellanox 等。其中所有提交的設計(jì)都是開(kāi)放(fàng)的,包括構建網絡設備所需的數據。
1.5.4.2.常見的開(kāi)放(fàng)硬件
我們常見的開(kāi)放(fàng)硬件有以下(xià)兩種:
1) Brite-BOX
Dell ON Series, HPE Altoline, Arista, Broadcom
由戴爾和(hé) HPE 等知(zhī)名廠(chǎng)商銷售的品牌支持交換機
通常帶有廠(chǎng)商的網絡操作(zuò)系統,但(dàn)也(yě)可以運行其他(tā)網絡操作(zuò)系統, 很(hěn)多這(zhè)類型交換機是由白(bái)牌交換機改造而來(lái)。
2) White-Box
Mellanox, Edge-Core, Quanta 通用(yòng)的交換機和(hé)硬件支持通常具備開(kāi)放(fàng)型網絡安裝環境。
1.5.5. 開(kāi)放(fàng)的網絡軟件 (Open Networking Software) [9]
1.5.5.1. 開(kāi)源網絡操作(zuò)系統
前面我們講了(le)開(kāi)放(fàng)性網絡安裝環境,它是給開(kāi)放(fàng)網絡操作(zuò)系統準備的,現(xiàn)在我們來(lái)了(le)解一下(xià)它。
開(kāi)放(fàng)網絡 Linux (ONL, Open Networking Linux), 即交換機平台支持的網絡操作(zuò)系統。
ONL 由于良好(hǎo)的表現(xiàn)出現(xiàn)了(le)跨多平台傳播現(xiàn)象,NTT, Facebook, Google, Cord, Stratum 等多家公司的平台都提供了(le)支持,而且不同的網絡設備都開(kāi)始支持 ONL。
1.5.5.2. 什(shén)麽使得網絡軟件開(kāi)放(fàng)?
網絡操作(zuò)系統 Linux化,使得 Linux 爲基礎的網絡,其提供了(le)硬件和(hé)網絡的抽象的邏輯,并使用(yòng)開(kāi)源的網絡棧。
例如: FRR, BIRD
雖然大(dà)多數廠(chǎng)商都有一些(xiē)非開(kāi)放(fàng)的依賴,如硬件指令集,轉發 ASIC API/SDK,以及一些(xiē)抽象的網絡控制集,一般普遍基于 Debian Linux,
例如: OPX, SONIC, ONL, 等等。
OpenSwitch(OPX), Dell OS10 Open Edition (Debian + CPS) + Quagga/FRR, focused on Dell Open Networking switches
CoRD, ONOS Controller with Indigo agent on switchesFRR, Routing suite used by most open networking software
這(zhè)裏特别提出 SAI 是第一個跨平台的開(kāi)源交換機抽象。(後面我們會(huì)解釋什(shén)麽是 SAI)
1.6.開(kāi)源網絡操作(zuò)系統分析 [10]
我們先來(lái)看(kàn)一個架構邏輯來(lái)理(lǐ)解一下(xià)開(kāi)源網絡操作(zuò)系統原理(lǐ):
這(zhè)裏,我們可以看(kàn)出綠色部分屬于開(kāi)源部分,紫色部分使閉源部分,青色部分 Linux,淺藍色爲硬件層,大(dà)緻分爲硬件,平台,應用(yòng)層三個層面,而平台層面的驅動和(hé)硬件控制接口是閉源的,但(dàn)是應用(yòng)層面已經把傳感器進程,網絡管理(lǐ),網絡控制協議(yì)層抽象出來(lái)。
1.7.開(kāi)放(fàng)的網絡操作(zuò)系統 (Network Operating System) [11]
雖然網絡操作(zuò)系統組件并不是完全開(kāi)源,雖然很(hěn)多芯片廠(chǎng)商對(duì)于交換機的抽象接口還是隻支持二進制,但(dàn)是随着SAI和(hé)P4的出現(xiàn),我們發現(xiàn)了(le)一些(xiē)變化,我們也(yě)有理(lǐ)由相信未來(lái)會(huì)越來(lái)越好(hǎo),下(xià)面給大(dà)家做一個對(duì)比:
OpenNSL |
非開(kāi)源 | 僅開(kāi)放(fàng)API |
OF-DPA | 非開(kāi)源 | 兼容OpenFlow vX 标準 |
SAI | 非開(kāi)源 | 兼容SAI vX 标準 |
P4 Runtime | 非開(kāi)源 | 兼容P4 vX 标準 |
SDKLT | 開(kāi)源SDK | |
OtherCavium OpenXPS | 開(kāi)源 |
兼容 SAI 标準 |
說到(dào)開(kāi)放(fàng)的網絡操作(zuò)系統,不得不提到(dào)以下(xià)幾個例子:Microsoft Azure SonicOpen Network Linux, Network API (SAI, OpenNSL), OpenSwitch (OPX).
這(zhè)個我們發現(xiàn)很(hěn)多支持SAI标準,那麽什(shén)麽是 SAI?
1.8.SAI (Switch Abstraction Interface) [12]
交換機抽象接口 (SAI) , 他(tā)是跨平台的交換機平台接口,可以看(kàn)成是一個用(yòng)戶級的驅動,交換機抽象接口 (SAI) 是一種标準化的 API,API 涵蓋多種功能(néng),使用(yòng)者不需要擔心硬件廠(chǎng)商的約束,不用(yòng)關心其交換專用(yòng)集成電路、網絡處理(lǐ)單元或其是一個軟件交換機,都可采用(yòng)統一的方式管理(lǐ)。其目的都是圍繞簡化廠(chǎng)商 SDK。
交換機抽象接口 (SAI) 在所有硬件上(shàng)運行相同的應用(yòng)程序堆棧,這(zhè)使得 SAI 接口具備簡單性,一緻性。使用(yòng)者不需要關心網絡硬件供應商的硬件體系結構的開(kāi)發和(hé)革新,通過始終一緻性的編程接口可以很(hěn)容易的應用(yòng)最新最好(hǎo)的硬件,而且新的應用(yòng)程序可移植性更強,bug 更低(dī)。這(zhè)其中以 Microsoft, Dell, Facebook, Broadcom, Intel, Mellanox爲代表。
1.8.1.SAI 發展迅速
1.8.2.SAI 抽象的交換機系統的系統架構
我們可以看(kàn)到(dào) SAI 是建立在開(kāi)放(fàng)的 ASIC 抽象之上(shàng)的,API 通過 C 語言接口與網絡專用(yòng)芯片通信,接口大(dà)緻分爲幾類功能(néng):
必要功能(néng),選配功能(néng),自(zì)定義功能(néng)
1.8.3.SAI 支持的功能(néng)摘要
我們來(lái)看(kàn)一下(xià) SAI 支持的功能(néng)摘要:
必要功能(néng) | 描述 |
sai_switch_api_t | Top-level switch object |
sai_port_api_t | Port management |
sai_fdb_api_t | Forwarding database |
sai_vlan_api_t | VLAN management |
sai_vr_api_t | Virtual router |
sai_route_interface_api_t | Routing interface |
sai_route_api_t | Routing table |
sai_neighbor_api_t | Neighbor table |
sai_next_hop_t | Next hop table |
sai_next_hop_api_t | Next hop group |
sai_qos_api_t | Quality of service |
sai_acl_api_t | ACL management |
LAG, STP, Control packet send/recevie |
參考文(wén)獻:
[1] https://en.wikipedia.org/wiki/Software-defined_networking
[2] https://en.wikipedia.org/wiki/Open_source
[3] https://en.wikipedia.org/wiki/Open-source_software
[4] https://www.opencompute.org/about
[5] https://aptira.com/what-is-open-networking/
static/file/file
[7] https://www.opencompute.org/wiki/Networking/ONIE
[8] https://www.openswitch.net/about/
[9] http://opennetlinux.org/
static/file/file
static/file/file
[12] https://www.opencompute.org/documents/switch-abstraction-interface
[13] https://github.com/Azure/SONiC/wiki/Architecture
[14] https://github.com/Azure/SONiC/wiki/Sonic-Roadmap-Planning