文章主要参考:https://www.sdnlab.com/sdn-guide/14716.html
SDN和OpenFlow的发展不得不提一个概念——虚拟化,虚拟化传统的定义就是能够将一些物理层面的资源抽象为逻辑层面的资源,隐藏物理实现细节,这种概念在操作系统、计算机组成原理都有所涉及,当然在网络中也不例外,目前的网络可扩展性其实是比较差的,原因在于现在的网络功能、厂商的操作系统都是封闭的源代码,并且硬件都是定制化生产,不可移植,是商家独有的。虚拟化最大的好处就是能够为同一管理这些设备提出了可能,所以随之产生的SDN和OpenFlow实际上在一定程度实现了网络的虚拟化功能。
最早产生的OpenFlow是斯坦福大学的教授为了搭建一个用于实验的网络环境,在这个网络环境当中可以进行多种实验。后来Martin和他的导师Nick McKeown教授发现如果将传统网络设备的控制层和转发层进行分离,采用集中式的控制器,用标准化接口的方式实现对于网络设备的管理,似乎这样网络的可扩展性更高、管理更加简便。于是他们提出了OpenFLow的概念。详情可以看他们的文章OpenFlow: EnablingInnovation in Campus Networks。这篇文章不仅阐述了OpenFlow的工作原理,也介绍了其应用的场景包括:1)校园网络中对实验性通讯协议的支持(如其标题所示);2) 网络管理和访问控制;3)网络隔离和VLAN;4)基于WiFi的移动网络;5)非IP网络;6)基于网络包的处理。
由于OpenFlow带来的可扩展、可编程性,Nick和他的团队(包括加州大学伯克利分校的Scott Shenker教授)进一步提出了SDN(Software Defined Network, 目前国内多直译为“软件定义网络”)的概念。软件定义网络的大概思想是这样的:如果把网络中存在的网络设备抽象为被管理的资源,那么我们可以根据操作系统的思想,想象存在这样一个网络操作系统(NetWork OS)这个操作系统可以隐藏网络设备的内部实现细节,操作人员不需要知道其具体实现,只需要通过操作系统提供的管理试图或者编程的接口,在操作系统当中开发各种的应用程序,通过软件的方式定义网络的拓扑结构。其实这有点类似于我们去打印店,打印机的具体实现并不需要我们去操心,我们需要做的只是通过某些打印软件,上传我们的文档,通过用户界面选择我们要进行的操作,比如纸张大小、彩印还是黑白、正反面这些参数,然后选择相应的打印机,就能够实现我们想要的最终结果,也就是最终的打印成品。
其实总体看来,软件定义网络的方式其实创新程度并没有想象的那么高,我们只要学过一些操作系统的知识就能够明白操作系统的组成其实分为硬件层面(裸机)、覆盖操作系统、用户界面这几部分,其实原来的网络就相当于操作系统中的裸机,SDN的提出相当于对网络设备覆盖了一层操作系统,用户可以在操作系统中采用可视化的操作实现对于网络设备的控制。
以上就是对于SDN和OpenFlow的见解,后面的文章我会以刚才提到的文章详细介绍OpenFlow