SDN是IT企业们的机遇,更是传统电信运营商和设备商的机遇,关键在于如何把握这一波热潮。SDN是哲学层面的,是开发者的“道”。OpenFlow、控制器…… 是支持SDN的“术”。明道后如何优术,是ICT企业们需要一起整明白的,而透过现象看本质才能帮助我们正确的明道优术。
从1969年DARPA试验网开始,Internet已经走过了40多年。基于TCP/IP的Internet获得成功有其必然性。概括起来有三个重要因素:无连接的包交换机制、尽力而为以及端到端的原则。每个因素都在网络发展的某个阶段决定性地让TCP/IP网络战胜了传统电路交换网络。
与此同时,Internet与生俱来的缺陷集中在可扩展性、安全性、移动性和QoS上。对这些问题的改进和创新,如无类域间路由CIDR、网络地址翻译NAT、MPLS等等,几乎奇迹般地让Internet在各种不同的应用上工作到今天。但一个明显的问题是,不管这些添砖加瓦的机制发展得多么完美,都是修修补补,无法从根本上解决问题。许多研究者相信,重新定义网络架构也许是“根本”的方案——尽管这类似于给飞行中的飞机更换引擎。
这种根本的方案,学术界形象地称之为“Clean Slate”方案,类似于“打扫干净屋子再请客”的说法。这一次,可以尽可能地考虑当前的各种需求及未来可能的需求。
Clean Slate在互联网研究上有广义和狭义之分。广义泛指各种政府主导的NGN项目,如美国NSF(National Science Foundation)通过FIND(Future Internet Network Design)计划在学术界和工业界推动的GENI(Global Environment for Network Innovations),欧盟在FP7(Seventh Framework Programme)的ICT方向下资助的FIRE(Future Internet Research and Experimentation),以及日本国家信息通信技术所(NICT)资助的AKARI项目以及对应的下一代试验床JGN2+。狭义的Clean Slate则是由斯坦福大学Nick McKeown牵头的实验室研究计划。
本文聚焦于狭义的Clean Slate和SDN的发展分析及原理思考。
2007年,Nick McKeown及其学生Martin Casado、伯克利教授Scott Shenker一起创办了Nicira,致力于网络虚拟化,当时的主要口号和方向就是OpenFlow。Nicira被VMware在2012年7月以12.6亿美元并购,并购的主要驱动力是VMware看上了Nicira做SDN控制器来实现网络虚拟化。2011年,Nick McKeown和Scott Shenker一起创建了NPO组织ONF(Open Networking Foundation),致力于让OpenFlow与SDN的影响力走出校园。
Clean Slate作为学校计划,宗旨直白大胆——“重塑互联网(Reinvent the Internet)”,所以倡导重建炉灶,摒弃传统的渐进叠加和向前兼容的原则。Clean Slate最初选择的关键研究方向包括五个,即网络体系结构、异种应用、异种物理层技术、安全、经济与政策。
项目利用硅谷的学术、科研、商业环境,整合学术界和工业界的资源,成功地吸引到了眼球和资金。2012年1月,项目选择了四个子方向:互联网体系架构如OpenFlow和SDN, 移动互联网如可编程开放移动网络,移动社交网络,以及数据中心(Internet Infrastructure: OpenFlow and Software Defined Networking;Mobile Internet: POMI 2020 (Programmable Open Mobile Internet);Mobile Social Networking: MobiSocial;Data Center: Stanford Experimental Data Center Lab),让其各自独立发展,而作为母项目的Clean Slate正式终止。从孵化器和牵引者的角度来说,Clean Slate无疑是成功的,选择的四个子方向也极具吸引力和潜力。
首先来看第一个方向,Clean Slate实验室最初的网络体系结构研究基本从OpenFlow起步。用路由和交换的术语来描述OpenFlow即是:传统路由器和交换机的转发平面和控制平面在同一台设备上,控制平面做路由计算,转发平面做转发。理想的OF Switch将这两者分开,把路由计算等功能从单台设备上拿出来集中到控制器上。控制器和OF Switch通过OpenFlow协议通信。留在OF Switch上的转发平面就可以进行流表抽象化(flow table abstraction),针对分组定义格式、匹配以及行为。转发平面并不拘泥于基于IP的x-tuple处理,因为OpenFlow动机之一是探求新的网络协议。
OpenFlow最初的定义仅仅是一个二层的控制协议,这对于互联网架构的影响显然不够“革命”。如果节点的转发平面要通过OpenFlow从外部来控制,那么整网的控制与转发实际上就是分离的。这似乎比传统路由器上ACL+路由协议的方式更适合做精细和复杂的流量管理。再想得大胆一点,从网络往上层的应用走,控制转发分离后,虚拟机的迁移、安全策略等也可以更容易控制。这种灵活的控制是基于软件操作的,于是有了一个“软件定义网络SDN(Software Defined Networking)”的名字。SDN作为比OpenFlow更加革命的大旗打起来了,网络虚拟化的口号也开始流行,OpenFlow慢慢定位成SDN的使能者之一。
SDN的热潮之下,可能有几个问题需要去伪存真、反复辨析。
OpenFlow不等于SDN。OpenFlow诞生在前,SDN的提法随后才产生,其概念和范围比OpenFlow要宽广很多。OpenFlow是作为SDN的使能者之一存在的。
毫无疑问,在SDN出来之前,无论是Internet还是电话网/FR/ATM网,都已经运行很多年了;此外,“集中控制,分散下发”的理念和实例也早已存在。OpenFlow最初设计的目的是“通过网络来控制交换机/路由器的转发平面”,这个带外控制的概念和PSTN很有共鸣——PSTN就是典型的集中控制。这个方式是与分布式的Internet路由计算完全正交的。OpenFlow的新意在于,提出在校园网这样的试验床上,通过OpenFlow实现带外修改设备行为和试验网络协议。传统的设备商如果支持OpenFlow,相当于给用户提供了一个hook来实现带外控制,而无需公布系统实现细节。
控制平面与转发平面分离之后,同一台网络设备就不再既要为网络请求选择合适的路由,又要按照这条路由发送数据包了,转发平面可以变得很简单。在SDN中,底层硬件可以被虚拟化,网络的物理硬件被抽象出来,独立于运行在网络上的虚拟机和应用。按照OpenFlow的理想,如果大家都遵照这个设定,路由器本该也被商品化,跟PC + Windows操作系统 + 应用程序的格局一样。已经部署的路由器可以稍加改造,变成“OF-enabled node”,新增加的网元可以是仅具有简单转发平面的“OF-dedicated node”。控制层往上可以从网络服务走向应用,通过控制层(API编程或原始应用)实现应用的灵活部署。
不过,在通信网络这个天生保守的社区里,激进的变革一般都比较难开展。路由器的格局还把握在设备商巨头手里,业界的做法是在应用和网络引擎之间增加一个软件层,也就是打折的控制器。这些控制器有开源的,有的则由设备商提供 API 来访问底层的网络引擎,而有的则连 API 也不提供。此外,OpenFlow也只是一个可能的选项来连接节点的转发平面与控制器,很多设备商不依赖于OpenFlow来做这种控制,选择一些已经运行且经过实践证明的协议更加容易说服运营商。
从技术而言,有了基于 SDN 的网络虚拟化,应用与网络的互联就有了可能,而使用何种类型的控制器则决定了这种互联的难易程度。必须指出,在现实生活中,技术复杂度不是唯一标准,部署和现网的演进是运营商考虑更多的问题。
这个问题在不同的社区一定会有不同的回答和认识。对于Clean Slate计划来说,SDN是组网的新方法:控制转发分离、统一的OpenFlow作为控制与转发之间的通道和界面、逻辑上集中的控制面掌握全网逻辑图并呈现给控制应用和其上的业务、底层网络的虚拟化和编程化,等等。这就是通过重组网络来构造新的互联网。
笔者认为,SDN不能取代现在的Internet,目前业界的很多创新实际上也不是为了取代Internet,甚至SDN和Internet都不适合放在一个层面相提并论,他们解决的是不同的问题。
先看一个鸡和蛋的问题。转发和控制分离了,那他们之间还是要互联;控制器可能是逻辑集中但是物理分布的,他们之间也要互联。要求物理直连来保证“互联”,在实际大规模网络中显然不现实,那么通过什么来实现连接和联接?笔者和很多研究者创业者交流过,大部分基于SDN的创意都不考虑这个问题——他们的创意是基于一个正常运行的网络,依赖现行的AS/routing/peering架构保证互联,甚至可以不在乎互联互通的方法。所以也就是说,有些功能是必须由网络提供的。
从这个意义上更可以说,SDN是现有网络上的附加层、虚拟化层,增加这一层的主要推动力就是云架构、动态资源分配、移动计算和计算虚拟化等技术的发展,目的是让运营商们将业务和网络端口解耦,简化网络运维,也在一定程度上简化网元的复杂度。
笔者喜欢用操作系统的内核空间/用户空间来类比SDN与基于路由的互联网。现代操作系统用进程空间来提供隔离保护,用MMU来提供虚拟地址和物理地址的翻译,用系统调用来让应用程序访问内核。看起来内核和用户空间隔离似乎降低了性能,所以很多高性能嵌入式系统都不要用户空间而直接访问内核地址。但是这样隔离保护和虚拟化的好处是,应用程序开发可以独立于内核,程序员们只要访问虚拟地址而无需太多考虑系统内核崩溃的问题,大大提高了开发灵活性和程序维护性,今天的软件业就是构筑在这个基础上的。
笔者认为,SDN要在现行网络上玩转,前提就是,底层传统的拓扑耦合的桥接/路由/交换基本不变,IP网络用这些老办法来保持可扩展性、互操作性、高可靠性(相当于操作系统内核的基本功能);而在这之上的SDN层(或曰虚拟化层),就把其上的业务与其下的物理连接、端口特性、拓扑结构等等解耦(相当于操作系统对内核和用户空间的隔离)。最上面的业务就相当于应用程序——今天看来不外乎是cache、CGN、防火墙、load balancing、IPTV、VPN等等,但是想想软件业是如何发展起来的?新的应用场景即使不在电信运营商网络,也会在企业网络、数据中心产生。
SDN不能取代现行网络,那么这个SDN层一定有其适用场景和领域。说得最多的显然是数据中心业务,特别是虚拟机大量使用和广泛迁移的Infrastructure as a Service (IaaS)。网络虚拟化能掩盖虚拟机所在的位置,购买大量虚拟机的用户完全不必关心虚拟机的细节。网络虚拟化,加上存储和计算的虚拟化,能够很方便地在各种云环境中为应用实现弹性资源分配,仿真传统的基于IPC的进程间资源分配,在虚拟机之间进行资源调度。
许多Niche应用也会在SDN网络上变得很有趣。操作系统中,连续的虚拟地址块可能对应的是离散的各个物理地址块;同样,网络虚拟化后,各个数据中心的散落在“机架”各处的零散容量可能被抽象化后整合成池,提高资源利用率。SDN能让数据中心的负载均衡更容易——传统的链路状态更新能通知到每个物理地址的出口路由器,而分布式SDN可能把粒度精细到每个集群乃至hypervisor。虚拟机和SDN一起,也催生了许多创业公司,让传统网络上的应用负载均衡、防火墙等业务支持分布式动态计算资源。
考虑到SDN的诞生地,校园网显然是SDN的重要应用场景。Flowvisor和SDN能在同一个物理拓扑上创造多个独立的、可编程的逻辑网络(即slice),这也是GENI支持网络创新的重要思想。
回到电信运营商领域,SDN最有希望的领域首推接入服务,因为可迁移性、灵活多变等是这里最现实的需求。SDN和虚拟化对流量的控制能有效减少传统的静态带内处理带来的规划和运维的复杂性。
对于为用户提供服务的运营商而言,应用SDN最大的技术挑战是性能、运营商业务的复杂性以及安全性。大多数天生保守的运营商对于开放场景心存疑虑;同时,由于AAA/IPTV/VPN等业务面向最终用户,运营商不会像Google和Facebook那样经常调整自己的业务和应用。
IT企业是经营服务的,他们希望的是通过SDN实现网络虚拟化和资源调度,加上计算/存储虚拟化,实现动态和弹性的资源分配,促使云服务来帮助其赚钱盈利。电信运营商则是经营网络的,网络带宽实际上还是稀缺资源,因此,运营商面临的竞争跟很多行业比,并非那么残酷。从这个意义上说,SDN能给运营商带来的好处不是“网络架构革命”,而是提升运营效率、提高服务质量、加快业务布放、提高资源利用率等。
笔者坚信,SDN是哲学层面的,是开发者的“道”。OpenFlow、控制器、无广播部署、对称/非对称部署,这些是支持SDN的“术”。网络虚拟化、计算虚拟化、存储虚拟化、云计算这些浪潮给SDN带来无穷的机会和动力。
SDN是挑战还是机遇?笔者相信,SDN是IT企业们的机遇,更是传统电信运营商和设备商的机遇,关键在于如何把握这一波热潮。大胆假设之后的下一步,是小心求证。明道后如何优术,是ICT企业们需要一起整明白的,而透过现象看本质才能帮助我们正确的明道优术。