OpenFlow-建设一个永远不会崩溃的网络

2001年7月18日,一列货运列车在通过巴尔的摩市中心霍华德大街的地下隧道时出轨,导致2万升盐酸泄露,引起了火灾.这次火灾破坏了美国8大互联网供 应商名下的光缆.随后,美国互联网关键设施的运营商Verizon通讯公司与其两座运营大楼之间的连接中断,与其他几家运营商的网络之间的连接也告瘫痪. 在此后的很多个小时里,美国全国的互联网通讯慢得像蜗牛一样.一名维修承包商告诉记者,"那条隧道就好像是光缆世界中的I-95高速公路(美国东海岸主要 的高速公路)一样,是一个终生难遇的弱点."

可是,八年来互联网领域发生的林林总总反复证明,互联网比人们想象的要脆弱得多.在全世界几十个或几百个地方,这个网络的脆弱都显而易见,看起来它就像是命悬一线.

今天,这样严重的故障能够造成的破坏要比2001年的时候大得多.互联网的基础设施大多已经有数十年的历史了,亟需升级换代.不过,很明显,我们不能毁掉整个网络,从头另来,建设一个全新的网络.政府和电信公司都不可能为了应对临时出现的问题而付出铺设额外的连接所需要的巨额成本.既然如此,我们怎样才能保证网络的自我恢复能力呢?

斯坦福大学的计算机科学家麦考恩(Nick McKeown)认为他找到了解决问题的方法.他相信,要建设一个更好的网络,关键在于一个平淡无奇的黑盒子--路由器.

路由器是互联网流量的控制器.数百万个路由器在发挥着作用,连接起组成互联网的成千上万个网络.它们可以为网络服务商引导巨大的访问流量,也可以仅仅提供少数计算机之间的连接.它们根据数据包检查访问者的地址,引导他们到达正确的访问目的地,并且规定他们可以沿着怎样的物理路径到达那里.当连接中断时,它们在帮助数据改道绕过断点上起到了至关重要的作用.

但是眼下,路由器还不是解决问题的方法,它还是问题的组成部分.一方面,发现一条绕过阻塞的的路径可能要花上不少时间.在这段时间里,网络传输拥挤造成网络堵塞严重,很多数据直接就被丢弃了.

虽然这些问题的解决方案有很多,但是我们没有办法对这些方案进行测试.路由器软件的任何更新都应该首先在一个大型网络上进行完全的测试.这个大型网络必须有着与互联网同等程度的复杂性,同时又独立于互联网之外.目前还没有这样的大型网络.

即使你能够对这些方法进行测试,麦考恩说,你也很难把新的路由器软件安装到计算机上.因为每一个路由器大都已经由路由器制造商们按照10到15年以前制定的国际标准进行了预编程.它们都有专用的电路和按固定模式操作的控制数据包路由方式的软件,几乎不能够做任何改变.

现在,麦考恩正与他在斯坦福的同事Guru Parulkar一起,研发能够一举解决所有这些问题的方法.他们试图开发出一个系统,这个系统可以在非工作状态下改变控制路由器的软件,同时提供为安全地进行测试提供一个理想的环境.

他们的这个系统被命名为OpenFlow,已经在斯坦福大学的校园网上运行了,第一个商业产品将在今年上市.OpenFlow并不能像麦考恩所希望的那样解决或避免光缆的瓶颈问题,但是它将能够让互联网适应不断变化的负载,根据网络流量高峰的变化动态地调整路径,给每一位上网浏览者带来更流畅的感受,而不受地震、恐怖袭击还是光缆损毁的影响."我们正在尝试让网络能够不断改进和提高."麦考恩说.

由于测试和更新软件的过程中存在的问题,技术改进只能以极度缓慢的速度进行.西雅图华盛顿大学的汤姆·安德逊(Tom Anderson)说,任何改动都必须非常小心."你必须确保你所做的事情不会带来新的问题."

OpenFlow是一切的关键.在制造商的合作下,一个小型的OpenFlow 程序可以添加到几乎所有的路由器中,并在其中像一个遥控器一样控制着运算法和硬件的运作.通过为路由器的路由表,也就是指定处理流量的具体规则,创建一个界面,允许某一个程序控制路由器定向访问的方式,做出新的路由决定并且执行这个决定.

结果, OpenFlow赋予软件工程师和开发人员为数据包创建路径的能力.他们先在普通电脑上编写运算法则,然后通过安全的连接把运算法则传输给路由器.通过控制流量表,OpenFlow将一个网络分割成为任意数量的,相互独立的部分.这样,研究人员就可以在上面测试或者完善他们的想法了.有了这样一个可以用作实验的"多元的"虚拟网络,开启互联网的进化之路终于成为可能.

