NQA技术配置简单,但NQA报文发送有很多细节,如“多少秒探测一次?”、“两个报文发送间隔是多久?”等等问题;
本节介绍NQA中报文的发送机制,具体实现请以官方技术文档为主。
配置步骤
NQA技术介绍
华三的NQA可以拆分为三个部分来理解:NQA测试组、NQA服务器与客户端、NQA模板;
这三者的最终目的都是用于探测某个协议是否可达,但使用场景不同,具体如下:
-
NQA测试组:在NQA测试设备上做的单向NQA配置,称为NQA测试组。
有两个特点:
- 只需要单向配置,对端只负责回包,不需要配置NQA动作(这也意味着无法探测具备会话的连接,如TCP);
- 探测需要手动开启,要和其他模块联动需要使用Track模块;
支持探测的类型如下:ICMP-echo测试(判断可达)、ICMP-jitter测试(获得网络的单向和双向时延抖动)、DHCP测试、DNS测试、FTP测试、HTTP测试、SNMP测试、UDP-tracert测试(使用UDP报文进行tracert测试)、DLSw测试;
-
NQA客户端与服务器
测试组的特点是只需要单向配置,对于如TCP此类需要三次握手的协议而言,仅仅NQA探测设备的单向报文无法满足要求;
所以对于TCP、UDP-echo(探测UDP端口之间的连通性以及UDP报文的往返时间)、UDP-jitter(用UDP探测链路抖动时间,用于实时性业务)和Voice(语音)类型测试,探测对端也必须配置NQA来响应探测报文。
探测方就称为NQA客户段,被探测方称为NQA服务器;
NQA客户端实际就是NQA测试组,不过是名称有区别,客户端配置后需要手动开启探测。NQA服务器配置后自动监听
-
NQA模板
和NQA客户端服务器类似,NQA模块是对NQA测试组的补充;
测试组中提及要联动其他模块必须使用Track,这对于部分功能来说不便调用,比如LB健康检测。NQA模板主要解决这类问题,其本质和测试组相同,只是命令和测试组不同,同时可以被支持的模块直接调用而无需手动开启探测,其报文发送原理和测试组一致。
NQA机制构成
我个人将一个NQA测试组在构成上分三级:一轮NQA测试 -> 一次NQA探测-> 一个NQA探测报文
这里特意注明“一次、一个”,是由于NQA是有多轮、多次、多个探测的,根据探测类型的不同,探测的数量也不相同
先来看一个基本的NQA配置模板:
[SW1]nqa ?
agent NQA客户端的开关,如果要配置entry必须先使能agent
entry NQA客户端测试组配置
schedule NQA调度,配置测试组后,必须调用调度才能启动
server NQA服务端配置,只有有限的几个有用
template NQA模板配置,对于例如LB的功能,只需要调用NQA模块就可以自动执行而无需调度(schedule)
nqa entry 1 1 # 创建NQA测试组
type icmp-echo # 配置类型为ICMP-ECHO(ping测试)
destination ip 2.2.2.2 # 配置目的地址
source ip 10.0.12.1 # 配置源地址
frequency 5000
probe count 3
probe timeout 1000
reaction 1 checked-element probe-fail threshold-type consecutive 3 action-type trigger-only
NQA测试组运行一次可以进行多轮NQA测试,测试轮次和frequency
参数有关,这个参数缺省为0ms,即测试组一次运行只发送一轮测试。所以如果要一直探测,这个参数必须配置,配置后当上轮测试结束并经过一个frequency参数指定的时间间隔后,NQA进行下一轮探测。
每一轮测试可以有多次探测,这个数量由probe count决定,除UDP-tracert缺省是3次外,其他类型缺省都是一次。
每一次探测中ICMP-jitter、UDP-jitter或Path-jitter发送10个探测报文,一次Voice探测中发送1000个探测报文,这个数量可以通过probe packet-number修改,此外的其他类型均为1且无法修改。
注意:如果NQA类型不支持修改参数,则对应的命令无法配置
NQA报文发送间隔
-
一次NQA探测发送多个报文的探测中,报文发送间隔由probe packet-interval命令决定,报文超时时间由
packet-timeout
决定; -
一次探测发送多个报文的NQA测试类型中,报文超时和发送间隔是两个独立计时器,一次探测中只要到达发送间隔,立即发送下个报文,而不是等待超时时间到达;
-
一次探测发送一个报文的NQA测试类型中,无法配置probe packet-interval、packet-timeout命令,报文超时时间由
probe timeout
决定,代表本次探测超时时间; -
多个报文的报文超时时间由packet-timeout指定,和probe timeout配置互斥。即多报文一次探测的时间只和配置的报文发送数量有关,单报文和probe timeout有关
- 无论单次探测多报文还是单报文,一次探测完成(收到响应或全部超时)后,下一次探测立即开始,每次探测之间没有等待时间
-
一轮测试的间隔由frequency命令决定;在一轮测试内,只有上轮测试完成,才进行下轮测试的等待,等待时间由frequency决定。【例如frequency 5s,上轮测试用时10s,那么还需要再等待5s才能进入下轮测试,那么总计就用了15s】
在一次探测内,对于发送多个探测报文的测试类型,只要到达报文发送间隔就立即发送下一个报文,不等待上个报文超时,一次探测报文中所有发送的报文均收到响应或均超时则进入下次探测;对于发送单个报文的探测类型,本次探测超时或收到响应,进入下一次探测。
下图为多报文UDP-jitter类型探测(多个探测报文),只有收到响应或者所有报文均超时,才进入下一次探测动作
下图为单报文icmp-echo探测,收到响应后立即进入下次探测动作,不继续等待probe timeout 到达
如下图是多报文的UDP-jitter类型探测抓包,第一个框是是一次探测结束,下次探测开始的现象。此时上次探测发送完最后一个报文,下次探测立即开始;第二个框是探测正常执行的状态,前一个报文发送后,等待一个发送间隔发送下个报文
因为probe timeout和packet-timeout互斥,两者不会同时配置在一个类型的探测中。所以不存在packet-timeout没有结束,probe timeout已经超时的情况
NQA动作
NQA有三种动作
none:只在本地记录监测结果,以便通过显示命令查看,不向网络管理系统发送Trap消息。
trap-only:不仅在本地记录监测结果,当阈值告警项的状态改变时,还向网络管理系统发送Trap消息。
trigger-only:在显示信息中记录监测结果的同时,触发其他模块联动。
所以想要让测试组和其他模块联动,动作必须配置为trigger-only
NQA测试失败条件
NQA失败条件有三种
平均值(average):监测一次测试中探测结果的平均值,如果平均值不在指定的范围内,则该监测对象超出阈值。例如,监测一次测试中探测持续时间的平均值。
累计数目(accumulate):监测一次测试中探测结果不在指定范围内的累计数目,如果累计数目达到或超过设定的值,则该监测对象超出阈值。
连续次数(consecutive):NQA测试组启动后,监测探测结果连续不在指定范围内的次数,如果该次数达到或超过设定的值,则该监测对象超出阈值。
-
除平均值外,累计数目和连续次数的单位都是报文,1个报文探测失败失败次数就会+1
例如配置ICMP-ECHO测试,一轮探测次数为3次,连续3次失败为阈值,则只要一轮全部失败,立即认为超出阈值。如果一轮探测次数为1次,连续3次失败为阈值,则三轮连续失败认为超出阈值。
-
对于一些特殊的类型,只能按其功能选择其中一项,如丢包探测只能选择累计
探测成功的条件也是按报文计算,但需要注意,NQA探测计数是在一次探测完毕后才计算的,比如probe packet-number 10,那么只有这是个报文都探测发送完毕,NQA才会计数,否则不计数(大部分NQA测试类型只发送一个报文,不涉及这种场景)