SDN的核心构建模块有哪些?

网络
为了了解软件定义网络(SDN),你可能会碰到很多跟此项技术相关的术语。其中有些术语是SDN独有的,而其他一些术语则并非SDN专有,但经常会用来描述SDN设计。

了解这些术语及其语义环境是很有帮助的。下面我们重点来了解一下和SDN相关的三个基本技术范畴:控制器、交换网络和叠加网络。

控制器

SDN的一个重要概念就是被称为控制器的设备,该设备与某个域中所有的网络设备会话,获悉网络拓扑结构,并从一个无所不知的中心点上对网络进行编程。可以说,SDN控制器是把网络编程模式从分布模式(相互通信的网络设备决定转发路径)转变成了集中模式。

网络的集中编程是控制器给业务带来的重大价值。从概念上看,控制器可用于给某个网络全面部署业务策略,而与网络中的设备无关。控制器的行为很像是一个网络中间件层,它将底层的物理网络组件如交换机、路由器、防火墙和负载均衡设备等都做了抽象。

用一台SDN控制器对网络进行编程,网络运营者就不必再用传统方法(比如说命令行界面)对个别的网络设备进行编程了。此外,还可根据成本或者安全策略需求创建专有的网络转发范式。

控制器是通过软件完成网络编程的,也正因此,SDN才具有了极大的灵活性。控制器既是该软件的运行平台,也是该软件的一个通信网关。大多数控制器架构都是模块化的,允许控制器利用多种不同的方法与各种不同的网络设备进行通信。

将SDN控制器视为中间件,也就意味着其通信有两个方向。迄今为止大多数的讨论都是围绕南向通信的。也就是说,控制器对网络设备进行编程,并从这些设备接收数据,这就是南向通信。南向通信的一个例子就是控制器利用OpenFlow对网络交换机的转发表进行编程。另一个方向则是北向通信。希望对网络进行编程的各个应用与控制器之间的通信称之为北向的。北向通信的一个例子就是类似VMware的vCloud Director之类的应用通过控制器发出网络配置服务请求。

交换机

说到SDN时,可能很多人谈到的设备就是交换机,尤其是以太网交换机。以太网交换机的速度和密度一直在增加,可以为数据中心的主机、刀片中心和以太网存储提供上行链路。服务器虚拟化的到来,hypervisor软件交换机的地位越来越重要,它能够探测到虚拟服务器和虚拟网卡,并可将出入hypervisor的流量汇聚起来,发送给物理网络。

无论是硬件还是软件交换机在SDN中都发挥着重要作用,首先是交换机的转发表可以由控制器进行编程控制。再考虑到软交换机一般驻留在网络边缘,所以“智能的软边缘”概念已经出现。

支持智能软边缘的网络设计者们感觉,软件交换机在hypervisor上运行是个很理想的场所,因为这里可以安装丰富的网络功能,而让物理硬件交换机在一个相对简单的配置环境中运行。在智能软边缘的SDN设计中,控制器可通过软交换机进行转发、QoS和安全策略。

例如软交换机可以有接入列表、受速率限制的QoS参数和流量优先级,以及应用于虚拟端口的智能转发。当网络数据离开hypervisor之时,已经经过了安全合规检测、速率整形和封装。将所有这些功能放置在网络边缘,可以让核心硬件交换机只去做快速的流量传输。

并非所有的网络都允许智能的软边缘设计,也并非所有可行的SDN用例会用上软交换机。对SDN来说,硬件交换机依然会在一些诸如端到端业务策略的部署、流量控制和安全执法等任务上发挥作用。此外,仍然有一定量的基本配置会在硬件交换机上完成,而无论边缘网络有多么智能。

控制器对硬件和软件交换机转发行为进行编程控制所使用的主要的南向协议就是OpenFlow。OpenFlow(OF)协议的标准正在由开放网络基金会(ONF)快速地推进之中。

ONF是一个主要由网络厂商和服务提供商会员组成的机构,关起门来运作。该基金会的OpenFlow规范目前已发布了PF 1.0,在生产环境中经常会看到;下一步要发布的OF 1.3,将主要面向大多数交换机厂商。OF 1.4目前正在制定当中。

要记住,虽然OpenFlow可以像Open vSwitch那样完全在软件交换机上实施,但是要翻译成硬件交换机的网络芯片(ASIC)可以执行的代码,OF已被证明是要面对挑战的。虽然有报道说,可更好处理OF的新的芯片很快就会出来,但是用户们在评估OF的有用性时,肯定会结合其已有网络进行测试,以便确保所需的OF功能能够尽可能地扩展,可以支持他们的应用。

对于北向通信来说,控制器常常会提供API。一个REST(表述性状态转移)API可能是最常用到的。REST API很像HTTP服务器,会利用一些熟悉的方法如GET和POST来交换数据和指令。API提供了应用到控制器的一种方法,可以告诉控制器网络上将会发生什么。

值得注意的是,除了OF之外,有些厂商已经有一些专门的南向API推出。这部分是因为OF的指令集有限,有时候很难在传统的芯片上实现。例如思科,虽然支持OpenFlow,但还是强调其API须借助其ONE架构来实现,思科的主张是说,它的API允许网络程序员能够充分发挥其思科硬件的能力。

叠加(Overlay)

