新华三NQA技术介绍
作者个人博客站文章地址https://atmujie.com/2024/10/05/新华三NQA技术介绍/NQA网络质量分析技术前言与介绍NQA中文名“网络质量分析”技术和BFD一样都是一种链路探测技术不同的是BFD技术用于检测IP网络中链路的连通情况检测速度可以达到毫秒级但只是发送UDP报文相比之下NQA技术检测速度不及BFD但可以执行多种类型的探测适用场景多例如LB负载均衡中对服务器HTTP、HTTPS网页的检测DNS服务器检测等NQA技术配置非常简单但博主在工作中遇到了很多咨询NQA报文发送细节的问题如“多少秒探测一次”、“两个报文发送间隔是多久”等等问题。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客户端与服务器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是有多轮、多次、多个探测的根据探测类型的不同探测的数量也不相同先来看一个基本的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-onlyNQA测试组运行一次可以进行多轮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决定报文超时和发送间隔是两个独立计时器一次探测中只要到达发送间隔立即发送下个报文而不是等待超时时间到达如下图为多报文UDP-jitter类型探测配置发送间隔2s超时间隔4s可以看到报文以2s的间隔持续发送到一次探测所有的报文都发出等待4s报文全部超时进入下次探测。只有收到响应或者所有报文均超时才进入下一次探测动作如下图是多报文的UDP-jitter类型探测抓包报文可达时第一个框是是一次探测结束下次探测开始的现象。此时上次探测发送完最后一个报文下次探测立即开始第二个框是探测正常执行的状态前一个报文发送后等待一个发送间隔发送下个报文。这里可以看到两次探测之间没有等待时间对于一次探测发一个报文的NQA测试类型中无法配置probe packet-interval、packet-timeout命令报文超时时间由probe timeout决定代表本次探测超时时间多个报文的命令packet-timeout和单个报文的命令probe timeout互斥, 无法同时配置。对于发送单个报文的探测类型本次探测超时或收到响应进入下一次探测。下图为单报文icmp-echo探测配置每轮NQA探测5次可以看到收到响应后立即进入下次探测动作不继续等待probe timeout 到达无论单次探测多报文还是单报文一次探测完成的条件都是所有报文均收到响应或全部超时一次探测完成后下一次探测立即开始每次探测之间没有等待时间。一轮NQA测试的间隔由frequency命令决定在一轮测试内只有上轮测试完成才进行下轮测试的等待等待时间由frequency决定。需要注意每轮测试间隔frequency和报文超时时间probe timeout是独立的计时器只有报文全部超时才会进入下轮测试否则即使frequency到达也不进行下轮测试。如下图配置frequency为3sprobe timeout是6s每轮默认探测一次icmp-echo一次探测发一个报文。从抓包可以看到每个报文的间隔约为9s也有抓包到6s的情况这里没有截到原因就在于两个定时器独立如下到达3s时frequency 超时但是timeout 没有结束不进入下轮NQA到达6stimeout 如果提前于超时就会在6s 时进行下轮NQA如果fre遭遇timeout就需要在等3s到9s进入下一轮。改成fre 10stimeout 6s 验证可以看到两次报文的发送间隔为10s。对于fre和timeout 的配置华为有明确说明fre的配置时间要大于timeout此时可以认为两轮NQA的报文发送间隔不看timeout 只看fre但华三没有对应限制是运行fre小于timeout 的经过测试可以得到两个定时器独立运行。从代码低耦合的角度来看fre定时器应当是在一轮NQA探测开始时就在运行了无论中间经历多少过程都会到本轮NQA探测完成后的下次超期才会触发但由于我没有代码所以这只能作为测试验证的猜想华为虽然限制fre timeout 但逻辑应当一至。NQA动作NQA有三种动作none只在本地记录监测结果以便通过显示命令查看不向网络管理系统发送Trap消息。trap-only不仅在本地记录监测结果当阈值告警项的状态改变时还向网络管理系统发送Trap消息。trigger-only在显示信息中记录监测结果的同时触发其他模块联动。所以想要让测试组和其他模块联动动作必须配置为trigger-onlyNQA测试失败条件NQA失败条件有三种平均值average监测一次测试中探测结果的平均值如果平均值不在指定的范围内则该监测对象超出阈值。例如监测一次测试中探测持续时间的平均值。累计数目accumulate监测一次测试中探测结果不在指定范围内的累计数目如果累计数目达到或超过设定的值则该监测对象超出阈值。连续次数consecutiveNQA测试组启动后监测探测结果连续不在指定范围内的次数如果该次数达到或超过设定的值则该监测对象超出阈值。除平均值外累计数目和连续次数的单位都是报文1个报文探测失败失败次数就会1例如配置ICMP-ECHO测试一轮探测次数为3次连续3次失败为阈值则只要一轮全部失败立即认为超出阈值。如果一轮探测次数为1次连续3次失败为阈值则三轮连续失败认为超出阈值。对于一些特殊的类型只能按其功能选择其中一项如丢包探测只能选择累计探测成功的条件也是按报文计算但需要注意NQA探测计数是在一次探测完毕后才计算的比如probe packet-number 10那么只有这是个报文都探测发送完毕NQA才会计数否则不计数大部分NQA测试类型只发送一个报文不涉及这种场景NQA配置案例了解完上面的机制相信大家可以自己按业务场景计算关于NQA探测的一些时间值了下面贴一些案例加强了解一次探测单个报文的NQA测试组场景ICMP-ECHO1. 组网需求使用NQA的ICMP-echo测试功能测试本端Device A发送的报文是否可以经过指定的下一跳设备Device C到达指定的目的端Device B以及报文的往返时间。2. 组网图图1-2 ICMP-echo测试组网图3. 配置步骤# 配置各接口的IP地址。配置过程略 # 配置静态路由或动态路由协议确保各设备之间路由可达。配置过程略 # 创建ICMP-echo类型的NQA测试组管理员为admin操作标签为test1并配置探测报文的目的地址为10.2.2.2。 DeviceA system-view [DeviceA] nqa entry admin test1 [DeviceA-nqa-admin-test1] type icmp-echo [DeviceA-nqa-admin-test1-icmp-echo] destination ip 10.2.2.2 # 配置下一跳地址为10.1.1.2以便测试报文经过指定的下一跳设备Device C到达目的端而不是通过Device D到达目的端。 [DeviceA-nqa-admin-test1-icmp-echo] next-hop ip 10.1.1.2 # 配置可选参数一次NQA测试中探测的次数为10探测的超时时间为500毫秒测试组连续两次测试开始时间的时间间隔为5000毫秒。 [DeviceA-nqa-admin-test1-icmp-echo] probe count 10 [DeviceA-nqa-admin-test1-icmp-echo] probe timeout 500 [DeviceA-nqa-admin-test1-icmp-echo] frequency 5000 # 开启NQA历史记录保存功能并配置一个测试组中能够保存的最大历史记录个数为10。 [DeviceA-nqa-admin-test1-icmp-echo] history-record enable [DeviceA-nqa-admin-test1-icmp-echo] history-record number 10 [DeviceA-nqa-admin-test1-icmp-echo] quit # 启动ICMP-echo测试操作并一直进行测试。 [DeviceA] nqa schedule admin test1 start-time now lifetime forever # 测试执行一段时间后停止ICMP-echo测试操作。 [DeviceA] undo nqa schedule admin test14. 验证配置# 显示ICMP-echo测试中最后一次测试的当前结果。 [DeviceA] display nqa result admin test1 NQA entry (admin admin, tag test1) test results: Send operation times: 10 Receive response times: 10 Min/Max/Average round trip time: 2/5/3 Square-Sum of round trip time: 96 Last succeeded probe time: 2011-08-23 15:00:01.2 Extended results: Packet loss ratio: 0% Failures due to timeout: 0 Failures due to internal error: 0 Failures due to other errors: 0 # 显示ICMP-echo测试的历史记录。 [DeviceA] display nqa history admin test1 NQA entry (admin admin, tag test1) history records: Index Response Status Time 370 3 Succeeded 2011-08-23 15:00:01.2 369 3 Succeeded 2011-08-23 15:00:01.2 368 3 Succeeded 2011-08-23 15:00:01.2 367 5 Succeeded 2011-08-23 15:00:01.2 366 3 Succeeded 2011-08-23 15:00:01.2 365 3 Succeeded 2011-08-23 15:00:01.2 364 3 Succeeded 2011-08-23 15:00:01.1 363 2 Succeeded 2011-08-23 15:00:01.1 362 3 Succeeded 2011-08-23 15:00:01.1 361 2 Succeeded 2011-08-23 15:00:01.1以上显示信息表示Device A发送的报文可以通过Device C到达Device B测试过程中未发生丢包报文的最小、最大、平均往返时间分别为2毫秒、5毫秒和3毫秒。一次探测多个报文的NQA测试组场景(ICMP-jitter)1. 组网需求使用NQA的ICMP-jitter测试功能测试本端Device A和指定目的端Device B之间传送报文的时延抖动。2. 组网图图1-3 ICMP-jitter测试组网图3. 配置步骤(1) 配置各接口的IP地址。配置过程略 (2) 配置静态路由或动态路由协议确保各设备之间路由可达。配置过程略 (3) 配置Device A # 创建ICMP-jitter类型的NQA测试组管理员为admin操作标签为test1。 DeviceA system-view [DeviceA] nqa entry admin test1 [DeviceA-nqa-admin-test1] type icmp-jitter # 配置测试操作的探测报文的目的地址为10.2.2.2。 [DeviceA-nqa-admin-test1-icmp-jitter] destination ip 10.2.2.2 # 配置可选参数测试组连续两次测试开始时间的时间间隔为1000毫秒。 [DeviceA-nqa-admin-test1-icmp-jitter] frequency 1000 [DeviceA-nqa-admin-test1-icmp-jitter] quit # 启动ICMP-jitter测试操作并一直进行测试。 [DeviceA] nqa schedule admin test1 start-time now lifetime forever # 测试执行一段时间后停止ICMP-jitter测试操作。 [DeviceA] undo nqa schedule admin test14. 验证配置# 显示ICMP-jitter测试中最后一次测试的当前结果。 [DeviceA] display nqa result admin test1 NQA entry (admin admin, tag test1) test results: Send operation times: 10 Receive response times: 10 Min/Max/Average round trip time: 1/2/1 Square-Sum of round trip time: 13 Last packet received time: 2015-03-09 17:40:29.8 Extended results: Packet loss ratio: 0% Failures due to timeout: 0 Failures due to internal error: 0 Failures due to other errors: 0 Packets out of sequence: 0 Packets arrived late: 0 ICMP-jitter results: RTT number: 10 Min positive SD: 0 Min positive DS: 0 Max positive SD: 0 Max positive DS: 0 Positive SD number: 0 Positive DS number: 0 Positive SD sum: 0 Positive DS sum: 0 Positive SD average: 0 Positive DS average: 0 Positive SD square-sum: 0 Positive DS square-sum: 0 Min negative SD: 1 Min negative DS: 2 Max negative SD: 1 Max negative DS: 2 Negative SD number: 1 Negative DS number: 1 Negative SD sum: 1 Negative DS sum: 2 Negative SD average: 1 Negative DS average: 2 Negative SD square-sum: 1 Negative DS square-sum: 4 SD average: 1 DS average: 2 One way results: Max SD delay: 1 Max DS delay: 2 Min SD delay: 1 Min DS delay: 2 Number of SD delay: 1 Number of DS delay: 1 Sum of SD delay: 1 Sum of DS delay: 2 Square-Sum of SD delay: 1 Square-Sum of DS delay: 4 Lost packets for unknown reason: 0 # 显示ICMP-jitter测试的统计结果。 [DeviceA] display nqa statistics admin test1 NQA entry (admin admin, tag test1) test statistics: NO. : 1 Start time: 2015-03-09 17:42:10.7 Life time: 156 seconds Send operation times: 1560 Receive response times: 1560 Min/Max/Average round trip time: 1/2/1 Square-Sum of round trip time: 1563 Extended results: Packet loss ratio: 0% Failures due to timeout: 0 Failures due to internal error: 0 Failures due to other errors: 0 Packets out of sequence: 0 Packets arrived late: 0 ICMP-jitter results: RTT number: 1560 Min positive SD: 1 Min positive DS: 1 Max positive SD: 1 Max positive DS: 2 Positive SD number: 18 Positive DS number: 46 Positive SD sum: 18 Positive DS sum: 49 Positive SD average: 1 Positive DS average: 1 Positive SD square-sum: 18 Positive DS square-sum: 55 Min negative SD: 1 Min negative DS: 1 Max negative SD: 1 Max negative DS: 2 Negative SD number: 24 Negative DS number: 57 Negative SD sum: 24 Negative DS sum: 58 Negative SD average: 1 Negative DS average: 1 Negative SD square-sum: 24 Negative DS square-sum: 60 SD average: 16 DS average: 2 One way results: Max SD delay: 1 Max DS delay: 2 Min SD delay: 1 Min DS delay: 1 Number of SD delay: 4 Number of DS delay: 4 Sum of SD delay: 4 Sum of DS delay: 5 Square-Sum of SD delay: 4 Square-Sum of DS delay: 7 Lost packets for unknown reason: 0NQA服务器客户端场景(TCP)1. 组网需求使用NQA的TCP测试功能测试本端Device A和指定目的端Device B的端口9000之间建立TCP连接所需的时间。2. 组网图图1-10 TCP测试组网图3. 配置步骤(1) 配置各接口的IP地址。配置过程略 (2) 配置静态路由或动态路由协议确保各设备之间路由可达。配置过程略 (3) 配置Device B # 使能NQA服务器配置监听的IP地址为10.2.2.2TCP端口号为9000。 DeviceB system-view [DeviceB] nqa server enable [DeviceB] nqa server tcp-connect 10.2.2.2 9000 (4) 配置Device A # 创建TCP类型的测试组管理员为admin操作标签为test1。 DeviceA system-view [DeviceA] nqa entry admin test1 [DeviceA-nqa-admin-test1] type tcp # 配置探测报文的目的地址为10.2.2.2目的端口号为9000。 [DeviceA-nqa-admin-test1-tcp] destination ip 10.2.2.2 [DeviceA-nqa-admin-test1-tcp] destination port 9000 # 开启NQA测试组的历史记录保存功能。 [DeviceA-nqa-admin-test1-tcp] history-record enable [DeviceA-nqa-admin-test1-tcp] quit # 启动测试操作并一直进行测试。 [DeviceA] nqa schedule admin test1 start-time now lifetime forever # 测试执行一段时间后停止TCP测试操作。 [DeviceA] undo nqa schedule admin test14. 验证配置# 显示TCP测试中最后一次测试的当前结果。 [DeviceA] display nqa result admin test1 NQA entry (admin admin, tag test1) test results: Send operation times: 1 Receive response times: 1 Min/Max/Average round trip time: 13/13/13 Square-Sum of round trip time: 169 Last succeeded probe time: 2011-11-22 10:27:25.1 Extended results: Packet loss ratio: 0% Failures due to timeout: 0 Failures due to disconnect: 0 Failures due to no connection: 0 Failures due to internal error: 0 Failures due to other errors: 0 # 显示TCP测试的历史记录。 [DeviceA] display nqa history admin test1 NQA entry (admin admin, tag test1) history records: Index Response Status Time 1 13 Succeeded 2011-11-22 10:27:25.1以上显示信息表示Device A可以与Device B的端口9000建立TCP连接建立连接所需的时间为13毫秒。NQA模块场景HTTP1. 组网需求外部特性通过引用HTTP类型的NQA模板测试是否可以和指定的HTTP服务器之间建立连接以及能否从HTTP服务器获取数据。2. 组网图图1-22 HTTP类型的NQA模板配置组网图3. 配置步骤# 配置各接口的IP地址。配置过程略 # 配置静态路由或动态路由协议确保各设备之间路由可达。配置过程略 # 创建HTTP类型的NQA模板模板名为http。 DeviceA system-view [DeviceA] nqa template http http # 配置HTTP测试的网址为https://10.2.2.2/index.htm。 [DeviceA-nqatplt-http-http] url http://10.2.2.2/index.htm # 配置HTTP测试的操作方式为get操作。get操作为缺省操作方式因此可以不执行本配置 [DeviceA-nqatplt-http-http] operation get # 配置确定节点有效前需要连续探测成功的次数为2。当连续探测成功次数达到2次时NQA客户端把探测成功的消息发送给外部特性使外部特性能利用NQA测试的结果进行相应处理。 [DeviceA-nqatplt-http-http] reaction trigger probe-pass 2配置后使用其他支持NQA模板的功能模块调用即可