网络编程
网络编程是指网络设备的行为和流量控制由独立于网络硬件运行的软件处理。用户可以在控制器上编程、实现对网络的配置、控制和管理。网络编程将网络的控制平面和数据平面分离,数据平面不再需要实现各种网络协议的控制逻辑,只需要接收控制平面的操作指令并执行。
网络编程是怎么来的
传统网络设备将网络设备硬件、操作系统和网络应用三部分紧耦合在一起组成一个封闭的系统。这三部分相互依赖,每一部分的创新和演进都要求其余部分做出同样的升级。这样的架构阻碍了网络创新进程的开展,具体表现在以下几个方面。
- 缺乏网络的全局视角,缺乏流量可视化功能,无法基于全局视角做出全局最优的网络决策,无法快速响应TE需求。
- 数据平面缺乏统一的抽象模型,控制平面无法基于数据平面API(Application Programming Interface,应用编程接口)进行编程来支持网络新功能。
- 缺乏自动化工具,业务上线周期长。
- 设备的数据平面和控制平面紧耦合,相互绑定销售;在演进上相互依赖,不同厂商设备的控制平面无法控制彼此的数据平面。
那么有没有一种新的方式可以解决上面的问题呢?当时的研究者们就从计算机终端的发展那获得了灵感。计算机终端采用通用处理器,并基于通用处理器实现软件定义功能,因此计算机具有更加灵活的编程能力,使得软件应用的种类出现了爆炸式的增长。在计算机编程中,人类可以将自己的意图翻译成计算机可以理解的一系列指令,计算机通过执行指令来完成工作,满足人类的各种需求。类似地,网络是不是也能像计算机一样,将网络承载的业务意图翻译成沿途网络设备可执行的一系列转发指令,实现网络编程,满足业务的定制化需求呢?借鉴计算机领域的通用硬件、软件定义和开源理念,尼克·麦基翁教授团队提出了一个新的网络体系结构:SDN。
在SDN架构中,网络的控制平面与数据平面相分离:数据平面变得更加通用化,与计算机通用硬件底层类似,不再需要具体实现各种网络协议的控制逻辑,而只需要接收控制平面的操作指令并执行即可,网络设备的控制逻辑由软件实现的SDN控制器和应用来定义,从而实现网络功能的软件定义化。从传统网络体系结构到SDN网络体系结构的演进关系如下图。
传统网络架构向SDN架构演进
实现网络编程的技术有哪些
网络编程是SDN的核心特征。SDN建立了新的网络抽象模型,为用户提供了一套完整的通用API。用户可以在控制器上编程,实现对网络的配置、控制和管理。那么有哪些技术可以实现网络编程这一理念呢?
OpenFlow
2008年3月14日,尼克·麦基翁教授等提出了OpenFlow协议。OpenFlow是一种SDN控制平面和数据平面之间交互的通信协议。
本质上,网络的转发行为就是“Match + Action”模式的查表转发。OpenFlow的设计理念就是将匹配和转发动作抽象成固定的操作,然后通过控制器向交换机下发转发流表项,指导报文的转发。在OpenFlow的协议架构中,OpenFlow交换机和OpenFlow控制器之间建立OpenFlow协议通道用于交互信息。
OpenFlow支持匹配以太网、IPv4和IPv6等协议字段,也支持转发报文到指定端口、丢弃报文等动作。控制器可以基于OpenFlow协议对匹配规则进行编程,从而实现网络编程。比如控制器向交换机A下发一条流表项,指示交换机A将目的IP地址为192.168.1.20的报文转发到出接口1。
OpenFlow1.0架构示意
总体而言,OpenFlow是一种网络处理规则的抽象通用化,且支持集中编程的SDN技术。OpenFlow支持匹配以太网、IPv4和IPv6等协议字段,也支持转发报文到指定端口、丢弃报文等动作。控制器可以基于OpenFlow协议对匹配规则进行编程,从而实现网络编程。
POF
POF架构与OpenFlow相似,可以分为控制平面的POF控制器和数据平面的POF转发元件(Forwarding Element)两部分。POF是一种对网络处理流程完全抽象通用化(也即协议无关),支持对转发逻辑和转发规则完全编程的SDN技术。下图展示了POF硬件交换机和POF软件交换机的架构。
POF硬件交换机(左)和POF软件交换机(右)
P4
P4协议也能解决OpenFlow编程能力不足的问题。P4支持通过定义报文头格式(Header)、解析器(Parser)、表项(Table)、动作(Action)和控制程序(Control Program)来实现对设备报文处理流程的编程,可以做到转发无中断的重配置,满足网络新业务对网络设备可编程的需求,实现了协议无关的可编程网络数据平面。P4的架构如图所示。
P4架构模型
Segment Routing
实现网络编程就一定需要颠覆性的创新吗?答案是否定的。
2013年,由思科公司提出的Segment Routing(SR)协议就是在已有的网络基础上进行演进式的扩展,提供了网络可编程能力。Segment Routing是一种源路由协议,支持在路径的起点,向报文中插入转发操作指令来指导报文在网络中的转发,从而支持网络可编程。Segment Routing的核心思想是将报文转发路径切割为不同的分段,并在路径起始点往报文中插入分段信息指导报文转发。这样的路径分段,称之为“Segment”,并通过SID(Segment Identifier,段标识)来标识。目前Segment Routing支持MPLS和IPv6两种数据平面,基于MPLS数据平面的Segment Routing称为SR-MPLS,其SID为MPLS标签(Label);基于IPv6数据平面的Segment Routing称为SRv6,其SID为IPv6地址。
报文在Segment Routing网络中的转发过程如下图所示,报文从节点A进入Segment Routing网络,节点A经过匹配目的地址,知道报文需要经过节点B和C到达节点D,所以将节点B、C和D对应的SID插入到报文头中用于指导报文转发。节点B和节点C根据报文头中的SID信息将报文一步步地转发到指定的目的节点D。
Segment Routing示例
在互通上,由于SR-MPLS未对MPLS数据封装做任何修改,所以在数据平面可以很容易地与传统的MPLS网络互通。相比于OpenFlow等革命式的协议,SR-MPLS协议考虑了对现网的兼容,支持平滑演进,同时也提供了网络编程的能力。
SRv6
SRv6是基于IPv6数据平面的Segment Routing,结合了SR-MPLS头端编程和IPv6报文头可扩展性两方面的优势。它将网络功能指令化,将表达网络功能的指令嵌入128bit的IPv6地址形式当中。在SRv6网络里,业务需求可以被翻译成有序的指令列表,由沿途的网络设备去执行,达到网络业务的灵活编排和按需定制。
SRv6定义了网络指令:SRv6 Segment。标识SRv6 Segment的ID称为SRv6 SID(Segment Identifier,段标识),SRv6 SID是一个128 bit的值,它通常由三部分组成。
- Locator是网络拓扑中一个网络节点的标识,用于路由和转发报文到该节点。
- Function用来表达该指令要执行的转发动作,相当于计算机指令的操作码。
- Arguments(Args)是一个可选字段。它是指令在执行时对应的参数,这些参数可能包含流、服务或任何其他相关的信息。
SRv6 SID
SRv6具有比SR-MPLS更强大的网络编程能力,主要体现在以下三个方面。
第一层是Segment序列。它可以将多个Segment组合起来,形成SRv6路径。
第二层是对SRv6 SID的128 bit地址的运用。众所周知,MPLS标签封装主要是分成四个段,每个段都是固定长度(包括20 bit的标签,8 bit的TTL,3 bit的Traffic Class和1 bit的栈底标志)。而SRv6的每个Segment长度是128 bit,可以灵活分为多段,每段的长度也可以变化,由此具备灵活编程能力。
第三层是紧接在Segment序列之后的可选TLV。报文在网络中传送时,如果需要在转发平面封装一些非规则的信息,可以通过SRH中TLV的灵活组合来完成。
SRv6通过三层编程空间,具备了更强大的网络编程能力,可以更好地满足不同的网络路径需求,如网络切片、确定性时延、IOAM等。结合SDN的全局网络管控能力,SRv6可以实现灵活的编程功能,便于更快地部署新的业务,实现真正的智慧网络。
SRv6的三重编程空间
SRv6的工作过程与我们日常生活中常见的导航地图工作过程很像。导航地图会有拓扑收集、路径计算、信息下发、路径选择以及指导形势几个过程。
导航地图工作过程
SRv6的工作过程也是如此。首先,转发器将网络拓扑信息通过BGP LS上报给网络控制器。然后,控制器基于收集到的拓扑信息,按照业务需求计算路径,符合业务的SLA。接着,控制器通过BGP SR-Policy扩展将路径信息下发给网络的头节点,头节点生成SRv6 TE Policy。生成的SRv6 TE Policy包括头端地址、目的地址和Color等关键信息。然后,网络的头节点为业务选择合适的SRv6 TE Policy指导转发。最后,数据转发时,转发器需要执行自己发布的SID的指令。
SRv6有着非常强大的扩展能力,如果要支持一个新的网络功能,只需要定义一个新的指令即可,不需要改变协议的机制或部署,这大大缩短了网络创新业务的交付周期。
网络编程的优势
网络编程对于实现智能云网有着极其重要的作用。全球数字化发展进入加速阶段,越来越多的企业将业务迁移到云上。但是企业上云也面临着诸多挑战,其中一个挑战就是云快而网慢。云网不匹配,云业务开通速度非常快,随着企业数字化进程的深入,企业云业务电商化订购,分钟级开通,但网络的开通需要等待“月级”时间才能打通企业侧到云侧之间的联接。这严重影响了业务部署的速度。
智能云网中的网络即服务功能就能够实现云网互调,解决云快而网慢问题。这个功能的关键点就在于结合网络控制器和SRv6技术跨域打通业务实现网络编程,一键下发业务,实现业务快速开通,快速调整的效果,适应云时代业务发展的需要。
网络编程的未来趋势是什么
尼克·麦基翁教授认为我们应该把网络看做一个可编程平台,而不是一个独立元素的集合。网络的行为应该自顶向下进行描述。此外,网络可编程也可以从用户意图的管控面编程和面向新业务的转发面编程两个方面继续创新发展。
首先是面向用户意图的管控平面编程。传统网络配置、变更、运维、业务部署等以设备为中心,需要专业的管理员。SDN的发展解决了部分问题,主要是Overlay网络的快速开通。未来方向是以用户意图为中心、意图驱动自动实现网络的管控,包含规建维优全生命周期,覆盖Overlay、Underlay和安全策略等全场景。未来待研究突破的技术包括配置自动转换、实时配置验证等。
其次是面向新业务的转发面编程。为了敏捷响应新业务,需要在数据面提供可编程能力,以支撑用户快速创新和尝试新的想法,比如支持新的数据面封装、非标准数据面转发行为、定制实时网络测量能力等。未来待研究突破的技术包括转发面模型抽象、DSL/编译器和端到端协同能力。端到端的协同能力主要体现在两方面:一是从主机、网卡、网络设备端到端流程的协同,二是兼容软转发、NP、ASIC、FPGA多形态。
- 作者: 陈立
- 最近更新: 2024-11-10
- 浏览次数: 13047
- 平均得分: