SDN

什么是SDN

SDN是一种框架和思想,核心诉求是通过软件控制网络,实现业务的自动化部署,为方便软件来控制网络,希望控制面和转发面是分离的。

例如,传统的交换机内部,由交换机负责具体的网络流量往哪里转发,在SDN中,有一个控制器进行流量转发的计算,然后将结果发送给交换机,交换机只进行简单的转发,从分布式的控制转发过程称为集中式的控制,使得控制和转发平面相分离。

SDN的特点

网络开放可编程、数控分离(数据平面和控制平面相分离,为开放可编程提供架构基础)、逻辑上集中控制、网络业务的自动化应用程序控制。

SDN的架构

数据平面

可以抽象为数据平面或者转发平面,可以是交换机、虚拟交换机、路由器等。数据平面通用抽象模型将不同协议的匹配表整合起来,形成多字段匹配表,解决了网络协议堆砌的问题

传统网络中,现有的分层协议可以看作一种数据平面的抽象模型,但是控制平面依然只是网络功能和网络协议的堆砌,缺少合适的抽象模型

南向接口

控制面跟数据转发面之间的接口,传统网络的南向接口存在于各个设备商的私有代码中,对外不可见,如存在于交换机内部

控制器(控制平面)

可以有多个,可以是主从关系,也可以是对等关系,一个控制器控制多台设备,一个设备也可以被多台控制器控制,向上提供应用程序的编程接口,向下控制硬件设备。

北向接口

传统网络里,指交换机控制面跟网管软件之间的接口,在SDN中,指控制器跟应用程序之间的接口

SDN应用服务

为用户提供服务,包括负载均衡、安全、网络运行情况监测等,并以应用软件的形式表现出来,代替传统的网管软件来对网络进行控制和管理,可以跟控制器位于同一台服务器,也可以运行在别的服务器上通过通信协议来跟控制器通信。

SDN南向协议

狭义的SDN南向协议具有对数据平面编程的能力,可以指导数据平面设备的转发操作等网络行为,关键在于是否具有确切的数据平面可编程能力(如openflow)。

广义的SDN南向协议主要分为三种类型。第一种是仅具有对数据平面配置的南向协议(如OF-Config、OVSDB、NET-CONF);第二种是应用于广义SDN,具有部分可编程能力的协议(如OpFlex);第三种是本来就存在,其应用范围很广,不限于应用在SDN控制平面和数据平面之间传输控制信令的协议(如PCEP、XMPP)。

狭义SDN南向协议 — Openflow

Openflow原理

Openflow交换机

Openflow交换机可以分成流表和安全通道两部分。

流表用于存放流表项,控制器可以给交换机下发流表项来指导交换机处理匹配流表项的数据包

安全通道用于和控制器通信的安全连接

在Openflow协议中,交换机是策略的执行者,而网络相关的策略需要控制器下发

Openflow表

流表

匹配域用于区分不同的数据流

计数器记录了匹配数据流的数据包的数目和字节数等相关数据

组表

组表用于定义一组动作,且这组动作可以被多个流表项共同使用,从而实现组播、负载均衡、容灾备份和聚合等功能。

Meter表

Meter表用于计量和限速,可以针对流制定对应的限速规则,从而实现丰富的Qos功能,注意不是针对端口的。

OpenFlow通道

控制器和交换机的通信通道,支持以下三类报文:

Controller-to-Switch:主要由控制器初始化并发送给交换机

Asynchronous:交换机异步上传给控制器的报文,告知控制器新数据包的到达和交换机状态的改变

Symmetric:无需等待对方请求,双发都可以任意发送的报文

OpenFlow的缺点

无法适应复杂的场景,当出现一种新的协议,需要扩充流表的匹配域,同时重写交换机和控制器两端的协议栈,交换机只能按照固定的协议逻辑去处理数据,不断增多的匹配域,使得OpenFlow的交换机的设计与实现越来越复杂

只能在现有支持的转发逻辑上添加对应的流表项来指导数据包的转发,而无法对交换机的转发进行编程和修改,使得数据平面仍然需要掌握协议的语义等控制信息才能完成数据的匹配

