SDN是在2009年左右出现的一种新型网络结构,它将数据层面与控制层面分离,使用中央控制器完成网络的操作和管理,并通常采用OpenFlow协议作为其核心通信协议,拥有着集中式控制、可编程、部署灵活性和数据层面与控制层面相互分离等多种优势。并且作为一种新型的网络结构,其通信协议、三层体系结构和仿真实验都非常有意思。
-
SDN体系结构
典型的SDN架构定义如下图所示。
SDN体系结构由下到上分别为转发层(又称为基础设施层)、控制层和业务层(又称为应用层)。其中转发层表示网络底层的物理转发设备,维护着流表结构,数据流中的分组则按照流表中的规则进行转发;中间的控制层集中维护和控制网络的各种状态,并负责流表的生成、配置和维护,同时需要为业务层提供易用的北向接口;最上面的业务层根据不同的应用需求来实现不同功能的应用程序。控制层通过南向接口(例如OpenFlow协议)与转发层进行通信,并获取转发层的网络设备的信息;控制层与业务层之间由可扩展的北向接口完成交互,北向接口由各个控制器的Rest API提供,并允许开发者根据实际网络需求开发。
在SDN体系结构中,开发者能够获取转发层中网路设备的实时状态信息,通过调用控制层的北向Rest API接口,编程实现不同功能的应用程序;最后通过控制器和南向接口(OpenFlow)以流表的形式下发到网络设备中,从而完成网络的配置。
-
OpenFlow协议介绍
OpenFlow协议是SDN架构中第一个定义在控制层和转发层之间的标准通信接口,基于OpenFlow的SDN技术可以使开发者动态管理网络拓扑结构。
最常见的OpenFlow流表主要由三个部分组成:匹配域(Match Fields)、计数器域(Counters)和指令域(Instructions),如下图所示。
(1)匹配域,如下图所示:一共包含12个域,每个域内包含一个值,分别对应TCP/IP体系结构中:
- 一层物理层中入端口(Ingress Port);
- 二层数据链路层中源MAC地址(Ether source)、目的MAC地址(Ether dst)、以太网类型(EtherType)、VLAN标签(VLAN id)、VLAN优先级(VLAN priority);
- 三层网络层中源IP(IP src)、目的IP(IP dst)、IP协议字段(IP proto)、IP服务类型IP ToS bits);
- 四层传输层中TCP/UDP源端口号(TCP/UDP src port)、 TCP/UDP目的端口号(TCP/UDP dst port)。
(2)计数器域,可以用来统计每个端口、每条流、每张表和每个队列上的流量信息。
(3)指令域,为每条流表项对应的行动,表示对匹配该流表项处理方法,其中可以有0或者多个行动。若一条流表项的指令域为空,则默认操作是丢弃数据包。若一个流表项的指令域内有多个行动,则按照行动的优先级顺序执行。行动分为必选行动和可选行动,必选行动中包括转发或者丢弃,可选行动中则包括按照传统交换机处理、泛洪(除去入端口)、入队和修改匹配域等。
如上图所示数据包匹配流程:当数据包到达后,从流表中的第一个流表项开始匹配,若有匹配域相符合的流表项,接着更新该条流表项对应的统计数据,然后根据流表项对应指令域内的指令进行相应操作;若没有流表项被成功匹配,则转发给控制器请求进一步处理。
-
基于OpenFlow的SDN工作流程
上图为基于OpenFlow的SDN工作流程:
- 终端PC机向网络中发送一系列数据包;
- 数据包到达OpenFlow交换机,若交换机中无匹配的流表,则通过第2步向控制器发送Packet-In消息,请求控制器下发处理流表,若交换机中有匹配的流表,则直接执行第4步;
- 控制器下发流表(或Packet-Out消息)到交换机中;
- 交换机根据流表的信息将数据包转发到下一个交换机中;
- 交换机若有匹配流表,执行第7步,若无匹配流表,执行类似第2步;
- 类似第3步;
- 交换机转发数据包到另一个终端PC机。
-
SDN网络仿真小实验
SDN网络仿真实验只需要一台PC机就可以完成,不任何需要其他额外设备。Mininet就是一个轻量级的SDN网络仿真平台,Floodlight是一款开源的SDN控制器。本次的仿真小实验的系统、控制器和仿真平台信息如下图所示。
软件名称和类型 | 功能 |
Ubuntu 12.04 | 64 bit系统环境 |
控制器Floodlight | 控制交换机,下发流表,控制数据转发 |
虚拟仿真平台Mininet | 搭建虚拟网络拓扑 |
(1)Floodlight安装和运行
- 安装Java、python的运行与开发环境
- 下载和安装Floodlight
- 编译Floodlight
- 运行Floodlight
- 在浏览器中输入地址http://localhost:8080/ui/index.html,打开Floodlight的Web界面,此时Switchs与Hosts都为0。
(2)Mininet安装和运行
将Mininet镜像文件导入到VirutalBox中,
- 配置网卡信息,
第一块网卡信息:
第二块网卡信息:
- 启动Mininet,账户和密码均为mininet
- 产生如下图所示的拓扑结构,并连接控制器
我们在Floodlight的Web界面可以查看拓扑结构、以及交换机和节点信息。
(3)下发流表
- 交换机和默认流表如下图所示:
目前Host1可以ping通Host2:
- 在Controller上修改流表项。添加一条流表,使得Host流的出端口和入端口为同一端口。
Host1流表修改:
Host2流表修改:
修改流表项后,进行Host1 Ping Host2的操作。结果是Host1无法Ping通Host2
- 实验结果如下表所示:
流表项 | 实验操作 | 实验结果 |
默认流表 | Host1 Ping Host2 | Ping通 |
修改后流表 | Host1 Ping Host2 | 无法Ping通 |
在SDN网络中,通过控制器简单的修改交换机上的流表就可以完成特定需求的网络环境配置,SDN非常有趣。
参考链接:
http://archive.openflow.org/documents/openflow-spec-v1.1.0.pdf
http://www.opendaylight.org/
https://www.opennetworking.org/sdn-resources/sdn-definition/
如果您需要了解更多内容,可以
加入QQ群:570982169
直接询问:010-68438880