SDN控制器必须能很好的进行网络资源调度和控制,因此,SDN的南向网络控制技术需要对整个网络中的设备层进行管控与调度,包括链路发现、拓扑管理、策略制定、表项下发等。其中链路发现和拓扑管理主要是控制其利用南向接口的上行通道对底层交换设备上报信息进行统一监控和统计;而策略制定和表项下发则是控制器利用南向接口的下行通道对网络设备进行统一控制。
链路发现及拓扑管理
链路发现技术是获得SDN全网信息的关键,是实现网络地址学习、VLAN、路由转发等网络功能的基础,与传统网络中链路发现由各网元自主进行不同,SDN网络中的链路发现工作由控制器统一完成。
SDN控制器主要使用了LLDP(Link Layer Discovery Protocol,链路层发现协议)作为链路发现协议,该协议提供了一种标准的链路发现方式,可以将本端设备的主要能力、管理地址、设备标识、接口标识等信息组织成不同的TLV(Type/Length/Value,类型/长度/值),并封装在LLDPDU(Link Layer Discovery Protocol Date Unit,链路层发现协议数据单元)中发布于自己直连的邻居,邻居收到这些信息后,将其以标准MIB(Management Information Base,管理信息库)的形式保存起来,以供网络管理系统查询机判断链路的通信状况。
封装有LLDPDU的报文称为LLDP报文,报文中包含了特定的组播、目的MAC地址,以及特定的以太网类型,已将LLDP数据包与其他MAC数据帧区分。对于OpenFlow交换机而言,其上的基于流表项匹配进行转发的机制并不能直接处理常规的LLDP操作,因此相关的工作必须由控制器完成。控制器对SDN网络进行链路发现的过程如图所示:
控制器在执行链路发现过程时,会首先通过一个packet-out消息向所有与之连接的交换机发送LLDP数据包,该消息命令交换机将LLDP数据包发送给所有端口,一旦交换机接收到packet-out消息,他就会把LLDP数据包通过其所有的端口发送给与之连接的设备,如果其邻居交换机是一台OpenFLow交换机,那么该交换机将自行相应的流表查找操作。因为交换机中并没有专门的流表项用于处理LLDP消息,所有它将通过一个packet-in消息将数据包发送给控制器。而控制器在收到packet-in消息后,会对数据包进行分析并在其保存的链路发现表中创建2台交换机之间的链接记录。网络中其他交换机也都采用相同的方式向控制器发送packet-in消息,因此控制器就能够创建完整的网络拓扑视图,基于这样的视图,控制器可以根据业务应用的流量需求,为每台交换机推送下发不同的流表项。
基于LLDP消息的方法智能对于控制器直连的openflow交换机进行链路发现,如果网络中存在非openflow域,即两台openflow交换机通过其他多台非openflow交换机连接,此时需要其他的链路发现手段。在这种情况下,控制器还是会首先发送packet-out消息给与之相连的openflow交换机,但同时控制器会要求交换机发出广播包,广播包将被发往除交换机和控制器相连的端口之外的其他端口。广播包从openflow交换机发出后,如果网络中存在非openflow域,广播包将从这个网络域的一端进入并穿越,达到与该非openflow域连接的其他openflow交换机。因为在接收到广播包的openflow交换机中并没有对应的流表项可供广播包匹配,所以该广播包将被上传到控制器,从而告知控制器在网络中存在非openflow域。而如果控制器并没有收到上传的广播包,那么就可判断出整个网络都有openflow交换机组成。
拓扑管理作用是为了随时监控和采集网络中SDN交换机的信息,及时反馈网络的设备工作状态和链路链接状态。为了这一目标,控制器需要定时发送LLDP数据包的packet-out消息给与其相连的SDN交换机并根据反馈回来的packet-in消息获知交换机信息,在监测交换机工作状态的同时完成网络拓扑视图的更新。但值得注意的是,SDN网络规模较大时,这种拓扑管理机制会导致较慢的收敛过程,影响网络状态的实时反馈,同时,该机制也使得包含LLDP数据包的packet-out消息发送的周期设置更复杂。
拓扑管理还有一项工作:随时更新SDN交换机及链接状态的同时,对各种逻辑组网信息进行记录,其中最典型的场景就是云计算下的多租户共享网络资源。在多租户情况下,网络资源被虚拟化为资源池,每个租户都可以按照自己的实际需求获得设备、端口、带宽等资源,同时还可以根据自身需求对其所有的资源灵活组网。这些租户网络相关的资源信息都需要在拓扑管理中予以保存和展现,以反映真实的网络利用情况,实现优化的资源调度。同时给予不同租户网络的拓拓扑信息,SDN控制器可以为相应的网络数据通路设定访问控制列表,Qos等,支持租户网络在性能、安全等方面的彼此隔离,提供更优的用户体验。
策略制定和表项下发
流表是SDN交换机进行数据包处理的最基本依据,他直接影响了数据转发的效率和整个网络性能。流表是由集中化的控制器基于全网拓扑视图生成并统一下发给数据流传输路径上的所有SDN交换机,因此,流表的生成算法成了影响控制器智能化水平的关键因素。
SDN交换机的流表机制打破了传统网络中的层次化概念,无论是源MAC目的MAC、VLAN ID等传统的二层网络信息,还是源IP,目的IP等三层信息,或者是源TCP/UDP端口号、目的TCP/UDP端口号等4层信息,都被统一封装在流表中。因此,控制器需要针对不同层的网络传输需求,制定相应的转发策略并生成对应流表下发给交换机。
对于2层转发,在SDN网络中,MAC地址学习在控制器的链路发现过程中实现,根据2层信息进行数据包转发也比较容易实现,只需控制器以目的MAC地址为依据将对应的交换机转发端口号写入对应的交换机流表项中即可。
对于3层转发,在SDN网络中,控制器利用相关的路由算法计算出源和目的地址之间的路由信息,并以IP地址、MAC地址为依据,将对应的交换机转发端口号写入相应交换机的流表项中。
对于4层转发,在SDN网络中,4层数据包解析将在控制器中完成,并以TCP/UDP端口号、IP地址、MAC地址为依据,将对应的交换机转发端口号写入相应交换机的流表项中。
和传统网络一样,SDN控制器可以有效处理不同层次上的数据转发,可以至制定流表时,利用各个网络层次上的规则和算法,减少流表数量。不同的是,传统网络在各个设备本地进行相关算法的执行,通常只能根据设备自身所掌握的的有限局部链接情况进行数据处理决策;而SDN具有集中化管控的优势,控制器拥有全局的网络资源视图,因此更容易获得优化的算法执行结果。不过,这样做也会产生一些问题,例如在SDN系统中,所有数据流的转发过程都需要经过控制器进行决策,从而为控制带来繁重压力。
控制器对SDN交换机设备的控制是通过流表下发机制进行的,SDN控制器的下发有主动和被动2种模式。主动是指数据包在到达openflow交换机之前就进行流表设置,因此,当***个数据包到达交换机后,交换机就知道如何处理数据包了。这种方式有效消除了每秒钟能处理的数据量的限制,理想情况下,控制器需要尽可能的预扩散流表项。被动方式是指***个数据包到达交换机时并没有发现与之匹配的流表项,只能将其送给控制器处理。一旦控制器确定了相应的方式,那么相关的信息就会返回并缓存在交换机上,同时控制器将确定这些缓存信息的保存时限。
不同的流表下发模式具有各自的特点。主动的流表下发利用预先设定好的规则,避免每次针对各个数据流的流表项设置工作,但考虑到数据流的多样性,为了保证每个流都被转发,流表项的管理工作变得复杂,例如需要合理设置通配符满足转发需求。被动的流表下发能更有效的利用交换机上的流表存储资源,但在处理过程中,会增加额外的流表设置时间,同时一旦控制器和交换机之间的连接断开,交换机将不能对后续到到的数据流进行转发处理。