OpenFlow路由器实现方案研究_第1页
OpenFlow路由器实现方案研究_第2页
OpenFlow路由器实现方案研究_第3页
OpenFlow路由器实现方案研究_第4页
OpenFlow路由器实现方案研究_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品

OpenFlow路由器实现方案研究郭宝山,王振凯**(北京邮电大学信息与通信工程学院,北京100876)510152025303540

摘要:OpenFlow是一种可以对网络交换机和路由器的转发表进行远程控制的开放接口,利用它可以方便地构建OpenFlow交换机进而搭建试验网络。但目前OpenFlow尚不支持构建路由器,极大地限制了OpenFlow的应用。本文就针对这一问题提出了一种构建OpenFlow路由器的方案,通过定义新的OpenFlow动作处理链路层与网络层数据流,成功实现了路由器的功能。同时说明了实现原理并给出了程序实现的伪代码,之后在Mininet中建立虚拟网络环境进行了仿真测试,最后在实际网络中进行了验证试验关键词:OpenFlow;交换机;路由器;Mininet中图分类号:TP393ASolutiontoBuildOpenFlowRouterGUOBaoshan,WANGZhenkai(SchoolofInformationandCommunication,BeijingUniversityofPostsandTelecommunications,Beijing100876)Abstract:OpenFlowisanopeninterfaceforremotelycontrollingtheforwardingtablesinnetworkswitchesandrouters.Uponthislow-levelprimitive,researcherscanbuildOpenFlowswitcheasilyandfurthermoreexperimentalnetwork.ButthereisnodetailsolutiontobuildOpenFlowrouter,limitingusageofOpenFlowgreatly.ThisarticlepresentsasolutiontobuildOpenFlowrouterbydefiningnewOpenFlowactionstohandlepacketsofTCP/IPprotocol.Atthesametime,thisarticlegivestheprincipleandpseudo-code.ThennetworksimulationisdoneinMininet,whichisavirtualnetworkenvironment.Finallydemonstrationtestisexecutedinphysicalnetwork.Keywords:OpenFlow;switch;router;Mininet0引言OpenFlow是一种可以对交换机和路由器的转发表进行控制的一种开放接口[1],其提出的目的是为网络研究人员提供一种可在现有网络中运行验证性协议的方法。OpenFlow技术基于以太网交换机,拥有一个流表处理和转发数据,并有一套向流表中添加和删除流的标准接口。这样就赋予了研究人员对网络中数据流的控制和管理能力,提供了一种在网络中运行新协议并进行验证的可行性方法。OpenFlow交换机的工作机制是将收到的数据包与流表中所有流进行匹配,对于匹配的数据包则按照流的动作设定进行处理,对于不匹配的数据包则发送到远程的控制器Controller,由Contoller决定处理方式。Controller处理报文的方式是直接广播从交换机的所有出口发送出去,这是交换机的典型工作方式,但是却不适于路由器的工作。要想将OpenFlow交换机配置成路由器工作,OpenFlow交换机就需要能够处理ARP、IP报文,并能够请求其他路由器或主机的MAC地址。由于OpenFlow是通过流对数据处理的,所以可以通过定义新的流来实现路由器的功能。本文定义了两个新的OpenFlow动作来处理ARP报文和网络层报文,既能够以流的方式手动添加进OpenFlow交换机,也可以通过修改Controller控制器策略,由Controller自动添加。这样OpenFlow交换机便具有了处理ARP报文和网络层报文的能力,向交换机中添作者简介:郭宝山,(1987-),男,在读硕士研究生,下一代网络,虚拟化交换机、路由器。通信联系人:王振凯,(1974-),男,副教授,从事下一代网络、P2P技术、分布式多媒体、嵌入式系统方面的研究工作.E-mail:wangzk@-1-

加这些具体的流,即可完成路由器的配置。此方案具有简单、方便、灵活等优点。1OpenFlow交换机结构简介45

OpenFlow交换机至少需要包含三个组成部分:交换机中的流表,与远端控制器连接的安全通道,连接使用的标准OpenFlow协议

[2]项都可以匹配一种数据流类型并可以依据动作设定做相应的处理。安全通道可以将交换机与一个远程的OpenFlow控制器建立连接,允许通信协议和数据包的传输并保证数据传输的安全性。标准的OpenFlow协议则定义了控制器与交换机通信的标准接口与消息类型。5055606570

