在传统的企业网或数据中心内,随着网络规模的不断扩大,对网络监控的需求也在不断增加,特别是在对于网络可靠性要求越来越高的情况下。如何在网络发生状况时快速发现问题以及预测网络即将出现的故障点,是一个业界亟欲解决的问题。
当前业界常用的网络遥测方式有以下几种:
传统网络测量
- 主动测量
主动测量通过向网络中主动传送探测分组,并根据探测分组受网络影响而发生的特性变化来分析网络行为。被测量的网络效能指针通常是丢包率、延迟、抖动、TTL和带宽等。常见的主动测量协议包括PING、Traceroute、IP测量协议(IP Measurement Protocol,IPMP)、单向主动测量协议(One-Way Active Measurement Protocol,OWAMP)、双向主动测量协议(Two-Way Active Measurement Protocol,TWAMP)、MPLS丢包/延迟测量协议(MPLS L/DM Protocol)。
- 被动测量
被动测量通过捕获流经测量点的分组来测量网络状态、流量特征和效能自变量。被动测量使用控制平面讯息即可监测网络流量状态效能,被监测的效能指针通常是包/字节统计值、协议型别、队列长度和延迟统计信息。常见的被动测量协议有网络数据流统计协议(Cisco Netflow)、sFlow、IP流量信息输出协议(IPFIX)、数据报取样协议(PSAMP)。
带内网络遥测(INT)
带内测量是近几年兴起的一种混合测量方法,它通过路径中间交换节点对数据报依次插入元数据(Metadata)的方式完成网络状态采集。相较于传统网络测量方案,带内测量能够对网络拓扑、网络效能和网络流量实现更细粒度的测量。
INT(Inband network telemetry),是一种将特定的metadata插入网络流,然后将该流的网络运行情况返回控制器分析的方法,主要用于确定端到端数据流的网络状态,以及查找网络延迟大的节点,如下图所示,Server1将封包送到SW1,SW1将网络信息附加到该封包后送到SW2,SW2重复同样工作并传给SW3,SW3作为最终的配置节点会在此时将该封包传送给控制器。
图1 方案拓扑
INT作为一种网络探测的技术,具有如下优点:
- 记录的是带内的网络等待时间,相较于带外查询的数据更精准
- 减少封包探测次数,一次探测就能回收整条流的网络信息
技术介绍
这里介绍INT的芯片支持和软件支持的技术特点,包括应用场景、三种角色介绍及新增的metadata字段内容。
图2 应用场景
通常情况下,当数据中心需要测量端到端之间的网络状态时,会使用INT,此时会在封包通过的交换机上进行配置,这些交换机被分为三种角色,initiator、transitor和terminator,当数据封包到达一个交换机时,识别INT报文表头,交换机会在封包后插入MD,以此类推,直到整个遥测系统的最后一跳,再通过gRPC或是ERSPAN的方式回传给控制器。
- 芯片支持INT
交换芯片需支持INT表头,包含封装和解析报文表头。对于首节点的镜像报文来说,需要由INT交换芯片对其添加INT头,生成INT报文;对于尾节点来说,INT交换芯片将INT报文中监测信息的封装格式做一致性检查,然后对INT报文封装外层表头回传给控制器。
- 软件支持INT
INT不需要芯片支持也可以实现。当芯片不具有看懂INT header的能力,不能够通过解析其内容来判断要添加什么网络状态到封包中的时候,可以通过DSCP based INT,在匹配封包时,不需寻找INT header,只需保留特定的DSCP作为INT的识别符号,这样不须芯片支持也可实现软件INT。
角色
- Initiator
遥测系统的第一跳。芯片支持INT中这个角色要负责插入INT header,供Transit判断是否要插入MD,将报文发送给中间节点。软件支持INT的框架中,使用的是控制器发出的特定DSCP的探测封包,不是业务封包,所以Initiator的任务和Transit节点相同,都是配置一个ACL去拦截特定DSCP的封包后插入MD。
- Transit
遥测系统的中间传递者。芯片支持INT中这个角色要判读INT header,并解析内容再对封包插入需要的MD。在软件支持INT框架中,只需拦截特定DSCP封包后插入MD,再将报文发送给下游节点。
- Terminator
遥测系统的最后一跳。芯片支持INT中这个角色负责提取全部的MD信息,根据用户配置的报文封装参数,对监测信息进行UDP头及IP头封装,转发到控制器。在软件支持INT框架中,使用的是芯片ERSPAN的能力,将符合该条件的封包转发到控制器。
Metadata
为了满足设备维护和网络状态监控等多样需求,现行INT的MD信息可以说是越来越多样化,下面这张图表展示的是通常INT可以收集的统计数据,但是要强调的是,收集的资料越多,代表附加的MD会越多,而且每一跳都会增加相对应的MD,这导致该探测封包有可能在中途因为达到MTU的上限值而被丢弃,所以慎选对分析有帮助的MD数据上传才是正确的做法。在之前软件支持INT框架中,针对客户希望分析的问题——网络等待时间分析,我们挑选了“数据包入端口号”“数据包出端口号”“数据包入端口时间戳”“数据包出端口时间戳”及“交换机编号”这五项指标做为MD,通过这五项指标,控制器就已经能清楚分析出延迟的网络段范围。
分类方式 |
统计信息 |
可读/可写 |
交换机级 状态信息 |
交换机编号(Switch ID) |
Y/N |
L2/L3层流表计数(L2 or L3 flow table count) |
Y/N |
|
流表版本号(Flow table version) |
Y/N |
|
时间戳(Timestamp) |
Y/N |
|
接收数据包计数(Received packets) |
Y/N |
|
接收字节计数(Received bytes) |
Y/N |
|
端口级状态信息 |
端口号(Port ID) |
Y/N |
数据包入端口号(Ingress port ID) |
Y/N |
|
数据包出端口号(Egress port ID) |
Y/N |
|
入队列字节数(Bytes enqueued) |
Y/N |
|
链路利用率(Link utilization) |
Y/N |
|
接收字节计数(Bytes received) |
Y/N |
|
传偷字节计数(Bytes transmitted) |
Y/N |
|
丢弃字节计数(Bytes dropped) |
Y/N |
|
接收数据包计数(Packet received count) |
Y/N |
|
传输数据包计数(Packet transmitted count) |
Y/N |
|
丢弃数据包计数(Packet dropped count) |
Y/N |
|
接受错误计数(Receive error count) |
Y/N |
|
传输错误计数(Transmit error count) |
Y/N |
|
接收溢出错误(Receive overrun error count) |
Y/N |
|
接收帧对齐错误(Receive frame alignment error count) |
Y/N |
|
接收CRC校验错误(Receive CRC Error count) |
Y/N |
|
数据包入端口时间戳(Ingress timestamp) |
Y/N |
|
数据包出端口时间戳(Egress timestamp) |
Y/N |
|
队列级状态信息 |
队列ID(Queue ID) |
Y/N |
入队列字节数(Bytes enqueued) |
Y/N |
|
丢弃字节数(Bytes dropped) |
Y/N |
|
接收溢出错误计数(Receive overrun error count) |
Y/N |
|
数据包级状态信息 |
数据包入交换机端口(Packet 's input port) |
Y/N |
数据包出交换机端口(Packet 's output port) |
Y/Y |
|
数据包计数(Packet number count) |
Y/Y |
|
流表级状态信息 |
数据包查找计数(Packet lookup count) |
Y/N |
数据包匹配计数(Packet match count) |
Y/N |
|
流级状态信息 |
流计数(Flow count) |
Y/N |
Postcard模式
除了一般模式以外,INT还有Postcard模式,不再是基于Path进行监控,而是各个节点单独发送INT metadata给采集器,每个INT节点都具备网络事件检测能力,业务数据包在网络的传输过程中不会被插入Metadata。
图3 Postcard模式
主要特性
- 芯片支持INT,使用芯片能力来处理或封装INT报文表头。
- 软件支持INT,使用DSCP作为判断是否为INT封包的依据,而非INT header。