0. 引言
網(wǎng)絡(luò)設(shè)備管理的一大煩惱來(lái)自于不同廠商的設(shè)備使用不同的操作系統(tǒng),,這些系統(tǒng)命令格式不統(tǒng)一, 對(duì)協(xié)議的支持程度不一致,甚至在系統(tǒng)邏輯上也不一致. 筆者所管理的網(wǎng)絡(luò)有十幾個(gè)品牌的系統(tǒng),,在系統(tǒng)升級(jí),版本管理, 漏洞與安全管理上都要花費(fèi)較多的時(shí)間和精力。
SONiC 的出現(xiàn),較好地緩解了這些痛苦, 它的統(tǒng)一系統(tǒng)、不宕機(jī)升級(jí)、高度定制化等等特性, 幫助筆者節(jié)約了大量的時(shí)間和精力 。
正文開(kāi)始前, 請(qǐng)?jiān)试S我介紹一下開(kāi)源、開(kāi)放網(wǎng)絡(luò)和 SDN。后續(xù)的文章中會(huì)對(duì)其概念有較多的引用,掌握這些概念, 我們上手 SONiC 的速度就快了很多。
1.開(kāi)源、開(kāi)放網(wǎng)絡(luò)和 SDN 概念
什么是開(kāi)源,什么是開(kāi)放型網(wǎng)絡(luò),什么是軟件定義網(wǎng)絡(luò),他們又有如何的關(guān)系,有哪些不同呢?我們先來(lái)看一下下面的這個(gè)圖:
可以看出,它們?nèi)呋殛P(guān)系,但是又有很多相同和不同點(diǎn)。我們先來(lái)了解一下概念吧。
1.1.SDN (SoftWare-Defined Networking, 軟件定義網(wǎng)絡(luò))?[1]
SDN (軟件定義網(wǎng)絡(luò), SoftWare-Defined Networking )通常被認(rèn)為是一種將控制平面與網(wǎng)絡(luò)內(nèi)的包轉(zhuǎn)發(fā)(數(shù)據(jù))平面解耦的體系結(jié)構(gòu)。在這種情況下,可以從中心位置進(jìn)行網(wǎng)絡(luò)配置和管理,而不是通過(guò)網(wǎng)絡(luò)連接每個(gè)特定的交換機(jī)或服務(wù)器。這使得企業(yè)和服務(wù)提供商能夠快速響應(yīng)業(yè)務(wù)需求的變化。
SDN 的主要組成部分之一是SDN控制器。它通過(guò)應(yīng)用程序編程接口 (api) 與應(yīng)用程序通信。與此同時(shí),它還使用OpenFlow 等接口與交換機(jī)或路由器通信。因?yàn)?OpenFlow 協(xié)議是網(wǎng)絡(luò)中普遍存在的開(kāi)源組件的一個(gè)例子,所以有些人認(rèn)為 SDN 和開(kāi)源軟件是一樣的。實(shí)際上,大多數(shù) SDN 架構(gòu)仍然在第三方或商業(yè)硬件上使用閉源軟件或開(kāi)源軟件。
1.2.開(kāi)源 (Open Sources)??[2]
“開(kāi)源”這個(gè)術(shù)語(yǔ)指的是人們可以修改和共享的東西,因?yàn)樗脑O(shè)計(jì)是公開(kāi)可訪問(wèn)的。這個(gè)術(shù)語(yǔ)起源于軟件開(kāi)發(fā)中,指創(chuàng)建計(jì)算機(jī)程序的特定方法。然而今天,“開(kāi)源”代表了更廣泛的價(jià)值,我們稱(chēng)之為“開(kāi)源方式”。開(kāi)源方式可以是項(xiàng)目、產(chǎn)品或計(jì)劃,具備以下原則,開(kāi)放的交流、協(xié)作參與、快速的原型設(shè)計(jì)、透明的、可被管理的和面向社區(qū)的開(kāi)發(fā)過(guò)程。
1.3.開(kāi)源軟件 (Open Source Software)?[3]
開(kāi)源軟件即是開(kāi)放源代碼的軟件,是任何人都可以檢查、修改和增強(qiáng)源代碼的軟件?!霸创a”是大多數(shù)計(jì)算機(jī)用戶(hù)從未見(jiàn)過(guò)的軟件的組成;它是計(jì)算機(jī)程序員可以操縱的代碼,以改變軟件(程序或應(yīng)用程序)的工作方式。可以訪問(wèn)計(jì)算機(jī)程序源代碼的程序員可以通過(guò)添加特性或修復(fù)不能正常工作的部分來(lái)改進(jìn)程序?!伴_(kāi)源軟件”是相對(duì)于“閉源軟件”而言的,有些軟件的源代碼只有創(chuàng)建它的個(gè)人、團(tuán)隊(duì)或組織才能修改,并且保持對(duì)它的獨(dú)占控制。人們稱(chēng)這種軟件為“專(zhuān)有的”或“閉源的”軟件。
但是現(xiàn)在我們?cè)诨ヂ?lián)網(wǎng)領(lǐng)域聽(tīng)到的大多數(shù) Open Source 多指開(kāi)源軟件,其實(shí)已經(jīng)遠(yuǎn)遠(yuǎn)縮小了 Open Source 的概念了。
在了解開(kāi)放型網(wǎng)絡(luò)之前,需要了解一下開(kāi)放型網(wǎng)絡(luò)是如何來(lái)的,起源來(lái)自于一個(gè)開(kāi)放計(jì)算項(xiàng)目。
1.4. 開(kāi)放計(jì)算項(xiàng)目 (Open Compute Project)?[4]
開(kāi)放計(jì)算項(xiàng)目 (OCP,Open Compute Project),開(kāi)放計(jì)算項(xiàng)目 (OCP) 是一個(gè)協(xié)作社區(qū),專(zhuān)注于重新設(shè)計(jì)硬件技術(shù),以有效地支持對(duì)計(jì)算型基礎(chǔ)設(shè)施不斷增長(zhǎng)的需求。 故事源于2009年,F(xiàn)acebook 為數(shù)百萬(wàn)人提供一種新的服務(wù),這種服務(wù)是一個(gè)分享照片和視頻的社交平臺(tái),平臺(tái)呈指數(shù)級(jí)增長(zhǎng)。展望未來(lái),該公司意識(shí)到,它必須重新考慮其基礎(chǔ)設(shè)施的成本,通過(guò)控制成本和能源消耗來(lái)承載大量涌入的新用戶(hù)和數(shù)據(jù)。就在那時(shí),F(xiàn)acebook 啟動(dòng)了一個(gè)項(xiàng)目,設(shè)計(jì)世界上最節(jié)能的數(shù)據(jù)中心,以盡可能低的成本處理前所未有規(guī)模的數(shù)據(jù)。一個(gè)由工程師組成的小團(tuán)隊(duì)花了兩年時(shí)間從頭開(kāi)始設(shè)計(jì)和建造數(shù)據(jù)中心,涉及內(nèi)容包含:軟件、服務(wù)器、機(jī)架、電源和冷卻系統(tǒng)。目前這個(gè)數(shù)據(jù)中心著落在俄勒岡州的普林維爾。與該公司之前的設(shè)施相比,這個(gè)全新的數(shù)據(jù)中心節(jié)能率提高了38%,運(yùn)營(yíng)成本降低了24%,與此同時(shí)帶來(lái)了更大的創(chuàng)新。 2011年,F(xiàn)acebook 與 Intel 和 Rackspace、高盛和 Andy Bechtolsheim 共同發(fā)起了開(kāi)放計(jì)算項(xiàng)目,并成立了開(kāi)放計(jì)算項(xiàng)目基金會(huì)。五名成員希望在硬件領(lǐng)域發(fā)起一場(chǎng)運(yùn)動(dòng),就像我們?cè)陂_(kāi)源軟件中看到的那種創(chuàng)造力和協(xié)作,這就是正在發(fā)生的事情。
1.5.開(kāi)放型網(wǎng)絡(luò) (Open Networking)??[5]
1.5.1.什么是開(kāi)放型網(wǎng)絡(luò)?
開(kāi)放型網(wǎng)絡(luò)的根基需要幾個(gè)條件,首先是建立在開(kāi)放標(biāo)準(zhǔn)之上,通常我們常聽(tīng)到的開(kāi)放標(biāo)準(zhǔn)例如 OpenFlow 協(xié)議等,再有就是能夠支持開(kāi)放網(wǎng)絡(luò)的硬件,我們稱(chēng)之為“裸設(shè)備”,再其次就是可以自由選擇自主安裝的網(wǎng)絡(luò)操作系統(tǒng),只有具備這些才能打破軟件和硬件在網(wǎng)絡(luò)層面的固有特性,使我們能夠拿到一個(gè)可交付的、靈活的、可伸縮的、可編程的以及適應(yīng)各種需求的網(wǎng)絡(luò)。
1.5.2.開(kāi)放型網(wǎng)絡(luò)簡(jiǎn)史?[6]
我們把開(kāi)放型網(wǎng)絡(luò)定義為從2013年開(kāi)始,為什么開(kāi)放型網(wǎng)絡(luò)定義為從2013開(kāi)始?在互聯(lián)網(wǎng)上一直存在著某種程度的開(kāi)放型網(wǎng)絡(luò),這次我們可以把重點(diǎn)放在,什么時(shí)候開(kāi)放型網(wǎng)絡(luò)硬件和軟件成為主流和易于使用,什么時(shí)候開(kāi)放型網(wǎng)絡(luò)安裝環(huán)境的定義和發(fā)布。首先我們來(lái)看一下開(kāi)放型網(wǎng)絡(luò)中比較重點(diǎn)的定義:
1.5.3. 開(kāi)放性網(wǎng)絡(luò)安裝環(huán)境 (ONIE)??[7]
開(kāi)放性網(wǎng)絡(luò)安裝環(huán)境, ONIE – Open Network Install Environment
輕量級(jí) Linux 環(huán)境,允許安裝、卸載、調(diào)試的網(wǎng)絡(luò)操作系統(tǒng),開(kāi)放性網(wǎng)絡(luò)安裝環(huán)境使得開(kāi)放型網(wǎng)絡(luò)成為可能。
我們通過(guò)一個(gè)例子來(lái)對(duì)比一下開(kāi)放性網(wǎng)絡(luò)安裝環(huán)境在定義前后我們的使用上有何不同。
開(kāi)放性網(wǎng)絡(luò)安裝環(huán)境未定義前,我們對(duì)網(wǎng)絡(luò)設(shè)備安裝調(diào)試可能的步驟:
1)? 開(kāi)打交換機(jī)移除 CF/SD卡
2)? 在 CF/SD 卡上制作鏡像文件
3)? 把 CF/SD 卡放回交換機(jī)
4)? 啟動(dòng)交換機(jī)進(jìn)入對(duì)話(huà)模式
5)? 掛載 CF/SD卡
6)? 拷貝/解壓鏡像在 CF/SD/卡上
7)? 設(shè)置啟動(dòng)參數(shù)
8)? 保存和重置新的鏡像
開(kāi)放性網(wǎng)絡(luò)安裝環(huán)境定義后,我們對(duì)網(wǎng)絡(luò)設(shè)備安裝調(diào)試可能的步驟:
1)? 通過(guò) USB 安裝開(kāi)放性網(wǎng)絡(luò)安裝環(huán)境 (如果預(yù)先未安裝開(kāi)放性網(wǎng)絡(luò)安裝環(huán)境的情況)
2)? 啟動(dòng)交換機(jī)并在開(kāi)放網(wǎng)絡(luò)安裝環(huán)境中選擇需要的操作
a)? 安裝操作系統(tǒng)
b)? 打開(kāi)命令行模式
c)? 卸載操作系統(tǒng)
3)? 升級(jí)開(kāi)放網(wǎng)絡(luò)安裝環(huán)境
4)? 完成
可以看出,通過(guò)開(kāi)放性網(wǎng)絡(luò)安裝環(huán)境,可更為方便地管理網(wǎng)絡(luò)設(shè)備,省去了頻繁的硬件操作,從開(kāi)放性網(wǎng)絡(luò)安裝環(huán)境層面實(shí)現(xiàn)了網(wǎng)絡(luò)操作系統(tǒng)的變更。
當(dāng)然,要組成開(kāi)放型網(wǎng)絡(luò),除了解決了安裝環(huán)境,還需要硬件支持,當(dāng)然開(kāi)放型網(wǎng)絡(luò)需要包含開(kāi)放的計(jì)算硬件/開(kāi)放的網(wǎng)絡(luò)硬件 (Switches)。
1.5.4. 開(kāi)放的網(wǎng)絡(luò)硬件(Open Switches)??[8]
1.5.4.1.怎么理解硬件開(kāi)放?
開(kāi)放可以代表很多東西,從安裝不同的網(wǎng)絡(luò)操作系統(tǒng)到向公眾提供完整的設(shè)計(jì)包,最具代表的是“源于開(kāi)放計(jì)算項(xiàng)目網(wǎng)絡(luò)組”,對(duì),就是我們前面提到的那個(gè)組織 Open Compute Project (OCP),網(wǎng)絡(luò)組建立于2013年,硬件設(shè)計(jì)貢獻(xiàn)者包含 Edge-Core, Quanta, Facebook, Mellanox 等。其中所有提交的設(shè)計(jì)都是開(kāi)放的,包括構(gòu)建網(wǎng)絡(luò)設(shè)備所需的數(shù)據(jù)。
1.5.4.2.常見(jiàn)的開(kāi)放硬件
我們常見(jiàn)的開(kāi)放硬件有以下兩種:
1)? Brite-BOX
Dell ON Series, HPE Altoline, Arista, Broadcom
由戴爾和 HPE 等知名廠商銷(xiāo)售的品牌支持交換機(jī)
通常帶有廠商的網(wǎng)絡(luò)操作系統(tǒng),但也可以運(yùn)行其他網(wǎng)絡(luò)操作系統(tǒng), 很多這類(lèi)型交換機(jī)是由白牌交換機(jī)改造而來(lái)。
2) White-Box
Mellanox, Edge-Core, Quanta 通用的交換機(jī)和硬件支持通常具備開(kāi)放型網(wǎng)絡(luò)安裝環(huán)境。
1.5.5. 開(kāi)放的網(wǎng)絡(luò)軟件 (Open Networking Software)??[9]
1.5.5.1. 開(kāi)源網(wǎng)絡(luò)操作系統(tǒng)
前面我們講了開(kāi)放性網(wǎng)絡(luò)安裝環(huán)境,它是給開(kāi)放網(wǎng)絡(luò)操作系統(tǒng)準(zhǔn)備的,現(xiàn)在我們來(lái)了解一下它。
開(kāi)放網(wǎng)絡(luò) Linux (ONL, Open Networking Linux), 即交換機(jī)平臺(tái)支持的網(wǎng)絡(luò)操作系統(tǒng)。
ONL 由于良好的表現(xiàn)出現(xiàn)了跨多平臺(tái)傳播現(xiàn)象,NTT, Facebook, Google, Cord, Stratum 等多家公司的平臺(tái)都提供了支持,而且不同的網(wǎng)絡(luò)設(shè)備都開(kāi)始支持 ONL。
1.5.5.2. 什么使得網(wǎng)絡(luò)軟件開(kāi)放?
網(wǎng)絡(luò)操作系統(tǒng) Linux化,使得 Linux 為基礎(chǔ)的網(wǎng)絡(luò),其提供了硬件和網(wǎng)絡(luò)的抽象的邏輯,并使用開(kāi)源的網(wǎng)絡(luò)棧。
例如: FRR, BIRD
雖然大多數(shù)廠商都有一些非開(kāi)放的依賴(lài),如硬件指令集,轉(zhuǎn)發(fā) ASIC API/SDK,以及一些抽象的網(wǎng)絡(luò)控制集,一般普遍基于 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
這里特別提出 SAI 是第一個(gè)跨平臺(tái)的開(kāi)源交換機(jī)抽象。(后面我們會(huì)解釋什么是 SAI)
1.6.開(kāi)源網(wǎng)絡(luò)操作系統(tǒng)分析??[10]
我們先來(lái)看一個(gè)架構(gòu)邏輯來(lái)理解一下開(kāi)源網(wǎng)絡(luò)操作系統(tǒng)原理:
這里,我們可以看出綠色部分屬于開(kāi)源部分,紫色部分使閉源部分,青色部分 Linux,淺藍(lán)色為硬件層,大致分為硬件,平臺(tái),應(yīng)用層三個(gè)層面,而平臺(tái)層面的驅(qū)動(dòng)和硬件控制接口是閉源的,但是應(yīng)用層面已經(jīng)把傳感器進(jìn)程,網(wǎng)絡(luò)管理,網(wǎng)絡(luò)控制協(xié)議層抽象出來(lái)。
1.7.開(kāi)放的網(wǎng)絡(luò)操作系統(tǒng) (Network Operating System)??[11]
雖然網(wǎng)絡(luò)操作系統(tǒng)組件并不是完全開(kāi)源,雖然很多芯片廠商對(duì)于交換機(jī)的抽象接口還是只支持二進(jìn)制,但是隨著SAI和P4的出現(xiàn),我們發(fā)現(xiàn)了一些變化,我們也有理由相信未來(lái)會(huì)越來(lái)越好,下面給大家做一個(gè)對(duì)比:
OpenNSL |
非開(kāi)源 | 僅開(kāi)放API |
OF-DPA | 非開(kāi)源 | 兼容OpenFlow vX 標(biāo)準(zhǔn) |
SAI | 非開(kāi)源 | 兼容SAI vX 標(biāo)準(zhǔn) |
P4 Runtime | 非開(kāi)源 | 兼容P4 vX 標(biāo)準(zhǔn) |
SDKLT | 開(kāi)源SDK | |
OtherCavium OpenXPS | 開(kāi)源 |
兼容 SAI 標(biāo)準(zhǔn) |
說(shuō)到開(kāi)放的網(wǎng)絡(luò)操作系統(tǒng),不得不提到以下幾個(gè)例子:Microsoft Azure SonicOpen Network Linux, Network API (SAI, OpenNSL), OpenSwitch (OPX).
這個(gè)我們發(fā)現(xiàn)很多支持SAI標(biāo)準(zhǔn),那么什么是 SAI?
1.8.SAI (Switch Abstraction Interface)??[12]
交換機(jī)抽象接口 (SAI) , 他是跨平臺(tái)的交換機(jī)平臺(tái)接口,可以看成是一個(gè)用戶(hù)級(jí)的驅(qū)動(dòng),交換機(jī)抽象接口 (SAI) 是一種標(biāo)準(zhǔn)化的 API,API 涵蓋多種功能,使用者不需要擔(dān)心硬件廠商的約束,不用關(guān)心其交換專(zhuān)用集成電路、網(wǎng)絡(luò)處理單元或其是一個(gè)軟件交換機(jī),都可采用統(tǒng)一的方式管理。其目的都是圍繞簡(jiǎn)化廠商 SDK。
交換機(jī)抽象接口 (SAI) 在所有硬件上運(yùn)行相同的應(yīng)用程序堆棧,這使得 SAI 接口具備簡(jiǎn)單性,一致性。使用者不需要關(guān)心網(wǎng)絡(luò)硬件供應(yīng)商的硬件體系結(jié)構(gòu)的開(kāi)發(fā)和革新,通過(guò)始終一致性的編程接口可以很容易的應(yīng)用最新最好的硬件,而且新的應(yīng)用程序可移植性更強(qiáng),bug 更低。這其中以 Microsoft, Dell, Facebook, Broadcom, Intel, Mellanox為代表。
1.8.1.SAI 發(fā)展迅速
1.8.2.SAI 抽象的交換機(jī)系統(tǒng)的系統(tǒng)架構(gòu)
我們可以看到 SAI 是建立在開(kāi)放的 ASIC 抽象之上的,API 通過(guò) C 語(yǔ)言接口與網(wǎng)絡(luò)專(zhuān)用芯片通信,接口大致分為幾類(lèi)功能:
必要功能,選配功能,自定義功能
1.8.3.SAI 支持的功能摘要
我們來(lái)看一下 SAI 支持的功能摘要:
必要功能 | 描述 |
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 |
參考文獻(xià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/
[6] https://events19.linuxfoundation.org/wp-content/uploads/2017/11/Open-Hardware-and-Open-Networking-Software-How-We-Got-Here-and-Where-We-are-Going-Steven-Noble-Big-Switch-Networks-_-NetDEF.pdf
[7] https://www.opencompute.org/wiki/Networking/ONIE
[8] https://www.openswitch.net/about/
[9] http://opennetlinux.org/
[10] https://events19.linuxfoundation.org/wp-content/uploads/2017/11/Open-Hardware-and-Open-Networking-Software-How-We-Got-Here-and-Where-We-are-Going-Steven-Noble-Big-Switch-Networks-_-NetDEF.pdf
[11] https://events19.linuxfoundation.org/wp-content/uploads/2017/11/Open-Hardware-and-Open-Networking-Software-How-We-Got-Here-and-Where-We-are-Going-Steven-Noble-Big-Switch-Networks-_-NetDEF.pdf
[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