1.21k likes | 1.43k Views
可编程网络. Programmable Networks. 因特网体系结构. 基于 TCP/IP 协议栈,遵循 “ 端到端原则 ” : 网络层只提供不可靠的传输服务,应用要求的可靠性和安全性等均由端系统实现。 优点: 降低因特网的复杂度 易于增加新的应用 30 多年的实践证明这种结构是非常成功的。. 因特网体系结构的问题. 一些新兴应用需要的网络服务(如服务质量保证、多播支持、移动性支持等)无法由端系统提供。 要求中间节点(路由器 / 交换机)提供这些服务违背 “ 端到端原则 ” ,在实践上也面临巨大的困难,至今没有成功的先例。
E N D
可编程网络 Programmable Networks
因特网体系结构 • 基于TCP/IP协议栈,遵循“端到端原则”: • 网络层只提供不可靠的传输服务,应用要求的可靠性和安全性等均由端系统实现。 • 优点: • 降低因特网的复杂度 • 易于增加新的应用 • 30多年的实践证明这种结构是非常成功的。
因特网体系结构的问题 • 一些新兴应用需要的网络服务(如服务质量保证、多播支持、移动性支持等)无法由端系统提供。 • 要求中间节点(路由器/交换机)提供这些服务违背“端到端原则”,在实践上也面临巨大的困难,至今没有成功的先例。 • 目前的因特网体系结构已严重阻碍了因特网的发展,需要研究具有自适应、动态和智能化特性的新型网络体系结构。
1 主动网络(Active Networks) • 主动网络允许用户对网络中间节点(如路由器、交换机等)进行编程,具有智能的中间节点通过对收到的报文进行定制处理来提供定制的服务。 • 通过向主动节点发送携带有移动代码的报文,用户可以按需创建自己的服务并分布到网络中。
主动网络的自适应性和动态特性 • 主动网络能引导数据报主动避开受到破坏的节点。 • 当节点尚未布署某种服务时,它能自动从相邻节点或指定节点获取服务代码并进行自动布署。 • 注入网络的移动代码能自动扩散和消失。 • 当节点受到攻击时能自动启动保护程序。
主动网络的主动性(智能性) • 主动网络的主动性表现在两个方面: • 用户可将程序注入网络来扩展节点功能。 • 路由器可对流经它的用户数据包的内容执行计算,甚至改变数据包的内容。 • 与传统节点的存储-转发模式不同,主动节点的工作模式是存储-计算-转发。
主动网络体系结构 • 主动网络由一群主动节点构成,主动节点通过执行主动包中的代码实现定制的服务。 • 主动节点和主动包是主动网络中最主要的两个功能实体: • 主动节点:可编程的中间节点 • 主动包:携带了代码的分组 • 主动节点体系结构及主动包的定义构成了主动网络体系结构的基础。
主动网络与传统网络的区别 • 主动网络并不规定网络节点应该如何协同工作来提供某种特定功能的服务,而是向网络提供了可自由增加新服务的能力。 • 主动网络需要解决的主要问题: • 主动节点如何支持用不同的编程语言书写的应用程序在本地动态加载? • 主动节点如何隔离不同的应用程序?
主动应用(1):可靠组播 • 可靠组播: • 所有组播包最终都被正确地传送给每个接收者 • 需要有丢失检测、反馈和数据重传等措施 • 目前主要有两种基本的确认模型: • 基于ACK的模型:接收者对每个正确收到的包,向发送者发送ACK。 • 基于NACK的模型:接收者检测丢失的包,仅在发现包丢失时发送NACK。 • 这两种模型都会产生ACK/NACK风暴,且重传数据包都由源发出,增加发送方负担和增大重传延迟。
主动路由器参与的可靠组播 • 数据缓存: • 组播树上的主动路由器缓存经过的数据包。 • 本地恢复: • 当NACK到达路径上的一个主动路由器时,若路由器中有缓存的包,组播该包到NACK到达的接口链路,否则向上游转发NACK。 • NACK抑制: • 主动路由器对每个丢失包维护一个NACK记录和修复记录,抑制重复的NACK。
主动应用(2):端到端拥塞控制 • 端到端的拥塞控制是因特网面临的主要难题之一: • 算法的分布性:拥塞控制算法的实现分布在各个网络节点中,每个节点都不能得到完整的信息。 • 网络环境的复杂性:各节点的性能参数(带宽、延迟、丢失率等)差异很大。 • 算法的性能要求:拥塞控制算法需要在多个性能目标(如公平性、效率、稳定性和收敛性)之间进行权衡。 • 算法的开销:算法本身不能带来较多的附加网络流量,计算复杂度要低。
主动拥塞控制 • 传统的端到端拥塞控制方法: • 端节点检测拥塞,并在检测到拥塞后降低发送速率。发生拥塞的路由器从发生拥塞到接收到速率调整后的分组,一直处于拥塞状态。 • 主动节点参与的端到端拥塞控制: • 路由器检测到拥塞后,立即要求其上游路由器设置过滤器,过滤从导致拥塞的端节点来的分组。 • 路由器将拥塞情况直接报告给端节点。 • 收到端节点的反应后,撤销过滤器。
主动应用(3):扩展的任意播 • 任意播(anycast):发送方把分组发送给一组接收者中的任意一个。 • 组播:发送方把分组发送给一组接收者中的每一个。 • 任意播的推广:允许多于一个接收者收到分组。
可编程的任意播PAMcast • PAMcast利用组播树的分支节点进行选择性拷贝来实现可编程的任意播: • 组播树的每条链路维护一个group size属性,表示通过这条链路向下(远离核心节点)可以到达的组成员数量。 • 分组头中除记录组地址外,还记录度(分组的接收者数量)和拷贝模式(均匀分布接收者,或选择最近的k个接收者)。 • 分组首先被路由到组播树的核心节点,核心节点首先决定采取的拷贝模式,然后根据度信息确定向哪些下游节点转发分组。 • 这个过程在每个组播路由器上重复执行,直至消息到达成员节点。
主动网络的问题 • 有特色的主动网络应用不多 • 未经过大规模实践的检验 • 互操作性难题(应用程序在多个操作系统上运行的兼容性问题) • 尚缺乏完备的网络管理功能 • 网络安全如何保证(路由器具有执行程序的能力)
2 OpenFlow和软件定义网络 • 网络创新对现实世界的影响力在下降: • 现象:大部分的研究成果仅停留在实验室中,很少能够应用到实际的网络中。 • 直接原因:目前没有切实可行的方法可以在足够真实的环境下对研究成果进行测试。 • 根源:网络基础设施已经僵化,新的功能很难加入到已有的网络中: • 新的功能要求对因特网体系结构进行革命性改变(端到端原则不再适用) • 网络设备全都是封闭系统(无法加载新的功能)
可编程网络研究 • 主动网络 • GENI(Global Environment for Networking Innovation): • 构建一个全国范围的实验性网络,用于研究新的网络体系结构和分布式系统。 • 用户可以申请全网范围内的一些资源(链路、包处理单位、终端主机等)构建其实验性网络。 • 优点:可编程网络降低了试验新技术的壁垒,提高了网络创新的速度。 • 缺点:费时、费力、费钱。 • OpenFlow
2.1 OpenFlow • 目标: • 在真实的校园网上方便地试验新的网络协议。 • 需要解决三个问题: • 说服网络管理员同意在他们管理的网络上试验新的网络协议 • 允许研究人员在实际网络上试验新协议而不会干扰网络的正常运行 • 交换机需要什么样的功能才能运行新的协议?
方案一(商业性解决方案) • 交换机/路由器提供开放的、可编程的虚拟化平台,但该方案不现实: • 商用的交换机和路由器不提供开放软件平台,更不会提供虚拟化硬件或软件的方法。 • 不同厂商生产的设备内部实现不同,对于研究者来说不存在一个标准的实验平台。 • 设备厂商不愿意公开设备内部的编程接口。
方案二(研究性解决方案) • 研究者自行开发设备: • 基于PC服务器的软件平台: • 利用通用操作系统和开源软件实现软件路由器是可能的,但不具有实验要求的性能及端口密度。 • 基于专用硬件的交换路由设备: • 为线速处理设计的高端专用硬件:太昂贵; • 为教学和研究目的开发的专用硬件平台:端口数少。
两种方案的比较 • 商业性解决方案封闭而不灵活。 • 研究性解决方案通用性好,但性能和端口密度达不到要求,有的非常昂贵。
折衷方案 • 牺牲一点通用性,换取一定程度的灵活性,达到以下目的: • 具有商用设备的高性能和低价格的特点 • 能支持不同的研究范围 • 能隔绝实验流量和营运流量 • 满足设备制造商封闭平台的要求
交换机/路由器的流表(flow table) • 流表由很多个流表项组成,每个流表项就是一个转发规则。 • 数据包进入交换机后,通过查询流表获得转发的目的端口。 • 流表一般放在TCAM(三态内容可寻址存储器)中,以实现高速查找。 • 尽管不同设备厂商的流表不同,但有一些功能在许多交换机和路由器中都有。
OpenFlow的解决思路 • OpenFlow提供了一个编写交换机/路由器流表的开放协议: • 允许管理员将网络流量划分成营运流和实验流,其中营运流仍然接受常规的处理。 • 研究者通过选择数据包要经过的路径及接受的处理来控制实验流,尝试新的处理技术。
OpenFlow交换机 • 一个OpenFlow交换机由三个部分组成: • 一个流表:定义不同的流及各个流应如何处理 • 一个安全通道:用于交换机和远程控制器之间的安全通信 • OpenFlow协议:交换机与控制器通信的接口标准 • 运行机制: • 新协议运行在一个控制器(如用户的PC机)上,通过OpenFlow接口在流表中添加或删除相关的表项,指导交换机/路由器进行相应处理(如转发到哪个端口、丢弃等),避免将新的协议加载到交换机上。
OpenFlow方案的优点 • 向研究者开放了因特网(可以修改流表) • 满足设备制造商封闭平台的要求(不需要将新协议加载到交换机上) • 具有商用设备的高性能和低价格的特点(本身就是商用设备) • 能支持不同的研究范围 • 能隔绝实验流量和运行流量
OpenFlow交换机分类 • Dedicated OpenFlow switch: • 专门为支持OpenFlow而设计,不支持现有的商用交换机上的正常处理流程。 • 交换机不再具有控制逻辑(控制面),只是作为一个在端口间转发数据包的数据路径部件。 • OpenFlow-Enabled switch: • 在商业交换机的基础上添加流表、安全通道和OpenFlow协议来获得OpenFlow特性。 • 既有商业交换机的转发模块,又有OpenFlow的转发逻辑,可以采用两种不同的方式处理接收到的数据包。
流(flow) • RFC 3697定义流是从一个特定的源发送到一个特定目的(单播地址、组播组、广播域)的一系列数据包。 • OpenFlow中流的定义更宽泛一些,指具有某种相同特征、需要进行相同处理的一系列数据包。比如: • 一个TCP连接,来自特定MAC地址或IP地址的数据包,具有相同VLAN标签的数据包,来自同一个交换机端口的数据包等。 • 对于非IPv4数据包,可以是匹配某个特定报头的数据包。
流表项 • 流表中的每个条目包含三个域: • header:用于定义一个流 • Counters:流的统计信息(包数、字节数、最近一个数据包的到来时间) • Action:处理数据包的动作 表1 第一代OpenFlow交换机的header域
流的处理动作 • 专用OpenFlow交换机定义的三个基本动作: • 将数据包转发到一个或几个端口:通常要求线速转发。 • 封装并转发到控制器:将数据包封装后通过安全通道转发给控制器。(如流的第一个数据包) • 丢弃数据包:通常用于安全目的,如丢弃洪泛攻击的包。
支持OpenFlow的交换机 • 在商业交换机的基础上添加流表、安全通道和OpenFlow协议 • 流表一般会重用已有的硬件(如TCAM) • 安全通道和OpenFlow协议要移植到交换机的操作系统上。
隔离营运流和实验流 • 两种方法: • 定义一个新的动作,将属于营运流的数据包转发到交换机的正常处理流程。 • 为营运流和实验流定义不同的VLAN标签。 • 支持OpenFlow的交换机必须支持以上两种方法中的一种,有些两种都支持。
交换机类型 • Type0交换机: • 只支持10元组header域和4种数据包处理动作的OpenFlow交换机,不能满足复杂实验的要求。 • Type1交换机: • 支持更多的处理动作(如修改包头、将数据包映射到一个优先级等),以及允许在header中出现非TCP/IP头域等。
控制器(controller) • 控制器向流表中添加或删除流,其功能可简单、可复杂: • 可以是运行在PC上的一个应用程序,在试验期间静态地建立流,将几个实验节点连接起来。(类似于VLAN) • 可以在实验过程中动态地添加或删除流。 • 可以支持多个研究者,允许他们在不同的流集合上运行各自的独立实验。
OpenFlow的使用例子 • Amy想在网络中测试她设计的Amy-OSPF路由协议,并只对从她的PC机上发送出去的流使用Amy-OSPF。 • Amy-OSPF运行在一个控制器上。 • 在与她的PC机相连的OpenFlow交换机上定义一个流,凡是从其PC机进入该交换机的包都属于这个流,该流的处理动作为“封装并转发到控制器”。 • 当第一个分组从其PC机进入交换机时,分组被发送给控制器。 • 控制器使用Amy-OSPF为该流确定一条路径,在路径经过的每一个交换机上添加一个流表项,将分组返回给第一个交换机。 • 后继分组进入这些交换机时,按照流表的指示转发。
控制器的性能、可靠性和扩放性 ? • 集中式控制器的处理速度能跟上新流的到达速度吗? • 用一台低端PC机实现的控制器,每秒可以处理一万个新流。 • 可靠性和扩放性? • 可以使用几个控制器和简单的负载均衡机制来构成一个分布式系统。
OpenFlow的应用 • 校园网:提供测试新协议和新算法的平台。 • 广域网和移动网络:移动管理,电源管理。 • 数据中心:数据中心内部重路由网络流量(节能,路由失效恢复) • 网络管理和安全控制:按照安全策略控制流的传输路径。 • 软件定义网络:在分离的控制面和数据面之间提供通信接口。
OpenFlow的前景 • OpenFlow开辟了一个全新的研究领域,允许我们通过一种优雅而有效的方法将多年来的研究成果应用到实际网络中。 • 2008和2009连续两年获得SIGCOMM最佳演示奖。 • MIT Technology Review将其列为十大未来技术之一。 • 已在十多个科研机构中部署,并将在国家科研骨干网以及其它科研和生产中应用。 • 一些重要的设备厂商已经提供了支持OpenFlow的交换机。 • 二十几家公司组成了一个开放网络基金会(ONF),目标是让开放和可编程网络成为主流,让程序员像为计算机和智能手机写软件那样为网络写软件 。
参考文献 • OpenFlow: Enabling Innovation in Campus Networks. ACM Computer Communication Review. Vol.38, Issue 2, pp.69-74. http://dl.acm.org/citation.cfm?id=1355746
2.2 软件定义网络(SDN)Software Defined Networks • 软件定义网络是指网络的控制面与物理拓扑分离的一种网络体系结构: • 交换机只运行数据面,根据交换机内部的流表进行数据包转发。 • 控制面运行在单独的服务器上,为每个流建立转发路径,并下发到路径上的所有交换机中。 • 用户可以通过编写运行在控制器上的程序来控制自己的流(软件定义网络)。
现状 • 网络设备中数据面和控制面共存,有以下问题: • 控制面越来越复杂,控制软件越来越庞大; • 必须兼顾数据面的高性能和控制面的高度灵活性; • 研发难度大,周期长,成本高,厂商积极性不高。 • 数据面和控制面的差异: • 数据面:处理过程较简单,要求线速转发,一般用硬件实现,以获得高速度。 • 控制面:处理任务较复杂,不要求线速,一般由通用处理器上的软件实现,以获得可编程性。
分离数据面和控制面的好处 • 交换机功能得到极大简化,设备成本大大降低。 • 新的功能只需添加在控制器上,方便网络功能扩展。 • 数据面和控制面可以用不同的计算平台实现: • 数据面采用成熟的硬件技术(如ASIC),速度高、成本低。 • 控制面采用通用多核服务器,计算能力强。 • 控制面可以采用集中式的计算模型,克服目前分布式计算带来的问题(信息不一致,不能做出最佳决策,分布式算法的复杂度高)。
软件定义网络与OpenFlow • 软件定义网络的组成: • 控制器 • 交换机 • 控制器和交换机之间的通信协议 • 软件定义网络和OpenFlow: • 软件定义网络是一种网络体系结构。 • OpenFlow是可以实现SDN的一个通信协议,SDN也可以不用OpenFlow作为通信协议。
2.3 SDN控制器 • 控制器是SDN的控制中枢,负责维护整个网络的完整视图,为每一个流建立转发路径。 • NOX是第一个SDN控制器原型。 • NOX实际上实现了一个网络操作系统,为用户提供统一的、集中式的编程接口,使得用户可以方便地编写程序来管理网络。
计算机和网络 • 令计算机执行新的任务很容易: • 操作系统对底层硬件资源进行了抽象,并提供对这些抽象的访问接口。 • 应用程序使用高层抽象来访问硬件资源。 • 在因特网上增加新的功能很困难: • 管理员只能通过手工配置每一个网络设备来实现对整个网络的管理意图。 • 所用配置语言及配置参数是低级的。 • 网络好比是一台没有操作系统的计算机,对网络设备进行配置就好比是用与硬件相关的机器语言进行编程。
网络操作系统 • 我们需要一个网络“操作系统”,为整个网络提供一个统一的、集中式的编程接口,允许管理员使用高层抽象来配置网络。 • 网络操作系统含义的变迁: • 过去指“包含了网络操作能力的操作系统”。 • 现在指“为以编程方式控制网络提供执行环境的系统”。
计算机操作系统 VS 网络操作系统 • 类似之处: • 计算机操作系统提供对资源的读、写能力; • 网络操作系统提供对网络的观察和控制能力。 • 不同之处: • 计算机操作系统管理硬件资源; • 网络操作系统并不管理网络,在其上运行的应用程序(称管理应用)执行真正的管理任务。