网络质量分析-NQA

NQA简介

网络质量分析NQA(Network Quality Analysis)是一种实时的网络性能探测和统计技术,可以对响应时间、网络抖动、丢包率等网络信息进行统计。NQA能够实时监视网络QoS,在网络发生故障时进行有效的故障诊断和定位。

目的:

为了使网络服务质量可见,使用户能够自行检查网络服务质量是否达到要求,需要采取以下措施:

  • 在设备上提供能够说明网络服务质量的数据。
  • 在网络中部署探针设备能对网络服务质量进行监控。

部署上述措施时,需要在设备侧提供时延、抖动、丢包率等相关统计参数和使用专用的探针设备,增加了设备和资金的投入。

当设备提供NQA时,就不用部署专门的探针设备,可以有效的节约成本。NQA可以实现对网络运行状况的准确测试,输出统计信息。

NQA监测网络上运行的多种协议的性能,使用户能够实时采集到各种网络运行指标,例如:HTTP的总时延、TCP连接时延、DNS解析时延、文件传输速率、FTP连接时延、DNS解析错误率等。

原理描述:

构造测试例

NQA测试中,把测试两端称为客户端和服务器端(或者称为源端和目的端),NQA的测试是由客户端(源端)发起。在客户端通过命令行配置测试例或由网管端发送相应测试例操作后,NQA把相应的测试例放入到测试例队列中进行调度。

启动测试例

启动NQA测试例,可以选择立即启动、延迟启动、定时启动。在定时器的时间到达后,则根据测试例的测试类型,构造符合相应协议的报文。但配置的测试报文的大小如果无法满足发送本协议报文的最小尺寸,则按照本协议规定的最小报文尺寸来构造报文发送。

测试例处理

测试例启动后,根据返回的报文,可以对相关协议的运行状态提供数据信息。发送报文时的系统时间作为测试报文的发送时间,给报文打上时间戳,再发送给服务器端。服务器端接收报文后,返回给客户端相应的回应信息,客户端在接收到报文时,再一次读取系统时间,给报文打上时间戳。根据报文的发送和接收时间,计算出报文的往返时间。

测试机制:

DHCP测试:

NQA的DHCP测试以UDP报文为承载,模拟DHCP Client在指定的接口上发起DHCP请求,根据是否申请到地址,确定接口所在的网络中是否有DHCP Server服务以及测试申请到地址的时间。

DHCP测试过程如下:

  1. 源端(RouterA)从需要获得地址的接口,向接口所在网段广播查询DHCP Server的Discovery报文。

  2. DHCP Server(RouterB)收到报文后,向源端回送Offer报文,报文中包含了DHCP Server的IP地址。

  3. 源端向接口所在网段广播要求获取IP地址的Request报文,报文中包含了DHCP Server的IP地址信息。

  4. DHCP Server收到报文后,向源端回送ACK报文,报文中包含了DHCP Server分配给相应接口的IP地址。

    源端收到数据包后通过计算源端接收报文的时间和源端最初发送Discovery报文的时间的差,计算出从DHCP服务器获取IP地址的时间。

DHCP测试只是借用操作接口发送DHCP报文,申请到地址后立即释放DHCP租约,不会为接口真正申请地址,因此不会占用DHCP Server的地址资源。进行DHCP测试的操作接口必须处于Up状态。

DHCP测试的结果和历史记录将记录在测试例中,可以通过命令行来查看探测结果和历史记录。

DNS测试:

NQA的DNS测试以UDP报文为承载,通过模拟DNS Client向指定的DNS服务器发送域名解析请求,根据域名解析是否成功及域名解析需要的时间,来判断DNS服务器是否可用,及域名解析速度。

dns测试过程如下:

  1. 客户端(RouterA)向DNS Server发送要求解析给定的DNS名称的Query报文。
  2. DNS Server收到报文后,通过解析构造Response报文,然后再把这个数据包发回到客户端。
  3. 客户端收到数据包后通过计算客户端接收报文的时间和客户端发送报文的时间的差,计算出DNS域名解析时间。从而清晰的反映出网络DNS协议的性能状况。

DNS测试只是模拟域名解析的过程,不会保存要解析的域名与IP地址的对应关系。

DNS测试的结果和历史记录将记录在测试例中,可以通过命令行来查看探测结果和历史记录。

FTP测试:

