APP下载

基于Open vSwitch的SDN网络平台构建方法

2014-08-06王文涛王奇枫

关键词:流表PC机网卡

王文涛,王奇枫,郭 峰,唐 菀

(中南民族大学 计算机科学学院, 武汉 430074)

软件定义网络(SDN),是一种新型网络架构,它的核心技术OpenFlow将网络设备的控制与数据平面分离,从而实现网络流量的灵活控制,为核心网络及应用的创新提供良好的平台[1].为此,它吸引了学术界与企业界的重大关注,一群网络管理者、服务提供商和销售商建立起开放网络基金会ONF.ONF是一个非盈利性组织机构,它致力于创新和发展新型网络架构.ONF成立一年,超过80家国内外公司加入其中,有Google、Facebook、微软、华为、中兴、百度等[2].

从2006年诞生到现在,国内外发表的文献数量呈爆发式增长,但大部分还是停留在概念及框架设计上,例如SDN的综述、发展趋势、安全性、数据储存、昂贵设备、抽象应用等,另外,大部分文献都采用仿真的方法,没有在实际环境中进行测试[3].因此,本文针对此问题在基于x86架构的物理环境下通过Open vSwitch搭建一个SDN网络测试平台,并进行连通性测试及Internet访问测试,总结经验.

网络设备一般是由控制平面和数据平面组合而成,控制平面为数据平面规划转发路径和提供转发策略,数据平面是执行控制平面策略的实体.在传统网络中,控制逻辑与数据转发紧紧地耦合在网络设备上,导致了网络控制平面管理的复杂化,使得网络控制层面新技术更新缓慢,其较低的灵活性和扩展性严重阻碍了网络的飞速发展.SDN作为一种控制与转发平面分离并可编程的网络架构,它的核心思想是把传统网络设备紧耦合的网络架构解耦成应用层、控制层、基础设施层分离的架构,并实现集中控制[4].

OpenFlow是一组协议和API,它起源于斯坦福大学的Ethane项目,实现可编程网络的思想.从SDN整个架构看,OpenFlow协议又是控制器与交换机中的通信协议.控制器使用OpenFlow协议对交换机中的流表表项进行添加、更新与删除.2009年12月,OpenFlow.org发布了OpenFlow标准的1.0版本,在2011年2月,OpenFlow.org继续发布标准1.1版,后由ONF负责.到目前为止,最新的版本为1.4,它发布于2013年10月.由于标准演进得太快,硬件厂商不敢贸然投资生产,影响了OpenFlow的产业化[5].研究者一般使用仿真环境或者NETFPGA做实验,但是仿真环境存在缺陷,NETFPGA又太昂贵.因此,使用PC机配置成SDN交换机来搭建SDN网络显得非常有意义,方便研究者在更真实的SDN网络下做研究.

1 SDN网络的组成

一个简单的SDN网络由控制器、交换机、主机构成,其结构如图1所示.

图1 简单SDN网络结构图Fig.1 Simple structure of SDN network

控制器是软件定义网络的大脑,是SDN网络的策略控制点,南向接口用于向交换机传递信息,北向接口用于承载业务逻辑的应用程序.目前支持OpenFlow的控制器有NOX、POX、SNAC、Beacon、Trema、Maestro和Floodlight[6].

Floodlight是一款非常流行的控制器,它是基于斯坦福大学的Beacon控制器之上开发的.Floodlight是一款Apache授权、基于Java的OpenFlow控制器.Floodlight核心架构是模块化的,包括拓扑管理、设备管理、路径计算、网页访问基础设施、计数存储和面向状态存储的广义存储抽象.这些组件可以看成是可加载的、带有输出状态接口的服务.这个控制器本身拥有一些可扩展的REST API集合和事件通知系统.这些API允许应用程序获得和设置控制器状态,并利用Java事件监听器预定控制器发出的事件[7].

Floodlight可以看成是一个以Java/Jython为中心的开发环境,拥有丰富的开发工具箱.由于Floodlight的图形界面直观,因此本文采用Floodlight作为控制器.

每个OpenFlow交换机都有一张流表,对包进行查找和转发.交换机可以通过OpenFlow协议经过一个安全通道连接到控制器,对流表进行查找和管理.交换机对每一个包在流表中进行查找,如果匹配则执行相关动作,否则通过安全通道将包转发到控制器,让控制器来决策如何处理无匹配流表的包,并添加和删除流表项[8].

Open vSwitch是一个虚拟交换软件,它被设计用来使大规模网络通过编程扩展自动化,支持标准管理接口和协议.环境搭建中,PC机上装Open vSwitch软件,将PC配置成一台OpenFlow交换机[9].

2 SDN网络的详细设置

