软件定义网络核心原理与应用实践(第二版)上册
上QQ阅读APP看书,第一时间看更新

2.3 网络可编程

2.3.1 基本概念

网络可编程性是SDN的另一个重要属性。说到可编程性,大家首先想到的往往是计算机软件,计算机发展到现在已经衍生出了各种各样的编程语言,包括低级的汇编语言和高级的C语言、Java语言等,同时计算机操作系统为开发人员提供了各种丰富的编程接口和函数库,开发人员通过这些接口可在计算机操作系统上构建丰富、强大的应用。但是说到网络的可编程性,人们还是很陌生的,随着SDN的出现,网络可编程性越来越频繁地出现在了人们的视野当中。

网络可编程性最初是指网络管理人员可以通过命令行对设备进行配置,后来有了可编程路由器、NetFPGA等设备,这些设备的可编程性主要是对设备本身硬件电路级的可编程,即开发人员是通过编译代码直接控制这些硬件来实现自己的协议或者功能。这种可编程的能力是对某台设备而言的,是一种处于最底层的编程能力,相当于计算机中汇编等级的低级编程语言,不够灵活便捷。然而,SDN的网络可编程性是从另外一个角度来看的,传统网络设备需要通过命令行或者直接基于硬件的编译写入来对网络设备进行编程管理,现在管理者希望有更为高级的编程方式,相当于Java等高级语言。管理者可以通过SDN中这种高级的编程能力实现与网络设备的双向交互,通过软件更加方便、灵活地管理网络。这种可编程性是基于整个网络的,而不是基于某台设备的。它是对网络整体功能的抽象,使程序能通过这种抽象来为网络添加新的功能。比如,管理人员可能希望编写一个软件,这个软件能够根据实时的链路负载情况自动配置路由器的转发策略,这就是对网络设备编程能力的一种需求。SDN很好地满足了这种需求,并体现了网络的可编程性。早在SDN出现之前,就有研究人员提出过主动网络的概念,以使网络具有可编程性。主动网络和SDN之间有很多的相似之处,但它并没有发展起来,这一点值得思考,后面我们来具体分析。下面首先介绍一网络可编程的历史,然后再回过头来仔细分析SDN对网络可编程性的推动及其进一步的发展方向。