NQA的FTP测试以TCP报文为承载,用于检测是否可以与指定的FTP服务器建立连接,以及从FTP服务器下载指定文件或向FTP服务器上载指定文件的速度。

FRP测试提供两个阶段的响应速度:

  • 控制连接时间:客户端(RouterA)与FTP Server通过TCP“三次握手”建立控制连接的时间以及通过控制连接交互信令的时间。
  • 数据连接时间:客户端(RouterA)通过数据连接从FTP服务器下载指定文件或向FTP服务器上载指定文件的时间。

通过FTP测试,从客户端接收到的信息中可以计算出:

  • 最小控制连接时间、最大控制连接时间及平均控制连接时间。
  • 最小数据连接时间、最大数据连接时间及平均数据连接时间。

FTP测试支持文件下载和文件上载操作。文件下载操作并不会把文件放到本地的文件系统,只是计算下载该文件所需要的时间,取得数据后随即自动释放占用的内存;文件上载操作并不是将本地文件放到服务器上,而是上传固定大小及内容的文件(文件名由用户配置,数据为系统内部指定的固定数据;如果配置的文件名和服务器上已有的文件重名,则覆盖原来的文件),测试完成后该文件并不被删除。因此,FTP测试与本地文件系统无关。

FTP测试的结果和历史记录将记录在测试例中,可以通过命令行来查看探测结果和历史记录。

HTTP测试:

NQA的HTTP测试主要是测试客户端是否可以与指定的HTTP服务器建立连接,从而判断该设备是否提供了HTTP服务以及建立连接的时间。

NQA的HTTP测试提供三分阶段的响应速度:

  • DNS解析时间:客户端(RouterA)发送DNS报文给DNS服务器,DNS服务器将HTTP服务器域名解析为IP地址,DNS解析报文返回到客户端所花费的总时间。
  • TCP建立连接时间:客户端(RouterA)与HTTP服务器通过TCP“三次握手”建立连接所用的时间。
  • 交易时间:客户端(RouterA)发送Get或Post报文给HTTP服务器,响应报文到达HTTP服务器的时间。

通过HTTP测试,从客户端接收到的信息中可以计算出:

  • 最小DNS查询时间、最大DNS查询时间及DNS查询时间总和。
  • 最小TCP连接建立时间、最大TCP连接建立时间及TCP连接建立时间总和。
  • 最小HTTP交易时间、最大HTTP交易时间及HTTP交易时间总和。

HTTP测试的结果和历史记录将记录在测试例中,可以通过命令行来查看探测结果和历史记录。

ICPM Jitter测试:

ICMP Jitter测试是以ICMP报文为承载,通过记录在报文中的时间戳信息来统计时延、抖动、丢包的一种测试方法。Jitter(抖动时间)是指相邻两个报文的接收时间间隔减去这两个报文的发送时间间隔。

ICMP Jitter测试的过程如下:

  1. 源端(RouterA)以一定的时间间隔向目的端(RouterB)发送数据包。
  2. 目的端(RouterB)每收到一个数据包,就给它打上时间戳,然后再把这个数据包发回到源端(RouterA)。
  3. 源端(RouterA)收到数据包后通过计算目的端(RouterB)接收数据包时间间隔和源端(RouterA)发送数据包的时间间隔之差,计算出抖动时间。

从源端接收到的信息中计算出:

  • 数据包从源端到目的端和从目的端到源端的最大抖动时间、最小抖动时间及平均抖动时间。
  • 从目的端到源端或从源端到目的端的最大单向延时。

ICMP Jitter测试的结果和历史记录将记录在测试例中,可以通过命令行来查看探测结果和历史记录。

ICMP测试:

NQA的ICMP测试例用于检测源端到目的端的路由是否可达。ICMP测试提供类似于命令行下的Ping命令功能,但输出信息更为丰富:

  • 默认情况下能够保存最近5次的测试结果。
  • 结果中能够显示平均时延、丢包率,最后一个报文正确接收的时间等信息。

ICMP测试过程如下:

  1. 源端(RouterA)向目的端(RouterB)发送构造的ICMP Echo Request报文。
  2. 目的端(RouterB)收到报文后,直接回应ICMP Echo Reply报文给源端(RouterA)。

源端收到报文后,通过计算源端接收时间和源端发送时间之差,计算出源端到目的端的通信时间,从而清晰的反应出网络性能及网络畅通情况。