本文搭建的SDN网络的拓扑结构如图2所示,其中包括一台充当控制器的PC机,三台充当OpenFlow交换机的PC机,一个普通家用路由器,用于控制器与交换机之间的通信.两台笔记本,其中一台充当主机1,另外一台在不同的测试中分别充当主机2、主机3、主机4.

2.1 将PC机配置成OpenFlow交换机

需要使用Open vSwitch配置成交换机的PC机至少需要2张物理网卡;如果需要做单交换机测试,如图1所示,连接2台物理主机,一般需要3张或3张以上的网卡,其中一张网卡(eth0)用于连接控制器,其余网卡用于连接主机.控制器和交换机的主要参数见表1.

Open vSwitch 中的Bridge(网桥)相当于是一个以太网交换机,一个主机可以创建多个Bridge.S1、S2、S3都只创建一个Bridge,相当于把S1、S2、S3分别作为一台独立的OpenFlow交换机,配置成OpenFlow交换机的PC机都是4张物理网卡,每台PC机使用Open vSwitch的命令创建一个网桥,名字叫br0,并将另外3张物理网卡添加为该网桥的3个端口.此时,S1、S2、S3的eth0相当于是普通交换机的console口,如图3所示.

图2 总体拓扑结构图Fig.2 Major topology structure

参数类型不同设备C0控制器S1交换机S2交换机S3交换机IP192.168.3.176/24192.168.3.171/24192.168.3.172/24192.168.3.173/24eth0c8:9c:dc:54:eb:1600:11:11:48:2d:2d00:11:11:34:ef:c800:11:11:34:e9:e2eth1-00:e0:4c:51:6e:ec00:58:1c:f7:ee:c900:05:8c:20:dd:96eth2-00:e0:4c:51:6f:4000:58:1c:f7:ea:b2e0:05:c5:73:08:74eth3-00:e0:4c:72:e1:e100:58:1c:f7:ed:a300:e0:4c:84:d6:89CPUintel core i3 550(3.2GHz×4)Intel Pentium4(2.8GHz)Intel Pentium4(2.8GHz)Intel Pentium4(2.8GHz)内存2GB1GB1GB1GB系统ubuntu12.04ubuntu12.04ubuntu12.04ubuntu12.04Open vSwitch版本1.4.61.4.61.4.61.4.6

图3 OpenFlow交换机物理网卡设置Fig.3 OpenFlow switches physical network cards config

将eth0的IP地址配置成普通路由器LAN口网段的一个IP地址,将控制器的IP地址设置为192.168.3.176/24,与控制器相连的网卡,即所有交换机的eth0的IP地址全部设置为192.168.3.×/24.

以交换机1为例,其步骤如下:

(1)使用如下命令配置eth0的IP地址:

sudo ifconfig eth0 192.168.3.171/24 up

(2)使用如下命令增加网桥:

sudo ovs-vsctl add-br br0

(3)将eth1、eth2、eth3加入到br0中:

sudo ovs-vsctl add-port br0 eth1

sudo ovs-vsctl add-port br0 eth2

sudo ovs-vsctl add-port br0 eth3

2.2 连接控制器

本设计采用的是Floodlight控制器,在配置好控制器的IP地址之后,其步骤如下:

(1)运行Floodlight控制器

java -jar floodlight/target/floodlight.jar

(2)在配置成OpenFlow交换机的PC上执行命令连接到控制器

sudo ovs-vsctl set-controller br0 tcp:192.168.3.176:6633

(3)查看br0当前的信息(如图4)

sudo ovs-vsctl show

(4)在运行控制器的主机上用浏览器打开链接地址http://localhost:8080/ui/index.html,可以查看连接上的交换机及与交换机相连的主机的情况.

图4 OpenFlow交换机连接控制器Fig.4 OpenFlow switches connect controller

2.3 测试

在SDN网络中,流表是交换机转发策略控制的核心数据结构.交换芯片通过流表表项来决策进入交换机的网络流量采取合适的行为,因此可以通过两台主机之间的通信结果和查看交换机上的流表来判定SDN网络是否搭建成功.

每个交换机都有一个datapath_id(简称:DPID)与之相对应,控制器通过DPID向交换机发送信息.DPID是由64位组成,前16位全为0,后48位是加入到交换机端口的网卡中MAC地址最小的一个,即eth1、eth2、eth3中MAC最小的.如S1中,最小的为00:e0:4c:51:6e:ec,见表1与表2.

表2 交换机的主要参数

2.3.1 测试主机1与主机2的连通性

当主机1 ping 主机2的时候,可以看到交换机1多了两条信息,分别是从端口1到端口2和端口2到端口1的流表(见表3).两台主机(见表4)也因为在交换机有了这两条流表而能够相互通信,见图5与图6.

表3 主机在同一台交换机下的交换机流表Tab.3 The main flows of switches when hosts are connected to the same switch

表4 主机参数Tab.4 The main parameters of the hosts

图5 主机1 ping通主机2Fig.5 Host1 ping host2

