BFD:
BFD基本概念:
BFD在两台网络设备上建立会话,用来检测网络设备间的双向转发路径,为上层应用服务。BFD本身并没有邻居发现机制,而是靠被服务的上层应用通知其邻居信息以建立会话。会话建立后会周期性地快速发送BFD报文,如果在检测时间内没有收到BFD报文则认为该双向转发路径发生了故障,通知被服务的上层应用进行相应的处理。
BFD控制报文采用UDP封装,目的端口号为3784,源端口号在49152到65535的范围内。
BFD会话管理:
一、会话状态:
- Down:会话处于Down状态或刚刚创建。
- Init:已经能够与对端系统通信,本端希望使会话进入Up状态。
- Up:会话已经建立成功。
- AdminDown:会话处于管理性Down状态。
二、BFD会话迁移过程:
- R1和R2各自启动BFD状态机,初始状态为Down,发送状态为Down的BFD报文。
- R2收到状态为Down的BFD报文后,状态切换至Init,并发送状态为Init的BFD报文。
- R2本地BFD状态为Init后,不再处理接收到的状态为Down的报文。
- R1的BFD状态变化同R2。
- R2收到状态为Init的BFD报文后,本地状态切换至Up。
- R1的BFD状态变化同R2。
BFD会话建立方式:
BFD会话的建立有两种方式,即静态建立BFD会话和动态建立BFD 会话。静态和动态创建BFD会话的主要区别在于本地标识符(Local Discriminator)和远端标识符( Remote Discriminator)的产生方式不同,静态的需要手动指定, 而动态则自己产生。
- 静态建立:指的是BFD会话通过命令手工下发BFD会话请求,配置思路如下:
• 启用BFD。
• 建立BFD会话的名称及源目IP。
• 创建本地标识符和远端标识符。 - 动态建立BFD会话:动态建立BFD会话时,系统对本地标识符和远端标识符的处理方式如下:
• 动态分配本地标识符:当应用程序触发动态创建BFD会话时,系统分配属于动态会话标识符区域的值作为BFD会话的本地标识符。然后向对端发送Remote Discriminator的值为0的BFD控制报文,进行会话协商。
• 自学习远端标识符:值为0的BFD控制报文时,判断该报文是否与本地BFD会话匹配,如果匹配,则学习接收到的BFD报文中Local Discriminator获取远端标识符。
• 配置思路:启用 BFD,建立BFD会话的名称及源目IP即可,不用创建标识符。
BFD单臂回声功能:
在两台直接相连的设备中,其中一台设备支持BFD功能,另一台设备不支持BFD功能,只支持基本的网络层转发。为了能够快速的检测这两台设备之间的故障,可以在支持BFD功能的设备上创建单臂回声功能的BFD会话。支持BFD功能的设备主动发起回声请求功能,没有BFD功能的设备接收到该报文后直接将其环回,从而实现转发链路的连通性功能。
BFD故障检查方式:
异步模式:
在异步模式下,系统之间会按照协商好的周期发送BFD控制报文,如果其某个系统在检测时间内没有收到对端发来的BFD控制报文,就宣告BFD会话的状态为DOWN。异步模式是最常用的BFD方式。
查询模式:
在查询模式下,一旦BFD会话建立,系统就不再周期性发送BFD控制报文,而是通过其他与BFD无关的机制检测连通性(比如路由协议的Hello机制、硬件检测机制等),从而减少BFD会话带来的开销。在查询模式下,系统存在一个查询定时器,当查询定时器到期后,系统会发送一个短序列的查询报文检查链路,如果没有收到返回的报文就宣布会话的状态为DOWN。
BFD联动应用场景:
联动功能由检测模块、Track 和应用模块三部分组成。
检测模块负责对链路状态、网络性能等进行监测,并将探测结果通知给Track模块。Track模块将收到监测模块的探测结果后,及时改变Track项的状态,并通知应用模块。应用模块根据Track项的状态,进行相应的处理,从而实现联动。
以OSPF为例:
- 被检测链路出现故障。
- BFD快速检测到链路故障,BFD会话状态变为Down。
- BFD通知绑定的如OSPF进程BFD邻居不可达。
- 本地协议,例如OSPF进程中断OSPF邻居关系。
NQA:
概述:
随着Internet的高速发展,网络支持的业务和应用日渐增多,传统的网络性能分析方法(如Ping、Tracert等)已经不能满足用户对业务多样性和监测实时性的要求。
NQA通过发送测试报文,对网络性能或服务质量进行分析,为用户提供网络性能参数,如时延抖动、HTTP的总时延、通过DHCP获取IP地址的时延、TCP连接时延、FTP连接时延和文件传输速率等。利用NQA的测试结果,用户可以:
- 及时了解网络的性能状况,针对不同的网络性能,进行相应的处理。
- 对网络故障进行诊断和定位。
NQA还提供了与Track和应用模块联动的功能,实时监控网络状态的变化,及时进行相应的处理,从而避免通信的中断或服务质量的降低。
技术优点:
NQA具有以下几个特点:
- 支持多种测试类型
传统的Ping功能是使用ICMP(Internet Control Message Protocol,互联网控制报文协议)测试数据包在本端和指定目的端之间的往返时间。NQA是对Ping功能的扩展和增强,它提供了更多的功能。目前NQA支持11种测试类型:ICMP-echo、DHCP、DNS、FTP、HTTP、UDP-jitter、SNMP、TCP、UDP-echo、Voice和DLSw测试。 - 支持多测试组并发
NQA模块支持多个测试组并发,用户可以根据需求手工配置并发个数。但对于DHCP测试,同一时刻只允许有一个测试组进行测试。 - 支持联动功能
联动功能是指NQA提供探测功能,把探测结果通知其他模块,其他模块再根据探测结果进行相应处理的功能。目前实现了与VRRP、静态路由、备份中心和策略路由的联动。
联动功能是指通过建立联动项,对当前所在测试组中的探测进行监测,当连续探测失败次数达到一定数目时, 就触发其他模块联动。联动功能的的实现如图:
联动功能由应用模块、Track模块和监测功能模块(如NQA)三部分组成。Track模块位于应用模块和NQA之间,当监测项的状态发生变化时,监测功能模块通知Track模块,再由Track模块通知应用模块进行相应的处理,从而实现联动。
以静态路由为例,用户配置了一条静态路由,下一跳为192.168.0.88,如果192.168.0.88可达,那么该静态路由有效;如果192.168.0.88不可达,则该静态路由无效。通过在NQA、Track模块和应用模块之间建立联动,可以实现静态路由有效性的实时判断。如果NQA发现192.168.0.88不可达,NQA将通过Track模块通知静态路由模块,静态路由模块可以据此判断该静态路由项无效。
NQA基本术语:
- NQA agent:NQA网络测试的客户端。
- NQA server:NQA网络测试的服务器端。狭义上,指UDP-echo、TCP、UDP-jitter和Voice四种测试中的NQA server端。广义上,指所有要被探测的对端设备,如FTP server、HTTP server等。
- 测试组:NQA测试功能以测试组的形式进行组织。每一个测试组都具有一系列的属性,例如,测试类型,测试目的地址,测试目的端口,测试发包频率等。
- 探测:一个能够得到完整探测结果的独立过程。对于TCP、DLSw测试,一次探测是指一次连接;对于UDP-jitter和Voice测试,一次探测发送探测报文的个数由用户来设定;对于FTP、HTTP、DHCP测试,一次探测是指完成一次相应的功能;对于ICMP-echo、UDP-echo测试,一次探测发送一个探测报文;对于SNMP测试,一次探测发送三个探测报文。
NQA测试操作:
在窗户测试组并进行该测试组视图后,可以根据要进行测试配置相关的测试参数,。要成功进行某项测试,需要在NQA客户端上进行如下操作:
- 使能NQA客户端功能。
- 创建测试组,根据测试类型进行相应测试参数的配置。
- 通过启动测试命令执行NQA测试。
- 通过显示命令或调试命令查看测试结果。
常用测试机制:
- SNMP处理机制
SNMP测试发送SNMP协议报文到指定端口,根据回应确认对端SNMP功能是否开启。在客户端无法指定SNMP服务的版本号。每次测试时会对SNMP v1/v2c/v3三个版本都进行测试,收到任何一个版本的回复,即认为探测成功。目前,SNMP测试并不区分SNMP server支持哪个版本。SNMP测试的结果和历史记录将记录在测试组中,可以通过命令行来查看探测结果和历史记录。 - HTTP处理机制
HTTP测试主要是测试是否可以与指定的HTTP服务器建立连接,从而判断该设备是否提供了HTTP服务以及建立连接的时间。HTTP测试支持GET和POST操作,即向指定地址的HTTP服务器发送GET请求或者POST请求,在接收到回应信息以后,计算整个测试的时间。整个过程只是和HTTP服务器建立连接,如果建立连接成功即认为成功。HTTP测试的结果和历史记录将记录在测试组中,可以通过命令行来查看探测结果和历史记录。 - FTP处理机制
FTP测试主要是测试是否可以与指定的FTP服务器建立连接,以及与FTP服务器之间传送文件的时间,可以使用该功能探测任何FTP服务器。FTP测试支持GET和PUT操作。GET操作并不会把文件放到本地的文件系统,只是计算下载该文件所需要的时间,取得数据后随即自动释放占用的内存;PUT操作并不是将本地文件放到服务器上,而是上传固定大小及内容的文件(文件名由用户配置,数据为系统内部指定的固定数据;如果配置的文件名和服务器上已有的文件重名,则覆盖原来的文件,测试完成后该文件并不被删除)。因此,FTP测试与本地文件系统无关。FTP测试的结果和历史记录将记录在测试组中,可以通过命令行来查看探测结果和历史记录。 - DHCP处理机制
DHCP测试模拟DHCP client在指定的接口上发起DHCP请求,根据是否申请到地址,确定接口所在的网络中是否有DHCP server服务以及测试申请到地址的时间。DHCP测试只是借用操作接口发送DHCP报文,申请到地址后立即释放DCHP租约,不会为接口真正申请地址,因此不会占用DHCP server的地址资源。进行DHCP测试的操作接口必须处于up状态。DHCP测试的结果和历史记录将记录在测试组中,可以通过命令行来查看探测结果和历史记录。 - DNS处理机制
DNS测试通过模拟DNS client向指定的DNS服务器发送域名解析请求,根据域名解析是否成功及域名解析需要的时间,来判断DNS服务器是否可用,及域名解析速度。DNS测试只是模拟域名解析的过程,不会保存要解析的域名与IP地址的对应关系。DNS测试的结果和历史记录将记录在测试组中,可以通过命令行来查看探测结果和历史记录。 - NQA的ICMP测试例用于检测源端到目的端的路由是否可达ICMP测试提供类似于命令行下的Ping命令功能,但输出信息更为丰富:
• 默认情况下能够保存最近5次的测试结果。
• 结果中能够显示平均时延、丢包率, 最后一个报文正接收的时间等信息。
ICMP测试的过程如下:
• 源端向目的端发送构造的ICMP Echo Request报文。
• 目的端收到报文后,直接回应ICMPEcho Reply报文给源端。
BFD和NQA的区别:
BFD 用于检查链路的故障,可与各的议进行联合使用,从而达到网络的快速收敛。NQA主要用于检查上层协议的服务是否可用,可与各种协议联动,当然它也可以通过与ICMP协议的联动,从而检测链路是否可用,这个方式比BFD速度会慢一些。