SDN(软件定义网络),顾名思义,通过软件来控制或驱动整个网络。SDN的核心概念有两个,第一是转发面与控制面的分离;第二是开放的可编程接口。另外,SDN强调集中式控制,通过软件来控制整个网络,但这并不意味着只有一个Controller,在大型网络中,更多是使用分布式Controller的架构来管理,如Onix。

       SDN是一个部署网络的框架,并不是具体的某个技术,更不是OpenFlow。OpenFlow协议只是Switch和Controller用来通信的应用比较广泛的一个协议,还有其他一些协议。

       NV(网络虚拟化)不是SDN。网络虚拟化是指利用Tunnel技术将虚拟机连接起来实现一个运行在物理网络之上的虚拟网络。但NV的集中化控制要求非常适用于SDN技术。

       在基于OpenFlow的SDN架构里,OpenFlow Switch负责数据的转发,OpenFlow Controller负责控制网络,实现了转发面与控制面的分离。

       OpenFlow Switch主要由流表(包含多个流表项)和安全信道(与Controller通信),还有其他端口用作包转发。每条流表项相当于一条规则,匹配特定的流(一定时间内具有相同属性的报文集合),定义转发动作。OpenFlow1.1后支持多级流表,按优先级大小遍历流表集,匹配特定的流并做转发动作。另外,OpenFlow还定义了其转发动作。需要注意的是,由于流是动态变化的,大部分流表项都需要不断变化,这需要与Controller通信,让Controller下发流表项。目前Switch的流行容量还比较小。

       OpenFlow Controller通过OpenFlow协议与Switch进行通信。在分布式Controller的模型下,对于同一台Switch连接的所有Controller,Controller有以下三种角色,第一是Master,对Switch拥有完全的操作权限;第二是Slave,对Switch只有读取状态和被动收取信息的权限,但若Master死掉了,其中一台Salve就会被选举为Master(OpenFlow没有具体定义如何做,这也可以看出其不成熟)。第三是Equal,可以看作所有Controller都拥有Master的权限。

       总的来说,OpenFlow标准是一个灵活的简单的标准,没有任何状态,不认识任何协议和设备,它要做的只有一件事,Match——Action。但是它对芯片的要求很高,目前并没有专门的OpenFlow芯片。

       提到OpenFlow,就不得不提OF-Config。OpenFlow只定义了Match和Action,但没有去管理涉及到的相关资源。OF-Config对OpenFlow所需要的最基本的资源进行了配置和管理,是OPenFlow的一个补充。但无论OpenFlow还是OF-Config,目前都很不成熟,需要完善和拓展。

       最后说说基于OpenFlow的SDN现状。目前市面上出现的OpenFlow交换机大多是Hybrid交换机(既支持OpenFlow协议也支持传统功能)。一般做法是在原有交换机的基础上,将OpenFlow作为一个新功能加进去。还有的是纯OpenFlow交换机(只支持OpenFlow协议)。有些会在OpenFlow的基础上,在流匹配时引入缺省匹配,当所有流表项都不匹配时,匹配缺省匹配项,跳到传统功能上。

       另外,不同厂商的Switch和Controller不一定兼容,因为现在还没有一个被广泛认可的协议,以后也可能没有。有的是开放的编程接口,这样每个用户都可以定制自己的Controller,一定程度上降低厂商的封锁。

       总结,这周看的更多是全面地认识和了解SDN,并没有深入技术细节,这样的方式更适合本人的学习。