无状态协议,交换机只能受控制器的指导去执行操作,而无法在满足条件时主动采取动作,过度依赖控制平面

POF协议和P4协议对此进行了改进

广义SDN南向协议

OF-Config协议

OF-Config协议是一种交换机配置协议,主要功能包括进行交换机连接的控制信息,端口和队列资源的配置及端口等资源的状态修改等。

OF-Config协议可以看作是Openflow协议的一种补充。

OVSDB协议

OVSDB与OF-Config协议类似,都是交换机配置协议,两者区别在于:OVSDB仅用于OVS(Open vSwitch)的配置,而OF-Config可以用于所有支持OpenFlow的软件或者硬件的交换机

NETCONF协议

是一种产生于SDN之前的网络配置协议,NETCONF是许多网络协议的配置协议,能统一管理和配置SDN设备和传统网络设备,既保证了现有网络设备的可用性,又支持SDN设备的设备

OpFlex协议

OpFlex是一种声明式控制的协议,只通知对象要达到一种状态的要求,但并没有规定通过指定的方式去达到这个状态

OpenFlow会精确的告诉交换机具体的动作,来完成数据的处理

OpFlex具有的可编程能力不强

XMMP协议

不是专门为SDN设计,可以统一管理传统设备和SDN设备,可以用于做OpenFlow的补充协议,或者用于SDN和传统网络混合组网的管理

PCEP

PCEP用于为流量工程提供路径计算服务,把路径计算的控制逻辑从转发设备中抽离到远端,实现了部分数据平面和控制平面的分离,将OpenFlow和PCEP协议结合使用实现OpenFlow网络和传统网络的统一管理和调度

完全可编程南向协议

POF协议

通过$\{offset,length\}$来确定匹配数据,强调协议无关

协议的操作无非是增加、修改和删除对应的字段/标签,这些操作可以通过通用的指令集来实现,POF协议为交换机设计了通用的指令集

针对OpenFlow的无状态缺点,POF设计了相关指令来在交换机内部维护一个简单的状态机,在条件满足时,可以采取主动的动作,然后异步通知控制器发生的改变,从而实现数据的同步

POF协议的设计思想借助了计算机的设计思想,控制器相当于操作系统,而转发元件(交换机)相当于CPU执行相关的指令

POF协议的缺点

控制流程复杂,丢失了部分性能,需要定义一套通用指令集,实现复杂的指令调度

P4

协议无关数据包处理编程语言,关注的是数据平面的可编程

P4编程语言具有对交换机的协议解析流程和数据处理流程进行编程的能力

转发设备协议无关转发

设备无关性

思想:是一门数据平面编程语言,当出现一种新的协议,通过P4语言编写程序,利用P4编译器将程序编译并写入交换机中,使得交换机能够拥有处理该协议的功能。

SDN控制器

SDN数据平面

通用可编程转发模型

通用硬件模型

上图为OpenFlow Switch通用硬件模型架构,其中网络数据处理流程为:数据包从端口进入$\rightarrow$通用模型中的数据包解析模块对数据包头进行分析$\rightarrow$选择对应的流表进行处理$\rightarrow$在流表内部,与每个流表项进行比较,若匹配成功,则按照对应的动作处理

流水线处理

采用多级流表,数据包在进入流水线之前,被分配一个空的操作指令集,进入第0个流表开始处理,通用硬件模型将数据包协议内容与每个流表项进行匹配,将匹配成功的流表项中的操作指令写入操作指令集中,或者传输给下一个流表

现有交换机内部通常有多个查找表,多级流表使得资源的利用率变得更高

单流表会造成资源浪费,多级流表可以组合支持实现不同处理之间的逻辑关系,有效的减少流表的数量,具有更好的适配能力

流表

每个流表由多个流表项组成,流表项的匹配域用来与每个数据包的指定包头标识集合进行比较;

流表项的优先级用来表示该流表项匹配的优先级,当数据包与多条流表项匹配成功的时候,需要按照优先级来选择一条流表项,并执行该表项的动作;

