OpenFlow是一种用于controller和网络设备之间通信,被controler用来控制网络设备,网络设备用来反馈信息的标准化南向借口。OpenFlow还规定了网络设备对报文的转发和编辑方式。
一、OpenFlow的标准分析
1、交换机转发平面
逻辑上有两部分组成:Port端口和流表(Flow table)其中Port端口表示:跟Controller通信的通道(controller channel)可以认为是一个特殊的Port。
流:指在一段时间内,经过同一个网络的一些列具有相同属性的顺序发送的报文集合。
流表:就是芯片中一张张的转发表,每张流表都有很多的流表项(Flow Entry)组成。
流表项:是流表的最小单位,每条流表项对应了网络中传输的一条流。
流表项的6个组成部分:
MatchField:匹配字段
Priority:(优先级)
Counter:计数器
Instruction:指令
Timeout:(超时时间)
Cookie:附属属性;
2、controller和交换机之间的消息分为三大类,分别是Controller-to-switch消息,Asynchronous(异步)消息(也就是Switch-to-control)、Symmetric(对称)消息。
3.1Controller-to-switch消息
消息类型:
1)Feature
2)Configuration
3)Modify-state
4)Read-state
5)Packet-out
6)Barrier
7)Rolo-request
8)Asynchronous-configuration
3.2Asynchronous(异步)消息
1)packet-in
2)Flow-removed
3)Port-status
4)Error
3.3Symmetric(对称)消息
1)Hello
2)Echo
3)Experimenter
4、OpenFlow Channel(交换机通道)
OpenFlow Channel是指交换机跟Controller之间的连接通道,可以使带外管理通道,也可以使带内管理口,常用的是带外管理口。连接可以使TCP连接,也可以是TLS连接。使用TCP/TLS连接主要是为了保证可靠性。如果多个交换机跟多个Controller连接,那么创建多条TCP/TLS连接。
5、Controller有三种角色
1)Master
2)Slave
3)Equal
6、Openflow系统性能指标
1)交换机处理带宽---由芯片决定
2)流表项数量-------有芯片决定
3)流表项下发能力---每秒中能安装多少条流表项;通过提高CUP主频或优化软件(主要是优先级的排序)。
4)To-controller报文转发--报文在交换机里面匹配到某条流表项,这条流表项的动作是吧报文送到Controller,Controller经过处理之后可能会再把报文通过交换机转发出去。性能取决于Controller和交换机两个元素。
二、OpenFlow Controller和交换机工作流程
1)系统初始化
交换机系统初始化的时候,都会有默认的流表,流表里面有一条默认的流表项。(默认的丢弃报文或所有报文都转发给Controller)
2)业务驱动Controller增加/删除/修改流表项
Controller进行下发流表项,对流表项做一系列动作。
3)报文在交换机中转发
报文根据交换机的配置去查找指定流表,执行相应的指令。
三、Controller(控制器)
Controller是一个运行在独立服务器上的软件程序,可以用不同的语言来实现,可以运行在不同的操作系统上。目前包括:SDN controller和Openflow controller,其中Openflow controller只支持openflow一种南向接口协议去控制转发设备。
Controller属性:
1) 北向接口:最简单最传统的北向几口是CLI、SNMP、目前最流行的是REST API接口。
2) 南向接口:openflow、SNMP/NetConfig、OF-config、XMPP、LISP、BGP-LS;
3) 控制方式:集中控制和分布式控制(Onix)
4) 对物理和虚拟设备的通用管理
5) 支持Openflow标准。
四:Ryn控制器
Ryn控制器是日本NTT一个实验室发起的Controller项目。它是基于Python开发的,是唯一一个支持OpenFlow1.3的开源控制器。云计算平台Openstack可以直接调用Ryu控制器来配置OVS。