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]
开源软件即是开放源代码的软件,,是任何人都可以检查、修改和增强源代码的软件。。“源代码”是大大都盘算机用户从未见过的软件的组成;;;它是盘算机程序员可以使用的代码,,以改变软件(程序或应用程序)的事情方法。?????梢曰峒趟慊绦蛟创氲某绦蛟笨梢酝ü砑犹卣骰蛐薷床豢烧J虑榈牟糠掷此⑿鲁绦。。“开源软件”是相关于“闭源软件”而言的,,有些软件的源代码只有建设它的小我私家、团队或组织才华修改,,并且坚持对它的独吞控制。。人们称这种软件为“专有的”或“闭源的”软件。。
可是现在我们在互联网领域听到的大大都 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

