SDN(Software Defined Network):软件定义网络----转载

SDN(Software Defined Network):软件定义网络

传统的网络转发行为:
    1)逐设备单独控制,纯分布式控制。
    2)控制面和转发面在同一个设备中,耦合紧密。
        管理员无法直接操控转发行为:管理员配置网络协议,网络协议通过自身的运行再去影响转发行为,管理员无法改变协议本身的行为。
        网络协议对转发行为的影响是有固定模式的,例如:路由协议只能靠目的IP地址来进行转发。
    3)不开放接口
        
SDN:
    1)集中式控制
        说明:集中式控制的控制器只适合于中小型网络,对于大型网络,一般采用分布式控制,即多个控制器协同工作,因为这样可以提高网络的可扩展性。
    2)转发和控制分离
        管理员可以直接操控设备的转发行为:不通过网络协议,而是直接通过软件来控制转发行为,故不受网络协议的影响。
    3)开放接口
    

SDN的体系结构(从下往上):

网络设备:通过南向接口接收控制器发过来的指令,配置位于交换机内的转发表项,并可以通过南向接口主动上报一些事件给控制器。
    说明:
        1)SDN中的网络设备可以抽象为一个转发面(Forwarding Plane)或数据层(data plane),这个转发面可以是硬件交换机、虚拟交换机或路由器等物理设备。
        2)所有的转发表项,都存储在网络设备里面,用户数据报文在这里面被处理、转发。
        
南向接口(southbound interface):指控制面跟数据转发面之间的接口。
    说明:
        1)传统网络中的南向接口并没有什么标准,各大设备商的南向接口都是存在于自己的私有代码中,而SDN则期望南向接口是标准化的,只有这样才能让软件摆脱对硬件的依赖,从而达到应用为王的效果。
        2)OpenFlow是目前影响力最大的南向接口。
    
控制器:向上提供软件的编程接口,向下控制着硬件设备,是SDN中的核心元素。

北向接口(northbound interface):控制器和软件之间的接口,例如(支持Java的)REST API等。
    说明:传统网络中的北向接口指交换机和网管软件之间的接口,例如SNMP等标准协议。
    
应用服务:即软件应用程序,对网络进行控制和管理。
    说明:
        1)替代了传统的网管软件。
        2)应用服务可以和控制器位于同一台服务器上,当然了,也可以运行在其它服务器上通过通信协议与控制器通信。

OpenFlow:
概念:OpenFlow是一个标准化的南向接口,用于控制器和网络设备之间的通信。控制器通过OpenFlow来控制网络设备,网络设备则通过OpenFlow把信息反馈到控制器中。

说明:
    1)OpenFlow协议涉及两个网络元素:控制器和交换机(网络设备)。
    2)OpenFlow规定了网络设备对报文的转发和编辑方式。
    
名词解释:
    流(Flow):指在一段时间内,经过同一个网络的一系列具有相同属性且顺序发送的报文集合。在OpenFlow中,所有的数据都以流的形式进行处理。

    流表(Flow Table):流表就是交换机中交换芯片上的转发表,每张流表都由多个流表项组成,类似于路由器中的路由表。
    
    流表项(Flow Entry):流表项是流表的最小单位,每条流表项对应了网络中传输的一条流。流表项是OpenFlow中最核心的元素。
        说明:
            1)每条流表项由6个部分组成:Match Field(匹配字段)、Priority(优先级)、Counter(计数器)、Instruction(指令)、Timeout(超时)、Cookie(附属属性)
            2)流表的查找:对进来的报文,用该流表指定的字段去匹配查找,如果匹配到了一条流表项,那就执行这条流表项所规定的指令。
            3)一张流表有nK,就是说这张流表有nK条流表项。

    动作(Action):是对一个报文的最小原子操作,宏观上可以分为两大类:报文编辑和报文转发。
    
OpenFlow协议中控制器和交换机的工作流程:
    控制器通过一套标准的消息接口,告诉交换机,当报文从哪些端口进来时,该去查找哪张流表,匹配到一条流表项(Flow Entry)之后,就要去执行这条流表项所规定的指令,然后要么直接转发出去或者丢弃,要么继续去查找下一个指定的流表(由匹配到的这条流表项来指定),然后重复这个过程,直到报文被转发出去或被丢弃。

OpenFlow交换机转发面内部(即交换芯片)在逻辑上由两部分组成:端口(Port)和流表(Flow Table)
    注:交换机与控制器通信的通道(Chanel)可以认为是一个特殊的端口(即逻辑端口)。

OpenFlow中的交换机:
    1)交换机系统的初始化:交换机系统初始化的时候,一般都会有默认流表。默认流表里面有一条默认流表项,通常这条默认流表项的行为是丢弃所有报文或将所有报文都送到控制器中。
    2)控制器维护交换机中的流表:交换机系统初始化完之后,根据业务需求,控制器开始往交换机下发流表项,或者修改已经存在的流表项属性,或者删除不需要的流表项。
    3)报文在交换机中的转发:报文进到交换机之后,根据交换机(基于端口)的配置去查找指定的流表,匹配到之后,就执行相应的指令,这些指令中的Action最终会导致该报文被编辑、被丢弃、被计数、被测速、被转发等。
    
OpenFlow的伴侣协议:OF-Config
        1)OpenFlow只负责和业务相关的事情,而管理业务所依赖的资源等非业务事情则是由OF-Config来负责。
        2)任务:指定交换机要跟哪些控制器连接(配置控制器的地址),配置交换机的IP地址、掩码、网关等,管理Flow所需要的物理端口以及逻辑端口(Tunnel)的创建和状态改变(up/down)等。
    
OpenFlow还需完善的地方:
    1)控制器的集中式控制,会遇到可扩展性的问题,如果采用分布式控制,则不容易把握分布式的规模。
    2)流表配置的速度比较慢,当遇到大型网络时,要配置大量设备的流,速度会跟不上,有严重的性能问题。
    3)没有稳定的安全机制,安全性还不能得到充分的保证。

猜你喜欢

转载自www.cnblogs.com/meml/p/12186764.html
今日推荐