标准的OpenFlow交换机的结构示意图如图1所示。图1OpenFlow交换机结构示意图Fig.1ThestructureofOpenFlowswitch其具体工作原理如下:(1)OpenFlow控制器通过安全通道与OpenFlow交换机建立连接,并对交换机中的流表进行控制和管理。(2)交换机中的流表保存很多流项,每个流项由匹配头域、计数器和设定动作组成[3]。(3)流表对从各个端口到来的数据包进行查表匹配,找到匹配的流,修改计数值,并依据设定动作来对数据包进行处理。(4)流表将无法匹配的数据包发送到远程的控制器,由控制器决策处理方式。2构建OpenFlow交换机仿真实验2.1虚拟网络环境Mininet介绍Mininet是一个构建虚拟网络的软件工具。应用Mininet可以在一台机器上创建一张多至数百个节点的大规模虚拟网络,节点类型和拓扑结构可以自行定义[4]。研究人员可以在Mininet创建的虚拟网络中进行研究、开发、学习、测试、调试等各项工作。Mininet支持的特性有:(1)提供一种简单低成本的网络测试平台来开发OpenFlow应用程序。(2)允许多个开发人员在一个拓扑结构中同时独立地开发。(3)支持复杂拓扑结构的网络测试。(4)提供方便地python接口来创建和测试网络。Mininet还有其他一些特性,不做具体介绍。正是由于Mininet支持方便地进行OpenFlow应用程序的开发,所以本文选择Mininet来搭建虚拟网络,构建OpenFlow交换机并进行仿-2-。交换机中的流表由很多流项组成,每一个流。交换机中的流表由很多流项组成,每一个流真实验。

7580859095100

在安装Mininet时,帮助文件中给出的安装步骤并不是都需要做的。首先安装兼容Mininet的Linux内核,当Linux版本大于2.6.26时这一步可以忽略。然后安装Mininet依赖的库文件,这一步必须执行。然后安装OpenFlow1.0版本,对于需要仿真和开发OpenFlow应用的需求来说这一步必须执行。然后安装OpenVswitch以及内核模块,本文中不使用OpenVswitch,所以这一步可以忽略。最后是安装基于策略的远程控制平台NOX[5],由于本文中使用OpenFlow自带的Controller作为控制器,所以这一步也可以忽略。2.2在Mininet中构建OpenFlow交换机在Mininet中计划构建的OpenFlow交换机和虚拟网络拓扑结构如图2所示。在此拓扑结构中,s1和s2是OpenFlow交换机,h3和h4是分别与s1和s2连接的主机,c0是与OpenFlow交换机s1和s2连接的远程控制器。创建这样的虚拟网络,使用的命令为:mn--topolinear,2--switchuser--controllerremote.其中,--topolinear,2代表创建两个交换机和两个主机,并一一对应;--switchuser表示使用OpenFlow1.0版本的用户级程序来创建OpenFlow数据通路;--controllerremote表示使用远程的OpenFlow控制器来对底层数据进行处理。图2在Mininet中构建的网络拓扑图Fig.2ThetopologyofOpenFlowswitchnetworkinMininet2.3OpenFlow交换机仿真运行创建好虚拟网络之后,可以在Mininet中用dump和net命令查看网络结构,如图3所示。由图3可见,用Mininet命令创建的虚拟网络与图2所示要创建的网络结构完全一致。图3Mininet中的OpenFlow网络Fig.3OpenFlownetworkinMininet由于OpenFlow交换机s1和s2要由远程的Controller控制数据流的转发和处理,所以若不启动Controller进程,主机h3是无法连通h4的,只有在启动了Controller进程之后,-3-h3才能连通h4。图4说明这种情况。图4主机h3和h4之间的连接状态

105110115120

Fig.4Theconnectionstatebetweenh3andh43构建OpenFlow路由器方案研究3.1问题提出在Mininet中构建OpenFlow路由器并创建由路由器连接的虚拟网络。可将上节中创建的OpenFlow交换机和虚拟网络稍作修改,删除一个交换机,将另外一个交换机配置成路由器,并配置路由器接口的IP地址分别为和不同网段的地址,然后分别配置主机h2和h3的地址为0和0两个网段的地址,其拓扑结构如图5所示。这样就创建了两个子网络,OpenFlow路由器R1的作用就是在两个子网络之间转发和处理数据包。为了验证两个网段的联通性,主机h2和h3之间必须能够互相传输ICMP和IP数据。首先创建虚拟网络拓扑结构:mn--toposingle,2--switchuser--controllerremote.然后编写一个脚本文件配置主机和路由器的IP地址如图6所示。图5Mininet中OpenFlow路由器连接拓扑Fig.5ThetopologyofOpenFlowrouternetworkinMininet-4-

图6主机与路由器配置脚本Fig.6Theconfigurationscriptsofhostsandrouter125网络拓扑结构和地址信息已配置完毕,执行h2pingh3的连接命令,结果是主机h2和h3无法连通。这说明了主机h2与h3之间的路由器R1并没有起到路由数据的功能。这个问题是怎么造成的呢?原因又是什么呢?3.2问题分析130135140145150155

