Openflow
OpenFlow – 打造弹性化的可控互联网
2012的故事
2012年的某天,你跟往常一样起床,打开电脑,却发现无法登录到邮箱、无法连接到公司的VPN网络、无法订购任何东西……,你会发现一切都简直跟世界末日一样,离开了网络,现代社会根本无法正常运行。这并不是可笑的无根据的幻想,如果世界末日真的来临,摧毁互联网无疑是最直接有效的办法,而现代互联网并没有我们想象的那样鲁棒。
从上个世纪70年代初,互联网在短短不到40年时间里已经发展成为这个星球上不可或缺的基础设施。然而由于一开始的设计并没有考虑到后来互联网的规模会如此庞大、承载的应用会如此复杂、地位会变得如此重要,现代的互联网在过重的压力下已经凸显出太多亟待解决的问题。互联网太危险,恶意攻击、病毒、木马每年造成上千亿刀的损失;互联网太脆弱,无标度(Scale-free)的特性让整个网络可以在精心设计的少数攻击下即告崩溃;互联网太随意,p2p等应用的出现一度造成各大ISP网络堵塞,严重影响传统正常的访问;互联网太迟钝,现代臃肿的路由机制不能支持快速的更新,即便发现问题也无法快速反应;互联网太局促,IPv4的分配地址已经捉襟见肘……
这一切的问题都隐隐的指向了互联网这个庞然大物最关键的软肋——可控性。缺乏有效的控制措施让互联网这个为服务人类而设计的机器,正在逐渐演变成一头臃肿而暴躁的凶兽,挣扎着要摆脱人类所施加的脆弱枷锁。
下一代互联网和GENI
为了解决当前互联网的问题,不少国家都纷纷提出了下一代互联网计划,代表性计划有美国的FIND(Future Internet Network Design,未来互联网网络设计)和GENI (Global Environment for Network Innovations,全球网络创新环境),欧洲的FIRE (Future Internet Research and Experimentation,未来互联网研究和实验),中国的CNGI-CERNET(China Next Generation Internet)。所有这些计划参与者大都是各个国家产、学、研顶尖的机构。
这三大计划中,CNGI-CERNET主要是研究在IPv6体系下的新一代网络;而NSF支持的FIND计划计划在不受当前互联网的制约下提出未来互联网的需求,从2006年到2014年分三个阶段主要致力于五个问题:是否继续采用分组交换、是否要改变端对端原理、是否要分开路由和包转发、拥塞控制跟资源管理、身份认证和路由问题。FIND计划最主要的成果之一就是GENI——一套网络研究的基础平台,同时FIRE计划跟GENI项目合作也非常密切。GENI计划的两大任务是为最前沿的网络科学工程领域革命性研究开路;刺激和促进重大社会经济影响的奠基性创新的出现;围绕这两大任务,GENI致力于打造下一代互联网的虚拟实验室,为研究者提供验证创新的架构、协议的灵活、可扩展、可配置的实验平台,并促进学术界和业界的相互合作。长期以来,缺乏合适的实验平台让各界的专家学者们伤透了脑筋,PlanetLab的种种局限已经不能满足广大researcher越来越令人fz的需求了。
毫无疑问,GENI的目标将让每个网络研究者为之着迷和激动,一套完全可控、可定制、大规模的网络试验床,对学术界将意味着大批的顶级paper,对业界意味着大量的新标准、新协议。
OpenFlow的前世今生
GENI的好处虽多,但要部署这个平台无疑是一件太过昂贵的事情,于是一个自然的事情就是在目前现有的网络下,能否省时省力的干好这个事情?
很自然的想法,如果我能控制整个Internet就好了,而网络中最关键的节点就是交换设备。控制了交换设备就如同控制了城市交通系统中的红绿灯一样,所有的流量就可以乖乖听话,为我所用。然而现代的交换设备被几家巨头垄断,开放的接口十分有限,能做的事情也十分有限。如果能有一套开放接口、支持控制的交换标准该多好?OpenFlow应运而生。
最初的想法其实十分简单,无论是交换机还是路由器,最核心的信息都存放在所谓的flow table里面,用来实现各种各样的功能,诸如转发、统计、过滤等。flow table结构的设计很大程度上体现了各个厂家的独特风格。OpenFlow就是试图提出这样一个通用的flow table设计,能够满足大家不同的需求,同时这个flow table支持远程的访问和控制,从而达到控制流量的目的。具体来说,OpenFlow的flow table中每一个entry支持3个部分:规则,操作跟状态。规则无非是用来定义flow,OpenFlow里flow定义十分宽泛,支持10个域(除了传统的7元组之外增加了交换端口、以太网类型、Vlan ID);操作就是转发、丢弃等行为,状态部分则是主要用来做流量的统计。在此基础上最关键的特性就是支持远端的控制,试想,如果我要改变entry就必须跑到交换机前重新编程写入得多麻烦,而且如果我想获知网络的实时状态咋办,有了统一的控制机制,我们的网络才变得真正智能可控起来。OpenFlow的控制机制也十分灵活,感兴趣的同仁可以参考NOX。
好了,有了这个标准,只要大家以后生产的交换设备都支持,那么学术界以后能做的事情就太多了,以前YY无数次的梦想终于开始变成了现实。比如我们可以在正常运行的网络中自己在定义一些特殊的规则,让符合规则的流量按照我们的需求走任意的路径,就仿佛将一张物理网络切成了若干不同的虚拟网络一样,同时运行而又各不干扰,我们可以轻而易举的测试各种新的协议;以前要做什么处理,需要考虑到具体的拓扑结构,考虑到box的先后顺序,现在好了,通过定义不同的flow entry就可以任意改变流量的运行策略,这也很好的为解决移动性问题提供了便利(一个著名的demo是笔记本在不同交换机之间切换,虚拟机在两地之间切换,运行的游戏不受影响)。从这个意义上说,OpenFlow将传统的物理固定的硬件定义互联网改造成为了动态可变的软件定义互联网(software defined networking)。而一个软件定义的可控的互联网,除了更加灵活以外,毫无疑问,通过恰当的控制算法,将大大提高网络自身的鲁棒性、运行效率以及安全性。
目前学术界OpenFlow主要是stanford、berkeley、MIT等牵头的研究组在推动,而业界据说包括Google在内的几大巨头已经纷纷参与其中,最新的版本1.0协议已经发布。牵头人Nick Mckeown曾在Sigcomm08上做过专题的demo,后续这几年仍有不少的相关工作在高水平的会议上发表。国内据说清华大学已经有研究机构参与进去。
Nick Mckeown这个人十分有意思(主页在http://yuba.stanford.edu/~nickm),现任standford的AP,从他本人提供的简历就可以看出,Nick同学跟业界关系十分紧密,phd毕业两年就创办了公司,还参与了Cisco的项目,后来新公司卖给Cisco(Cisco这种模式很不错,有兴趣的同仁可以搜索过往案例)。笔者有幸在某次国际会议上碰到真人,给人感觉是十分的humorous且energetic的。Nick同学在推OpenFlow的时候明显十分重视跟业界结合,基本上是一边做,一边拉生产商的支持,很重视做demo,很早就在stanford的校园网中部署了OpenFlow,做的差不多了再提标准,再做宣传就事半功倍了。他的这种发展模式也十分为笔者所推崇。
最后的战役
OpenFlow的出现无疑给现有的交换市场带来了新的巨大的商机。网络行业发展到今天,垄断已经十分的严重,许多年来,交换机制造商已经麻木于每天忙碌提高性能的目标,偶尔做点小工作,支持下出现的新的需求。而OpenFlow创造了一块前所未有的大蛋糕,能否抓住这一机遇,不夸张的说是重新瓜分市场的生死之战。目前Cisco、HP、Juniper、NEC等巨头已经纷纷推出了支持OpenFlow的交换设备,不仅有固网的,移动互联网领域也相关产品开始试水。从另外一个角度看,市场的重新瓜分,新需求的出现,也会给小规模的生产商带来一线生机,对于新出现的厂家来说,这也许是能争得一席之地最后的战役。
相关资料
官方网站见http://www.openflowswitch.org,目前有软件版本、netfpga版本可供使用,支持的交换设备相信很快就可以能够买到。
从虚拟机到虚拟交换
提到虚拟化,大家第一印象往往是虚拟机(Virtual Machine),VMware、Virtualbox,这些大名鼎鼎的虚拟机软件不少人都耳熟能详。对企业用户来说,虚拟技术最直接的好处是通过灵活配置资源、程序来高资源的利用率,从而降低应用成本。近些年,随着虚拟化技术、交换技术以及云计算服务的发展,虚拟交换(Virtual Switch)已经越来越多的引起人们的关注。
顾名思义,虚拟交换就是利用虚拟平台,通过软件的方式形成交换机部件。跟传统的物理交换机相比,虚拟交换机同样具备众多优点,一是配置更加灵活。一台普通的服务器可以配置出数十台甚至上百台虚拟交换机,且端口数目可以灵活选择。例如,VMware的ESX一台服务器可以仿真出248台虚拟交换机,且每台交换机预设虚拟端口即可达56个;二是成本更加低廉,通过虚拟交换往往可以获得昂贵的普通交换机才能达到的性能,例如微软的Hyper-V平台,虚拟机与虚拟交换机之间的联机速度轻易可达10Gbps。
虚拟交换与Open vSwitch
2008年底,思科发布了针对VMWare的Nexus 1000V虚拟交换机,一时之间在业界掀起不小的风头,并被评为当年虚拟世界大会的最佳新产品。或许思科已经习惯了“群星捧月”,此后很长一段时间里并没有见到正式的虚拟交换标准形成。除了惠普一年多以后提出了VEPA(虚拟以太网端口聚合器),其他厂家关注的多,做事的少。随着云计算跟虚拟技术的紧密融合,以及云安全的角度考虑,技术市场曲线已经到了拐点,业界已经迫切需要一套开放的VS标准,众多门派蠢蠢欲动。
烽烟即燃之际,Open vSwitch横空出世,以开源技术作为基础(遵循Apache2.0许可),由Nicira Networks开发,主要实现代码为可移植的C代码。它的诞生从一开始就得到了虚拟界大佬——Citrix System的关注。可能有读者对Citrix不熟,但说到Xen恐怕就是妇孺皆知了,没错,Citrix正是Xen的东家。OVS在2010年5月才发布1.0版本。而早在1月初Citrix就在其最新版本的开放云平台(ref[2])中宣布将Open vSwitch作为其默认组件,并在XenServer5.6 FP1中集成,作为其商用的Xen管理器(hypervisor)。除了Xen、Xen Cloud Platform、XenServer之外,支持的其他虚拟平台包括 KVM、VirtualBox等。
OVS官方的定位是要做一个产品级质量的多层虚拟交换机,通过支持可编程扩展来实现大规模的网络自动化。设计目标是方便管理和配置虚拟机网络,检测多物理主机在动态虚拟环境中的流量情况。针对这一目标,OVS具备很强的灵活性。可以在管理程序中作为软件switch运行,也可以直接部署到硬件设备上作为控制层。同时在Linux上支持内核态(性能高)、用户态(灵活)。此外OVS还支持多种标准的管理接口,如Netlow、sFlow、RSPAN,、ERSPAN, 、CLI。对于其他的虚拟交换机设备如VMware的vNetwork分布式交换机跟思科Nexus 1000V虚拟交换机等它也提供了较好的支持。
目前OVS的官方版本为1.1.0pre2,主要特性包括
- 虚拟机间互联的可视性;
- 支持trunking的标准802.1Q VLAN模块;
- 细粒度的QoS;
- 每虚拟机端口的流量策略;
- 负载均衡支持OpenFlow (参考openflow–打造弹性化的可控互联网)
- 远程配置兼容Linux 桥接模块代码
OVS获取
由于是开源项目,代码获取十分简单,最新代码可以利用git从官方网站下载。此外官方网站还提供了比较清晰的文档资料和应用例程,其部署十分轻松。当前最新代码包主要包括以下模块和特性:
- ovs-vswitchd 主要模块,实现switch的daemon,包括一个支持流交换的Linux内核模块;
- ovsdb-server 轻量级数据库服务器,提供ovs-vswitchd获取配置信息;
- ovs-brcompatd 让ovs-vswitch替换Linux bridge,包括获取bridge ioctls的Linux内核模块;
- ovs-dpctl 用来配置switch内核模块;
- 一些Scripts and specs 辅助OVS安装在Citrix XenServer上,作为默认switch;
- ovs-vsctl 查询和更新ovs-vswitchd的配置;
- ovs-appctl 发送命令消息,运行相关daemon;
- ovsdbmonitor GUI工具,可以远程获取OVS数据库和OpenFlow的流表。
此外,OVS也提供了支持OpenFlow的特性实现,包括
- ovs-openflowd 一个简单的OpenFlow交换机;
- ovs-controller 一个简单的OpenFlow控制器;
- ovs-ofctl 查询和控制OpenFlow交换机和控制器;
- ovs-pki 为OpenFlow交换机创建和管理公钥框架;
- tcpdump的补丁,解析OpenFlow的消息;
结语
IT领域可以称得上是人类历史上最开放创新,也是最容易垄断的行业。PC行业,wintel帝国曾塑造了不朽的神话,证明谁控制了cpu跟os,谁就控制了话语权,只要PC的软硬件模式不发生革命性变化,wintel帝国的地位将是无人能撼的。后起之秀ARM借助重视能耗的东风,再加上智能终端技术的大发展才展露头角。而在互联网界,思科更是首先把握住了最核心的交换市场,早早登上至尊之位,即使是步后尘的juniper、huawei也只能是虎口夺食,各凭绝技分天下。现在虚拟交换技术的提出将给这一领域带来新的契机,究竟鹿死谁手,更待后人评说。