文章目录
SDN 网络体系结构: SDN网络应用, 北向接口, SDN控制器, 南向接口, SDN数据平面
网络应用: 对网络数据平面的配置,管理,控制
北向接口: 将数据平面资源和状态抽象成统一的开放编程接口
SDN控制器:
重要
,也称为网络操作系统,向北提供可编程能力,向南对数据平面统一配置,管理控制
南向接口: 对数据平面编程控制,实现数据平面的转发等网络行为(openflow在此)
思想:通用硬件底层,软件定义功能,开源
现有的分层协议可以看做是数据平面的抽象模型,但是控制平面只是网络功能和网络协议的堆砌
改进: 控制平面抽象后通过编程去控制网络,数据平面将不同协议的匹配表整合起来,形成多字段匹配表
2.1 SDN 南向协议
openflow协议是一个狭义的南向协议,他通过下发流表项对数据平面设备的网络数据处理逻辑进行编程
狭义的SDN南向协议判断依据就是是否有确切的数据平面编程能力
广义的SDN含有三种
- 传统的,仅能进行网络配置的(无法指导数据交换)
- 狭义的SDN,指导数据交换
- 完全可编程:本来就存在,但不是为SDN设计,只是被应用在SDN上
openflow
设计动机 通过修改流表规则来指导交换机对网络数据包进行转发和修改
通过TCP,TSL或者SSL传输openflow报文
openflow交换机
分成流表和安全通道两部分
控制器和交换机通过安全通道进行连接,控制器下发流表给交换机来匹配流表中的数据包
怎么通讯? 连接初始化阶段:将自身的特性等上报给控制器. 数据包匹配流表失败,吧数据包放在Packet-in报文中上报给控制器
openflow的表
- 流表
将数据包的处理变成了一条”流水线”,每一个流表由匹配与,指令集和计数器构成
匹配域区分不同的数据流
计数器记录匹配流表的数据包的数目,字节数等相关数目
流表的结构:
匹配域 优先级 计数器 指令 计数器 cookie
- 组表
定义了一组动作,正则主动做可以被多条流表项共同使用,实现组播,负载均衡,容灾备份和聚合的功能
组表的结构
组表号 类型 计数器 动作桶
- Meter表
用于计量和限速
结构
计量表号 计量带 计数器
openflow通道
控制器和交换机相互通讯的通道
- controller-to-switch
控制器初始化,要求交换机回复
- 异步报文
用于上报不能匹配流表的数据包
- 任意报文
谁都可以发起,表达各种要求和状态
####openflow通信流程
-
互相发送hello报文,写上版本
-
控制器下发feature request,交换机回复feature reply,完成相关配置,可以正常通信
-
当数据包匹配流表失败的时候,控制器根据控制逻辑指导交换机处理数据流
-
为了保持openflow的活性,控制器周期性地向交换机发送echo报文
2.3 广义的SDN南向协议
of-config
作用:对openflow交换机进行各种配置
- 配置控制器
- 配置交换机端口队列
- 改变端口状态和特性
- 完成交换机和控制器的安全连接证书问题
- 发现逻辑交换机
- 配置隧道协议
和openflow相伴相生(但是还可以协助其他的南向协议,所以仿佛比openflow更有生命力)
OVSDB(The Open vSwitch Database Management Protocol)OVS(虚拟交换机)的数据库管理协议
也是openflow的交换机配置协议,但是只用于OVS
- 增删改网桥(datapath)
- 配置网桥所需要的控制器信息
- 配置管理端
- 增删改端口,隧道,队列
- 配置QOS
- 收集统计
NETCONF
特性:可用于openflow也可用于传统设备
XMPP
基于XML,不是专门为openflow打造
2.4完全可编程南向协议
POF(protocol oblivious forwarding)
特性:仅含有{offset,length}来定位数据,匹配操作=>支持新协议时无需对交换机升级,仅需要升级控制平面
协议功能也就是增加修改删除对应的字段/标签,所以支持新协议时,只需要在控制器增加对应逻辑,交换机不用动,如同处理器只进行简单运算,不关心这是图形还是语音
为什么需要POF
- openflow在不停地扩充支持的协议,所以越来越复杂
-
现在openflow无法对交换机的转发逻辑编程和修改,只能通过
添加流表来指导数据包转发
- openflow是无状态的,无法维护网络状态并主动做出动作
- 数据平面和控制平面分离不彻底:交换机必须掌握协议的语义等控制信息才能完成数据匹配=>协议增多,特定指令增多
- 只能按照固定的协议逻辑处理数据,不能增加一些辅助信息
- 给openflow增加新特性时,需要重写控制器和交换机两端的协议栈
- 交换机无法描述现有状态并主动采取动作,一切皆靠控制器
POF可以使交换机在特定条件下主动创建修改删除流表
虽然数据操作灵活,但是控制流程复杂的多
,所以还在初期探索阶段
P4 programming protocol-independent packet processors协议无关数据包处理编程语言
他和openflow关注点不一样—-数据平面的可编程,也是为了解决openflow编程能力不足和扩展性差的问题
特性:
- 有对交换机协议解析流程和数据处理流程进行编程的能力
- 交换设备无需关注协议的语法
- 无需关注底层设备的具体信息
- 支持并行和串行执行Match-Action
交换机执行逻辑
入端口->解析器->匹配+动作(入端口流水线,执行操作为包修改和出端口选择)->缓存->匹配+动作(出端口流水线,执行操作为包修改->出端口
包解析+数据包转发
例子:从解析器出来的数据西线经过虚拟路由标识,再经过路由表再根据匹配的结果(0?1?)处理后交给交换表接口表村距离
每一个P4程序包含的组件
- Header报头
数据包的处理都看其报头决定,所以P4也要定义对应的报头(本质就是有序排列的协议字段序列)
- Parser解析器
定义报头协议之间的关系,以及数据包解析的流程(解析到第一行的结果,决定下一个该解析第五行内容)
- Table表
格式:Match-Action 匹配域和对应动作
看似和openflow差不多哦,但关键是
协议无关
- Control Program控制程序
决定了数据包的处理流程(先进谁的表)