为了加快这个进程,麦考恩和他的团队决定将他们的系统作为开源软件,即他们软件的用户可以自由发布这个软件.这无疑将鼓励新思想的出现,有助于这些新思想更快速地进入应用.他说."你将会从分享和建造的优势中受益,推动改革创新的速度",麦考恩说."这在网络中从未出现过."

在斯坦福大学的校园网络上的OpenFlow已经为互联网提供了测试的环境,其研发小组还计划在不久的将来在另外六所美国大学的网络上安装这个系统.他们的目标是允许学生在虚拟网络上实验和尝试新的想法.在已经有一些制造商合作的情况下,研发小组希望能在年内看到与OpenFlow兼容的商用路由器、互联网切换器和无线AP(无线接入点或网络桥接器)上市.



这个想法深深打动了GENI的项目主任艾略特(Chip Elliott),他现在已经是OpenFlow的主要资助者了.他说,将网络开放来进行试验和创新,这实在是一种非常好的方式.其他的选择执行起来都要更加昂贵,更费时日."我真正赞赏的是他们把这一切完全建立在快速的、经济和商用硬件上."

然而,这个项目的成功将取决于是否让主要制造商相信,OpenFlow的长期利好是值得他们进行短期投资的.为了说服他们,去年斯坦福大学的研发小组在斯坦福大学网络上安装了一个运行"赶尽杀绝(shoot-'em-up)"游戏的计算机作为"虚拟服务器".多亏了使用OpenFlow编写的路由软件,使用笔记本电脑的玩家发现即使他们在整个校园的无线接入点之间移动,游戏仍然是流畅地进行."没有一个人掉线",麦考恩说.然后,在游戏进行的过程中,研究人员将虚拟服务器从斯坦福大学挪到了日本的一台机器上.游戏仍然继续,没有任何的中断."你感觉不到它已经被移动了.这是你在目前的网络上无法做到的事情."

除了此类的平稳的重新路由以外,OpenFlow还可以为网络操作者提供一些重要的好处.它可以让他们修改路由规则,使得特定类别的数据通过特定的路径传输,例如,让email的优先级高于音乐下载,或者在一条路径损坏的时候通过大量的替代路径进行扩散."它允许你为网络增加新的容量、新的特性,而不需要对那个专有的盒子的内部进行编程,"麦考恩说."它本质上是一种软件定义的网络."

另外一个OpenFlow可以帮助处理的关键问题是网络安全.在最近捷克发生路由器故障之后,一个专家组仔细检查了路由器和切换器上的工作程序.他们发现,每一个路由器制造商的每一版路由软件都有脆弱点,可以使黑客入侵路由器.换句话说,互联网的基本结构正面临风险.

麦考恩承认,开始的时候,OpenFlow实际上降低了网络的安全性,因为它提供了一个可供攻击的路由器.但是随着工程师们开发新的、更加安全的路由器编码,在不减慢或者中断通讯的情况下在现有的系统上进行测试,这种状况将会迅速改变.这样的话,当一个更新可以安装的时候,补丁可以仅仅通过根据新的说明进行编程完成,而不需要将路由器离线然后重新手工编程.

   OpenFlow最重要的优点之一就是它能够改变数据包通过网络传输的方式.目前,电子邮件在两太特定计算机之间的传输总是使用同一路径.如果路径上的任何一条连接失败了,都会出现故障.所以很多研究团队正在探索"多路径"路由,韩国大田韩国先进科学技术研究所的Gyu Myoung Lee就是这种研究团队中的一员.这些方法包括将一条消息分割成为多个数据包并且通过不同的路径把它们送达目的地,并在那里重新组合起来.Lee相信,将网络通讯更加均匀摊分,可以增加互联网的可靠性,降低拥塞.多个多路径方案,都有一定的竞争力,通过OpenFlow,他们可以在同一网络上进行测试并将他们的优点量化.

这样的测试也许不会太遥远.今年春天,又有纽约市的哥伦比亚大学和亚特兰大的乔治亚理工学院开始向学生教授OpenFlow.与此同时,电子产品生产商NEC也宣布他们将开始制造可以使用OpenFlow的路由器.麦考恩预计,在五年内,一个由编写开源软件来重新定义互联网工作方式的开发者组成的社区,将兴旺起来.他预计,互联网数据中心将成为这个运动的前卫,因为他们有着海量的路由器并且习惯于编写自己的软件."如果同样是在这五年内,这个网络本身变成了由软件来定义的,"麦考恩说,"那样也不错




计算机系统的持续革新已经创造了新的抽象层,从最初的操作系统到如今的虚拟化。每次都抽象底层的硬件,同时在上层创造一个新的用于竞争和革新的平台。然而在网络方面,软硬件的功能划分就不那么清晰,正确的可编程平台变得难以捉摸,以至于我们开发了动态网络、网络处理器和软件路由。一个逐步显现的趋势指出,越来越多的网络基础设施将用数据通道之外的软件来定义。这对于研究者来说是一个大新闻,因为基础设施会更开放、更可编程,并能通过虚拟化使得试验网络在同样的物理数据通道上并存。这对于工业界也是巨大的新闻,因为它将加速网络内部的革新。

