鹤壁户外:【Network telemetry】谈谈网络遥感技术,‘从主动探测与被’动探测<再到>Netflow与INT

admin 7个月前 (03-02) 科技 37 0

【前言】

  【本篇『{为}』原创】网络遥感,Network telemetry,『{为}』什么叫“telemetry”呢?〖我个人(【的】)理解是将网络〗中(【的】)数据进行一种“采集”,「也就是实际上是一」种网络数据(【的】)采集手段。由于工作需要,接触了一些网络遥感方面(【的】)(技)<术>,《本篇文章就来谈一谈》主【【流】(【的】)网络遥感(技)<术>】。本篇文章会介绍传统网络中基于“【流】”(【的】)遥感(技)<术>,以思科(【的】)Netflow(技)<术>『{为}』代表‘和’IETF(【的】)IPFIX标准,<再到最近比较【流】>行(【的】)INT(技)<术>,INT(技)<术>会着重介绍思科(【的】)IOAM‘和’华『{为}』(【的】)PBT两种。

【场景】

  网络遥感是一种网络(信息)采集(技)<术>,目(【的】)是『{为}』了采集网络中(【的】)(信息),网络越大,出了〖问题〗越难排查,因此需要一些(技)<术>对网络进行史实(【的】)【流】量分析监控或是可以自动化排查网络中(【的】)“断路”,并且在DCN网络中(Datacenter Network)更需要一套手段来实现对网络(【的】)监控与探测,对网络(【的】)实(时)监控需要一套(技)<术>来实现,那么网络遥感就是用来解决这个〖问题〗而诞生(【的】)一种(技)<术>。网络遥感一般分『{为}』两种,分别是主动探测‘和’被动探测。被动探测以思科(【的】)Netflow(技)<术>『{为}』代表,而主动探测则大多数类「似于微软」Everflow中(【的】)guided probe组件『{为}』代表(还有vmware『{为}』代表(【的】)虚拟网络(【的】)Traceflow,以及华『{为}』(【的】)FusionNetDoctor,当然华『{为}』做(【的】)有点low...实话实说)。

【主动探测】

  主动探测,顾名思义,就是“主动去探测网络中(【的】)状态”,『{为}』代表(【的】)以微软Everflow系统中(【的】)guided probe组件『{为}』代表,〖微软于〗2016年在SIGCOMM发了一篇名『{为}』《Packet-Level Telemetry in Large Datacenter Networks》文章,这篇文章主要介绍了微软(【的】)一套实现数据包级别(【的】)网络遥感(技)<术>,感兴趣(【的】)可以去google一下,我个人觉得写(【的】)非常好(【的】)一篇文章。其中提到了一个重要组件,“叫做”“guided probe”,那么这个guided probe是用来做什么(【的】)呢?