ICMP测试的结果和历史记录将记录在测试例中,可以通过命令行来查看探测结果和历史记录。

LSP Ping测试:

NQA的LSP Ping测试例用于检测两种类型(LDP,TE)的LSP路径是否可达。

LSP ping测试的过程如下:

  1. 源端(PE-A)首先构造MPLS Echo Request报文,在IP头填入127.0.0.0/8网段的地址作为IP的目的地,根据配置对端LSR ID查找相应的LSP(对于TE的LSP,可以指定从Tunnel接口发送,从而找到相应的CR-LSP),按指定的LSP进行MPLS域内的转发。
  2. 目的端(PE-B)Egress侦听3503端口发送MPLS Echo Reply响应报文。

源端通过接收到的响应报文,统计出测试结果,通过计算源端接收时间和源端发送时间之差,计算出源端到目的端的通信时间,从而清晰的反应出MPLS网络链路畅通情况。

LSP Ping测试的结果和历史记录将记录在测试例中,可以通过命令行来查看探测结果和历史记录。

LSP Trace测试:

NQA的LSP Trace测试用于检测两种类型(LDP,TE)的LSP转发路径,并沿该路径收集各设备的有关的统计信息。

LSP Trace测试的过程如下:

  1. 源端(PE-A)首先构造UDP的MPLS Echo Request报文,在IP头填入127.0.0.0/8网段的地址作为IP的目的地,查找相应的LSP(对于TE的LSP,可以指定从Tunnel接口发送,从而找到相应的CR-LSP)。MPLS Echo Request报文应该包含有Downstream MapPing TLV(用来携带LSP在当前节点的下游信息,主要包括下一跳地址、出标签等)。第一次发送的MPLS Echo Request报文的TTL为1。
  2. 该报文按指定的LSP进行MPLS域内的转发,到达LSP路径第一跳TTL超时返回MPLS Echo Reply消息。
  3. 源端(PE-A)继续以TTL递增的方式发送MPLS Echo Request报文,如此重复,直到整条LSP上的所有LSR都应答后,LSP Trace测试过程完成。

源端收到每跳LSR的应答消息后,统计并打印出从源端到目的端的LSP转发路径和该路径上各设备的有关信息。从而清晰的反映出从源端到目的端的LSP转发路径。

LSP Trace测试的结果和历史记录将记录在测试例中,可以通过命令行来查看探测结果和历史记录。

SNMP测试:

NQA的SNMP测试用于检测主机与SNMP Agent之间通信的速度,以UDP报文为承载。

SNMP测试过程如下;

  1. 源端(RouterA)向SNMP Agent(RouterC)发送要求获取系统时间的请求报文。

  2. SNMP Agent收到报文,查询系统时间并构造回应报文,然后再把这个数据包发回到源端。

    源端收到数据包后通过计算源端接收报文的时间和源端发送报文的时间的差,计算出源端与SNMP Agent之间通信的时间。从而清晰的反映出网络SNMP协议的性能状况。

SNMP测试的结果和历史记录将记录在测试例中,可以通过命令行来查看探测结果和历史记录。

TCP测试:

NQA的TCP测试用于检测主机与TCP Server之间经过三次握手建立TCP连接的速度。

TCP测试的过程如下:

  1. RouterA向RouterB发送要求建立连接的TCP SYN报文。
  2. RouterB收到报文,接收请求并向RouterA回应TCP SYN ACK报文。
  3. RouterA报文后,向RouterB回应ACK报文,连接建立。

此后,RouterA通过发送报文和接收报文的时间差,计算出与RouterB之间三次握手建立TCP连接的时间。从而清晰的反映出网络TCP协议的性能状况。

不能太频繁的发起TCP探测,以免占用过多资源,影响到目的设备上的正常服务。

TCP测试的结果和历史记录将记录在测试例中,可以通过命令行来查看探测结果和历史记录。

Trace测试:

NQA的Trace测试用于检测源端到目的端的转发路径,并沿该路径记录源设备到中间各个设备的时延等信息。Trace测试类似于Tracert命令功能,但输出信息更为丰富。每一跳信息中能够显示平均时延、丢包、最后一个包接收时间等信息。

