相关概念
主动网络:主动网络(active network)是一种可编程的网络,将用户定义的计算引入到路由器/交换机。传统的路由器/交换机只对经过的包做存储、转发,对包内的数据不做分析、理解,而主动路由器/交换机除对经过的主动报文做存储、转发外,还将对主动报文内的数据进行处理甚至执行报文内携带的程序。所以,整个网络是分布式的计算体系,网络的行为可通过编程控制。通过主动网络,用户可以控制网络的某些运行特征,远程动态修改网络配置,从而加速了网络应用和网络服务的更新。主动网络潜在的优点是快速动态定制、配置新的服务,实验新的网络体系结构和协议,可以加速网络服务的革新步伐,提高网络的性能,使网络系统更具灵活性、可扩展性。2
数据包:TCP/IP协议通信传输中的数据单位,一般也称“包”。在包交换网络里,单个消息被划分为多个数据块,这些数据块称为包,它包含发送者和接收者的地址信息。这些包然后沿着不同的路径在一个或多个网络中传输,并且在目的地重新组合。
提出背景Intemet上传送的数据包是由包含控制信息的包头和包含数据信息的有效负载构成。包头可以看成是由包格式的规范说明所定义的编程语言编写的简单程序。如果需要添加新的功能到协议当中,那么包格式和它的语义必须被改变,也就是编程语言和它的规范必须被改变。对于一个被广泛使用的协议,例如:IP协议,包格式的改变必须是谨慎的,并且一定要遵循某些标准。因此,在这个层次上,引入新的网络服务将是一个非常缓慢的过程。
主动网络可以在IP层获得更大的灵活性,因为它可以编程网络的基础结构。如果抽象层次可以从IP包的“位”提高到更加通用的“编程语言”,那么网络的演变可能会跟着技术发展的步伐大步前进,因为这种改变只是发生在程序级而不是编程语言级。因此要实现这个想法,首先解决的问题就是:一个什么样的编程语言能满足这一需求。让我们首先考虑一下现有的程序语言。由于用该语言编写的程序是用来代替传统的数据包头的,因此它应该是简单的、安全的。就这一点而言,大多数通用语言都不能满足要求。另一方面,由于需要这种语言适合于主动网络领域,那么现有的专用语言也是不适合的。因此,就需要一种全新的语言来实现我们的目标。
PLAN(Programming Languagefor Active Networks)是一种新的程序语言,用它所编写的程序构成了主动网络的数据包,这些程序替代了传统网络的数据包头。因此,PLAN的表达能力是受到限制的,它允许主动节点在无需认证的情况下执行PLAN程序;PLAN程序是函数风格的,并且保证终止。为了弥补它有限的表达能力,PLAN程序可以调用节点驻留的服务,这些服务提供对信息(例如:时间,网络接口的个数等等)和强有力功能(例如,分段,可靠性,软状态等等)的访问。3
PLAN程序结构每个PLAN程序包括一个顶层的“代码块”(code hunk),或者叫chunk。Chunk是PLAN中的编程结构。Chunk有三个部分:PLAN代码,代码内的一个入口点函数和函数参数的捆绑。当一个PLAN包到达它的目的节点时,它的入口点函数用给定的参数被调用。
Chunk是第一类的数据值,意思是它可以被用作函数的参数,从函数中返回和存储在数据结构中。PLAN的语法——|f| (exprl,…,exprn),是一个类型chunk的表达式,它产生一个新的Chunk。直观上,“|”表明表达式部分(指函数调用本身)的计算将被延迟。明确地说就是,所产生的chunk是由和目前执行的相同代码、一个入口点函数f和通过计算exprl,…,exprn所获得的参数值的捆绑构成的。这样,chunk可以被处理,复制或者作为参数传递;最特别的是,它甚至可以作为参数捆绑出现在其它chunk中。3
特点PLAN语言具有强的类型和静态类型检查来提供安全,注入PLAN程序到网络中去,PLAN语言被设计为通过限制其行为来保证节点的安全性,即PLAN程序不能操纵节点的状态。为了弥补这个缺陷,PLAN程序能够调用主动扩展。
PLAN语言仅支持很简单的数据和控制结构,因此容易被编译或解释。此外,PLAN语言不改变路由器的状态,它允许没有经过认证而在其上面执行。PLAN语苦有很强的类型检查,所以类型错误不会威胁路由器状态的完整性。4
PLAN语言表达能力是受限的,因此防止了CPU和存储器的服务拒绝攻击。例如,所有的PLAN程序都保证终止,因为PLAN不提供表达无固定长度的迭代和递归的方式。除此之外,PLAN程序是彼此独立的,因为它们之间没有直接通信的方式,还由于语言的强类型和垃圾收集也阻止了非直接的方式(例如,由于指针的混乱或者缓冲区溢出而引起的通信)。PLAN的上述特点给主动网络带来了灵活性,增强了安全性,并且提高了性能。3