2.3.2 网络可编程历史

互联网于20世纪70年代中期开始飞速发展,随着电子邮件、文件传输这样的服务在互联网中被广泛使用,越来越多的研究者开始去应用和改造网络,他们致力于把自己的新想法在网络中测试实现。刚开始,许多新的想法和网络协议都是在小的实验网络环境下提出然后在大的网络环境中验证。后来,成立了IETF工作组对新的网络协议进行标准化工作。但是,由于标准化过程非常缓慢,新的网络技术得到应用往往需要很长的时间,因此在一定程度上打击了不少研究者的积极性。

为了解决这个问题,一些网络研究者提出了一种新的途径,通过开放网络的控制权,使得研究者能够对网络进行编程。早期很难将计算机中的编程观念应用到网络领域,传统的网络根本就没有可编程这个概念,直到主动网络被作为一种激进的解决方案提出。1994年,美国国防部高级研究计划署(DARPA)在有关未来网络发展方向的研讨会上指出,未来网络系统应是运行时刻可扩展的,提出了主动网络(Active Networking)这一新的网络体系架构。

主动网络的基本思想是,打破传统网络只能被动传输信息的模式,允许网络中的节点在用户数据上执行用户所需的计算。例如,主动网络的用户可以向网络中的主动节点(如路由器)发送一个定制化的压缩程序,并要求该节点收到相应的分组时都执行这个压缩程序。DARPA主动网络架构可以划分成3个主要层次,即主动应用(Active Application,AA)、执行环境(Execution Environment,EE)和节点操作系统(Node OS),如图2-8所示。

图2-8 主动网络体系结构

AA 是一个协议的程序代码,它通过主动分组加载到主动节点中,并在主动节点中对分组进行转发和计算来完成某种通信功能。EE是在Node OS上的一个用户级操作系统,它可以同时支持多个AA的执行,并负责AA之间的互相隔离。EE为AA提供了一个可调用的编程接口,一个主动网络节点可以具有多个执行环境,每一种执行环境完成一种特定的功能。节点操作系统类似于一般操作系统的内核,它位于主动网络节点最底层的功能层次,管理和控制对主动网络节点硬件资源的使用。因此,EE在Node OS中运行,一个Node OS可以并发地支持多个EE,协调EE对节点中可利用资源(内存区域、CPU周期、链路带宽等)的使用。一般来说,主动网络包含以下两种主要的数据模型。

(1)封装模型(Capsule Model)

节点的可执行代码被封装在数据分组内,为In-Band方式。这种模型利用数据分组携带代码从而在网络中添加新的功能,同时使用缓存来改善代码分发的效率,而可编程路由器根据数据分组的分组头由管理员定义一系列的操作行为。图2-9是主动网络封装报文的一种格式,其中包含了IP报文、可执行的程序码和用户数据,交换设备会根据原先的源目的地址来转发报文。可以看到,每条消息甚至每个报文都携带了一段可执行的代码,当报文到达交换机或路由器后,报文中的代码就会被分发到每个交换机的可执行环境中,然后控制交换机的行为或者修改报文。

图2-9 Active IP报文格式

(2)可编程路由器/交换机模型(Programmable Router/Switch Model)

节点的可执行代码与数据分组分离,为Out-of-Band方式,图2-10展示了报文在主动网络节点和传统网络中传输的情况。用户可以在协议栈中添加自己的操作,网络中可以同时有传统的节点和主动网络节点。当数据通过传统的设备时,报文只是被简单地转发不做任何修改;而当数据报文通过主动网络节点时,节点能够根据用户定义的行为对数据报文进行计算与操作。

图2-10 信包在包含主动路由器中的传输情况

上文介绍了主动网络的通用体系架构及其数据分组格式。在主动网络发展的进程中出现了几个重要的项目,这些项目促进了主动网络的快速发展。

① ANTS项目:ANTS是由麻省理工大学提出的基于Java实现的主动网络工具箱。ANTS 基于动态代码、需求读取和缓存技术,允许新的协议分布于端系统和中间路由节点上。

② SwtichWare 项目:该项目由宾夕法尼亚大学主导,项目提出了一种创新的SwitchWare交换机,该交换机使用一个编程元件完成交换功能,由可编程元件控制的入端口组成,被称为交换插件的程序部分被发送到交换机端口,然后编译并执行。

③ Smart Packets项目:该项目是将主动网络技术引入到网络管理中以到达管理节点可编程化的目的。

④ Netscript项目:该项目的体系结构应用了压缩技术,用脚本语言对传统网络的原始功能进行一系列简单的抽象。

从上面的介绍可以看出,主动网络通过提供一系列的编程接口来控制网络节点内的资源,例如处理器、存储、数据分组的队列,并且支持构造自定义的行为来对一些通过节点的数据分组进行处理,例如,在每个路由器上对数据分组进行追踪和记录。像防火墙、代理这些需要对数据分组进行计算、分析的服务也是主动网络的应用。因此,主动网络节点不仅能转发数据分组而且还可以执行用户自己定制的程序来对经过该节点的数据进行处理,从而更好地满足用户的需求。这种可编程的网络结构使得新的标准和技术的实现变得更为简单,从而加快了网络创新。然而,主动网络并没有得到广泛的应用推广,主要有以下原因:缺乏具备特色的应用,缺乏大规模实践检验,开放了太多的可编程能力而带来的网络安全性隐患等。