失效时间包括硬超时和软超时,如果流表项的生存时间超过硬生存时间或者在软生存时间内没有匹配到数据包,则流表项中的内容将被清空

单个流表的处理过程

先从网络数据包中提取待匹配的网络数据包协议字段组合,再加上上一个流表的Metadata信息共同组成一个待匹配域(可能该数据包从上级流表流入)

与每个流表项进行匹配,如果只有一个流表项匹配到,则更新对应流表项的计数器等状态,然后执行流表项中的指令,这些指令会指明数据包跳转到哪一个流表【跳转指令,不是操作指令】,从而实现流表的跳转【只能向前跳转】;当数据包与多条流表项匹配成功的时候,需要按照优先级来选择一条流表项;

当流表项中没有指定跳转指令时,流水线停止跳转,然后对数据包执行具体的操作【最后一个流表不会包含跳转指令】

组表

组表用于定义一组动作,且这组动作可以被多个流表项共同使用,从而实现组播、负载均衡、容灾备份和聚合等功能

每个组表由多条组表项组成,在流表项中,通过使用Group操作可以将数据包指向某个组操作

组表项的桶操作(Action Buckets)可以用来存储多个Action Bucket,每个Action Bucket包含一个数据包操作指令集

组表项操作类型(Group Type):

全操作类型(ALL),执行Action Buckets中的所有Action Bucket中的操作指令集,可以实现网络中的组播和广播功能

选择类型(Select),只执行一个Action Bucket中的操作指令集,可用于流量的网络负载均衡

间接类型(Indirect),只支持一个Action Bucket

快速恢复类型(Fast Failover),只执行激活的第一个Action Bucket,多用于容灾备份场景

Meter表

Meter表用于计量和限速,可以针对流制定对应的限速规则,从而实现丰富的Qos功能,注意不是针对端口的

通常当网络数据流的当前流量超过rate阈值时,才会执行band type中的指定操作

通用处理指令

网络处理控制指令

对数据包的操作指令集进行写入、应用或者删除等修改指令,如数据包在流表中,控制指令完成对数据包操作指令集中指令的添加、更新和删除等操作

数据包在多个表中的处理顺序的跳转指令

操作指令

完成对数据包的丢弃、复制、转发和修改等操作

专用指令

如Table-miss表项中的Table-miss指令定义了在流表中匹配不成功时处理网络数据包的行为,匹配所有的匹配域,优先级为零,使得Table-miss表项能被所有的数据包匹配

Open Swtich的缺点

数据包解析和包调度模块还不具备编程能力

新协议扩展方面抽象能力不够

不支持有状态的网络数据处理

只支持有限数量的网络数据处理操作,不支持新的处理操作扩展

网络流量监控和分析方面不足

白盒交换机

也称为开放交换机,网络交换机硬件和操作系统解耦合的结果

本质上,解决网络可编程的因素在于数据平面的可编程

参考资料

杨泽卫, 李呈. 重构网络: SDN 架构与实现[J]. 2017.

