新一代開(kāi)源網絡操作(zuò)系統SONiC 之一

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

下(xià)一篇
新一代開(kāi)源網絡操作(zuò)系統SONiC 之二
上(shàng)一篇
專訪藍雲 CEO 柯文(wén)達:管理(lǐ)是平衡的藝術