本文解答四个问题:
问题一:What is
SDN?
之前根据自己的经验和学习状况回答了如何去研究SDN&OpenFlow?,到底What
is SDN?
现有的SDN课程中在介绍SDN时,基本都是两步走:
- 第一步引用Nick McKeown的观点,类比PC产业,从“Refactoring
Functionality”的角度来定义SDN,直接了当非常容易理解,感觉豁然开朗。 - 第二步引用Scott Shenker的观点,从“Redefining
Abstractions”的角度来思考SDN,有点形而上的意思,但是仔细研究,发现确实是那么回事。后来看Larry
Peterson在2013sigcomm上做《Zen and the Art of Network
Architecture》的演讲,才明白“技术是可以用哲学方式思考的”。
关于SDN的确切定义,我最喜欢ONRC的描述,用词用句非常准确:
- SDN is changing how we design, build and operate networks to better
support growth, agility and innovation. SDN’s key attributes
include: separation of the data and control planes; a uniform,
vendor-agnostic interface, called OpenFlow, between control and data
planes; and a logically centralized control plane that offers a consistent,
network-wide view to programers or operators. The logically
centralized control plane is realized using a network operating system that
constructs and presents a logical map of the entire network to services or
control applications implemented on top of it. With SDN, a network operator or
third party can introduce a new service or customize network behavior by
writing a simple software program that manipulates the logical map of a slice
of the network. The rest is taken care of by the network operating system.This
view of SDN supports boundless innovation, with a truly modular architecture
that allows providers, operators and end users to mix and match the
applications, network operating systems, hypervisors and switches they want to
best address their requirements. Network managers can finally run applications
to manage their network and deliver the unique performance, scale, service and
functionality needs for their organization.
而在《SDN白皮书》中是这样描述SDN体系结构的三个特点: In the SDN architecture,the control and data
planes are decoupled,network intelligence and state are logically
centralized,and the underlying network infrastructure is abstracted from the
applications。后续13年底发布的《SDN体系结构概述》中的描述: The aim of SDN is to provide open
interfaces enabling development of software that can control the connectivity
provided by a set of network resources and the flow of network traffic though
them, along with possible inspection and modification of traffic that may be
performed in the network.
国内来看,弯曲评论陈首席之前认为(Logically) Centralized
Controller是非常有意思的点(Jennifer在自己的课程中也特别认可这一点) ,卫峰谈到SDN的三个本质属性:1.控制与转发分离,2.开放的编程接口,3.集中化的网络控制;@wang_russell博客中的一些列文章阐明了对SDN的理解,谈到本质属性,跟卫峰一个观点。这三种观点都不敢妄加评论,
大家可以比较分析一下。
下面是我个人的理解:
首要的当然是“控制与转发的分离”,这里的分离一方面是指decouple,所谓解耦合,在控制与转发之间定义了清晰的开放接口,让控制和转发都可以独立演进,在不断改进的同时还能向后兼容;另一方面这里的decouple又特指物理位置上的远离,这一点与PC的控制/处理分离是不同的,与分布式系统的通信类似,依赖于消息。
其次是“控制面的抽象,转发面的抽象”,前者是指摆脱之前控制面的功能堆砌,解决一个问题多一个协议,多一个协议多一个控制面功能的尴尬,为了使得网络易用,控制面需要抽象,一旦抽象也能持续演进。与PC的类比来看,控制面的抽象就是控制面的软件层次化,一方面NOS负责对转发面的机器级控制,同时给上层应用提供良好的开放接口,另一方面应用在更高抽象级别上建立模型,这样一来,控制面本身也是NOS与Apps的分离,也能独立演进,并且可以借鉴计算机发展以来软件工程积累的经验;后者是指对网络数据包处理行为进行通用化,建立通用转发抽象模型,一个关键是通用转发模型的体系结构,一旦这个定下来,之后就是修修补补和具体实现了。
再次才是“逻辑上的集中控制”,个人认为这一点已经不那么清晰明确了(也可能是自己的局限性,没理解透),尤其再加上Logically这个修饰词,还有Kadoo的local
controller的概念,到底(Logically) Centralized
Controller在实现层面是怎么操作的?当网络的规模足够庞大时,就需要分布式的控制器集群来作为整个网络的控制面,这是一种层次型的分布式协作系统,还是将巨量的任务分成块来处理?我更愿意把最终的控制面理解成一个逻辑上的a
big controller,一边是network global view,另一边是传统软件工程师。
为什么要弄清楚SDN的本质属性?其实之前挺不愿意去讨论“本质属性”的,因为以我的理解深度可能还没到这个程度,更多愿意分析别人目前在各个方向上的成果,开源项目和产业界的产品策略,但后来发现如果要“保持SDN学习/研究的专注性,保持对各个技术方向的敏锐性”,就必须先弄清楚这个。假如什么都是SDN,那么SDN就什么都不是了。
最后,小结一下SDN体系结构:类似PC的开放分层体系结构,data plane逐步通用化,control plane从data
plane分离出来,摆脱之前的协议(功能)堆砌,进行抽象且要实现(Logically)
Centralized,在控制面内部再次进行分层:NOS和Apps。
如下是ON.LAB给出的SDN简史:
The roots of SDN can be traced back to projects such as RCP and 4D. Martin
Casado invented SANE and Ethane in 2007 while doing his PhD, co-advised by Nick
McKeown (Stanford) and Scott Shenker (Berkeley). Some of the basic SDN ideas can
be traced back to SANE and Ethane (separation of control plane from forwarding,
programmatic control, or flow-based). The technology really took off at Nicira,
where the first versions of NOX and OpenFlow were created, and later the ONIX
distributed controller.
问题二:What is
OpenFlow?
问题三:What is
NOS?
问题四:What is SDN
Apps?