主机h2无法连接h3,其根本原因是h2与h3之间的ARP和ICMP数据包得不到正确的处理和传输。那么首先分析h2pingh3的具体过程。h2向h3发送ICMP请求之前,会向路由器R1发送ARP请求,请求R1的MAC地址,而目前OpenFlow并没有定义对ARP请求处理的动作,无法对ARP请求报文进行处理和应答,控制器只是把ARP请求报文广播发送了出去。同时OpenFlow也没有处理ARP应答数据包的动作。这是问题的原因之一。在h2获取到路由器R1的MAC地址后,会通过R1向h3发送ICMP请求报文,R1需要将此请求转发给h3,但由于R1并不知道h3的MAC地址,所以无法处理ICMP请求,控制器也只是广播发送。这是问题原因之二。要将OpenFlow交换机配置成路由器,就要解决这两个问题。只有OpenFlow交换机能够正确处理ARP请求和应答、ICMP请求和应答后,OpenFlow交换机才能够在不同网段正确地转发数据,才能作为一台路由器正常工作。3.3解决方案通过以上对问题的分析,OpenFlow交换机无法拥有路由器的功能是由于OpenFlow控制器处理数据流策略和能力有限,交换机无法正确地对ARP和ICMP请求进行处理和响应。那么本文提出的解决方案是:对于第一个问题,要新定义OpenFlow动作来处理ARP请求包。当然OpenFlow也没有处理ARP应答数据包的动作,在设计这个新动作时应该既可以处理ARP请求也可以处理ARP应答。对于第二个问题,路由器R1应该设计有一个缓存,保存IP-MAC地址映射信息,R1在接收到ICMP请求后,直接在缓存中查找目标IP对应的MAC地址,找到后修改ICMP请求包的MAC源和目的地址,然后发送到对应的端口。若在缓存中没有对应的MAC地址信息,则需要先向目的主机发送ARP请求,收到ARP应答信息后将目的主机的IP-MAC映射信息保存到缓存中。这样路由器R1以后就可以通过查缓存将收到的ICMP请求包正确地转发出去。对ICMP的应答包的处理方式与ICMP请求包处理方式相同。路由器对IP数据包的处理同ICMP数据包一样。所以可以再定义一个新的OpenFlow动作处理网络层数据包,对ICMP和IP包做相同的处理。解决了以上两个问题,OpenFlow交换机本身就拥有了处理和响应ARP和网络层数据报-5-

文的能力,也可以向其他的路由器或主机请求ARP地址映射信息。就可以正确地处理和转发ARP与网络层数据报文,在不同网段之间路由和转发数据,配置成OpenFlow路由器。3.4程序实现相关伪代码160165170

由于篇幅有限,本文只列出程序实现的伪代码。如图7所示。在图中的伪代码中,结构体port代表路由器的某个网络端口的结构;结构体ofpbuf中保存了OpenFlow路由器接收到的以太网数据包;结构体ofp_action_header保存了流动作信息。在以上两个处理函数中,只是处理了buffer中的数据包数据,并没有将buffer发送出去,实际的发送的过程是在处理OFPAT_OUTPUT动作时发生的。图7程序实现伪代码Fig.7Thepseudo-codetohandleARPandnetworkpackets3.5OpenFlow路由器仿真运行在OpenFlow基础上新定义两个处理ARP和网络层数据包的动作之后,就可以向OpenFlow的流表中添加如图8所示的流。-6-

175180185190195

图8配置OpenFlow路由器需要添加的流Fig.8TheflowsneedtoaddtoOpenFlowrouter图8中第一个流处理ARP请求和应答表,并保存IP-MAC映射信息保存到缓存中。第二和第三个流分别处理到达和网段的ICMP数据包。第三和第四个流分别处理到达和网段的IP数据包。在向OpenFlow路由器R1中添加图8所示的流之后,重新执行h2pingh3命令,结果如图9所示。图9OpenFlow路由器仿真运行结果Fig.9ThesimulationresultofOpenFlowrouter从图9可见,通过以上的方案,解决了OpenFlow交换机无法处理ARP和网络数据包的问题,成功地将OpenFlow交换机配置成了一台路由器。4OpenFlow路由器实际网络环境验证实验4.1实际网络环境说明本实验所搭建的实际网络拓扑结构与第三节中给出的虚拟网络拓扑结构一致。路由器R1和主机h2、h3是三台Linux主机,其网络地址也与虚拟网络中分配的一致,分别为:R1-eth0:;R1-eth1:;h2-eth0:0;h3-eth0:0主机h2运行ApacheWeb服务器。实验预期结果是主机h3可以通过Web浏览器浏览主机h2中Web服务器的主页。4.2实验结果通过与虚拟网络环境中一样的配置步骤,主机h3成功访问到了h2的Web主页。主页配置和访问结果分别如图10和11所示。-7-200

图10web服务器主页配置

Fig.10Themainpageconfigurationofwebserver图11主机h3访问web服务器结果205210215220225

Fig.11Theresultbrowsingwebserveronh3由访问结果图可知,主机h3成功访问到了主机h2上的Web服务器,验证了实验前的预期结果。说明OpenFlow路由器R1成功路由并转发了两个网络之间的数据。5结论本文通过分析OpenFlow不支持配置成路由器的原因,提出了构建OpenFlow路由器的解决方案。通过在OpenFlow交换机中添加处理ARP和网络层数据包的动作流,将OpenFlow交换机配置成了简单的路由器,解决了这一问题。最后在Mininet虚拟网络环境实验和真实网络环境

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论