图6 主机2 ping通主机1Fig.6 Host2 ping host1

2.3.2 测试主机1与主机3的连通性

主机1和主机3通信,同样可以看到OpenFlow交换机上有4条流表,交换机1和交换机2分别有2条,每个交换机中都有一条流表是用来使两台交换机之间通信.交换机1的流表表示为从端口1(eth1)和端口3(eth3)进出,交换机2的流表表示从端口1(eth1)和端口2(eth2)进出.结合图2与表5,从交换机上的信息可以看到端口号并不是与物理网卡号相对应,这与网桥有关,端口号是物理网卡MAC地址按从小到大排序,这并不影响实验结果的正确性.

表5 主机连接到相邻交换机的各交换机流表Tab.5 The main flows of switches when hosts are connected to the adjacent switches

表6 主机连接到不相邻的交换机的各交换机流表Tab.6 The main flows of switches when hosts are connected to the nonadjacent switches

2.3.3 测试主机1与主机4的连通性

与主机1和主机3通信类似,同样可分别在交换机1、交换机2、交换机3上看到2条流表,一共6条.

2.3.4 测试主机1连接Internet

由于主机1的IP地址是10.0.0.1/8,所以它能访问的IP地址有10.0.0.1/8 ~ 10.255.255.255/8.在设置Internet时增加一个路由器,WAN口设置为网络服务提供商提供的IP地址,LAN口的网关地址设置成10.255.255.254/8.于是在主机1配置时将默认网关地址设置为10.255.255.254,主机1就可以通过这个新增的路由器上网.

图7 主机1通过网关10.255.255.254/8上网Fig.7 Host 1 access Internet through gateway 10.255.255.254/8

3 结语

从SDN网络的搭建可以看出,交换机和控制器之间的通信是与主机间的通信相对独立的,主机访问不到控制器,但是控制器可以通过交换机返回的信息来控制多个主机间的通信.本文实现了在硬件平台上搭建SDN网络测试平台,相对于NETFPGA有着价格低廉的优势,为进一步研究SDN网络做了很好的铺垫,为将来更深层次的网络测试如流量工程、负载均衡等[10,11]打下坚实的基础.

参 考 文 献

[1] McKeown N, Anderson T, Balakrishnan H, et al. OpenFlow: enabling innovation in campus networks [J]. ACM SIGCOMM Computer Communication Review, 2008, 38(2): 69-74.

[2] Shah S A, Faiz J, Farooq M, et al. An architectural evaluation of SDN controllers [C]// IEEE. 2013 IEEE International Conference on IEEE. Budapest: ICC, 2013: 3504-3508.

[3] 陈 阳. OpenFlow网络中虚拟化机制的研究与实现[D]. 北京: 北京邮电大学, 2013.

[4] 肖佩瑶, 毕 军. 基于OpenFlow架构的域内源地址验证方法[J]. 小型微型计算机系统, 2013, 34(9): 1999-2003.

[5] 左青云, 陈 鸣, 赵广松, 等. 基于OpenFlow的SDN技术研究[J]. 软件学报, 2013, 24(5): 1078-1097.

[6] Nadeau T D, Gray K. SDN: Software Defined Networks [M]. 北京: 人民邮电出版社, 2013: 71-113.

[7] 张顺淼, 邹复民. 软件定义网络研究综述[J]. 计算机应用研究, 2013, 30(8): 2246-2251.

[8] Cahn A, Hoyos J, Hulse M, et al. Software-defined energy communication networks: from substation automation to future smart grids [C]// IEEE. 2013 IEEE International Conference on IEEE. Vancouver: SmartGridComm, 2013: 558-563.

[9] Gurbani V K, Scharf M, Lakshman T V, et al. Abstracting network state in Software Defined Networks (SDN) for rendezvous services [C]// IEEE. 2012 IEEE International Conference on IEEE. Ottawa: ICC, 2012: 6627-6632.

[10] 王文涛,郭 峰,王奇枫,等.N次随机丢包的被动队列管理算法[J].中南民族大学学报:自然科学版,2014,33(2):100-105.

[11] 王文涛,郑 芳,王奇枫,等.基于ONE平台的机会网络路由协议仿真分析[J].中南民族大学学报:自然科学版,2014,33(3):110-114.

猜你喜欢

流表PC机网卡
基于匹配动作表模型的可编程数据平面流表归并
基于时序与集合的SDN流表更新策略
部署Linux虚拟机出现的网络故障
软件定义网络中OpenFlow流表空间优化技术研究进展
Server 2016网卡组合模式
一种高效的OpenFlow流表拆分压缩算法
基于三菱FXPLC的感应淬火机床与PC机的串行通信实现
用VC++实现PC机与单片机的串行通信
VC.NET下实现dsPIC单片机与PC机的通信
基于单片机与PC机的电气量采集系统设计