【图】1.典型(【的】)虚拟网络拓扑

  【图】1是一个典型(【的】)虚拟网络拓扑,虚拟机A『到虚拟』机B需要经过三个虚拟交换机,两个虚拟路由器,那么假设某一(时)刻“正在发生”虚拟机A『到虚拟』机B「发生了」“断路”导致虚拟机A『到虚拟』机B《(【的】)业务【流】量不通》,怎么定位到具体发生故障(【的】)位置以及发生故障(【的】)原因呢?

  微软(【的】)guided probe‘和’vmware(【的】)traceflow就是做这个事 情[(【的】)。guided probe会在VM A注入一种“《〖探测数据包〗》”,然后在网元上设置一些“探测(识别点)”,这个数据包每经过一个网元都会〖上传〗状态(信息), 例[如【图】2.

【图】2.主动探测(【的】)一种实现

  以【图】2『『{为}』』 例[,我在每一个网元(【的】)输入‘和’输出设置一些“探测(识别点)”,“《〖探测数据包〗》”经过“探测(识别点)”「会向控制」器〖上传〗状态(信息),那么假设虚拟机A『到虚拟』机B‘中’(【的】)虚拟交换机3(【的】)输入出发生故障,那么最终〖上传〗(【的】)(信息)会缺少“虚拟交换机3(【的】)OUT”,那么控制器就可以判断出虚拟交换机3「处存在」“正在发生“{(【的】)故障},那么就可以通过北向通“道告知管理面”,{管}理面再告知用户,或直接发出告警。

  当然还不止这样,如果数据面是自家公司研发(【的】)话还有一种升级(【的】)玩法,如果可以感知到“某条具体(【的】)背景【流】「发生了」断路”,“【流】“可以用5-tuple来标识(src ip、dst ip、src port、dst port、l4 protocol或者加上tos),那么我便在注入《〖探测数据包〗》(【的】)(时)候,拿出现“断【流】”(【的】)背景【流】量作『{为}』模板,构造出与出现“断路”(【的】)背景【流】量相同(【的】)数据包进行主动探测,并且如果数据面是自家公司研发(【的】)话,完全可以在数据面转发中(【的】)丢包处设置“探测(识别点)”,那么这样不仅知道出现断【流】(【的】)背景【流】具体(【的】)断【流】位置,还可以知道断【流】(【的】)原因,这样可以直接告诉用户“xxx条【流】量出现了断【流】,在xxx(【的】)位置,断【流】丢包(【的】)原因是xxx”, 例[如【图】3是VMWare(【的】)Traceflow(【的】)显示结果。

【图】3.VMWare(【的】)Traceflow使用效果【图】

  上述【流】程便是主动探测〖(【的】)大多〗数实现,微软(【的】)Everflow、Vmware(【的】)Traceflow以及华『{为}』(【的】)FusionNetDoctor都是这样实现(【的】)(这里我一定要吹一波Vmware,做(【的】)真(【的】)有点好,真尼玛炫酷...)<但是>主动探测同样存在一些致命缺点:

  1. 只能探测正在发生{(【的】)故障}。如果故障是(时)断(时)续(【的】),那主动探测这种手段就无能『{为}』力了。
  2. 探测(【的】)力度有限, 例[如正在发生{(【的】)故障}是丢包,并且丢包是只丢一部分,<那>么发出(【的】)《〖探测数据包〗》很有可能没有被丢,「呈现出与现实世界」不通(【的】)结果。(<但是>这种方法可以批量注入来观察)
  3. 无法回溯。这点与第一点基本相同,如果断【流】是某个过去(【的】)《(时)间点》发生(【的】), 例[如半夜,那主动探测便无法得知过去某个《(时)间点》出现断【路(【的】)原因与】位置了。
  4. 需要在数据面设置探测(识别点),探测(识别点)识别《〖探测数据包〗》不能影响正常(【的】)数据面转发性能。

  微软(【的】)Everflow中提到,这种主动探测主要就是探测正在发生(【的】)断路,因『{为}』正在发生(【的】)断路{(【的】)故障}优先级最高,能实现这点已经足够,没办法指望单纯(【的】)一种(技)<术>来应付所有场景。

  当然主动探测以后我会写一篇专门(【的】)文章来讲解其中存在(【的】)一些(技)<术>难点‘和’实现方法。

【被动探测】

  (被动探测是与主)动探测相对应(【的】)一种探测,被动探测(【的】)定义是在“不影响当前网络【流】量(【的】) 情[况下进行探测”,由于主动探测“注入《〖探测数据包〗》”会对当前网络中(【的】)【流】量做出一些影响(出现了一条新(【的】)【流】量)。被动探测以思科(【的】)Netflow作『{为}』代表,<但是>近年来也有一些新(【的】)(技)<术>分别亮相,比如思科提出(【的】)INT(技)<术>以及其具体应用IOAM,以及华『{为}』【根】据思科IOAM(技)<术>进行优化提出(【的】)PBT(技)<术>。由于被动探测(【的】)(技)<术>内容比主动探测(【的】)内容复杂一些,因此接下来会分别介绍,先介绍Netflow(技)<术>。

【Netflow】

  Netflow(技)<术>由思科与1996年提出(‘和’我同一年生....),到现在已经过了24年,已经是一种非常成熟(【的】)(技)<术>了,并且各家【根】据思科Netflow(【的】)思想还发展处了一些方言版本, 例[如jFlow,sFlow等等等等。Netflow(【的】)架构常常如【图】4所示。

鹤壁户外:【Network telemetry】谈谈网络遥感技术,‘从主动探测与被’动探测<再到>Netflow与INT 第1张

【图】4.Netflow架构【图】

  只要是基于Netflow(【的】)采集(技)<术>(其实不光是Netflow,主要是【流】量采集(技)<术>基(本都差不多)...),无论做成什么样,做(【的】)多大,基本都离不开Netflow架构(【的】)这几个组件。

  • Netflow Exporter。Netflow导出器,用处是将【流】数据通过Netflow协议进行导出至Netflow Collector中。
  • Netflow Collector。Netflow收集器,用处是将Netflow数据包收上来后进行解析,解析出【流】数据后存至Flow Storage中。
  • Flow Storage。【流】数据库,存解析后(【的】)Netflow数据,通常【流】数据库用(【的】)基本以TSDB『{为}』主((时)序数据库),【因『{为}』需要常常】回溯某个《(时)间点》,或过去一段(时)间内【流】量分布(【的】)变化与状态(信息),因此TSDB【更适合】,比较【流】行(【的】)有influxDB、Prometheus。
  • Analyzer/Monitor。分析器,用于对【流】数据库中(【的】)数据进行分析与呈现。

  当然还有一个最终要(【的】)【组件便是】Netflow设备(【的】)Flow cache。在Netflow设备中会存在一张表,这张表会存放【流】(【的】)(信息),如【图】

鹤壁户外:【Network telemetry】谈谈网络遥感技术,‘从主动探测与被’动探测<再到>Netflow与INT 第2张

【图】5.Netflow Main Cache原理【图】

  原理也非常简单,{即}:

当某条【流】(【的】)数据包第一次进入当前Netflow设备后,Netflow设备会【根】据此数据包(【的】)5-tuple(信息)(这里随意定义)《提取》并在Netflow cache中添加一条Flow Entry,这条Flow Entry便代表此条【流】,那么便可以统计这条【流】(【的】)(信息),并定(时)(Netflow cache通常都有老化机制)导出封装『{为}』Netflow协议数据包送往Netflow Collector

  Netflow(技)<术>(【的】)原理非常简单,就是采集【流】(信息),〖上传〗,然后分析。当然Netflow也有缺点,便是:

  1. 采集粒度『{为}』“【流】”,无法到达更细粒度(【的】)“数据包”,所以统计丢包、(时)延有一定难度。
  2. 会给Netflow设备带来性能损耗,性能(【的】)损耗往往会带来“观察者效应”。比如某一网络现象,拿网络拥塞或丢包『『{为}』』 例[,原本网络中不会有拥塞或丢包,<但是>由于开启了Netflow《采集功能》,《采集功能》消耗Netflow设备(【的】)性能,导致Netflwo设备处理网络【流】量(【的】)性能下降,进而产生了拥塞或丢包,那么便是“观察者效应”,最终(【的】)结果并不是已经存在(【的】),而是由于去“观察”(这一动作才会发生),“不”观察就不会发生,那么这种 情[况就比较蛋疼。而性能〖问题〗又会带来如下几种〖问题〗。
    • 性能下降导致在DCN《网络无法对每》一个数据包都进行更新Flow cache,「所以往往会存在采样」频率一说,比较常见(【的】)是“每100个数据包采集第一个数据包”,用这种方法来降低性能消耗,<但是>这种方法又会产生额外(【的】)〖问题〗,比如在网络中通常会存在一些“大象【流】”‘和’“老鼠【流】”,大象【流】(【的】)代表如FTP数据【流】,这些【流】量(【的】)特点是量大,持续一段(时)间后就会消失;而“老鼠【流】”(【的】)一些代表是一些控制协议或者是协商协议,这些【流】量(【的】)特点是量少,<但是>会一直持续,可靠性要求较高。<但是>如果存在采样频率,很可能会出现采集不到“老鼠【流】”,最后看起来就是“大象【流】”覆盖了“老鼠【流】”,只能看见有FTP协议【流】量,其他一些TCP协议【流】量看不到。
  3. Netflow协议〖上传〗(【的】)(信息)有限,尽管Netflow v9已经「支」持模板(【的】)方式去采集数据,<但是>仍然是有限(【的】),并且无法采集一些企业(【的】)私有数据,并且Netflow v9(【的】)传输层协议『{为}』UDP协议,UDP协议本身可靠性较差,一旦出现〖上传〗(信息)丢失,还得额外处理。
  4. Netflow协议存在太多(【的】)方言版本, 例[如sFlow、jFlow,兼容性会有一定(【的】)〖问题〗,并且Netflow协议属于思科<提出(【的】)一>种【流】量导出协议,并不是一种标准。

  Netflow(【的】)缺点中,第一种其实并不是Netflow(技)<术>(【的】)《缺陷》,而是基于“【流】”(【的】)网络(信息)采样(【的】)共性《缺陷》,第三种『{为}』Netflow这种传输层协议在设计(【的】)(时)候出现(【的】)《缺陷》,而第二种更偏向于“哲学”〖问题〗,“想看(【的】)更多就得花费更多(【的】)代价”,不想付出代价还想对网络进行细粒度(【的】)观察,是不可能(【的】),就好比“你不能要一把枪射程又长,精度又高,『『{为}』』 例[又大,〖体积又小〗,射击速度又高”,这是不现实(【的】)。

【IPFIX】

  IPFIX协议,IETF<提出(【的】)一>种“标准【流】(信息)导出协议”,目(【的】)就是『{为}』了替代Netflow v9协议‘和’众多(【的】)方言版本协议,可以看做是未来(【的】)趋势,大多数厂商都已经兼容IPFIX协议, 例[如思科、华三、<华『{为}』(【的】)交换机>,VMware同样将IPFIX导出协议作『{为}』一种标准(【的】)【流】(信息)导出协议。

〖<但是>要注意(【的】)是〗IPFIX协议只是一种“(信息)导出协议”,目(【的】)是『{为}』了替代Netflow架构中(【的】)Exporter到Collector中(【的】)(信息)导出协议,“<但是>整体架构基本如”Netflow架构。IPFIX协议由Netflow v9协议发展而来,Netflow协议中(【的】)协议头(【的】)version『{为}』9,意味Netflow v9,而IPFIX协议中(【的】)协议头与Netflow v9「基本」一致,并且version『{为}』a(10),也就是Netflow v10,如【图】6.

鹤壁户外:【Network telemetry】谈谈网络遥感技术,‘从主动探测与被’动探测<再到>Netflow与INT 第3张

 

【图】6.IPFIX头格式‘和’Netflow v9「头格式对比」

 

 

  而IPFIX作『{为}』IETF推出(【的】)标准【流】(信息)协议,在Netflow v9(【的】)基础上做了如下(【的】)改进:

  1. IPFIX(【的】)传输层协议较于Netflow v9「支」持更加多样化,「支」持UDP、TCP、SCTP协议作『{为}』传输层协议(【的】)选择;(这点请见RFC 7011(【的】)10.1节)
  2. IPFIX相较于Netflow v9协议新增了企业字段、变长内容等新特性,可以「支」持一些企业内部私有(【的】)数据导出(这个是我认『{为}』最方便(【的】)一点特性);(rfc 7012有详细解释)
  3. IPFIX协议(【的】)模板内容相较于Netflow v9增加了非常多,可以导出更多(【的】)(信息)。(同见rfc 7012)

  可以看到,IPFIX相较于思科(【的】)Netflow更是一种协议标准,其中(【的】)企业字段可以很好(【的】)兼容一些方言版本(【的】)【流】(信息)导出协议,解决了很多兼容(【的】)麻烦,并且从功能(【的】)角度讲,IPFIX‘是兼容’Netflow v9(【的】)(注意这里(【的】)功能值指(【的】)是导出内容上IPFIX要更全于Netflow v9),<但是>单纯从协议(【的】)角度讲是没法兼容(【的】)(也就是仍然得增加IPFIX(【的】)开发量)。

【INT】

  INT(技)<术>是最近几年一种新型(【的】)网络遥感(技)<术>,全称是Inband Network Telemetry,意味“带内网络遥感(技)<术>”,是由思科提出(【的】)一个(技)<术>,INT是一种(技)<术>手段,一种思想,在思科产品中(【的】)应用“叫做”IOAM(inband OAM)那么这里就有一个新(【的】)概念,<什么是>“inband”?inband(【的】)意思直译是“带内”,<但是>“带内“又如何理解呢?

  我个人(【的】)理解是:类似于Netflow或是IPFIX这类【流】监控(技)<术>,可以称之『{为}』”outband“,也就是带外。举个生活中(【的】) 例[子,带外就好比你是一个监控人,你在监控这条【流】(【的】)状态,‘你仍然处’于一个旁观者(【的】)位置,既然是在一个旁观者(【的】)位置,那么观测(【的】)方法‘和’观测(【的】)位置势必会对观测(【的】)结果有很大误差;而怎么最大化消除这种{误差呢}?生后中(【的】)经验告诉我们“叫做””设身处地“,也就是我们把自己摆在当事人(【的】)视角去看待事 情[,那么我们可以看到更多有关事 情[(【的】)真面目,而inband就是这样,inband Network telemetry就是这么实现(【的】),将旁观者监测【流】,改『{为}』将检测(信息)植入到“数据包内部”,这样就相当于监测点挂载到了【流】中(【的】)每一个数据包,那么这样数据包所经历(【的】),必然是监测点所经历(【的】)。

鹤壁户外:【Network telemetry】谈谈网络遥感技术,‘从主动探测与被’动探测<再到>Netflow与INT 第4张

 

【图】7.INT(【的】)实现方式

 

  如【图】7所示,INT(【的】)实现方式就是将监测检查点插入到数据包(【的】)内部,也就是途中(【的】)OAM层,INT通常(【的】)做法就是将数据包(【的】)头(header)‘和’“数据包内部”数据(payload)之间插入一块OAM层,那么这个数据包就从一个普通(【的】)网络数据包变成了一个被我们打上”标记“(【的】)数据包。再举个 例[子,<相>信看过动物世界节目(【的】)朋友都知道,海洋学家『{为}』了监测一些动物(【的】)行『{为}』轨迹,会在海洋动物身上装上遥感器,比如海龟、海豚、企鹅之类(【的】),《那么最后海洋学》家就可以回收海豚(【的】)探测器,并【根】据探测器中记录(【的】)数据来分析这个海豚(【的】)行动轨迹,海豚(【的】)行『{为}』特征。那么INT就是这个原理,间【图】8.

鹤壁户外:【Network telemetry】谈谈网络遥感技术,‘从主动探测与被’动探测<再到>Netflow与INT 第5张

 

【图】8.INT(技)<术>监测网络状况(【的】)原理示意

  如【图】8中(【的】) 例[子,一个数据包(就好比一只海豚)进入”起点“网元设备(被科学家捕获)后,被插上了OAM层(被装上了探测器),而后数据包经过每一个网元(每一片海洋),〖都会将探测(信息)插入到〗OAM层中(被探测器记录),包括网元对数据包(【的】)行『{为}』,是转发还是丢弃(海豚死亡),<最后数据>包到达终点后,数据包中(【的】)OAM层被剥离出来,通过(信息)导出协议〖上传〗到远程(【的】)分析服务器(探测器被科学家回收分析数据)。那么这里有一个〖问题〗,网元设备,也就是OAM‘域’内(【的】)传输节点怎么知道要收集哪些(信息)呢?

鹤壁户外:【Network telemetry】谈谈网络遥感技术,‘从主动探测与被’动探测<再到>Netflow与INT 第6张

 

 

 【图】8.IOAM数据包中(【的】)OAM层

  实际上,OAM层是由两部分组成(【的】),一部分“叫做”instruction,也就是指令,另一部分就是data,也就是数据,指令中会携带需要收集(【的】)(信息),translation node只需要【根】据指令把相应(【的】)(信息)塞入data部分中{即}可完成数据(【的】)收集。

  可以看到INT(技)<术>本身(【的】)原理还是非常简单(【的】),就是在“数据包内部”插入一个自定义(【的】)层,然后记录经过每一个网元(【的】)(信息),最后再将探测(信息)〖上传〗至远程(【的】)分析服务器。那么INT(技)<术>会带来什么样(【的】)优势,或者换句话说,可以怎么应用这种(技)<术>呢?

  1. 数据包粒度级别(【的】)丢包监测,由于监测(【的】)粒度从【流】变成了更细粒度(【的】)包,那么理想 情[况下,INT(技)<术>是可以得知网络中丢包(【的】) 情[况以及丢包(【的】)原因还有丢包(【的】)位置。
  2. 捕获网络中(【的】)jitter现象,网络中经常会出现一些jitter,jitter(【的】)特征往往是短暂难以捕获(【的】),而由于INT(技)<术>是一种带内(技)<术>,那么理想 情[况下仍然是可以捕获到网络中(【的】)(时)延或是丢包(【的】)jitter。
  3. 智能路由‘和’选路,【根】据OAM数据(信息),可以得知网络中(【的】)每一条链路(【的】)(时)延、带宽以及丢包 情[况,那么就可以【根】据这些数据进行智能选路,将一些重要(【的】)【流】量进行<重>新reroute。

  <但是>INT(技)<术>同样带来一些显而易见(【的】)缺点,以传统(【的】)INT(技)<术>,也就是思科(【的】)IOAM『『{为}』』 例[:

  1. DCN网络或者是运营商网络中,数据包数量巨大,对每一个数据包进行插入OAM层,并进行监测,会产生巨量(【的】)(信息),这么多巨量(【的】)(信息)该如何压缩、去重分析?
  2. ”起点设备“(在INT(技)<术>中被称『{为}』encapsulation node)要对每一个数据包进行插入一个新(【的】)OAM层,这会产生巨大(【的】)性能消耗,如果是转发设备(【的】)转发过程是软件实现(【的】),那对转发性能更是毁灭性(【的】)打击(你需要不断(【的】)申请新(【的】)空间,并将原有(【的】)数据包进行拷贝,然后再插入一个新(【的】)层,事实上思科也注意到了【这一点】,所以在encapsulation node插入新(【的】)OAM<层(时)有两种实现>,这点以后在详细分析INT〖(时)再说〗)。
  3. 转发设备需要不停(【的】)将探测数据插入到“数据包内部”,并对数据包(【的】)checksum需要<重>新计算,同样是一个性能消耗点。
  4. IOAM(技)<术>中,转发节点会不断(【的】)向hdr与payload间插入OAM层,“那么考虑到数据包会被”“分”片,OAM层(【的】)长度必然有限制,也进一步等于OAM数据包所经过(【的】)转发设备(在IOAM(技)<术>中,这些转发设备所组成(【的】)‘域’称之『{为}』OAM‘域’,OAM domain)不能太多。

  IOAM(【的】)软件实现可以去看VPP(【的】)源代码,VPP 17.xx版本以后(【的】)版本中都带有IPv6(【的】)IOAM实现。

【PBT】

  PBT(Postcards-Based Telemetry)(技)<术>本质上也是INT(技)<术>,是由华『{为}』<提出(【的】)一>种基于思科IOAM(技)<术>(【的】)”升级版“,可以理解『{为}』一种优化版,华『{为}』主要是针对IOAM《缺陷》中(【的】)第2条、第3条以及第4条进行了优化,并且华『{为}』推出了两种优化版,一种是PBT-I,【另外一种】是PBT-M,前者『{为}』超级版,后者『{为}』兼容版。那么PBT是怎么做(【的】)呢?其实PBT(【的】)优化有点类似与之前说(【的】)主动探测(【的】)包注入(技)<术>。既然PBT(技)<术>本质上‘和’IOAM(技)<术>并无不同,同样拿海豚(【的】) 例[子来举 例[:

  • IOAM:‘一条海豚被’海洋学家捕获,海洋学家向海豚身上装了一个探测器,探测器不能联网,<但是>有内置硬盘,海豚带着这个探测器游遍太平洋,每经过一片海‘域’,探测器就会收集(信息), 然后一年后被海[洋学家“蹲”点捕获,拆掉探测器,海洋学家【根】据探测器(【的】)内置硬盘中(【的】)数据进行分析。
  • PBT:‘一条海豚被’海洋学家捕获,海洋学家向海豚身上装了一个探测器,探测器内部没有硬盘,<但是>有通信模块,海豚带着这个探测器游遍太平洋,每经过一片海‘域’,探测器就会收集(信息)并立刻传给远程(【的】)海洋学家(【的】)服务器,海洋学家【根】据服务器接收(【的】)数据就可以分析,或者是可以先将数据存储到数据中心,等一年过后,「海洋学家」捕获了海豚,考虑到保护海洋动物(【的】)责任感,拆除了探测器,并【根】据数据中心完整(【的】)数据进行分析。

  可以看到,PBT‘和’IOAM(技)<术>最大(【的】)不同是PBT是没有携带OAM探测数据(【的】),而是没经过一个转发节点(严格来说是OAM‘域’内(【的】)translate node)都会立刻〖上传〗(信息),具体如PBT-I(技)<术>(【的】)实现原理可以如【图】9所示。

 

 鹤壁户外:【Network telemetry】谈谈网络遥感技术,‘从主动探测与被’动探测<再到>Netflow与INT 第7张

 【图】9.PBT-I(技)<术>(【的】)实现原理

  那么PBT-T(【的】)原理叙述如下,数据包经过OAM‘域’(可以理解『{为}』INT(【的】)监测‘域’),并进入“起始节点”(encapsulation node),『起始』节点对数据包进行标记,注意这里是标记,并不是插入OAM层,‘和’主动探测中(【的】)包注入(技)<术>相同,那么被标记(【的】)数据包,接下来可以称之『{为}』PBT《〖探测数据包〗》,接下来PBT《〖探测数据包〗》经过OAM‘域’中每一个网络设备(translation node),传输节点都会去检查数据包中(【的】)标记位,“观”察是否(时)PBT《〖探测数据包〗》,如果是PBT《〖探测数据包〗》,则立刻〖上传〗监测数据。

  <但是>这里仍然有一个〖问题〗,既然从原始(【的】)IOAM数据包(【的】)“监测模板” + “监测数据”缩小到只有1个bit(【的】)标记位,那么设备怎么知道要收集并〖上传〗那些(信息)呢?这个地方可以通过类似于ipfix(【的】)模板来实现,也就是实现管里面或者“控制面向”OAM‘域’中(【的】)每一个传输节点下配置通知收集哪些(信息)。这样(【的】)话,管控面需要对OAM‘域’中(【的】)所有节点下发数据收集(【的】)模板配置,而不像IOAM一样,只需要给encapsulation node下发数据收集(【的】)模板配置就好了。

  那么【根】据上述(【的】)原理介绍,我们至少可以知道,PBT-I相较于IOAM做了如下几种较『{为}』明显(【的】)改进:

  1. 收集(【的】)数据多少不再受限于数据包(【的】)长度,因『{为}』收集(【的】)数据不再插入在数据包(【的】)内部。
  2. 不用对每一个数据包进行十分浪费性能(【的】)插入收集数据,<重>新计算checksum等操作,对于ipv4数据包,只需要看一下ipv4 header中(【的】)标记『{为}』, 例[如TOS中(【的】)reserve bit,就可以知道要〖上传〗哪些(信息)。

  光这两点改进,其实就已经是质变了,尤其是第二条(【的】)改进,大大(【的】)增加了INT(技)<术>在软件转发平台上(【的】)可行性(软件实现(【的】)转发平台最怕(【的】)就是对数据包进行<重>新分配内存+内存拷贝+<重>新计算checksum,这些会带来大量(【的】)性能消耗),<但是>世界上没有一种完美(【的】)(技)<术>,PBT-I(技)<术>(【的】)改进同样带来了其他(【的】)缺点:

  1. 管控面需要对OAM‘域’中所有(【的】)节点下发模板配置(信息),告知OAM‘域’中(【的】)节点碰见PBT《〖探测数据包〗》要上报哪些(信息)。
  2. 由于没经过一个translate node都需要〖上传〗(信息),所以〖上传〗(【的】)(信息)次数会进一步变多,这样同样带来了某一个节点〖上传〗(【的】)(信息)丢失(【的】)风险。
  3. 需要(时)间同步‘和’(信息)重组,{即}一个PBT《〖探测数据包〗》经过了n个网元,如何将这n个网元〖上传〗(【的】)(信息)进行联系组装。
  4. 不灵活,(没办法定制化), 例[如网络中有A、B、C、D、E五条【流】,其中我需要对A、B两条【流】收集(【的】)(信息)集合『{为}』M,对C、D、E三条【流】收集(【的】)(信息)集合『{为}』N。<但是>标记位只有一个,没有办法进行更细粒度(【的】)进行区分。

  虽然带来了这几个缺点,<但是>PBT-I(【的】)改进确实让人看到了软件实现INT(技)<术>(【的】)可行性。说完了PBT-I,【接着说说】“折中版”PBT-M,华『{为}』提出(【的】)draft中同样承认了PBT-I(技)<术>做得太绝,导致了上述几个〖问题〗(【的】)出现,那么能不能稍微做(【的】)不那么绝,来个折中点(【的】)方案呢?所以就来了PBT-M这种折中版本。

  PBT-M相较于PBT-I(技)<术>,没有完全舍弃OAM层,而相比于IOAM(技)<术>,又放弃了在OAM层中插入探测数据,因此PBT-M就是相当于IOAM与PBT-I(【的】)折中,{即}:

  数据包第一次经过encapsulation node,同样会插入OAM层,<但是>,直插入instruction,不插入data,相当于只插入收集指令,用于告知当前PBT《〖探测数据包〗》经过(【的】)每一个网元,要给这个数据包收集什么样(【的】)(信息),然后再将这个(信息)导出至远程(【的】)分析服务器。那么【根】据这个特征,我们可以知道,实际上PBT-M(时)对PBT-T(【的】)4条缺点中(【的】)1、4进行了优化,管控面只需要给encapsulation node下发配置{即}可,举个 例[子,网络中有A、B、C、D、E五条【流】,其中我需要对A、B两条【流】收集(【的】)(信息)集合『{为}』M,对C、D、E三条【流】收集(【的】)(信息)集合『{为}』N。A、B两条【流】(【的】)数据包经过encapsulation node(时),encapsulation node【根】据管控面下发(【的】)配置,对A、B中插入OAM层,instruction『{为}』M,对C、D、E插入OAM层,instruction『{为}』N,倘若A【流】(【的】)数据包经过translation node(时),translation node【根】据内置(【的】)OAM层中(【的】)instruction M就知道该〖上传〗instruction M所对应(【的】)数据,这样灵活性大大加强。不过PBT-M这种折中版仍然会带来IOAM(技)<术>中(【的】)缺点2,也就是encapsulation node需要对这个数据包插入OAM层,对软件实现来说仍然不友好。

【总结-说一说我自己(【的】)一些看法】

  1. 主动包注入(技)<术>只能排查当前正在发生(【的】)一些网络故障,因此局限性较大,<但是>性能消耗小且易用,<但是>诊断(【的】)粒度很细,可以立刻得到网络中正在发生{(【的】)故障}、故障位置以及故障原因
  2. Netflow或是IPFIX这种传统(【的】)基于【流】(【的】)被动网络探测(技)<术>,相较于主动探测(技)<术>性能消耗要大,并且存在测不准有误差(【的】) 情[况,粒度也不尽人意,<但是>作『{为}』一种监控出身(【的】)(技)<术>,仍然是主【流】且容易实现(【的】)一种(技)<术>。
  3. INT(技)<术>对于网络探测可以说是吊打Netflow或是IPFIX这种基于【流】(【的】)被动监测(技)<术>,<但是>INT(技)<术>中(【的】)IOAM(技)<术><目前>看来不适合软件实现,当然barefoot推出了「支」持INT(技)<术>(【的】)转发芯片,让IOAM(技)<术>可以得以应用,不过芯片(【的】)价格感人,『据说一片要』8000刀(去抢吧...),<目前>barefoot已经被intel收购,后续什么 情[况还犹未可知,<目前>IOAM这种INT(技)<术>(【的】)具体实现更多(【的】)都是基于硬件实现,然后与P4编程打组合拳。
  4. INT(技)<术>中(【的】)PBT(技)<术>,<目前>对软件实现比较友好(【的】)是PBT-I,当然对于PBT-M(技)<术>而言,如果encapsulation node是「支」持INT(【的】)硬件转发设备,那么PBT-M(【的】)灵活性确实是要比PBT-I更胜一筹(【的】)。

唉,网络遥感(技)<术>这块领‘域’,大佬打架,我等渣渣只能吃瓜了....

先站一个坑,以后再慢慢具体说一说这些(技)<术>(【的】)一些具体细节,以及该怎么实现。

,

Sunbet

Sunbet www.862169.com www.sunbet.us是进入Sunbet(【的】)官方站点。Sunbet开放Sunbet会员开户网址、Sunbet代理开户、Sunbet手机版下载、Sunbet电脑客户端下载等业务。

网友评论

  • (*)

最新评论

站点信息

  • 文章总数:474
  • 页面总数:0
  • 分类总数:8
  • 标签总数:850
  • 评论总数:143
  • 浏览总数:3464