Trace测试的过程如下:

  1. 源端(RouterA)向目的端(RouterD)发送构造的UDP报文,报文中的TTL为1。
  2. 第一跳RouterB收到该报文后,判断TTL是否为0,如果为0则丢弃该报文,返回ICMP超时报文。
  3. 源端(RouterA)收到该ICMP超时报文后,记录第一跳的IP地址,并重新构造UDP报文,报文中的TTL为2。
  4. 报文到达第二跳RouterC后,判断TTL是否为0,如果为0则丢弃该报文,返回ICMP超时报文。
  5. 以此类推,最终报文到达目的端(RouterD),返回端口不可达的ICMP报文给源端(RouterA)。

源端收到每跳返回的ICMP报文后,统计并打印出从源端到目的端的转发路径和该路径上各设备的有关信息。从而清晰的反映出从源端到目的端的转发路径。

Trace测试的结果和历史记录将记录在测试例中,可以通过命令行来查看探测结果和历史记录。

UDP测试:

NQA的UDP测试用于检测源端与目的端(UDP Server)之间通信的速度。

UDP测试的过程如下:

  1. 源端(RouterA)向目的端(RouterC)发送构造的UDP报文。

  2. 目的端收到报文,直接将报文再回送给源端。

    源端收到数据包后通过计算源端接收报文的时间和源端发送报文的时间的差,计算出源端与目的端之间通信的时间。从而清晰的反映出网络UDP协议的性能状况。

UDP测试的结果和历史记录将记录在测试例中,可以通过命令行来查看探测结果和历史记录。

UDP Jitter测试:

UDP Jitter是以UDP报文为承载,通过记录在报文中的时间戳信息来统计时延、抖动、丢包的一种测试方法。Jitter(抖动时间)是指相邻两个报文的接收时间间隔减去这两个报文的发送时间间隔。

UDP Jitter测试的过程如下:

  1. 源端(RouterA)以一定的时间间隔向目的端(RouterB)发送报文。
  2. 目的端(RouterB)每收到一个报文,就给它打上时间戳,然后再把这个报文发回到源端(RouterA)。
  3. 源端(RouterA)收到报文后通过计算目的端(RouterB)接收报文时间间隔和源端(RouterA)发送报文的时间间隔之差,计算出抖动时间。

从源端接收到的信息中计算出:

  • 报文从源端到目的端和从目的端到源端的最大抖动时间、最小抖动时间及平均抖动时间。
  • 从目的端到源端或从源端到目的端的最大单向延时。

UDP Jitter每次测试最大发包数量可配,是探测数(probe-count)与每次探测发送报文(jitter-packetnum)的乘积。

UDP Jitter测试可以设置单个测试例的连续发包数目,通过这项设置,可以在一段时间内模拟某种数据的真实流量。例如,设置3000个UDP报文以20毫秒的间隔发送,可以在一分钟内模拟G.711流量。

UDP Jitter测试的结果和历史记录将记录在测试例中,可以通过命令行来查看探测结果和历史记录。

UDP Jitter(hardware-based)测试:

UDP Jitter(hardware-based)是以UDP报文为承载,是对UDP Jitter的补充。可以达到如下目的:

  • 可以减小发包间隔,最小可以达到10ms。
  • 可以增加测试例的并发数。
  • 时延抖动计算更加准确。

从而可以更加真实的反映网络状况和提高设备效率。

UDP Jitter和UDP jitter(hardware-based)的不同点:

比较点 UDP Jitter UDP Jitter(hardware-based)
发包间隔 最小只能达到20ms 最小可以达到10ms
抖动计算 上送主控板打时间戳 接口板打时间戳,更精准

UDP Jitter(hardware-based)测试的结果和历史记录将记录在测试例中,可以通过命令行来查看探测结果和历史记录。

NQA联动机制:

联动功能是指NQA提供探测功能,把探测结果通知其他模块,其他模块再根据探测结果进行相应处理的功能。目前实现了与VRRP、静态路由、备份接口、IGMP Proxy、IP地址池、DNS服务器和策略路由的联动。

以静态路由为例:

用户配置了一条静态路由,下一跳为192.168.0.88,如果192.168.0.88可达,该静态路由有效;如果192.168.0.88不可达,则该静态路由无效。通过在NQA和应用模块之间建立联动,可以实现静态路由有效性的实时判断。如果NQA发现192.168.0.88不可达,NQA将通知静态路由模块,静态路由模块可以据此判断该静态路由项无效。