从路由器的设计上看,它由软件控制和硬件数据通道组成。软件控制包括管理(CLI,SNMP)以及路由协议(OSPF,ISIS,BGP)等。数据通道包括针对每个包的查询、交换和缓存。这方面有大量论文在研究,引出三个开放性的话题,即“提速2倍”,确定性的(而不是概率性的)交换机设计,以及让路由器简单。

事实上在路由器设计方面我们已经迷失了方向,因为有太多的复杂功能加入到了体系结构当中,比如OSPF,BGP,组播,区分服务,流量工程,NAT,防火墙,MPLS,冗余层等等。个人认为,我们在20世纪60年代定义的“哑的,最小的”数据通路已经臃肿不堪。

对比计算机领域,PC工业已经找到一个简单可用的硬件底层(x86指令集)。在软件定义方面,顶层(应用程序)和底层(操作系统和虚拟化)都在爆炸式地发展。开源方面,有10万个开发者参与了标准化进程,加速了创新。可见,硬件底层+软件定义的网络+开源文化就能推动创新,网络创新亦需如此,这个底层需要我们去实现。

一个简单稳定通用的底层需要具备以下属性:

1. 允许应用程序的繁荣发展。比如在因特网领域,稳定的IPv4带来了Web的繁荣;

2. 允许其顶部的基础设施能用软件定义。比如因特网领域的路由协议、管理等;

3. 体系结构本身能够快速创新。

回顾网络创新的历史,在20世纪90年代中期认为“推动网络的创新,需要在一个简单的硬件数据通路上编程”,即动态网络。它的问题在于隔离性、性能、复杂度。20世纪90年代后期认为,“为了推动网络创新,我们需要底层的数据通道是可编程的”,也即网络处理器。它的问题在于加剧了数据通道底层的复杂度。事实上在网络领域,我们一直以来没有分清一个简单通用的硬件底层与一个开放的上层编程环境之间的界限。之前的尝试往往犯以下错误:

1. 假设当前的IP路由底层是固定的,并试图在其外部编程,包括路由协议;

2. 自上而下地定义编程和控制模型。(但事实上Intel在选择x86指令集的时候,并没有定义Windows XP、Linux或者VMware)

因此我们需要做以下几件事:

1. 在底层和开放编程环境之间要有一个清晰的分割;

2. 设计一个简单的硬件底层,能够包括和简化当前的底层;

3. 极少的使用事先形成的有关底层如何被编程的想法;

4. 强隔离。

在设计硬件底层方面,我们要用最少的基于流的数据通路来缓存决策,也即实现一个基于流的底层。我们需要对流进行灵活的定义,如单播、组播、导航点、负载均衡,并且支持不同类型的流的聚类;我们需要控制流,把流作为编程的实体:能对它路由、私有化、移动……我们还要吸取包交换的益处,因为它切实可行,能全局部署,而且很有效率——当然是在它很简单的时候。

综合上述考虑,我们定义了一个名为“流空间”的底层,它有以下属性:

1. 后向兼容。当前的分层结构是它的一个特例,而且端点不需要修改;

2. 容易在硬件上部署,比如在每个交换机上部署TCAM流表;

3. 流之间能清晰分离,具有简单的几何结构,能证明哪个流能或者不能通讯。

作为底层,它有以下属性:

第一,基于流;第二,对每个流只有少量的动作,如转发给端口;转发给控制器; 重写头,在流空间之间路由;根据最小/最大速率分隔带宽等;第三,外部的针对流表的开放API。

我们开发了一个稻草人版的的基于流的底层OpenFlow。我们的第一步是定义底层,即一个针对流表的开放外部API。它的1.0版本要求易于添加到现有的硬件交换机、路由器、API上,目前已经完成。它的2.0版本需要开发针对OpenFlow优化的硬件,以及通用的“流空间”,期限是2011年。我们的第二步是部署,首先在校园里部署,再在全美国的科研骨干网络上部署,允许研究人员自由地在其顶部创新。

使用OpenFlow,我们可以静态地划分VLAN,比如将生产用和研究用的VLAN划分开来;我们可以设计自己的路由协议,比如单播、组播、多径、负载均衡;可以做接入控制、家庭网络管理、移动性管理、能量管理;包处理器(在控制器上);设计自己的IP协议;网络测量和虚拟化,比如在交换机上实现虚拟化OpenFlow。

这样我们就拥有了一个简单、可用、稳定的硬件底层,它具有可编程性,强隔离模型,支持其上的自由竞争,从而加速创新。

