SDN是什么意思?

第一件事当然是“控制和转发的分离”。这里的分离一方面是指解耦,在控制和转发之间定义了清晰的开放接口,使控制和转发都可以独立进化,在不断完善的同时向后兼容;另一方面,这里的解耦是指物理距离,不同于PC的控制/处理分离,类似于分布式系统的通信,依赖于消息。

其次是“控制平面的抽象和转发平面的抽象”。前者是指摆脱以前控制平面的功能堆叠,解决一个问题多一个协议,多一个协议,多一个控制平面功能的尴尬。为了让网络易于使用,控制平面需要抽象,一旦抽象出来,就可以继续进化。与PC相比,控制平面的抽象是控制平面的软件分层。一方面,NOS负责转发平面的机器级控制,为上层应用提供良好的开放接口。另一方面,它用于在更高的抽象层次上构建模型。这样控制平面本身也是NOS和app的分离,也可以独立进化,可以借鉴计算机发展以来软件工程积累的经验。后者是指对网络数据包处理行为的概括,建立通用的转发抽象模型。一个关键是通用转发模型的架构。这个一旦决定了,就要打补丁,实施。

再次是“逻辑上的集中控制”,不是那么清晰(也可能是由于自身的局限性,我理解不透彻),尤其是逻辑上有了修饰语,以及Kadoo的本地控制器的概念。逻辑上集中的控制器在实现层是如何操作的?当网络规模足够大时,需要一个分布式控制器集群作为整个网络的控制面。这是一个层次化的分布式协作系统,还是把数量巨大的任务分成块?我更倾向于把最终的控制面理解为逻辑a大控制器,一边是网络全局观,一边是传统的软件工程师。

为什么要理解SDN的本质属性?其实之前我并不想讨论“本质属性”,因为我的理解深度可能还没有达到这个程度,我更愿意去分析别人目前在各个方向上的成果,开源项目,行业的产品策略,但是后来我发现,要想“保持SDN学习/研究的专注,保持所有技术方向的敏感”,我首先要明白这一点。如果一切都是SDN,那么SDN什么都不是。