第 5 章 融合段路由的NGNP 带内遥测 作为网络遥测的一个分支,带内遥测的显著特征便是借助数据平面的业务流量完成 网络的测量并具备远程上报的能力。相较于依靠运行在监控节点中的代理来周期性地采 集遥测数据并汇报给网络管理控制系统的遥测方式而言,带内遥测对交换机正常业务的 侵占和影响更小。同时,带内网络遥测还具备支持更细粒度的测量、支持端到端状态的随 路追踪和监控过程用户无感知等能力。上述优点使得带内遥测一经提出便吸引了学术界 和工业界的广泛关注。带内遥测与段路由技术的结合能够使测量方案更轻量,减少测量 开销。同时,利用NGNP 的可编程特性,能够快速开发和部署融合段路由的带内遥测 方案。 本章主要内容包含3部分:第一部分介绍相关的前置知识,即段路由转发、带内遥测 的背景及研究现状;第二部分则介绍了一种融合段路由的带内遥测方案;第三部分则尝试 将该方案进行轻量化,以便更好地适配NGNP 。 ...... 5. 1 .... .................................................................................. .... 段路由与带内遥测 5.1 带内遥测技术简介 1. 根据网络测量系统测量的方式不同,网络测量技术可以进一步分为三大类:主动测 量、被动测量和以带内网络遥测(y,为典型代表的结合这 两种方式的混合测量方式。 In-bandNetworkTelemetrINT) 图5.1给出了网络测量研究架构图,主要部分从上向下可分为测量应用、测量算法、 测量模型和测量工具。主动测量通过主动向网络注入的探针,根据网络中的反馈信息得 到测量结果,其测量探针的格式、发送探针的时机以及频率可由用户决定,但随之而来的 缺点是探针带来的额外开销,并且探针格式与常规业务量报文格式不一致,导致探针很可 能在路由协议、转发规则等的干扰下经历不同的转发路径,从而对最终的测量结果带来一 定的影响。网络性能被动测量通过截取经过待测点的数据包来对网络状态、协议类型等 性能指标进行测量,该手段可以更加精确地反映当前网络的状态,但是同时上传了较多并 且可能冗余的遥测数据,从而带来了较大的开销。而混合测量是近年来逐渐兴起的一种 测量方式,它结合了主动测量和被动测量的特点重新对测量机制进行了设计与更改[1]。 在本工作中,选取了其中更具代表性、测量粒度更细、精度更高的带内网络遥测作为研究 第5章 融合段路由的NGNP带内遥测 图5.网络测量研究架构图 1 目标。 带内网络遥测是近年来提出的一种混合测量方案,其工作的简要原理是转发路径中 的交换节点在转发数据包时按照一定的遥测规则插入元数据(metadata)进行网络状态测 量。图5.用户1向用户2发送正常数据包的过 2给出了简要的带内网络遥测工作流程, 程中,数据包到达链路中第一个交换机时,第一个交换机作为测量源节点向数据包中插入 含有指令的INT头以及含有相应遥测信息的元数据。数据包到达第二个交换机时,第二 个交换机依据数据包内的INT指令向数据包内插入相应遥测信息。数据包到达遥测宿 节点,即第三个交换机,交换机首先插入遥测信息,其次从数据包中提取INT头和INT 元数据并生成报告发送至遥测服务器。 相对于前文涉及的测量方式,带内网络遥测粒度更细、实时性更强、对网络各状态的 测量结果更精确。带内遥测支持包级别的细粒度监控[2],相较于流级监控的秒级别的监 控精度[3],能够支持网络中微突发现象[4]的检测,使网络管理者对网络的运行状态拥有更 细粒度的感知。目前,已有的较成熟的INT方案主要有INTin6TiSCH 、INTColector、 PINT,本节将首先对这些既有方案进行简要介绍。 (1)INTin6TiSCH:INTin6TiSCH是Karagac等[5]为将带内网络遥测从有线网 络拓展到无线网络场景中,针对工业无线传感器网络提出的一种带内网络遥测方案。该 77 图5.带内网络遥测工作流程 2 方案主要侧重于6TiSCH这类具有低功率、较可靠特点的无线网络协议栈。Karagac等 设计的遥测方案最大限度地减小了资源消耗和通信开销,并且支持绝大多数测量操作和 策略,可应对各种网络场景和用例。 (2)INTColector:传统INT会将巨大的数据量发送到收集器中,从而对收集器的 处理能力有较高的要求,为了解决该问题,Tu等[6]提出了INTColector的设计与实现。 该机制最大的特点是拥有两个处理流程:一个是负责处理INT报告包的快速路径,另一 个是处理网络事件并将结果存储到数据库的正常路径。通过这种设计,减少了需要存储 的网络事件的数量,进而减少了CPU的使用和存储成本,同时仍然确保捕获并存储了重 要的网络信息。 (3)PINT:为了解决INT开销过大的问题,Basat等[7]提出了基于P4语言的PINT 框架。通过概率计算的方法,PINT限制了添加到每个数据包上的信息量,并且要求将数 据编码在多个数据包上。Basat等利用真实的拓扑结构和流量特性表明,PINT在媲美当 前技术水平的要求下,在一定场合下每个数据包仅使用16位开销,极大地缓解了INT开 销过大的问题。 5.2 SR6介绍 1.v SegmentRouting(SR)是一种源路由技术。该技术为每个节点或链路分配Segment, 头节点将这些Segment组合起来形成Segment序列,数据包在转发时即可按照Segment 序列进行转发,从而实现网络编程能力,3所示,v 如图5.SRv6技术在IP6报文中新增 SegmentRoutingHeader(SRH)报头,用于存储128比特IPv6地址格式的SRv6SID列 78 第5章 融合段路由的NGNP带内遥测 表。作为SRv6技术的核心,SID 主要由3部分组成:标识节点位置的LOC 字段、标识服 务和功能的FUNC 字段以及存储相关参数的ARG 字段。 图5.3 SRv6报文结构图 在SRHdr中,较为重要的是SegmentsLeft和LastEntry字段。SegmentsLeft字 段表示还剩下多少个Segment等待转发,在实际转发时可用作指针指向待转发的地址; LastEntry为索引字段,主要作用是给出SRH 中实际包含的Segment的总数。因此, SRH 扩展头存储的内容相当于一个计算机程序,第一个要执行的指令是SegmentList [n],SegmentsLeft相当于计算机程序的PC 指针,永远指向当前正在执行的指令。 图5.4给出了SRv6报文的转发流程,节点R1 指定路径转发到R5,其中路径中支持 SRv6的NGNP 交换机设备按照转发规则对数据包进行修改,不支持SRv6的普通交换 机例如R4,仅将SRv6数据包视作普通IPv6数据包进行转发处理,SRHdr部分不进行 处理。可从图中看出,数据包每经过一个NGNP 交换机时,会根据SegmentsLeft读取相 应的字段进行路由处理,最后在转发前对数据包进行修改。不难看出,在整个转发过程 中,数据包到达NGNP 交换机时,该路径前序IPv6地址均失去使用价值,再结合SRv6的 可编程特性可以利用该失效字段携带其他信息,这也为本工作的后续研究埋下伏笔。 可以看出,SRv6对控制协议进行了简化操作,从而降低了后续运维工作的复杂度; 并且SRv6具有良好的可扩展性,在头部节点进行路径编程,网络中间节点不感知路径状 态信息;最为重要的是SRv6具有较好的可编程性和更可靠的快速重路由保护机制。这 些独特的优势使得SRv6成为软件定义网络和下一代IP 网络的核心技术,是目前国内外 业界的研究热点。 5.3 SR6+INT 研究 1.v 软件定义网络(SDN)的快速发展推动了可编程数据平面思想的发展,这为实现强大 而及时的网络监控带来了前所未有的机遇。P4 联盟在提出INT 规范时,曾经提过“ INT 79 图5.4 SRv6报文的转发流程 overEverything的(”) 概念,即可将INT 数据封装在TCP 、UDP 、NSH 、Geneve、VXLAN 等 一系列协议中[8]。因此也有很多学者对可编程数据平面的两大技术即分段路由(SR)和 带内网络遥测(技术进行同步研究,尝试将两者技术进行无缝合并以实现高效和自 INT) 适应的网络监控。 NetVision是清华大学Liu等[9]依据网络遥测即服务概念所提出的带内测量平台,其 通过主动发送与网络状态和遥测任务相匹配的适当数量和格式的探针数据包进行测量。 该方案设计了“SR+INT”的双栈网络探针结构,利用段路由对探测路径进行定制,从而 实现了路径规划功能。图5.该主动网络遥测平台 5给出了其所设计的探针结构。此外, 利用可编程协议无关报文处理语言(P4)的特性,能够覆盖全网且具有较强的可扩展性, 目前该平台在路径决策、流量工程等方向均已得到应用。 图5.n探针结构 5 NetVisio 80 第5章 融合段路由的NGNP带内遥测 学者Zheng等[10]利用协议无意识转发(ProtocolObliviousForwarding,POF)设计 了SR-INT网络监控系统。其主要思想是对SR和INT的每个数据包中的报头字段进行 时间复用,并且保持SR-INT数据包长度在端到端过程中不变。其设计的数据包格式如 图5.6所示。SR-INT通过流表的方式对数据包进行操作,这不仅降低了同时使用SR和 INT的开销,而且降低了基于软件的POF交换机的操作复杂度,实现了高效和自适应的 网络监控以进行故障诊断,并且可以将网络从软件失败中快速恢复。 图5.INT数据包格式 6 SR- Lin等[11]为数据中心网络提供了一种新的网络遥测框架———NetView。该框架可以 按需支持各种遥测应用和频率,通过主动发送专用探针监测每个设备。在技术上, NetView利用SR来转发探针,实现全覆盖。此外,Lin等设计了一系列探针生成算法,在 很大程度上减少了探针数量,提供了高可扩展性。图5.tView探针结构。可 7给出了Ne 以看出该结构同样采用了双栈结构,将转发地址以SR形式放入FwdStack中,以确保探 针沿指定路径转发。 图5. w 探针结构 7 NetVie 综上所述,由于段路由技术的发展,越来越多的学者将其融入了INT的研究中,尝试 利用段路由技术解决INT的一些传统问题。然而目前的研究仅在数据包中包含了SR和 INT的相关字段,而没有注意到累积使用两个技术带来的开销,导致在大规模网络中难 以部署。此外,目前的研究仅针对传统网络设计,无法应对大规模部署NGNP交换机的 情况。例如,NetVision和NetView均采用了双栈结构的探针结构,这种结构的探针由于 同时携带了过多的信息导致开销过大,最大报文长度(MaximumTransmisionUnit, MTU)也将受到限制。此外,由于SR-INT是针对POF交换机所设计的,在传统网络或 81 者SRv6网络中均无法很好适配。 值得注意的是,SR 可以管理INT 数据采集的配置,而INT 可以根据网络状态辅助 SR 优化其设置。这实际上促使我们研究如何将它们无缝合并以最小化开销,实现高效 和自适应的网络遥测。 ...... 5. 2 .................................................................................. .... .... 基于段路由的遥测方案 将SRv6和带内网络遥测进行结合的首要难点便是数据包的设计。针对此问题,目 前常用的数据包格式是双栈结构———同时包含SR 路径信息栈和INT 数据栈。这种结构 的数据包在传输过程中,从SR 路径信息栈获取下一跳信息,向INT 数据栈插入信息。双 栈同时进行处理,规则较为简单。然而该类型的数据包仅仅是包含了SR 和INT,并没有 将两者进行很好的结合。针对以上问题,本节做了如下尝试:设计基于SRv6的INT 数 据包,并且设计了新的遥测原语。通过对原SRv6数据包的修改,使其可以携带INT 遥测 数据,并且依据INT 标准在SID 中添加了INT 相应头部,使得数据包在传输过程中有迹 可循。作为扩充,本工作还为SRv6-BasedINT 设计了高效、简洁的遥测原语,用户在使 用SRv6-BasedINT 时可据此下发遥测指令,传达遥测任务。 5.1 基于SR6的遥测数据包及遥测原语设计 2.v 在传统段路由网络环境中,在报文转发前会将路径每一跳地址写入头部Segment List字段中,再由指针指向下一跳地址,因此报文在网络传输中,每经过一跳指针便向下 移动一次。但在该过程中,不难发现存在较为严重的资源浪费问题。例如该报文到达第 n 个NGNP 交换机时,SgmetLit[~ensn-这些地址所代表的NGNP ens0]SgmetLit[1] 交换机已经完成了转发任务,这些地址理论上已经失去了价值,则会造成128 比特×n 的 资源浪费。 本节从这点出发,依据P4 联盟提出的INT 规范,对SID 进行重新设计。较为特殊的 是SegmentList[0], 其中包含了INT 一些头部信息,如INT 的数据包类型、INT 首部长 度等控制信息。后续SID 均由4个32 比特的metadataStack组成,用于携带在每一跳节 点测量到的相应信息。为了保证INT 元数据小于或等于32 比特,本工作还借助了传统 的乘法压缩手段,对INT 数据进行压缩传输。图5.并给出了 8对上述步骤进行了说明, 所设计的INT 元数据格式并加以说明。 对图5. 8中定义的INT 元数据字段解释如下。 type:占用8比特的空间。该字段用于表示INT 数据包类型。本节中为随流检测的 基于SRv6扩展后的INT 数据包。 length:占用8比特的空间。该字段用于表示INT 头部长度,可根据该字段判断 INT 数据从何处开始。 protoclType:占用8比特空间。由于INT 可以封装在很多协议中,例如可封装于 UDP 、TCP 、N(o) SH 的有效载荷,也可封装于Geneve的option选项中。protocolType主要 用于区分INT 的头部的上层协议。在本工作中,INT 封装于SRv6数据报中,使用自定 82 第5章 融合段路由的NGNP带内遥测 图5.结合INT 元数据的SR6数据包格式 8v 义的协议号255 来表示INT 层之后的上层协议SRv6。 flags:占用16 比特空间。该字段为标志位字段,用于表示INT 协议的版本号等 信息 p 。 ointer:占用8比特空间。由于每一个NGNP 交换机插入的数据量不确定,因此该 字段指示了下一个可插入INT 数据的头部地址。 reserved:暂无明确用意的保留位,后续进一步研究可能起到作用。目前在实际使用 中仅起到填充的作用。 ittinBitMap:占用16 比特的空间。该字段用于指示在NGNP 交换机上收集的数据类(n) 型(r) 。(c) 其(o) 本质是一个双字节的位图,(u) (s) 在后续章节中将介绍支持测量的元数据类型。 对于BitMap中的置1位,NGNP 交换机将相应类型的INT 数据插入数据包,即本工作的 SRv6-BasedINT 支持在一跳中插入多个元数据字段。 tdtStck:占用32 比特空间。该字段用于存储遥测数据。ID 和所对应的遥测数据构(m) 成(e) 值(a) K ,以这种数据结构来存储数据。其中 K 用于表示节点ID, 键(a) 对G((a) (a) V), 假设 较为常见的段路由网络拓扑节点一般有150 个左右,为了提高效率,通常30% 的节点为 NGNP 交换机,则最少需要6比特开销作为节点ID 。对于遥测数据E,在传统的INT 中, 常用的精确的时间表达需要32 比特,此时: G( K ,(5. V)≥38 1) 则对于一个完整的SID 只能存放3份遥测信息,并且会带来14 比特的空间浪费。但对于 大多数应用程序,不需要知道INT 收集的所有包所有流的精确信息。现有技术由于需要 完善且精确的遥测信息而产生高昂的开销,对于大部分使用案例,较为正确的数值即可满 足需求,原有技术则会产生不必要的开销与负担,例如在安全漏洞监测中,人们只关心局 部时间内流量发生剧烈变化的区域,对流量较平稳的时间段并不关心。因此,此处引入乘 以式(2) 法近似方法,在写入摘要时, 5.代替G( K ,V)。 a( K ,=[o1+..)2G(V)] 5. V)lg( K ,(2) 83 例如..0. 其中..,为自定义参数,不同的值会带来不同的压缩效果 V) , =0025 时,可将32 位值 压缩为16 位值。此时,在监控服务器计算(1+..)2×a(K,即可得到近似的结果。引入乘法 压缩带来了精确度上的损失,但在要求高精度的遥测场合SRv6-BasedINT 也可停止使 用压缩手段,在带来较大开销的情况下获取准确的遥测结果。 另外,从图5.INTMeaaa[与后续INTMeaDaa的构成存在不 8中可以看出,tDt0] tt 同。这是由于本工作在INT 首节点封装时添加了96 比特的INT 控制信息,导致第一个 SID 只能存放32 比特的INT 数据。在后续所有SID 中,每一个SID 均由4份遥测数据 组成。但由于mek与SID 并不存在严格的对应关系,n]所指向的NGNP tadataStacSID[ 交换机的遥测数据并不一定插入SID[n]中,因此pointer字段的作用就愈加重要。 总体来说,当报文在段路由网络中传播时,在INT 首节点处添加INT 首部并且封装 好SR 路由信息,后续数据包每经过一个中间NGNP 交换机,该NGNP 交换机就根据 instructionBitMap将对应的遥测信息插入pointer字段所指向的位置。当报文到达最后 一跳时,将提取报文中所有的INT 数据并且对报文进行还原,从而实现了对用户的透明。 此外,在计算机体系结构中,为了实现特定的功能,通常会将若干微指令组成一个原 语。原语具有执行过程中无法被中断的特性,类似地,在遥测系统中为了获取某一测度的 结果,同样需要特定的遥测原语设计。简单而高效的遥测原语可以直观地减少操作的复 杂度。 为了简化遥测服务器对源节点的任务下发并且屏蔽遥测底层的逻辑复杂性,本小节 将主要介绍为SRv6-BasedINT 所设计的遥测原语。该原语包含了必要的遥测元数据例 如路径长度、逐跳时延等,还包括了一系列的查询网络拓扑节点、路径遥测信息等相关的 查询语句。 1所示,路径、 如表5.SRv6网络遥测元数据包含了链路、设备节点信息三大类信息, 共包括了常见的时延、带宽利用率等15 种测度。如表5.在元数据原语基础上, 2所示, 本 工作还仿照数据库查询语言SQL 设计了网络遥测查询语句,该语句结合正确的参数即可 作为遥测原语使用,为遥测服务器的任务下发奠定了基础。 表5.1 SRv6网络遥测原语 查询原语功能描述使用参数 PathQuery 查询路径信息源节点和目的节点 NodeQuery 查询节点信息节点ID Where 选择元数据过滤语句 Select 查询元数据元数据类型 Period 过滤遥测时间时间段 网络遥测元数据和网络遥测查询语句相结合,即可为不同的测量任务生成指定的遥 测原语。管理员确定遥测任务后,由遥测服务器生成遥测原语并下发给SRv6源节点,源 节点据此为到达的数据包插入测量指令,传输路径上的NGNP 交换机便可以按照指令插 入相应的遥测数据。 84 第5章 融合段路由的NGNP带内遥测 表5.6网络遥测查询语句 2 SRv 性质元数据描述 链路LinkUtilize 链路利用率 LinkLatency 链路时延 路径PathTrace 路由路径 PathLength 路径长度 IngresRate 入口流量速率 EgresRate 出口流量速率 IngresTime 入口时间标签 EgresTime 出口时间标签 IngresPortID 入端口号 设备节点EgresPortID 出端口号 SRv6SwitchID NGNP交换机标识符 ActQueueLength 实时队列长度 AvgQueueLength 平均队列长度 HopLatency 逐跳时延 SRv6SwitchCnt NGNP交换机总流量 值得注意的是,网络遥测查询语句仅展示了SRv6-BasedINT的基础功能,在拥有了 这些网络基础状态信息后,SRv6-BasedINT可做出进一步的推算,提供更复杂的功能,例 如通过往返时延等信息计算出NGNP交换机合适的缓冲区大小,利用网络状态信息推断 出出现网络拥塞的区域。 在前两节中,介绍了SRv6-BasedINT的数据包格式及遥测原语。但是仍需注意的 是,本工作遥测原语为网络管理员设计,网络管理员可以通过遥测原语将测量任务转换为 遥测服务器可以理解的指令。然而在此基础上,要真正实现一个完备的测量系统还需要 NGNP交换机支持对遥测任务的理解,如向数据包中插入哪些信息、如何插入这些信息、 在哪里插入这些信息。这一系列的操作均离不开流表的设计与下发机制。并且一个高效 的流表设计可以减少NGNP交换机对数据包的冗余操作。因此,后续便对基于SRv6BasedINT的NGNP交换机操作指令进行详细阐述。 传统的SDN架构将控制平面的测量任务(包含测度、采样率、测量目标流等参数)以 流表的形式下发给数据平面。在此基础上,由于SRv6的转发特性,数据包会在首节点中 封装路径相关信息,接下来数据包便会按照已有的路径信息进行传输。因此,对测量任务 的封装需要在首节点处完成。简要来说,网络管理员以遥测原语的形式将此次测量任务 下发给遥测服务器,在INT首节点处将其转为16比特的instructionBitMap并且封装在 数据包首部。由于NGNP交换机中都预先安装了流表,支持对instructionBitMap的理 解,因此当其与流表中的某一项相匹配时,便按照流表中的Action进行操作,将相应的数 85