摘要:这篇文章是对论文《The Road to SDN:An Intellectual History of Programmable Networks》的读后总结。本文主要分为四个部分:第一个部分是对SDN的简单介绍;第二个部分追溯了可编程网络的发展历史,包括在主动网络、早期分离控制面和数据面方面所作的工做以及OpenFlow和网络操做系统的相关介绍。第三部分介绍了网络虚拟化。第四部分是简要的总结。文中也揭示了关于一些技术的误解。算法
软件定义网络(Software Defined Network,SDN)是由美国斯坦福大学CLean State课题研究组提出的一种新型网络创新架构,是网络虚拟化的一种实现方式。其核心技术OpenFlow经过将网络设备的控制面与数据面分离开来,从而实现了网络流量的灵活控制,使网络做为管道变得更加智能,为核心网络及应用的创新提供了良好的平台。编程
SDN产生的一些缘由
网络设备的复杂性和难以管理。从交换机到路由器,这中间就存在着许多设备。网络管理员经过配置接口来配置设备,可是不一样供应商或者同一供应商的不一样设备间的配置接口也是不一样的。这些因素在增长网络管理复杂性的同时也增长了网络的运营成本。所以产生了SDN(软件定义网络)这一新的网络设计和网络管理方式。缓存
SDN的两个特性安全
控制面是如何控制数据面的呢?
经过应用程序编程接口(API)进行控制。例如OpenFlow。服务器
OpenFlow:是一种网络通讯协议,属于数据链路层,可以控制网上交换器或路由器的转发平面(forwarding plane),借此改变网络数据包所走的网络路径。网络
SDN近期的状况
近年来,SDN在行业中得到巨大的吸引力,许多商业交换机支持OpenFlow API。与此同时也出现了许多控制平台,程序员可使用这些控制平台建立了许多应用程序。如:动态访问控制、网络虚拟等。大量信息技术有限公司加入到了SDN的行业联盟中。如:Open Networking Foundation、Daylight Initiative等。架构
SDN的历史能够分为三个阶段,每一个阶段都有本身的贡献:
① 主动网络(20世纪90年代中期~21世纪初)
② 将控制面与数据面分离(2001~2007年)
③ OpenFlow API和网络操做系统(2007~2010年左右)框架
主动网络:主动网络有两个含义:一是被称为ANN的网络中间节点(如路由器、交换机),不只完成存储转发等网络功能,并且能够对包含数据和代码的所谓主动包和普通包进行计算;。二是用户根据网络应用和服务的要求能够对网络进行编程以完成这些计算。ssh
主动网络的基本思想:将程序注入数据包,使程序和数据一块儿随数据包在网络上传输;网络的中间节点运行数据包中的程序,利用中间节点的计算能力,对数据包中的数据进行必定的处理;从而将传统网络中“存储——转发”的处理模式改变为“存储——计算——转发”的处理模式。
主动网络采起的两种编程模型
① 囊模型:在节点中须要执行的代码由数据包携带
② 可编程路由器/交换机模型:在节点上执行的代码由带外机制创建
其中囊模型与主动网络的联系最为紧密,囊模型设想在网络上安装新的数据面功能,以数据包的形式携带代码,并使用缓存来提升代码分发的效率。可编程路由器将可扩展性交给网络运营商。
促进主动网络的发展
一些资助机构对主动网络的兴趣也是促进其发展的重要因素。例如:DARPA(美国国防部高级研究计划局)在20世纪90年代中期到21世纪初建立并支持主动网络项目。
人们对主动网络的怀疑
因为主动网络强调的是演示、项目的相互操做性以及必定程度的开发工做,在短时间内缺少一些实例,由此引发了一些人员的怀疑,这多多少少会对某些工做产生影响。
在传统的路由器和交换机中,数据面和控制面是紧密耦合的,而这种耦合使得各类网络管理任务都极具挑战性。为了应对这种挑战,各类分离数据面和控制面的研究开始出现。
随着网络规模和范围的日益增加,对可靠性和新服务的需求(如虚拟网络)、以及服务器内存和处理器处理资源的能力的不断增大,催生了两项创新。
控制面和数据面之间的开放接口:如IETF(互联网工程任务组)标准化的ForCES接口(转发和控制元素分离)、Netlink接口(Linux内核级包转发功能)。
ForCES是Forwarding and Control Element Separation的简称,致力于转发件和控制件的分离,ForCES协议对转发和控制面的信息交互进行了标准化。
Netlink套接字是用以实现用户进程与内核进程通讯的一种特殊的进程间通讯(IPC) ,也是网络应用程序与内核通讯的最经常使用的接口。
在逻辑上对网络进行集中控制:如路由控制平台(RCP)、软路由架构、路径计算原件(PCE)协议。
软路由是指利用台式机或服务器配合软件造成路由解决方案,主要靠软件的设置,达成路由器的功能;而硬路由则是以特有的硬设备,包括处理器、电源供应、嵌入式软件,提供设定的路由器功能。
路径计算元件(PCE)是可以肯定和找到用于在源和目的地之间传送数据的合适路线的系统组件,应用或网络节点。
逻辑上集中的路由控制器下降了标准的实施障碍;服务器技术的进步则意味着单一的商品服务器能够存储的全部的路由状态,并为一个大型网络计算全部的路由决策。
批评的人对这些新架构的怀疑主要在于他们认为逻辑上集中的路由控制会违反“共享”的原则,这是由于控制器可能会独立于负责流量转发的设备出现故障。
主要的设备供应商几乎没有采用ForCES这样的标准数据面API,由于开放的API会使新的竞争者进入市场。所以只能依赖现有的路由协议来控制数据面。为了拓宽控制面与数据面分离的应用面,研究人员探索了一些逻辑集中控制的全新架构。如:The 4D project.
4D项目倡导了4个层次:
① 数据面------基于配置规则来处理包
② 发现面------拓扑收集和流量监测
③ 传播面------安装包处理规则
④ 决策面------由逻辑上集中的控制器组成,这些控制器将网络级目标转换为包处理状态
OpenFlow是一种网络通讯协议,属于数据链路层,可以控制网上交换机或路由器的转发平面(forwarding plane),借此改变网络数据包所走的网络路径。
网络操做系统 ,是一种能代替操做系统的软件程序,是网络的心脏和灵魂,是向网络计算机提供服务的特殊的操做系统,借由网络互相传递数据与各类消息。分为服务器(Server)和客户端(Client)。服务器的主要功能是管理服务器和网络上的各类资源和网络设备的共用,加以统合并控管流量,避免有瘫痪的可能性;客户端能接收服务器所传递的数据并加以运用,能够清楚地搜索所需的资源。
① 第一个误解是每一个流量的第一个数据包必须交由控制器进行处理。实际上SDN(尤为是OpenFlow)并不会对规则的粒度或控制器是否处理流量进行响应。
② 第二个误解是控制器在物理上必须是集中的。事实上Onix(Online Information eXchange,线上资讯交换标准)和ONOS(Open Network Operating System,开放网络操做系统)就说明了SDN控制器能够并且应该是分布式的。
③ 第三个误解是认为SDN和OpenFlow是等价的。事实上OpenFlow只是SDN的一个实例。
SDN早期的一个突出实例就是网络虚拟化,网络虚拟化提供了一个与底层物理设备解耦的抽象网络。网络虚拟化容许多个虚拟网络在共享的基础设施上运行,并且每一个虚拟网络都具备比底层物理网络更加简单的拓扑结构。
在SDN出现以前的虚拟网络被限制在只能在现有的网络协议上运行,这给新技术的部署带了困难,因此研究人员采起了运行覆盖网络的方法,在传统网络上创建知足要求的拓扑结构。不一样于主动网络,覆盖网络不须要网络设备或网络服务提供者的支持,这使得覆盖网络更易于部署。
覆盖网络(Overlay network)是一种建立在另外一网络之上的计算机网络。覆盖网络中的节点能够被认为是经过虚拟或逻辑连接相连,其中每一个连接对应一条路径(Path)。节点之间也可能经过下层网络中的多个物理链接实现相连。 例如对等网络或客户-服务器应用这类分布式系统均可视为覆盖网络,由于它们的节点都运行在因特网之上。 因特网自身最初也是做为一个电话网络之上的覆盖网络构建,而当今(借由VoIP的引入),电话网络正愈来愈变成一个建立在因特网之上的覆盖网络。
SDN是做为一种支持网络虚拟化的技术
云计算使网络虚拟化的做用更加突出,它容许多个用户共享网络基础设施。例如:Ncira的网络虚拟化平台就提供了这种抽象,而不须要任何来自底层网络硬件的支持。
Nicira是一家专一于软件定义网络(SDN)和网络虚拟化的公司。它由Martin Casado,Nick McKeown和Scott Shenker于2007年创立。Nicira建立了本身的OpenFlow,Open vSwitch和OpenStack网络项目的专有版本。
网络虚拟化能够用于测试和评估SDN
SDN控制应用程序与底层数据面分离的功能使得在将控制应用程序布置到操做网络上以前,能够在虚拟环境中测试和评估SDN控制应用程序。例如:Mininet是用基于进程的虚拟机来运行多个OpenFlow交换机、终端主机和SDN控制器,每一个进程都单独地运行在相同的虚拟机上。
Mininet是由一些虚拟的终端节点(end-hosts)、交换机、路由器链接而成的一个网络仿真器,它采用轻量级的虚拟化技术使得系统能够和真实网络相媲美。
Mininet能够很方便地建立一个支持SDN的网络:host就像真实的电脑同样工做,可使用ssh登陆,启动应用程序,程序能够向以太网端口发送数据包,数据包会被交换机、路由器接收并处理。有了这个网络,就能够灵活地为网络添加新的功能并进行相关测试,而后轻松部署到真实的硬件环境中。
对SDN进行虚拟化
在传统网络中,对路由器和交换机的虚拟化比较复杂,由于每一个虚拟组分都须要运行自身的控制面软件,而虚拟化一个SDN交换机就容易多了。例如:FlowVisor系统使得大学可以支持在承载流量的相同物理设备上进行网络研究的实验平台,主要思想是:将流量进行分片,其中每一个分片共享网络资源,并由不一样的SDN控制器管理。
FlowVisor是创建在OpenFlow之上的虚拟化网络平台,它能够将物理网络分红多个逻辑网络,从而实现开放软件定义网络(SDN)。它为管理员提供了广泛的定义规则来管理网络而不是经过调整路由器和交换机来管理网络。
人们常常提到的一些所谓的“SDN的好处”,好比摊销成本或在多用户的环境中动态配置网络,这些实际上都来自网络虚拟化。虽然SDN促进了网络虚拟化,但必须认识到SDN提供的功能并不直接提供这些好处。
这篇文章介绍了可编程网络的前世此生,可编程网络的最初概念来自于主动网络,两者之间有许多相同的愿景。可是主动网络缺少明确的用例,也缺少大量部署的路径。在互联网腾飞的时代事后,人们的目光转向了实用主义,为了使网络更便于管理,分离数据面和控制面的想法开始出现。随后OpenFlow和网络操做系统的研究工做使得对应用程序进行网络范围的控制成为可能。SDN在这个过程当中只是扮演着解决网络问题的工具的角色。SDN倡导的是“开箱即用”的网络编程方式,而不能受当前技术的限制。在设计SDN应用程序时不能简单地只考虑当前的OpenFlow协议,而应当考虑但愿对数据面具备什么样的控制,并在这种设想和实际的部署策略之间找到平衡。