segmentfault博客对应博文地址 -- https://segmentfault.com/a/1190000016112134
SDN是一种框架和思想,核心诉求是通过软件控制网络,实现业务的自动化部署,为方便软件来控制网络,希望控制面和转发面是分离的。
例如,传统的交换机内部,由交换机负责具体的网络流量往哪里转发,在SDN中,有一个控制器进行流量转发的计算,然后将结果发送给交换机,交换机只进行简单的转发,从分布式的控制转发过程称为集中式的控制,使得控制和转发平面相分离。
网络开放可编程、数控分离(数据平面和控制平面相分离,为开放可编程提供架构基础)、逻辑上集中控制、网络业务的自动化应用程序控制。
可以抽象为数据平面或者转发平面,可以是交换机、虚拟交换机、路由器等。数据平面通用抽象模型将不同协议的匹配表整合起来,形成多字段匹配表,解决了网络协议堆砌的问题
传统网络中,现有的分层协议可以看作一种数据平面的抽象模型,但是控制平面依然只是网络功能和网络协议的堆砌,缺少合适的抽象模型
控制面跟数据转发面之间的接口,传统网络的南向接口存在于各个设备商的私有代码中,对外不可见,如存在于交换机内部
可以有多个,可以是主从关系,也可以是对等关系,一个控制器控制多台设备,一个设备也可以被多台控制器控制,向上提供应用程序的编程接口,向下控制硬件设备。
传统网络里,指交换机控制面跟网管软件之间的接口,在SDN中,指控制器跟应用程序之间的接口
为用户提供服务,包括负载均衡、安全、网络运行情况监测等,并以应用软件的形式表现出来,代替传统的网管软件来对网络进行控制和管理,可以跟控制器位于同一台服务器,也可以运行在别的服务器上通过通信协议来跟控制器通信。
狭义的SDN南向协议具有对数据平面编程的能力,可以指导数据平面设备的转发操作等网络行为,关键在于是否具有确切的数据平面可编程能力(如openflow)。
广义的SDN南向协议主要分为三种类型。第一种是仅具有对数据平面配置的南向协议(如OF-Config、OVSDB、NET-CONF);第二种是应用于广义SDN,具有部分可编程能力的协议(如OpFlex);第三种是本来就存在,其应用范围很广,不限于应用在SDN控制平面和数据平面之间传输控制信令的协议(如PCEP、XMPP)。
Openflow交换机可以分成流表和安全通道两部分。
在Openflow协议中,交换机是策略的执行者,而网络相关的策略需要控制器下发
组表用于定义一组动作,且这组动作可以被多个流表项共同使用,从而实现组播、负载均衡、容灾备份和聚合等功能。
Meter表用于计量和限速,可以针对流制定对应的限速规则,从而实现丰富的Qos功能,注意不是针对端口的。
控制器和交换机的通信通道,支持以下三类报文:
POF协议和P4协议对此进行了改进
OF-Config协议是一种交换机配置协议,主要功能包括进行交换机连接的控制信息,端口和队列资源的配置及端口等资源的状态修改等。
OF-Config协议可以看作是Openflow协议的一种补充。
OVSDB与OF-Config协议类似,都是交换机配置协议,两者区别在于:OVSDB仅用于OVS(Open vSwitch)的配置,而OF-Config可以用于所有支持OpenFlow的软件或者硬件的交换机
是一种产生于SDN之前的网络配置协议,NETCONF是许多网络协议的配置协议,能统一管理和配置SDN设备和传统网络设备,既保证了现有网络设备的可用性,又支持SDN设备的设备
不是专门为SDN设计,可以统一管理传统设备和SDN设备,可以用于做OpenFlow的补充协议,或者用于SDN和传统网络混合组网的管理
PCEP用于为流量工程提供路径计算服务,把路径计算的控制逻辑从转发设备中抽离到远端,实现了部分数据平面和控制平面的分离,将OpenFlow和PCEP协议结合使用实现OpenFlow网络和传统网络的统一管理和调度
通过${offset,length}$来确定匹配数据,强调协议无关
针对OpenFlow的无状态缺点,POF设计了相关指令来在交换机内部维护一个简单的状态机,在条件满足时,可以采取主动的动作,然后异步通知控制器发生的改变,从而实现数据的同步
POF协议的设计思想借助了计算机的设计思想,控制器相当于操作系统,而转发元件(交换机)相当于CPU执行相关的指令
POF协议的缺点
控制流程复杂,丢失了部分性能,需要定义一套通用指令集,实现复杂的指令调度
协议无关数据包处理编程语言,关注的是数据平面的可编程
思想:是一门数据平面编程语言,当出现一种新的协议,通过P4语言编写程序,利用P4编译器将程序编译并写入交换机中,使得交换机能够拥有处理该协议的功能。
上图为OpenFlow Switch通用硬件模型架构,其中网络数据处理流程为:数据包从端口进入$\rightarrow$通用模型中的数据包解析模块对数据包头进行分析$\rightarrow$选择对应的流表进行处理$\rightarrow$在流表内部,与每个流表项进行比较,若匹配成功,则按照对应的动作处理
采用多级流表,数据包在进入流水线之前,被分配一个空的操作指令集,进入第0个流表开始处理,通用硬件模型将数据包协议内容与每个流表项进行匹配,将匹配成功的流表项中的操作指令写入操作指令集中,或者传输给下一个流表
单个流表的处理过程
组表项操作类型(Group Type):
完成对数据包的丢弃、复制、转发和修改等操作
如Table-miss表项中的Table-miss指令定义了在流表中匹配不成功时处理网络数据包的行为,匹配所有的匹配域,优先级为零,使得Table-miss表项能被所有的数据包匹配
也称为开放交换机,网络交换机硬件和操作系统解耦合的结果
本质上,解决网络可编程的因素在于数据平面的可编程
参考资料
杨泽卫, 李呈. 重构网络: SDN 架构与实现[J]. 2017.
原文:https://www.cnblogs.com/yearsj/p/9519680.html