pcep协议什么意思_SDN学习笔记相关推荐

  1. 3gpp协议_【5G学习笔记】3GPP 5G协议分类清单大全

    " 本文对3GPP 5G协议进行了归类整理,以方便查阅.学习. 本文来源:网优雇佣军,如有侵权请联系删除" 3GPP中5G协议的归类整理,包括六部分,分别是:5G背景研究.5G接入 ...

  2. pythonsocket自定义协议_小渣渣学习笔记 python day28【tcp聊天 udp聊天 粘包 自定义协议 struct模块】...

    tcp 实现聊天功能 server端 import socket sk = socket.socket() sk.bind(('127.0.0.1',22000)) sk.listen() while ...

  3. AMBA总线协议APB、AHB——学习笔记

    文章目录 前言 一.总线介绍 1.基本概念 2.典型AMBA系统 二.APB3(Advanced Peripheral Bus) 1.定义 2.信号 3.版本信息 4.信号传输时序图 4.1 状态机 ...

  4. TCP协议详解----Linux学习笔记

    传输层概述 传输层协议主要有两个:TCP协议和UDP协议 TCP服务特点: TCP协议的特点是:面向连接.字节流和可靠传输.(相对UDP协议而言的) 面向连接: 1.使用TCP协议的双方必须先建立连接 ...

  5. TCP/IP协议基本概括+ARP协议详解+DNS协议详解---Linux学习笔记

    TCP/IP协议的体系结构: TCP/IP协议族四层模型和OSI七层模型 上层协议使用下层协议的服务,下层协议给上层协议提供一个接口. 四层模型中各个层次的作用和特点 上图说明: 最底层是数据链路层, ...

  6. IP协议详解---Linux学习笔记

    网络层概述: IP服务的特点: IP协议为上层协议提供无状态.无连接.不可靠的服务. 无状态:IP通讯双方不同步传输状态的信息,因此所有IP数据报发送.传输.接收都是相互独立的,没有上下文关系.这样同 ...

  7. plc secs通讯协议_SECS/GEM通信协议学习笔记

    了解下半导体设备现场的通讯协议,对于GEM的开发是半导体设备管理/生产/维护软件的一部分. SECS / GEM是用于设备到主机数据通信的半导体设备接口协议.在自动化工厂中,接口可以启动和停止设备处理 ...

  8. 潘多拉 IOT 开发板学习(RT-Thread)—— 实验19 MQTT 协议通信实验(学习笔记)

    本文代码参考 RT-Thread 官方 BSP 文章目录 实验功能 代码剖析 rt_wlan_register_event_handler() mq_start() mqtt_sub_callback ...

  9. Nodejs学习笔记(七)——接口API

    [目录] Nodejs学习笔记(一)--基础之全局对象.包和npm Nodejs学习笔记(二)--模块 Nodejs学习笔记(三)--同步和与异步之文件系统模块 Nodejs学习笔记(四)--http ...

  10. Nodejs学习笔记(六)——Mysql模块

    [目录] Nodejs学习笔记(一)--基础之全局对象.包和npm Nodejs学习笔记(二)--模块 Nodejs学习笔记(三)--同步和与异步之文件系统模块 Nodejs学习笔记(四)--http ...

最新文章

  1. 区块链还能赚钱吗 区块链挖矿赚钱吗
  2. php去掉关联数组,php如何删除关联数组
  3. Perl中的字符串操作函数
  4. 理解SharePoint中的Managed Path
  5. P6 计算机系统的层次结构
  6. 【MySQL】数据库死锁查询及处理
  7. MapReduce Job集群提交过程源码跟踪及分析
  8. mvc html 生成图片,asp.net mvc5 cs代码中获取视图生成后的HTML
  9. oracle数据库领域,菜鸟成长课程之《Oracle数据库职业直通车》,引领大家真正进入Oracle数据库领域...
  10. 分析设计网上书店数据库,并画E-R图
  11. mysql之grant权限说明
  12. SQL Sever 常用语句总结
  13. windows下将多个文件里面的内容合并成一个一个文件
  14. nlp基础—10.结巴分词的应用及底层原理剖析
  15. android开发中悬浮窗被禁用,无权限开启悬浮窗的解决方案
  16. UtIL DBUtil
  17. 编解码格式 -- H264
  18. matlab 贝叶斯网络工具箱的安装
  19. MTK6577+Android之音频(audio)移植
  20. 寒假每日一题题解(1.29)摘花生(DP水题)

热门文章

  1. CloudStack快速安装使用
  2. C/C++程序员简历
  3. 中俄巡护员聚东北虎栖息地切磋巡护技艺
  4. Gym 100818 F Irrational Roots (数学)
  5. android usb摄像头 前后置,android – 在后置和前置摄像头之间切换
  6. pagefile.sys从C盘移到其他盘
  7. c盘是不是越大越好_C盘下的pagefile文件是不是越大越好?
  8. 大学计算机基础教程第1章计算机概述总结
  9. DevOps--Chef/Puppet
  10. 又是一年金九银十!一起看看这些大厂面试真题查漏补缺吧,程序员翻身之路