NQA配置命令行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
adv-factor factor-value
//配置NQA Jitter模拟语音测试计算的补偿因子。
//缺省情况下,NQA Jitter模拟语音测试计算的补偿因子的值为0。取值范围是0~20。
agetime hh:mm:ss
//来配置NQA测试例的老化时间。
//缺省情况下,老化时间为0,表示测试例永不老化。
clear-records
//用来清除NQA测试例的统计信息。
community read cipher community-name
//用来配置用于SNMP测试的团体名。
//缺省情况下,系统中SNMP测试的团体名为public。
datafill fillstring
//配置NQA测试例的填充字符。
datasize size
//用来配置NQA测试例的报文大小。取值范围是0~8100
destination-address
//用来配置NQA测试例的目的地址。
destination-port
//用来配置NQA测试例的目的端口号。
display nqa application
//查看与业务对应的NQA测试例类型。
display nqa-parameter (参数)
//用来查看当前测试例的参数配置信息。
dns-server ipv4 ip-address
//用来配置NQA测试中DNS服务器地址。
fail-percent percent
//用来配置NQA测试失败百分比。
//缺省情况下,测试失败百分比为100%,即只有全部探测失败,本次测试才视为失败。
frequency interval
//用来配置NQA测试例自动执行测试的时间间隔。
//缺省情况下,没有配置自动测试间隔,即只进行一次测试。
ftp-filename file-name
//用来配置NQA测试FTP测试例的文件名和文件路径。
hardware-based enable
//用来使能在进行Jitter测试时,采用接口板上的硬件转发引擎进行发包及打时间戳。
icmp-jitter-mode { icmp-echo | icmp-timestamp }
//用来指定ICMP Jitter测试例测试模式的类型。
//缺省情况下,ICMP Jitter测试例测试模式的类型为icmp-timestamp。

interval { milliseconds interval | seconds interval }
//配置NQA测试例的发送报文的时间间隔。
probe-count number
//用来配置NQA测试例的一次测试探针数目。
//缺省情况下,一次测试探针数目是3。
probe-failtimes times
//用来配置NQA测试探测失败后发送trap的阈值。即,连续探测失败的次数。
//取值范围是1~15。缺省值是1。
packet-rewrite-check { alternant-binary | same-binary }
//配置NQA报文改写检查功能,通过填充检测报文的方式实现检查。
//alternant-binary:指定使用0101和1010交替填充检测报文。
//same-binary:指定使用全0和全1交替填充检测报文。
records { history number | result number }
//配置NQA测试的历史记录和结果记录的最大数目。
records history-filter { all | failures }
//打开对NQA测试例历史表记录的过滤功能。
sendpacket passroute
//配置NQA测试例不查找路由表发送报文。
send-trap
//用来配置Trap消息的发送条件。
set-df
//设置报文的DF(Don't Fragment)位。即,不允许报文分片。
snmp-agent trap enable feature-name nqa
//打开NQA模块的告警开关。
start
//配置NQA测试例的启动方式和结束方式。
stop
//用来终止当前正在执行的NQA测试例。
test-failtimes times
//配置在NQA测试失败后发送Trap的阈值。即,连续测试失败的次数。
test-type
//配置NQA测试例的测试类型。
timestamp-unit { millisecond | microsecond }
//来设置NQA测试例的时间戳单位。
//millisecond:毫秒 microsecond:微秒
threshold { owd-ds owd-ds-value | owd-sd owd-sd-value | rtd rtd-value }
//设置双向传输延迟、单向传输延迟的阈值。
timeout time
//配置NQA测试例的一次探测的超时时间。
//缺省情况下,除DHCP、FTP测试类型的超时时间为15秒外,其他测试类型的超时时间为3秒。
tos value
//配置NQA测试报文的服务类型。
tracert-hopfailtimes
//配置NQA测试中Trace测试例失败的失败跳数。取值范围是1~255。
//缺省情况下,一次探测中的失败跳数达到5次就认为此次探测失败。
tracert-livetime first-ttl first-ttl max-ttl max-ttl
//配置NQA测试Trace测试例的生存时间。
//缺省情况下,初始TTL值为1,最大TTL值为30。
ttl number
//配置NQA测试例测试报文的TTL值。
//缺省情况下,TTL值为30。

参考资料:华为HedEx文档


坚持原创技术分享,您的支持将鼓励我继续创作!