目前,OpenFlow已经在美国斯坦福大学、Internet2、日本的JGN2plus以及其他的10-15个科研机构中部署,计划将在2009年10月前进行规模的机构部署,应用于“GENI Enterprise”项目,并在国家科研骨干网以及其他科研和生产中应用。



附:

1.安装switch


http://www.openflow.org/wp/deploy-labsetup/#3_1_1_Stanford_Software_Referenc


Step1. Download Software


 $ git clone git://gitosis.stanford.edu/openflow.git $ cd openflow $ git checkout -b openflow.v1.0 origin/release/1.0.0
Step2. Compile


 $ ./boot.sh $ ./configure $ make
# ./udatapath/ofdatapath --detach punix:/var/run/dp0 -d 004E46324304 -i eth1,eth2


# ./secchan/ofprotocol unix:/var/run/dp0 tcp:192.168.0.100:6633
 


 


 


 


 


 


 


 


 


 


2.安装Controller


http://noxrepo.org/noxwiki/index.php/NOX_Installation


git clone git://noxrepo.org/nox   cd nox
 ./boot.sh   mkdir build/   cd build/   ../configure   make -j 5
 cd src/   ./nox_core -h
 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


3.安装FlowVisor


 https://openflow.stanford.edu/display/DOCS/Flowvisor


Install from Source


Install ant and java in order to build flowvisor:


apt-get -y install ant sun-java6-jdk
Now build it:


make CFLAGS="-I/usr/lib/jvm/java-6-sun/include -I/usr/lib/jvm/java-6-sun/include/linux"
(FlowVisor also works with openjdk, but you will have to adjust the commands accordingly)


If the build ends with BUILD SUCCESSFUL then install flowvisor (run as root if installing to /usr/local):


make install
When prompted, set the prefix to /usr/local and the user/group to the user/group you want the flowvisor to run as. Next, generate a default configuration file with:


fvconfig generate /usr/local/etc/flowvisor/flowvisor-config.xml
 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


4.安装Mininet


http://yuba.stanford.edu/foswiki/bin/view/OpenFlow/MininetGettingStarted


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


5.安装OMNI


http://www.gta.ufrj.br/omni/index.php?option=com_content&view=article&id=34&Itemid=28


Integration


To run OMNI, you must have every piece configured with the others. This guide will help you configure you system to run OMNI.


Starting FlowVisor


First of all, we need to start FlowVisor:


flowvisor /usr/local/etc/flowvisor/flowvisor-config.xml
 


Starting NOX


After that, we need to start Nox:


cd <nox base dir>/build/src


./nox_core -v -i ptcp:<controller port> mywebserver
 


Starting OpenFlow


Then, we can start the OpenFlow switches. In order to simplify this task, we created an interface tool, called startOpenFlow. Thus, download the tool and copy it to your /usr/bin/ directory, running the following command:


wget http://www.gta.ufrj.br/omni/phocadownload/startOpenflow.py
chmod +x startOpenflow.py
cp startOpenflow.py /usr/bin/
 


To run the starting tool (iface 1, ..., iface n are the names of the interfaces which you wish to add to the OpenFlow switch. switch IP is the IP address that should be assigned to the swtich):


startOpenflow.py <iface 1>...<iface n> -c <controller IP>:<controller port> -ip <switch IP>
 


After starting the OpenFlow process into all switches, your OpenFlow network is already done. The next step is to start the controlling web interface.


 


 


Downloading and Configuring Web Interface


First, download the Web Interface at our download page, or following these commands, and unzip it.


wget http://www.gta.ufrj.br/omni/phocadownload/web-interface-1-0.tar.gz
tar - xzf web-interface.tar.gz
 


Now, it is already installed. The only requirements before starting the web interface is to install Graphviz and configure some parameters of the web interface.


 


Graphviz is the program used by the web interface to draw the topology graph. To install this program, run this command:


apt-get install graphviz


 


After that, configure the Web Interface parameters. Open config.xml with the text editor of your choice and change the following parts to your network configuration (in example we use the text editor called nano, but you can use anyone):


cd <web interface base directory>
nano config.xml
The text in red must be changed to your network setup:
<config>
            <port>web interface listening port</port>
            <server>
                        <name>controller name OR controller IP address</name>
                        <port>controller listening port</port>
            </server>
</config>
;
 


Run the Web Interface Server:


python webserver.py
 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


6.安装expedient


InstallingExpedientOIM < OpenFlow/Deployment/HOWTO/ProductionSetup < Foswiki


OpenFlow » Deploy Expedient and Opt-in Manager


InstallingExpedientOIM < OpenFlow/Deployment/HOWTO/ProductionSetup < Foswiki


GEC8 Demo - OpenFlow Wiki


你可能感兴趣的:(编程,网络,互联网,download,interface,路由器)