基于OpenFlow的虚拟网实现研究*
2015-06-23顾宪锋
顾宪锋
(中国电子科技集团公司第28研究所,江苏 南京 210007)
基于OpenFlow的虚拟网实现研究*
顾宪锋
(中国电子科技集团公司第28研究所,江苏 南京 210007)
软件定义网络是一种数据和控制平面分离、软件可编程的新型网络架构及技术,控制平面使用以OpenFlow为代表的协议对转发平面进行集中式控制。SDN架构的这些特点能很好地满足了云计算对虚拟网络的集中化、标准化、自动化的配置管理要求。针对传统虚拟网络技术支持云计算平台的不足,提出基于OpenFlow的SDN技术设计虚拟网络的思路,论述了几种虚拟网络实现的原理与处理流程,并给出了模块化的软件设计及部分关键代码功能描述。
软件定义网络 OpenFlow 流表 虚拟网络
0 引 言
虚拟网络是通过对物理网络基础设施进行特殊的抽象,使得在底层物理网络之上形成的多个逻辑上独立的网络。网络虚拟化隐藏了底层网络部署的复杂性,便于更灵活地管理网络资源[1]。虚拟网的优点包括:网络数据被限制在本逻辑网内传输,可以减少网络上不必要的流量,实现敏感数据隔离,从而提高网络的利用率和性能,增强网络的安全性;能把不同地点、不同网络、不同用户组合在一起形成一个虚拟网,具有组网灵活性。传统的网络虚拟化技术有虚拟局域网(VLAN ,Virtual Local Area Network)、虚拟私有网(VPN,Virtual Private Network)等[2]。
云计算技术基于资源虚拟化方式,将底层物理资源进行池化共享,实现对用户按需提供服务,网络虚拟化是其核心组成部分。然而,传统网络技术却难以满足云计算环境对网络虚拟化、网络资源灵活动态调度重组及管理简单化的需求[3],主要表现在以下几个方面:
(1)网络规模
很多大型云计算中心的客户远超4 096个,需要建立相应数量的虚拟网络隔离用户,而采用VLAN技术则不能突破此数量限制。
(2)硬件依赖
传统网络设备厂商众多,配置管理各不相同,容易形成厂商绑定,升级、替换困难。
(3)集中管理
由于交换机、路由器等网络设备都运行各自的控制转发逻辑,不利于进行集中统一管理,涉及到的分布式配置操作容易产生不一致性。
软件定义网络(SDN,Software Defined Networking)是一种新兴的基于软件的网络架构及技术,其关键特征在于数据和控制平面的分离以及软件可编程能力[4-6]。SDN采用集中式的控制平面和分布式的转发平面,控制平面使用以openflow为代表的协议作为控制-转发接口对转发平面上的openflow交换机进行集中式控制[4]。SDN的引入为网络虚拟化提供了自动化的强有力的手段。
1 OpenFlow标准
SDN的层次架构如图1所示。网络设备通过接收控制器南向接口控制信令生成转发表,并据此决定数据包的转发处理。控制器通过开放北向接口为上层应用提供服务,体现了SDN网络的可编程能力。当前北向接口还缺少业界公认的标准,最为流行的是REST(Representational State Transfer,表述性状态转移)API。南向接口以ONF(Open Networking Foundation,开放网络基金会)组织倡导的OpenFlow协议最为成熟,并获得了业界的广泛支持。
OpenFlow架构原理是OpenFlow交换机使用基于安全连接的OpenFlow协议与控制器相通信,安全通道、流表和OpenFlow协议是其核心组成部分。“流”是通信过程中数据分组特征(如MAC地址、IP地址、端口号等)的抽象,控制器依据某次通信中“流”的第一个分组特征[4],利用OpenFlow协议对交换机配置流表,此次通信后续相同特征的数据分组则由交换机按照流表包含的一至四层网络信息在各层次进行匹配和转发。OpenFlow v1.0的流表匹配域如图2所示。OpenFlow协议由ONF组织负责维护,迄今已更新到OpenFlow v1.4,主要改进有单流表演变为流水线串联的多流表,增加组表,多控制器支持等,流表匹配域增加至30多个(如ARP,ICMP,IPv6等匹配项)[7]。
图1 SDN基本架构
基于SDN架构实现虚拟网络很好地解决了传统网络技术所面临的问题:其天然的集中化控制满足了自动化、一致性的管理需求;控制和数据平面的分离及标准的OpenFlow南向接口解除了厂商锁定;流表诸多的匹配项组合不仅极大地扩展了网络规模,而且可以对数据流进行精确匹配和控制。
2 虚拟网实现
2.1 设计思想
SDN分离了控制平面和转发平面:控制层的控制器是SDN的大脑,不仅向上层业务应用提供网络能力调用,同时负责策略制定和对OpenFlow交换机进行流表下发;转发层的OpenFlow交换机只是依据流表匹配结果执行相应的转发命令。因此虚拟网的划分应以流表匹配为原则,而虚拟网的管理和接口服务可基于开源SDN控制器软件设计开发虚拟网功能实现。
虚拟网功能模块主要分三部分设计:
1)虚拟网北向接口:提供对虚拟网配置参数和查询信息的接口给上层应用软件调用,是虚拟网信息管理模块和上层应用的桥梁。
2)虚拟网信息管理:保存虚拟网配置信息,通过监测网络状态及时通知转发决策模块作相应处理。
3)虚拟网转发决策:根据虚拟网配置信息制定转发决策并下发流表至交换机,并根据网络状态变化及时执行流表变更操作。本模块是实现虚拟网功能的核心。
虚拟网须按照一致的规则划分,为确保各虚拟网特征的唯一性,虚拟网配置需至少包含以下要素:
1)网络ID:在全网中作为虚拟网的唯一标识,不可重复。
2)逻辑端口:把加入某个虚拟网络依据的匹配条件抽象为逻辑端口,匹配条件不能冲突。
图2 OpenFlow流表项匹配域
Fig.2 Fields to match against flow entries
2.2 实现方案
基于OpenFlow划分虚拟网络因具体的转发决策机制和数据封装不同,实现方法也不尽相同,下面就几种实现方案展开论述。
2.2.1 按MAC地址划分网络
2.2.1.1 基本流程
MAC地址是网卡的标识符,每一块网卡的MAC地址都是唯一的。这种方法允许用户主机移动到网络的其它物理网段,而自动保持原来的虚拟网成员资格。在网络规模较小时,基于MAC地址匹配策略划分网络是一个简单有效的方法。
建立网络配置操作分两步:创建虚拟网,指定唯一的网络ID;把计算机MAC地址加入某个虚拟网。
依据虚拟网的配置信息,转发决策模块的主要处理过程如下:
交换机收到的数据帧若在流表中无匹配项,会封装packet_in消息把此数据帧上交控制器。转发决策模块监视packet_in消息,把消息中的源MAC地址、目的MAC地址和虚拟网配置信息库作比对。若此两个MAC属于同一个虚拟网,则向交换机下发表项,建立端到端的通路;否则阻止相应表项的下发,隔离此两个MAC对应的计算机间的通信。
图3显示了两个虚拟网的组织关系图,主机1和2划入虚拟网100,主机3和4划入虚拟网101,表1是虚拟网络的参数配置。
由主机1发起到主机2的通信处理流程如下:
1)由于主机2的MAC地址未知,主机1发出ARP请求包。
2)交换机把该包以packet-in消息方式发送给控制器。控制器因此学习到主机1连接到端口1,但不知主机2在哪里,于是在2、3、4端口洪泛该ARP包。
3)主机2收到请求后向主机1发送ARP应答包,交换机把该包以packet-in消息方式发送给控制器,控制器因此学习到主机2连接到端口2。通过比较确定该包中的2个MAC地址都在虚拟网100中,则下发从主机2到主机1的流表项,并要求交换机把ARP应答包发送出去,交换机根据流表项把该包从端口1发送至主机1。
4)主机1再次向主机2发出IP包,交换机把该包以packet-in消息方式发送给控制器,经确认后给交换机下发从主机1到主机2的流表项,并要求交换机把IP包发送出去,交换机根据流表项把该包从端口2发送至主机2。
图3 流处理过程
表1 MAC虚拟网络参数配置
表2 端口、MAC对应表变化过程
表3 流表项变化过程
经过以上处理之后交换机建立了主机1和主机2的双向流表项,可以直接转发主机1和主机2之间交互的IP包,不再需要控制器的干预。
由主机1发起到主机3的通信流程和以上类似,第1步和第2步都能执行,在第3步由于不能通过同网认证而终止。这样交换机没有主机1和主机3的双向流表项,2个主机间的通信就无法进行。
2.2.1.2 软件设计
依据设计思想章节内容,软件基于ryu开源SDN控制器软件使用python语言设计, 分为北向接口(vnet_rest)、网络管理(vnet_manager)、转发决策(vnet_switch)三大模块实现,模块之间的信息关系如图4所示。
图4 模块信息关系
1)vnet_rest模块:实现北向接口功能,负责解析虚拟网络配置与查询请求并交由vnet_manager模块处理。本模块由三个类组成,NetworkController类和MatchController类分别处理网络配置和mac匹配设置,Vnet_RestAPI类注册北向接口和提供网络服务。模块被载入时,首先通过Vnet_RestAPI类完成网络创建、删除、获取信息的北向接口注册,并映射至NetworkController类相应方法;然后进行网络匹配项的创建、删除、获取信息的北向接口注册,并映射至MatchController类相应方法。在完成以上初始化后就等待来自应用的虚拟网配置请求:对于虚拟网的创建、删除、查询操作,分别由NetworkController类的net_create、net_delete、net_lists方法处理,前两项操作需提供网络id参数;对于MAC匹配条件的创建、删除、查询操作,分别由MatchController类的m_create、m_delete、m_lists方法处理,前两项操作需提供网络id和MAC地址参数,查询操作只需提供网络id。
2)vnet_manager模块:根据vnet_rest模块的输入数据管理网络信息;提供same_network接口供vnet_switch模块判断两台通信的主机是否在同一个虚拟网内;在虚拟网或匹配项被删除时,构造包含被删除的网络id和MAC地址信息的事件类对象,并发送至vnet_switch模块作相应处理。
3)vnet_switch模块:在收到虚拟网或匹配项被删除的事件通知后,通过change_handler方法查询被删除的网络id和MAC地址的对应信息,若有符合条件的结果则构造MAC地址匹配规则,然后向对应的交换机发送删除流表的指令。
另外要监视以下三种交换机事件并作相应处理:
交换机连接事件:当有新的交换机连接控制器时,清除该交换机的流表,防止错误转发数据包;
交换机失效事件:当交换机失效时,删除数据表中该交换机对应的设备id、端口、MAC地址等映射信息。
packet-in消息:由Vnet_Switch类的packet_in_handler方法解析并处理交换机上报的packet-in消息,流程如下:
1)首先获取数据包的源MAC地址、目的MAC地址,交换机id和端口等信息,添加到数据表,并获取目的MAC的出端口。
2)判断源MAC地址、目的MAC地址是否属于同一个虚拟网络。
3)若源和目的属于同一个虚拟网络并且出端口非泛洪,则向交换机下发相应流表。
4)最后,若源和目的属于同一个虚拟网络,或者出端口是泛洪,则通过交换机转发数据包。
2.2.2 基于VLAN划分
VLAN虚拟局域网是一种将局域网设备从逻辑上划分成一个个网段,从而实现网络隔离的数据交换技术。具有VLAN功能交换机的端口一般分两种模式:访问链路和汇聚链路[8]。访问端口只能属于1个VLAN,用于连接计算机网口,使用以太网帧结构包进行传输。汇聚端口允许多个 VLAN通过,用于交换机的互联,其使用802.1Q帧结构包传输数据[9]。802.1Q帧在以太网帧中插入了关键的VLAN标签,用VLAN标签识别每个虚拟网,可以实现各虚拟网间的地址空间复用[10]。
Openflow协议的流表匹配域包括端口、MAC地址、IP地址等多个匹配项,下面仅以按端口匹配的方式描述使用VLAN划分虚拟网的方法。
网络配置操作分两步:创建虚拟网,指定唯一的网络ID,控制器在处理创建网络的指令时要分配唯一的VLAN号与该网络ID关联;把某交换机的指定端口加入该虚拟网,匹配项是交换机ID和端口号的组合。
基于VLAN实现虚拟网主要涉以下处理:
依据输入的虚拟网配置参数建立虚拟网信息库,根据信息库通过计算生成流表项下发给交换机,实现以下功能:
1)在网络末节点处进行数据帧转换,保证交换机到计算机间传输以太网帧,交换机之间传输802.1Q帧。
2)根据信息库设置802.1Q帧中VLAN标签。
3)计算虚拟网节点间的路径,生成相应流表项下发,建立节点间通路。
图5显示了两个虚拟网的拓扑,主机1、2和4划入同一个虚拟网,假定交换机1和2的设备ID分别是01:00:00:00:00:00:00:01和01:00:00:00:00:00:00:02,主机1至6的MAC地址为00:00:00:00:00:01~00:00:00:00:00:06。
图5 网络拓扑
表4为交换机1上和第1个虚拟网相关的流表。
表4 交换机1流表
2.2.3 隧道技术
在SDN网络中,虽然交换机的流表机制已打破了传统网络中的层次化概念,但是网络的末端一般还是通过以太网接入的计算机终端,其对数据包的处理机制还是分层的架构。二层隧道的机制是把网络二层信息封装在三层分组内,从而创建跨物理三层IP网络或SDN网络的虚拟化二层网络,对于终端来说像是连接到同一个二层子网一样[5]。由于不需要大量的二层域,利用在三层IP分组中封装二层以太网帧传输的机制可以基于现有IP网络建立虚拟网络,有利于网络规模的扩展和跨区域组网。
隧道两端终结于交换机,隧道末端需完成对数据包的隧道格式的封装和解包,如图6所示。目前OpenFlow协议支持MPLS(Multi-Protocol Label Switching,多协议标签交换)[11]的隧道方式,虽然不直接支持GRE(Generic Routing Encapsulation,通用路由封装协议),不过可以结合其它技术实现。Open vSwitch(OVS)是一款基于开源软件实现的OpenFlow虚拟交换机,其支持包括GRE在内的多种隧道协议,可以通过OVSDB Mgmt(Open vSwitch Database Management Protocol,OVSDB管理协议)远程配置管理OVS(如隧道相关操作)。盛科公司的OpenFlow交换机软件平台就是基于OVS协议栈实现,其支持的L2VPN包括L2 over MPLS和L2 over GRE等。
图6 隧道连接
GRE虚拟网络配置操作分三步:
1)创建虚拟网,指定唯一的网络ID。
2)建立GRE隧道和网络ID关联,主要参数包括本地IP地址,对端IP地址以及指定的唯一的隧道号等。当隧道建立后将在交换机上创建1个逻辑端口,可以和物理端口等同作为流表的匹配项或输入输出端口。
3)把流匹配条件组合加入该虚拟网。
2.3 网络切片方案
FlowVisor是一种代理控制器,工作在SDN网络控制层和转发层之间。其一方面为OpenFlow交换机提供透明代理,另一方面又扮演多控制器的角色[12],具备控制器(相对于下层交换机)和交换机(相对于上层控制器)双重身份。其核心思想是把网络流空间划分成多个分片,每个分片由一个SDN控制器管理,多个分片间共享网络资源[6]。
2.4 虚拟网技术比较
基于OpenFlow的虚拟网络技术相对于传统的VLAN、VPN等技术除了SDN本身的架构优势,其开放的南北向接口有益于应用和网络的无缝集成,能使实现方法不断优化,促进网络虚拟化的不断发展,而不再受传统网络厂商的限制。
SDN开放的架构使得虚拟网络实现方式多样化,不局限于某种模式。FlowVisor独辟蹊径,以代理控制器的模式运行,在数据控制平面的连接中进行虚拟化[6],对网络流空间进行分片构建虚拟网。
3 结 语
以上根据传统虚拟网络技术对云计算平台支持的不足,引入SDN网络架构并提出基于OpenFlow的虚拟网络实现方法。OpenFlow南向接口屏蔽了物理转发设备的差异,实现了底层网络透明化,赋予网络原生的虚拟化能力。基于OpenFlow实现完善可靠的虚拟网络需要考虑和解决许多技术问题,如流匹配冲突检测等。开放的SDN能使更多的参与者加入到研发和创新中,促进网络虚拟化技术的大力发展。
[1] 周万,王峰,常惠锋. SDN的基本特征和典型应用方案[J].电信技术,2014(06):35-41. ZHOU Wan,WANG Feng,CHANG Hui-feng. Basic Character of SDN and Typical Application Scheme[J]. Telecommunications Technology,2014,6:35-41.
[2] 陈琳,吴强.基于SDN技术构建数据中心虚拟网络[J]. 互联网天地,2013(01):40-44. CHEN Lin,WU Qiang. Construction of Virtual Network in Datacenter based on SDN Technology[J].China Internet, 2013,1:40-44.
[3] 张斌,罗东森. 云计算数据中心SDN部署研究[J]. 通信技术,2014,47(12):1424-1428. ZHANG Bin,LUO Dong-sen. SDN Deployment in Cloud-Computing Data Center [J].Communications Technology, 2014, 47(12):1424-1428.
[4] 雷葆华,王峰,王茜等.SDN核心技术剖析和实战指南[M]. 北京:电子工业出版社,2013. LEI Bao-hua,WANG Feng,WANG Qian,et al. Deciphering SDN:Core Techniques and Practical Guide[M]. Beijing:Publishing House of Electronics Industry,2013.
[5] Thomas D.Nadeau,Ken Gray.软件定义网络:SDN与openflow解析[M].毕军,单业,张绍宇,姚广译. 北京:人民邮电出版社,2014. Thomas D.Nadeau,Ken Gray. SDN: Software Defined Networks[M]. Beijing:Posts and Telecom Press,2014.
[6] 黄韬,刘江,魏亮等. 软件定义网络核心原理与应用实践[M]. 北京:人民邮电出版社,2014. HUANG Tao,LIU Jiang,WEI Liang,ZHANG Jiao,et al. SDN Core Principles and Application Practice[M]. Beijing:Posts and Telecom Press,2014.
[7] Open Networking Foundation[EB/OL]. http://www.opennetworking.org.
[8] 范贤学,金兴华. 数据中心网络结构设计[J].指挥信息系统与技术,2014,5(03):64-69. FAN Xian-xue,JIN Xing-hua. Communication Network Structure Design for Data Center[J]. Command Information System and Technology, 2014,5(03):64-69.
[9] 三轮贤一. 图解网络硬件[M]. 盛荣译. 北京:人民邮电出版社,2014. Kenichi Miwa. Graphical Network Hardware[M]. Beijing:Posts and Telecom Press,2014.
[10] 魏亮,王健,刘江等. 基于SDN的虚拟化平台设计[J].电信技术,2014(06):47-52. WEI Liang,WANG Jian,LIU Jiang,et al. Design of SDN-based Virtual Platform[J]. Telecommunications Technology,2014(06):47-52.
[11] 龙艳军. MPLS VPN技术及其虚拟网络实验研究[J]. 计算机与数字工程,2013,41(01):85-87. LONG Yan-jun. Research on MPLS VPN Technology and Virtual Network Experiment[J]. Computer and Digital Engineering,2013,41(1):85-87.
[12] Siamak Azodolmolky.软件定义网络:基于OpenFlow的SDN技术揭秘[M].徐磊译. 北京:机械工业出版社,2014. Siamak Azodolmolky. Software Defined Networking with OpenFlow[M]. Beijing:China Machine Press,2014.
GU Xian-Feng(1976-),male, B.Sci., engineer, majoring in network routing technology.
Implementation of Open Flow-based Virtual Network
GU Xian-feng
(No.28 Institute, CETC, Nanjing Jiangsu 210007, China)
SDN (Software Defined Networking) is a software programmable network framework and technology featuring decoupled data and control planes, and some procotols represented by OpenFlow are usd by the control plane to realize central control of the forwarding plane. With these characteristics,SDN framework could fairly meets the demands by cloud-computing for centralized,standardized and automutized configuration and management of virtual network.Aiming at the deficient support for cloud computing platform by traditional virtual network technology, this paper proposes a design of virtual network based on OpenFlow-based SDN technology, describes the principles and and processing flows of several virtual network solutions, and finally discusses the modular software design and functions of some key codes.
SDN ; OpenFlow ;flow table;virtual network
date:2014-10-20;Revised date:2015-02-10
TP393
A
1002-0802(2015)03-0335-07
顾宪锋(1976—),男,学士,工程师,主要研究方向为网络路由技术。
10.3969/j.issn.1002-0802.2015.03.017
2014-10-20;
2015-02-10