在来西雅图的飞机上一口气读完了一本关于SDN的书,一本不错的普及SDN基础概念以及行业状况的一本书,涉及一定的技术干货,但更多是从梳理行业,理清对SDN的误解,是一本比较不错的通俗易懂的书,我想也恰恰是因为他对SDN的深入理解使得书籍深入浅出,这篇博客算是一篇读后感或者说总结,通过读这本书确实让我理清了很多本来觉得模糊的东西。
在读这本书以前,多少知道了一些SDN的概念名词,但老实说,大部分都是知识碎片,不够系统,甚至还有很多误解,读完此书后对整个SDN行业状况有了一个更系统全面的了,同时一些对SDN的自我理解也再此书中找到了对应的观点。
由于还是入门级别,以下内容如有错误,都属正常,还请理解和指正。
SDN全称software defined network, 这是目前比较火的一个名词,事实上这里的software是一个泛的概念,说application defined network可能更直观,或者说service defined network才是其核心,SDN不是某一种具体技术,这是一种网络框架和技术思想,其核心是通过上层应用、服务或者说某个软件通过某一种接口机制来设定控制底层的数据流,即对数据的控制与数据的传输分离,不再像传统网络设备那样控制与转发都在同一层面,同一设备上完成,分离的结构使得底层传输设备变得更加简单,理想化的情况下,通过使用统一标准的协议使得底层物理设备变成瘦设备,设备只负责按照上层给出的决策进行转发,转发层面的设备变得扁平化,不再需要那些复杂的协议,例如设备不需要STP去防止环路,走哪条路径是由上层下发的转发流表决定的。对于逻辑path,它抽象了底层物理网络,用户不需要考虑底层网络是几根连线,互联了几个设备,用户只需要更加决策或者业务需要设定逻辑的网络即可。
一般来说SDN可以理解为三层,第一层为应用层,第二层为控制层,第三层为物理层。 第二层是核心,它为第一层提供北向接口,支持各种开发接口,软件开发人员基于这些API在第一层上开发各种应用软件,这些应用软件决定了如何控制和使用网络;同时第二层通过南向与底层物理设备通信,收集底层物理设备信息,传递上层控制信息到物理设备。SDN的核心是控制与转发层面的分离,提供开放的编程接口由用户自编应用或由业务应用根据其自身需要实现自动化的网络控制与部署,因而未来通过点点手机屏幕就可以快速调整网络。
当前推动SDN发展的两大组织ONF和ODL:
ONF(open networking foundation)是当前重要的SDN标准推进组织,一直在推动Openflow协议,同时还推动着OF-config协议。主要推动openflow在南向接口中的标准化和应用,以及推动转发硬件的标准化,在北向接口上则不推动标准化,该组织主要由用户组成例如google,facekbook,微软等,因而该组织的角度是避免SDN由某个网络硬件厂家控制。
ODL:OpenDaylight,主要由cisco等各种网络硬件设备厂商组成,由于硬件厂商的自身利益决定了其不可能在南向乃至转发硬件上实现标准化,因而该组织对南向接口不单支持openflow还支持其他协议,同时对硬件的转发不做标准化,同时定义了一套北向接口API,ODL主要是推动SDN的产业化,站在厂家的角度提供给客户系统化的solution方案,从这一点上来说,我到觉得ODL是能够实实在在推动SDN产业落地的组织。 SDN的开放带来了对网络自由、自动化控制的好处,但是也对传统的网络运维工程师提出了更高的要求,大部分传统网络运维工程师不具备较强的开发能力,因而产业化的solution方案可能恰恰是客户愿意看到的。
当前由于Openflow被广泛支持,有点成为事实上得南向接口标准,但实际上南向接口不只是Openflow。Openflow是一种协议,支持openflow的物理交换机或者虚拟交换机都可以作为SDN的转发层面设备,该协议描述了控制层控制器如何与交换设备进行通信,下发 flow流表 给交换机,交换机完全根据flow决定数据的走向,Openflow的流表项目存储了流的匹配规则、执行规则、统计数据等,例如根据1层的数据入端口,2层MAC,3层IP,4层端口等等来检查数据包,如果匹配某条流的规则则执行该流指定的action。具体的Openflow协议的学习在以后的文章中总结。
SDN并不是虚拟化,我们经常在虚拟化领域见到SDN,但实际上SDN既可以是实体网络(比如无线网络),也可以是虚拟网络。只是在虚拟化方面,特别是虚拟化网络,云计算平台(openstack等)这些虚拟化环境下由于存在需要集中统一自动化控制的网络,因而在这个时候SDN非常适用。同时由于openflow下,控制器可以看到数据的各种信息,理论上基于openflow的负载均衡,应用安全等都容易实现,不知道这一点上作为ADN应用交付的领导厂商F5来说怎么看,特别是citrix,radware这种友商纷纷成为SDN某个组织的赞助商的时候。当然也能看到F5在SDN领域积极开拓,其收购的linerate实际上就是致力于在7层领域的SDN公司。
SDN与NFV(network function virtualization),NFV主要是想将路由器、防火墙等这些传统计算密集型设备,通过将其功能虚拟化到统一的标准物理设备中,减少设备投入的成本。
SDN与NV(networking virtualization),网络虚拟化是指通过一定的技术实现在网络网络基础之上建立逻辑虚拟的网络,上层用户看不到底层物理网络情况,而是看到的逻辑抽象过的网络,对用户来说看到的是网络服务、网络资源,而不是网络实体。网络虚拟化一般都采用overlay技术来实现虚拟网络与实体底层物理网络解耦,用户不关心自己的服务器到底连到了哪台交换机上,用户的服务器之间通信实际上通过的是overlay之上的vxlan后者nvGRE隧道等。
当前除了开源的openvswitch外,传统的硬件制造商也大都在积极研发支持openflow的硬件设备,目前能够提供完整控制器以及底层网络设备的主要有:
cisco,华为,juniper,NEC,IBM,盛科 等
SDN目前依然还在初期阶段,上下游产业环境,部署案例都还相对较少,协议本身也还有很多需要解决的问题,但SDN的未来还是光明的。可是就是不知道网络工程师的未来是否还光明,如果不想被定义的话,可能我们现在要开始积极自定义了,至少学习1-2门编程支持,成为网络里懂编程的,编程里懂网络的人才。。
当前SDN的学习或者模拟软件:
openflow交换机:openvswitch,这是最容易模拟和接触到得的。
模拟器: mininet 一个很神奇的东东,可以用来快速部署模拟一个基于openflow的交换环境,并可以连接到某一种控制器上,可以是模拟器自带的openvswitch自己的控制器,也可以是你安装的其他控制器。
控制器:
OpenDaylight(Java):广义sdn控制器,不仅仅支持openflow,还支持其它南向协议,为Opendaylight组织的项目
Ryu:日本的,基于paython
Opencontrail, Juniper的开源控制器,是一整套架构,更适合于运营商。
此外还有:
POX: (Python) Pox as a general SDN controller that supports OpenFlow. It has a high-level SDN API including a queriable topology graph and support for virtualization.
MUL: (C) MūL, is an openflow (SDN) controller. It has a C based muli-threaded infrastructure at its core. It supports a multi-level north bound interface for hooking up applications. It is designed for performance and reliability which is the need of the hour for deployment in mission-critical networks.
NOX: (C++/Python) NOX was the first OpenFlow controller. 后来变POX,学习的话学POX
Jaxon: (Java) Jaxon is a NOX-dependent Java-based OpenFlow Controller.
Trema: (C/Ruby) Trema is a full-stack framework for developing OpenFlow controllers in Ruby and C.
Beacon: (Java) Beacon is a Java-based controller that supports both event-based and threaded operation.
Floodlight: (Java) The Floodlight controller is Java-based OpenFlow Controller. It was forked from the Beacon controller, originally developed by David Erickson at Stanford.
Maestro: (Java) Maestro is an OpenFlow “operating system” for orchestrating network control applications.
NDDI – OESS: OESS is an application to configure and control OpenFlow Enabled switches through a very simple and user friendly User Interface.
Ryu: (Python) Ryu is an open-sourced Network Operating System (NOS) that supports OpenFlow.
NodeFlow (JavaScript) NodeFlow is an OpenFlow controller written in pure JavaScript for Node.JS.
ovs-controller (C) Trivial reference controller packaged with Open vSwitch.
Special Purpose Controllers
RouteFlow RouteFlow, is an open source project to provide virtualized IP routing services over OpenFlow enabled hardware. RouteFlow is composed by an OpenFlow Controller application, an independent RouteFlow Server, and a virtual network environment that reproduces the connectivity of a physical infrastructure and runs IP routing engines (e.g. Quagga).
Flowvisor (Java) FlowVisor is a special purpose OpenFlow controller that acts as a transparent proxy between OpenFlow switches and multiple OpenFlow controllers.
SNAC (C++) SNAC is an OpenFlow controller builton NOX, which uses a web-based policy manager to manage the network.
Resonance Resonance is a Network Access Control application built using NOX and OpenFlow.
Oflops (C) OFlops (OpenFLow Operations Per Second) is a standalone controller that benchmarks various aspects of an OpenFlow switch.
文章评论