在SDN讨论中经常会出现的另一个术语就是叠加网络。简而言之,叠加是用来创建虚拟的网络容器,这些容器之间在逻辑上彼此隔离,但可共享相同的底层物理网络。

网络工程师一般都很熟悉的通用路由封装(GRE),比较容易理解叠加的概念。一个数据包(或帧)封装在另一个数据包内;被封装的包转发到隧道端点后再被拆装。原来的包就发送到了目的地。叠加网络就是使用这种所谓“包内之包”的技术安全地将一个网络隐藏在另一个网络中,然后将网络区段进行迁移。2层扩展和多租户就是比较流行的叠加网络实例。

在过去几年间,个标准化组织已发布了不少的叠加协议,这是因为虚拟化数据中心需要在任意时间、任意地点移动主机的需求所致。有些SDN控制器使用叠加作为其传输选项,在散布于数据中心内的各个主机之间架起了一座桥。而软交换机通常被用作隧道的另一端。虚拟可扩展局域网(VXLAN)是目前获得业界最广泛支持的协议,思科、博科和VMware都支持叠加网络。在硬件方面支持VXLAN隧道端点的是Arista和博科的交换机。VXLAN的硬件端点正给业界带来一场剧变,因为叠加通常都是由软件交换机作为端点的。

VXLAN在3层UDP包内封装2层帧。这样做可以让一个VXLAN段内的主机彼此通信,只要它们处在同一个2层网络上,即便这些主机可能被一个或多个3层网络所隔离。

此外,由于VXLAN保留了全部的2层帧、还有VLAN标识,所以在一个VXLAN段内可允许多个3层网络存在。在该VXLAN段内的客户(也可叫做租户)会觉得这个网络很像他们以前所用过的VLAN,但底层网络只能用一个段ID来区分VXLAN的包。

每个VXLAN网络是用VXLAN包头内的段ID来区分的。这个ID有24位,也就是说可允许1600万个租户共享同一个网络基础架构,同时又可以彼此间相互隔离。

和VXLAN相似,利用GRE实现网络虚拟化(NVGRE)使用一个24位的标识符来定义租户的网络。NVGRE主要是微软开发的技术,也是其Hyper-V所使用的叠加方法。

尽管VMware坚定地支持VXLAN,但是它的叠加网络仍被称为无状态传输隧道(STT)。属于VMware旗下的Nicira。STT是 Nicira网络虚拟化平台的一个组成部分,尤其需要指出的是,STT的封装格式充分利用了先进网卡的硬件能力,可以将较大的数据块分解成较小的数据块。

这被称为TCP分段卸载(TSO),一块有TSO功能的网卡可以承担分段卸载的任务,从而释放出服务器的CPU给其他任务。STT的未来尚无法确定,但VXLAN已经有了VMware的支持以及来自行业的普遍支持。

除了VXLAN、NVGRE和STT,另一个值得关注的叠加网络技术是网络虚拟化叠加(NVO3)。NVO3是由IETF的一个工作组开发的。关于 NVO3的问题说明与上面已经讨论过的其他叠加技术很相像,也就是说,流量孤立、租户可自由使用所选择的寻址方案,可将虚拟机在网络内自由移动,不必考虑底层核心中3层网络的分隔等等。NVO3未来会怎么演进,如何封装尚有待观察,但NVO3工作组成员所提交的用例线路已经基本成形。

结论

对上述三大术语的讨论可归结为一点:一个无所不知的中央控制器能够发现网络交换机组成的网络拓扑结构,而无论这些交换机是在hypervisor上的软件交换机,还是在数据中心机柜里的硬件交换机。

这个中央控制器就像是在北向的应用和南向的交换机之间的一个中间件。北向应用主要向控制器阐明业务策略、网络配置和诸如此类的信息;而控制器则将这些策略和配置翻译成南向的编程指令给网络交换机。

南向协议最常用的就是OpenFlow,但要把OpenFlow加装到已有的网络硬件上是颇具挑战性的,所以厂商们都在借助API推动网络的可编程。

在这个网络可编程以及物理设备被抽象的平台上,还要再加上叠加。叠加允许希望支持多租户的云提供商和企业安全地隔离每个租户的流量,而且与此同时还允许租户的主机驻留在数据中心内的任何地方。

责任编辑:张存 来源: 网界网
相关推荐

2010-01-26 13:33:26

Android构建模块

2011-12-13 20:08:54

云计算BMC

2024-04-24 10:44:53

语言模型自然语言处理人工智能

2019-10-18 20:13:51

物联网机器学习智能照明

2021-05-10 08:34:47

webpack手段devServer

2017-05-12 09:35:35

5G网络SDNNFV

2019-08-16 10:16:45

2021-02-19 10:20:06

Scrapy组件Python

2019-03-05 14:57:21

大数据Hadoop框架

2021-10-25 05:49:25

模块化UPS电源

2023-09-26 15:37:08

光模块

2014-11-21 15:48:39

英特尔高性能计算模块

2013-06-14 09:31:46

VMwareSDNvCloud

2010-03-16 15:38:57

Python串口

2010-03-16 15:38:57

Python串口

2016-01-14 16:23:53

SDN软件定义网络2015

2024-04-03 08:20:53

MySQL核心模块

2024-05-15 09:05:42

MySQL核心模块

2024-06-05 11:49:33

2010-01-19 10:09:36

点赞
收藏

51CTO技术栈公众号