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