网络管理中,总希望当网络中一些关键链路或关键节点发生故障时能及时获得提示信息,并能自动进行相应的处理。BFD(双向转发检测)和NQA(网络质量分析)就能实现这样的功能。
BFD不仅可以检测直连链路(“单跳”)的故障,还可以检测非直连链路(“多跳”)的故障,还可以与多种功能进行联动,如与接口状态、静态路由、RIP路由、OSPF路由、IS-IS路由、BGP路由、VRRP等,在检测到故障后,上送到对应的上层应用模块进行快速处理。如与接口状态联动时会把相应的接口状态由Up转为Down;与路由联动可以使这些路由模块进行重新拓扑计算,实现快速网络收敛;与VRRP联动时可以快速切换到备用线路上。
NQA可以实时监视网络性能,在网络发生故障时进行故障诊断和定位。NQA支持DHCP测试、DNS测试、FTP测试、HTTP测试、ICMP测试、SNMP测试、TCP测试和Trace测试等。
NQA通过发送测试报文,对网络性能或服务质量进行分析,为用户提供网络性能参数。
BFD基础
BFD(Bidirectional Forwarding Detection,双向转发检测)用于快速检测系统之间的发送和接收两个方向的通信故障,并在出现故障时通知上层应用。与其他功能联动,联动是指使对应接口状态或者路由协议、VRRP等可根据BFD会话状态进行对应的接口状态改变、路由收敛和VRRP主备切换等。
一、BFD概述
在现有网络中,有些链路通常是通过硬件检测信号(如SDH告警)来检测链路故障,硬件检测速度快,但不是所有介质都能够提供硬件检测功能。有的依靠上层协议(如各种路由协议)自身的Hello报文机制来进行故障检测的,但检测时间在1s以上。
BFD是一种通用的、标准化的与介质和协议均无关的快速链路故障检测机制,可为各上层协议统一的快速检测两台路由器间(不一定是直接连接的)双向转发路径的故障。
二、BFD检测原理
BFD可在两台网络设备间建立用来监测设备间双向转发路径的BFD会话,为上层应用服务。BFD本身没有邻居发现机制,而是靠被服务的上层应用通知其邻居信息以建立会话。会话建立后会周期性的快速发送BFD报文,如果在检测时间内没有收到BFD报文则认为该双向路径发生了故障。
1、BFD会话建立流程
BFD会话建立有两种方式,即静态建立BFD会话和动态建立BFD会话。其主要区别在于本地标识符(Local Discrimination)和远端标识符(Remote Discrimination)的配置方式不同。标识符是用来标识对应BFD会话中本地和远端实体的数字标识,BFD通过控制报文中的本地标识符和远端标识符区分不同的BFD会话。这个“本地”和“远端”是相对的,本地配置的远端标识符就是对端配置的本地标识符,本地配置的本地标识符就是对端配置的远端标识符。
(1)静态建立BFD会话
静态建立BFD会话是指通过命令行手动配置BFD会话参数,包括配置本地标识符和远端标识符等,然后手工下发BFD会话建立请求。
建立静态BFD会话又包括两种方式
①手动指定标识符的静态BFD会话
必须手动指定BFD会话的本地标识符和远端标识符。
②标识符自协商的静态BFD会话
如果对端设备采用动态BFD,而本端设备既要与之互通,又要能够实现BFD检测静态路由,则必须配置静态标识符自协商BFD。这种BFD会话方式无需指定本地标识符和远端标识符。本端采用静态标识符自协商,对端既可以配置静态标识符自协商,也可配置动态BFD。
(2)动态建立BFD会话
动态BFD联动主要是由各种路由协议触发的。在建立动态BFD会话时,系统对本地标识符和远端标识符分别采用如下处理方式:
①动态分配本地标识符
当应用程序触发动态建立BFD会话时,系统分配本地动态会话标识符区域中可用的一个标识值作为本次BFD会话的本地标识符,然后向对端发送远端标识符的值为0的BFD控制报文(之所以采用0来标识远端标识符,是因为在静态标识符配置中0是保留不能配置的),进行会话协商。
②自动学习远端标识符
当BFD会话的另一端收到远端标识符的值为0的BFD控制报文,判断该报文是否与本地BFD会话匹配(查看0号标识符是否已被占用),如果匹配,则学习接收到的BFD本地标识符的值,以获取远端标识符,否则中断BFD会话。这种BFD会话方式主要用于与动态路由协议的联动中,并且同一时刻、同一链路只允许建立一组BFD会话。
如上图RouterA和RouterB上同时配置了OSPF和BFD,BFD会话建立的基本流程:
①A和B通过自己OSPF的Hello机制发现邻居并建立连接。
②OSPF建立好新的邻居关系后,将相应的邻居信息(包括邻居的IP和本设备的IP)通告给本设备的BFD功能模块。
③BFD根据收到的邻居信息与对应邻居开始会话建立过程,会话建立后,BFD才能开始检测链路状态,一旦出现故障可作出快速反应。
2、BFD检测机制
BFD的检测机制是先在两个系统间建立BFD会话,然后沿它们之间的路径周期性发送BFD控制报文,如果一方在既定时间内没有收到对方发来的BFD控制报文或自己发送的BFD报文返回(配置单臂回声功能时),则认为路径上发生了故障。
BFD提供两种检测模式:
①异步模式:BFD的主要操作模式为异步模式。这种模式下,系统之间相互周期性的单独发送BFD控制报文,如果某个系统在既定时间内没有收到对方发来的BFD报文,就认为此BFD会话的状态是Down。
②查询模式:当一个系统中存在大量BFD会话时,为防止周期性发送BFD控制报文的开销影响到系统的正常运行,可采用查询模式。在此模式下,一旦BFD会话建立,系统不再周期性发送BFD控制报文,而是通过其他与BFD无关的机制检测连通性,减少BFD会话带来的开销。
如上图,B检测到到达邻居A的链路出现了故障:
①通过OSPF的Hello机制,检测到链路出现故障(假设B与中间路由器之间的链路出现故障)
②B与A之间的BFD会话状态首先变为Down。
③B与A各自的BFD功能模块通知本地OSPF进程BFD邻居不可达。
④本地OSPF进程中断与对端设备的OSPF邻居关系,由OSPF协议进行重新拓扑计算,实现快速收敛。
3、BFD会话管理
BFD会话有4种状态:Down、Init、Up和AdminDown。会话状态的变化通过BFD报文的State字段传递,系统根据自己本地的会话状态和接收到的对端BFD报文驱动状态改变。BFD状态机的建立和拆除都采用三次握手机制,以确保两端系统都能知道状态的变化。
①A和B各自启动BFD状态机,初始状态为Down,发送状态为Down的BFD报文。对于静态配置BFD会话,报文中的远端标识符的值是用户指定的;对于动态创建BFD会话,远端标识符的值是0。
②B收到来自A的状态为Down的BFD报文后,状态切换至Init,并发送状态为Init的BFD报文,同时不再处理接收的状态为Down的BFD报文。同理,A在收到来自B的状态为Down的BFD报文后,状态也切换至Init,并发送状态为Init的BFD报文,也不再处理接收的状态为Down的BFD报文。
③B在收到来自A的状态为Init的BFD报文后,本地状态切换至Up;A在收到来自B的状态为Init的BFD报文后,本地状态切换至Up。
当发现故障时,源端首先会向对端发送AdminDown状态的BFD报文,对端在收到这个报文会发送状态为Down的BFD报文(表明自己已关闭BFD会话),同时关闭本端的BFD会话。源端在收到对端发来的状态为Down的BFD报文后,源端BFD状态也会变为Down,也会关闭自己的BFD会话。
(疑问:发生故障后,两个路由器之间还能发送BFD报文吗???)
BFD主要应用
AR G3系列支持的BFD特性主要包括:单跳和多跳检测、静态标识符自协商BFD、单臂回声功能、各种联动功能和BFD参数调整。
一、BFD检测IP链路
在IP链路上建立BFD会话,利用BFD检测机制快速检测故障。BFD检测IP链路支持单跳检测和多跳检测。
①BFD单跳检测是指对两个直连系统进行IP连通性检测,“单跳”是IP链路的一跳。
②BFD多跳检测是指BFD可以检测两个系统间的任意路径,这些路径可能跨越很多跳,也可能在某些部分发生重叠。
上图BFD检测两台设备之间的IP单跳路径,此时,BFD会话绑定本端的出接口,因为在直连情况下确定出接口后,相应要检测的到达对端设备的链路也就被唯一确定。
上图BFD检测RouterA和RouterC之间的IP多跳路径,此时BFD会话绑定对端IP,但不绑定本端出接口。因为这种非直连情况下,绑定出接口不能唯一确定要检测的对端设备(因为中间可能还有多个设备),只有绑定了要监测设备的IP,才能最终唯一确定要检测所到达的设备。
二、BFD单臂回声功能
单臂回声功能是指通过BFD报文的环回操作来检测转发链路的联通性,主要用于在两台直连的设备中只有一台支持BFD功能,另一台设备不支持BFD,但支持基本的网络层转发的情形下。这种单臂回声功能只适用于BFD单跳检测,且不支持二层设备间的链路检测。
在支持BFD功能的设备上配置单臂回声功能的BFD会话,主动发起回声请求功能,不支持BFD功能的设备接收到这样的BFD报文后会直接将其环回(只做环回转发,不做其他任何处理),从而实现转发链路的连通性检测。RouterB接收到RouterA发送的BFD报文后,直接在网络层将该报文环回。
三、BFD与各种路由的联动
BFD可以与静态路由、RIP路由、OSPF路由、IS-IS路由、BGP路由等进行联动。“联动”就是指当发现某条路由所通过的路径上某条链路发生故障时,快速的通知路由管理功能模块及时进行相应的处理,重新进行路由计算,以实现快速拓扑收敛。
除静态路由外,其他各种动态路由本身都有邻居故障检测机制,如利用Hello报文进行检测,但BFD检测效率更高,BFD与各种路由实现联动,是对这些路由的邻居检测机制的一种加强并不是取代。
1、BFD与静态路由联动
静态路由自身没有检测机制,BFD与静态路由联动特性可为公网路由绑定BFD会话,利用BFD会话来检测静态路由所在链路的状态。
BFD与静态路由联动可为每条静态路由绑定一个BFD会话(实际情况中,是为关键静态路由),当静态路由上绑定的BFD会话检测到链路故障(由Up转为Down)后,BFD会将故障上报路由器管理系统,由路由管理模块将这条路由设置为“非激活”状态(表明此条路由不可用,并从IP路由表中删除该路由,但在转发表FIB中仍然存在)。当这条静态路由上绑定的BFD会话成功建立或从故障状态恢复后(由Dwon转为Up),BFD又会上报路由管理模块,由路由管理模块将这条路由设置为“激活”状态(表明此路由可用,从FIB中重新加入IP路由表中)。
2、BFD与OSPF联动
BFD与OSPF联动就是将BFD和OSPF协议关联起来,通过BFD对链路故障的快速感应进而通知OSPF,加快网络拓扑变化。OSPF依靠自身的Hello Keepalive定时器超时来检测链路故障,通常是秒级,BFD则是毫秒级。
A分别与C和D建立OSPF邻居关系,A到B的路由出接口为Interface1,邻居状态到达FULL状态时通知BFD建立BFD会话。当A和C之间链路出现故障,BFD首先感知并通知A,A处理邻居Down事件,重新进行路由计算,新路由出接口为Interface2。
3、BFD与IS-IS联动
通常IS-IS设定发送Hello报文的时间间隔为10s,相邻设备失效的时间一般配置为Hello报文间隔的3倍。设备感知到邻居故障的时间最小也是秒级。
BFD与IS-IS联动指BFD会话由IS-IS协议动态创建。BFD检测到有故障时,通过路由管理模块通知IS-IS协议,由协议进行相应邻居Down处理,实现快速收敛。BFD并不是代替IS-IS协议本身的Hello机制,而是配合IS-IS协议更快发现邻居方面出现的故障。
4、BFD与BGP联动
BGP协议通过周期性的向对等体发送Keepalive报文实现邻居检测机制。故障发现秒级
A和B分别属于AS100和AS200,两台路由器直接相连并建立EBGP连接。使用BFD检测A和B之间的BGP邻居关系,当A和B之间的链路发生故障时,BFD能够快速检测到故障并通告给BGP协议。
四、BFD的其他联动
BFD还可以与接口状态、VRRP、组播PIM联动等。
1、BFD与接口状态联动
在BFD与接口状态联动中,BFD检测到链路故障后会立即上报Down消息到相应接口,使接口进入一种特殊的Down状态,即BFDDown状态。该状态等效于链路协议Down状态,在该状态下只可以处理BFD报文,从而使该接口也可以快速感知链路故障,向系统日志发出告警信息。
链路中间存在其他设备,一旦链路故障,两端设备需要较长时间才能检测到,收敛慢。如果在A和B上配置BFD会话的同时配置接口联动功能后,当BFD检测到链路出现故障会立即上报Down消息到相应接口,使接口进入BFD Down状态。
2、BFD与VRRP联动
VRRP(虚拟路由冗余协议)的关键点是当Master(主)设备出现故障时,Backup(备)设备能够快速接替Master的转发工作,尽量缩短数据流中断时间。
没采用联动前,当Master出现故障时,VRRP依靠Backup设置的超时时间来判断是否应该抢占。将BFD应用于Backup对Master的检测后,可实现对Master故障的快速检测。BFD对Backup和Master之间的实际地址通信情况进行检测,如通信不正常,Backup就认为Master不可用,自动升级为Master。
例如,当BFD检测到A和C之间的链路故障时,上报给VRRP一个BFD检测Down事件,B上VRRP备份组的优先级增加,优先级大于A上的VRRP备份组优先级,于是B立刻升为Master。
3、BFD与PIM联动
在PIM(协议相关模式)组播中,在没有采用BFD与PIM联动机制前,如果共享网段上的当前DR(Designate Router,指定路由器)出现故障,其他PIM邻居会等到邻居关系超时才会触发新一轮的DR竞选过程。
BFD与PIM联动可进行快速故障检测,能够在毫秒级内通知PIM模块触发新一轮DR竞选。BFD与PIM联动同时适用于共享网段上Assert(断言)竞选过程,可快速响应Assert Winner接口故障。
在与用户主机相连的共享网段上,C的下游接口interface1和D的下游接口Interface2之间建立PIM BFD会话,通过在链路两端发送BFD检测报文检测链路状态。
个人理解:通过前面的描述,BFD基本就是一个附件,可以附加到其他协议的一个附件,依靠自身的快速反应,将其他协议的状态以更快的速度通知给相应的其他协议,以促进其他协议以比其自身协议进行状态监控更快的进行状态调整。
BFD配置与管理
一、配置静态BFD单跳检测
单跳检测指检测两台直连设备间转发链路的IP连通性(就是三层连通性,但接口可以是二层的),通过配置静态BFD单跳检测,可实现直连链路的快速检测。
在配置静态BFD单跳检测前,需要配置接口的链路层协议参数,使接口的链路协议状态为Up。如果是三层接口,还需要为接口配置IP地址。对于二层接口和三层接口的单跳检测配置方法有些区别。
静态BFD单跳检测主要配置任务:
①使能设备上的全局BFD功能
②(可选)配置BFD缺省组播IP地址
③创建BFD会话的绑定信息,建立BFD组播会话
④配置BFD会话的本端和远端标识符
需要在直连设备两端同时配置
system-view
bfd 使能全局BFD功能,并进入BFD视图
default-ip-address [ip-address] 配置BFD缺省组播IP地址,范围224.0.0.107~224.0.0.250。仅当对端设备无法配置IP地址(如对端为二层设备)时采用。缺省组播IP为224.0.0.184
quit
bfd session-name bind peer-ip ip-address [vpn-instance vpn-name] interface interface-type interface-number [source-ip ip-address] 二选一,对于三层接口,创建检测IP连通性的BFD会话绑定信息,并进入BFD会话视图。peer-ip指定BFD会话绑定的对端IP地址;interface指定绑定BFD会话的本端接口类型和编号。单跳检测必须绑定对端IP地址和本端相应接口,多跳检测只需绑定对端IP地址;source-ip指定BFD报文携带的源IP地址,在BFD会话协商阶段,如果不配置该参数,系统将在本地路由表中查找去往对端IP地址的出接口,然后以该接口的IP作为本端发送BFD报文的源IP,在BFD会话检测链路阶段,如不配置该参数,系统会将BFD报文的源IP地址设置为一个固定的值。
bfd session-name bind peer-ip default-ip interface interface-type interface-number [source-ip ip-address] 二选一,对于二、三层接口和三层子接口,创建检测链路物理状态的BFD会话绑定,并进入BFD会话视图。peer-ip default-ip用来指定BFD会话绑定由default-ip-address [ip-address] 命令配置的缺省组播IP。
discriminator local discr-value 配置BFD会话的本地标识符,标识符用来区分两个系统之间的多个BFD会话。配置标识符时,本端的本地标识符与对端的远端标识符必须相同。本地标识符和远端标识符配置成功后不可修改。对于使用缺省组播IP地址的BFD会话,本地标识符和远端标识符不能相同。
discriminator remote discr-value 配置BFD会话的远端标识符。
commit 提交BFD会话配置。必须执行本命令后才能使配置生效。
二、配置静态BFD多跳检测
在配置BFD多跳检测之前,需要配置路由协议,以保证BFD会话两端的设备路由可达。
静态BFD多跳检测与静态单跳检测的不同体现在两个方面:一是不需要配置BFD缺省组播IP,因为多跳检测必须通过三层接口来实现,不能连接二层设备,这也就决定了对端设备接口必须是配置了IP的三层接口或子接口,不能是二层接口;二是在创建BFD会话绑定信息时仅需要指定绑定的对端IP,不需要指定本端出接口。
system-view
bfd 使能全局BFD功能
quit
bfd session-name bind peer-ip ip-address [vpn-instance vpn-name] [source-ip ip-address] 创建检测IP连通性的BFD会话绑定信息,并进入BFD会话视图。
discriminator local discr-value
discriminator remote discr-value
commit
三、配置静态标识符自协商BFD
如果对端设备采用动态BFD,而本端设备既要与之互通,又要能够实现BFD检测静态路由,则必须配置静态标识符自协商BFD。该功能主要用于检测采用静态路由实现三层互通的网络中。
在配置静态标识符自协商BFD之前需要为三层接口正确配置IP(相连的必须是三层接口)。
system-view
bfd 使能全局BFD功能
quit
bfd session-name bind peer-ip ip-address [vpn-instance vpn-name] [interface interface-type interface-number] source-ip ip-address auto 创建静态标识符自协商BFD会话,并进入BFD会话视图。关键字auto用来使能静态标识符自协商功能。在创建静态标识符自协商BFD会话时:必须配置源IP地址,必须指定明确的对端IP地址,不能使用组播IP地址。
commit
四、配置静态BFD单臂回声功能
实现快速检测并监控网络中的直连链路,但相连的必须是三层接口,在配置单臂回声功能之前要为三层接口正确配置IP地址。
①全局使能BFD功能
②建立静态单臂回声功能的BFD会话
③配置会话标识符
system-view
bfd 使能全局BFD功能
quit
bfd session-name bind peer-ip ip-address [vpn-instance vpn-name] interface interface-type interface-number [source-ip ip-address] one-arm-echo 创建静态标识符自协商BFD会话,并进入BFD会话视图。关键字one-arm-echo用来使能单臂回声功能的BFD会话。单臂回声功能的BFD会话只能应用在单跳检测中。单臂回声BFD也是静态标识符自协商。
commit
五、配置静态BFD与接口/子接口状态联动
当直连链路中存在传输设备时,与接口本身的链路协议故障检测机制相比,BFD能更快检测到链路故障。另外,对于Eth-Trunk或VLANIF等逻辑接口来说,链路协议状态是由其成员接口的链路状态决定的。因此,为了将BFD检测结果更快的通告给应用程序,在设备接口管理模块中为每个接口增加了一个属性,即BFD状态,即与该接口绑定的BFD会话状态。系统根据接口的链路状态、协议状态和BFD状态决定接口的最终状态,并将结果通告给应用程序。
静态BFD会话状态与接口状态联动功能是指当BFD会话的状态变化时,直接修改接口或子接口(可以是二层的,也可以是三层的)BFD状态。与接口或子接口状态联动的功能仅针对绑定了出接口,且使用缺省组播IP进行检测的单跳检测BFD会话,包括以下两方面:
1、BFD会话状态与其绑定的接口状态联动
当BFD会话状态变为Down时,与其绑定的接口的BFD状态变为Down,然后将接口状态通告给接口上的应用;当BFD会话的状态变为Up时,与其绑定的接口的BFD会话状态变为Up。
2、BFD会话状态与绑定接口的子接口状态联动
这种情况下,BFD会话绑定的接口也必须是主接口。当主接口的BFD会话状态变为Down时,与其绑定的主接口及其所有子接口的BFD状态都变为Down,然后通告给各子接口上的应用程序;当主接口的BFD会话状态恢复为Up时,与其绑定的主接口及其所有子接口的BFD会话状态恢复为Up。
静态BFD状态与接口/子接口状态联动的主要配置任务:
①使能全局BFD功能
②(可选)配置BFD缺省组播IP地址
③创建静态BFD会话标识符
④配置静态BFD会话标识符
⑤配置BFD会话与接口/子接口状态联动。
system-view
bfd 使能全局BFD功能,并进入BFD视图
default-ip-address [ip-address] 配置BFD缺省组播IP地址,范围224.0.0.107~224.0.0.250。缺省组播IP为224.0.0.184
quit
bfd session-name bind peer-ip default-ip interface interface-type interface-number [source-ip ip-address] 创建检测链路物理状态的BFD会话绑定,并进入BFD会话视图。peer-ip default-ip用来指定BFD会话绑定缺省组播IP地址,必须使用缺省组播IP地址进行绑定,且必须同时指定出接口(且必须是主接口)
discriminator local discr-value 配置BFD会话的本地标识符,标识符用来区分两个系统之间的多个BFD会话。
discriminator remote discr-value 配置BFD会话的远端标识符。
process-interface-status (与接口联动)
process-interface-status sub-if (与子接口联动) 只能对采用缺省组播IP地址检测的单跳BFD会话配置本命令,支持BFD会话绑定主接口或子接口
commit
六、调整BFD参数
调整BFD参数之前,需要完成对应情形下的BFD会话创建。可调的BFD参数包括BFD检测时间、BFD等待回复时间、BFD会话描述信息、BFD会话延迟Up功能和全局TTL功能。
system-view
bfd session-name 进入指定的BFD会话视图
min-tx-interval interval 配置BFD报文的发送间隔。10~2000ms。发送间隔直接决定了BFD会话的检测时间。
min-rx-interval interval 配置BFD报文的接收间隔,通常要小于发送间隔。
detect-multiplier multiplier 配置本地检测倍数。本端检测倍数直接决定了对端BFD会话的检测时间。检测时间=接收到的远端multiplier × max(本地的RMRI,接收到的DMTI),RMRI(Required Min Rx Interval)是本端能够支持的最短BFD报文接收间隔,通过min-rx-interval配置;DMTI(Desired Min Tx Interval)是本端想要采用的最短BFD报文的发送间隔,是通过min-tx-interval配置的。
wtr wtr-value 配置BFD会话的等待回复时间。当BFD会话从状态Down变为UP,BFD等待wtr超时后才将这个变化通知给上层应用,其他状态变化的事件仍立即上报,主要为了避免震荡。
description description
quit
bfd
delay-up time 配置BFD会话延迟Up的时间。实际中,一些设备只根据BFD会话是否Up来启动流量切换。由于路由协议UP的时间比接口UP的时间晚,可能导致流量回切时查不到路由,导致流量丢失,为避免这种情况,需要BFD回话在建立并协商Up之前通过本命令延迟一段时间。
peer-ip peer-ip mask-length ttl {single-hop | multi-hop} ttl-value 配置BFD报文的生存时间。
七、BFD管理
①display bfd interface [interface-typeinterface-number]:查看是能了BFD功能的指定接口或所有接口的信息。
②display bfd session {all | static |discriminator discr-value | dynamic | peer-ip {default-ip | peer-ip [vpn-instancevpn-instance-name]} | static-auto} [verbose]:查看符合指定条件或所有BFD会话信息。③display bfd statistics:查看BFD全局统计信息。
④display bfd statistics session { all | static |discriminator discr-value | dynamic | peer-ip {default-ip | peer-ip[vpn-instance vpn-instance-name]} | static-auto }:查看符合指定条件或所有BFD会话统计信息。
⑤reset bfd statistics {all | discriminiatordiscr-value}:清除指定标识符或者所有BFD会话的统计信息。
BFD 控制报文格式
BFD 控制报文封装在UDP 报文中传送,对于单跳检测其UDP 目的端口号为3784,对于多跳检测其UDP 目的端口号为4784 或3784。
BFD 控制报文根据场景不同封装不同。BFD 控制报文包括两部分:强制部分和可选的认证字段。不同的认证类型,认证字段的格式不同。
报文格式
BFD 控制报文强制部分的格式如下(RFC5880):
图1 强制部分的格式
字段 | 长度 | 含义 |
Version (Vers) | 3 bits | BFD 协议版本号,目前为1。 |
Diagnostic(Diag) | 5 bits | 诊断字,标明本地BFD系统最近一次会话状态发生变化的原因,取值及含义: 0 -- No Diagnostic 1 -- Control Detection Time Expired 2 -- Echo Function Failed 3 -- Neighbor Signaled Session Down 4 -- Forwarding Plane Reset 5 -- Path Down 6 -- Concatenated Path Down 7 -- Administratively Down 8 -- Reverse Concatenated Path Down 9-31 -- Reserved for future use
|
State(Sta) | 2 bits | BFD 本地状态。 0 -- AdminDown 1 -- Down 2 -- Init 3 -- Up |
Poll (P) | 1 bits | 参数发生改变时,发送方在BFD 报文中置该标志,接收方必须立即响应该报文。 · 1:表示发送系统请求进行连接确认,或者发送请求参数改变的确认。 · 0:表示发送系统不请求确认。 |
Final (F) | 1 bits | 响应P 标志置位的回应报文中必须将F 标志置位。 · 1:表示发送系统响应一个接收到P 比特为1 的BFD 包。 · 0:表示发送系统不响应一个P 比特为1 的包。 |
Control Plane Independent (C) | 1 bits | 转发/控制分离标志,一旦置位,控制平面的变化不影响BFD 检测,如:控制平面为IS-IS,当IS-IS 重启/GR 时,BFD 可以继续监测链路状态。 · 1:表示发送系统的BFD 实现不依赖于它的控制平面。即,BFD 报文在转发平面传输,即使控制 平面失效,BFD 仍然能够起作用。 · 0:表示BFD 报文在控制平面传输。 |
Authentication Present (A) | 1 bits | 认证标识,置1 代表会话需要进行验证。 |
Demand (D) | 1 bits | 查询请求,置位代表发送方期望采用查询模式对链路进行监测。 · 1:表示发送系统希望工作在查询模式。 · 0:表示发送系统不希望、或不能工作在查询模式。 |
Multipoint (M) | 1 bits | 为BFD 将来支持点对多点扩展而设的预留位。 |
Detect Mult | 8 bits | 检测超时倍数,用于检测方计算检测超时时间。 · 查询模式:采用本地检测倍数。 · 异步模式:采用对端检测倍数。 |
Length | 8 bits | 报文长度,单位为字节。 |
My Discriminator | 32 bits | BFD 会话连接本地标识符。发送系统产生的一个唯一的、非0 鉴别值,用来区分一个系统的多个BFD 会 话。 |
Your Discriminator | 32 bits | BFD 会话连接远端标识符。从远端系统接收到的鉴别值,这个域直接返回接收到的“My Discriminator”, 如果不知道这个值就返回0。 |
Desired Min TX Interval | 32 bits | 本地支持的最小BFD 报文发送间隔,单位为微秒。 |
Required Min RX Interval | 32 bits | 本地支持的最小BFD 报文接收间隔,单位为微秒。 |
Required Min Echo RX Interval | 32 bits | 本地支持的最小Echo 报文接收间隔,单位为微秒(如果本地不支持Echo 功能,则设置0) |
|
|
|
图2 BFD 控制报文可选部分的格式
字段 | 长度 | 含义 |
Auth Type | 8 bits | BFD 控制报文使用的认证类型。不同值表示的认证类型如下: 0 - Reserved 1 - Simple Password 2 - Keyed MD5 3 - Meticulous Keyed MD5 4 - Keyed SHA1 5 - Meticulous Keyed SHA1 6-255 - Reserved for future use |
Auth Len | 8 bits | 认证字段的长度,包括认证类型与认证长度字段,单位为字节。 |
Authentication Data | Variable | 认证字段净荷。 如果A 比特位置1 且认证类型值为1(Simple Password),则认证字段格式如下: · Auth Type:认证类型,对于简单密码认证,值为1。 · Auth Len:认证字段长度,对于简单密码认证,长度等于密码长度+3。 · Auth Key ID:该报文使用的认证秘钥ID,该值允许同时激活多个秘钥。 · Password: 密码值,是个二进制字符串,长度为1~16 字节。 如果A 比特位置1 切认证类型值为2(Keyed MD5)或3(Meticulous Keyed MD5),则认证字段格式如 下: · Auth Type:认证类型,值为2 (Keyed MD5)或3 (Meticulous Keyed MD5)。 · Auth Len:认证字段长度,对于Keyed MD5 和Meticulous Keyed MD5 认证,长度值为24。 · Auth Key ID:该报文使用的认证秘钥ID,该值允许同时激活多个秘钥。 · Reserved:在传输过程中,该值必须为0,接收端接收时忽略此字段。 · Sequence Number: 报文顺序号。对于Keyed MD5 认证,该值随机增加,对于Meticulous Keyed MD5 认证,同一个会话中的报文按顺序逐渐增加。该值用于预防重放攻击。 · Auth Key/Digest: 该字段携带16 字节MD5 摘要信息。当MD5 摘要被计算后,该字段填的是MD5 共享秘钥,并按需尾填充16 字节的0。 如果A 比特位置1 切认证类型值为4(Keyed SHA1)或5(Meticulous Keyed SHA1),则认证字段格式 如下: · Auth Type:认证类型,值为4 (Keyed SHA1)或5 (Meticulous Keyed SHA1)。 · Auth Len:认证字段长度,对于Keyed SHA1 和Meticulous Keyed SHA1 认证,长度为28。 · Auth Key ID:该报文使用的认证秘钥ID,该值允许同时激活多个秘钥。 · Reserved:在传输过程中,该值必须为0,接收端接收时忽略此字段。 · Sequence Number: 报文顺序号。对于Keyed SHA1 认证,该值随机增加,对于Meticulous Keyed SHA1 认证,同一个会话中的报文按顺序逐渐增加。该值用于预防重放攻击。 · Auth Key/Digest: 该字段携带20 字节SHA1 哈希值。当hash 被计算后,,该字段填的是SHA1 共享秘钥,并按需尾填充20 字节的0。 |
BFD配制示例
一、单跳检测二层链路配置示例
A和B通过二层接口连通。
仅需在A和B上分别配置BFD会话,实现A和B间链路的检测。因为是通过二层接口相连的单跳检测,所以需要配置缺省的BFD组播IP地址,同时在创建BFD会话绑定时一定要指定出接口。
1、RouterA上的配置
①使能RouterA上的全局BFD功能
<Huawei>system-view
[Huawei]sysname RouterA
[RouterA]bfd
[RouterA-bfd]quit
②配置RouterA上的BFD会话。注意同时配置缺省BFD组播地址和指定出接口。此处采用的缺省BFD组播IP地址224.0.0.184。
[RouterA]bfd atob bind peer-ip default-ip interface Ethernet 2/0/0 !—创建一个名为atob的BFD会话绑定信息
[RouterA-bfd-session-atob]discriminator local 1 !—本地标识符为1,与RouterB上配置的远端标识符一致
[RouterA-bfd-session-atob]discriminator remote 2 !--配置远端标识符2,与B上配置的本地标识符一致
[RouterA-bfd-session-atob]commit
[RouterA-bfd-session-atob]quit
2、RouterB上的配置
①使能RouterB上的全局BFD功能
<Huawei>system-view
[Huawei]sysname RouterB
[RouterB]bfd
[RouterB-bfd]quit
②配置RouterB上的BFD会话。一样要配置缺省BFD组播地址和指定出接口。此处采用的缺省BFD组播IP地址224.0.0.184。
[RouterB]bfd btoa bind peer-ip default-ip interface Ethernet 2/0/0
[RouterB-bfd-session-btoa]discriminatorlocal 2
[RouterB-bfd-session-Btoa]discriminator remote 1
[RouterA-bfd-session-btoa]commit
[RouterA-bfd-session-btoa]quit
配置好后在RouterA和RouterB上执行display bfd session all verbose
eNSP试验:
因为是二层接口上配置,在模拟器中需增加接口卡:
抓包:
BFD的三次握手,Down、Init和Up。
AR2的MAC地址:00e0-fc8d-63de,AR1的MAC地址:00e0-fc02-36fe
修改配置:
三次握手跟前面的示意图有些区别的,A方发送Down报文,B方接收到,变为Init,发送Init到A方,A方变为Up,在发送一个Up到B,B变为Up。
二、VLANIF接口BFD单跳检测配置示例
A和B通过VLANIF接口实现互通。因为是检测三层VLANIF接口的状态,创建BFD会话绑定信息时要绑定对端的IP(不使用BFD组播IP地址),因为是单跳检测,所以要指定出接口。首先要把直连的两个物理接口加入对应的VLAN中,然后为两端VLANIF接口配置IP地址(通常直连两端是采用同一网段IP地址的)。
A的配置
B的配置:
三、BFD多跳检测配置示例
A和C为非直连设备,通过配置静态路由互通。因为A和C不是直连,所以需要配置BFD多跳检测,在A和C上分别配置BFD会话,以实现A到C间多跳路径的检测。
四、BFD状态与接口状态联动配置示例
RouterA和RouterB网络层直连,链路中间在二层传输设备SwitchA和SwitchB。希望两端设备能够快速感知到链路故障。
两个路由器中间是两台二层交换机,所以两个路由器与交换机连接的接口必须是二层的,必须把它们加入对应的VLAN中。然后在RouterA和RouterB上分别配置BFD会话,以实现RouterA和RouterB间链路的检测,当BFD会话状态Up以后分别在RouterA和RouterB上配置BFD状态与接口状态联动。
这是使用的是路由器的二层的接口,正常应该配置接口的类型,所属的VLAN,为了简单,直接采用默认,即都使用VLAN1,连上线缆,就能联通。配置vlanif1的地址是为了验证接口是联通的。
可以看出同两台设备接口直连配置一样。
建立了一个单跳的BFD Session,状态为Up,但是“Proc interface status”字段显示为“Disable”,表明还没配置process-interface-status命令(如果已配置该命令,则显示为Eanble)
“Process PST:Disable”表示没有通过Process-pst命令使能系统在BFD会话状态变化时修改端口状态表PST功能。如果允许BFD修改端口状态表PST(Port State Table),当检测到BFD会话状态变为Down时,系统将更改PST中相应表项。
然后分别在RouterA和RouterB上配置BFD状态与接口状态联动。
在LSW2上将G0/0/1接口shutdown掉,则如下
相应接口的状态也改变了,但是关键是LSW2的G0/0/1接口恢复后,BFD无法恢复了,因为相应接口一直处于BFD status down状态。如何解除这个状态,还是模拟器有问题,实际应该链路恢复后,BFD也应该恢复???
五、单臂回声功能配置示例
RouterA和RouterB通过直连链路连通,RouterA支持BFD功能,RouterB不支持BFD功能。
仅需在RouterA上配置单臂回声功能BFD会话,就可以实现检测RouterA和RouterB的直连链路。但要注意,单臂回声功能仅适用于单跳检测功能,而且必须是在通过三层接口直接相连的两台设备间使用。
对于单臂回声功能,数据包源IP和目的IP相同,如此例都是10.1.1.1
NQA配置与管理
NQA(Network Quality Analysis,网络质量分析)是系统提供的一个特性,位于链路层之上,覆盖网络层、传输层和应用层,独立于底层硬件,可实时监视网络性能状况,在网络发生故障时进行故障诊断和定位。
一、NQA综述
NQA通过发送测试报文,对网络性能和服务质量进行分析,为用户提供网络性能参数。如:HTTP总时延、TCP连接时延、DNS解析时延、文件传输速率、FTP连接时延、DNS解析错误率等。
在NQA测试中,把测试两端称为客户端和服务器端(或称为源端和目的端),并由客户端(源端)发起测试。在客户端通过命令行配置测试例或由网管端发送相应测试例操作后,NQA把相应的测试例放入测试例队列中进行调度。
启动NQA测试例,可选择立即启动、延迟启动、定时启动。在定时器的时间到达后,则根据测试例的测试类型,构造符合相应协议的报文。但配置的测试报文的大小如果无法满足发送本协议报文的最小尺寸,则按照本协议规定的最小报文尺寸来构造报文发送。
测试例启动后,根据返回的报文,可以对相关协议的运行状态提供数据信息。发送报文时的时间作为测试报文的发送时间,并给报文打上时间戳,再发送给服务器端。服务器端接收报文后,返回给客户端相应的回应信息,客户端在接收到报文时,再一次读取系统的时间,给报文加上时间戳。根据报文的发送和接收时间,计算出报文的往返时间。
AR G3系列支持的NQA测试例包括DHCP测试、DNS测试、FTP测试、HTTP测试、ICMP测试、SNMP测试、TCP测试、Trace测试、UDP测试、UDP Jitter测试、基于接口板发包的UDP Jitter测试、LSP Ping测试和LSP Trace测试。
Jitter测试例,不仅客户端需要给报文加时间戳,服务器端在接收到报文和发送报文时,也要读取自己的本地系统时间,再加上时间戳,从而能够计算出抖动时间。
NQA实现了与VRRP、静态路由、备份接口和策略路由的联动。
二、ICMP NQA测试基本原理
NQA的ICMP测试例用于检测源端到目的端的路由是否可达,可与许多其他功能联动,如与VRRP、静态路由、备份接口和策略路由的联动等。ICMP 测试提供类似于普通命令行下的Ping命令功能,但输出信息更为丰富。默认能够保存最近5次的测试结果。结果中能够显示平均时延、丢包率、最后一个报文正确接收的时间的信息。
ICMP测试的过程:
①源端(RouterA)端向目的端(RouterB)发送构造的ICMP Echo Request报文。
②目的端(RouterB)在收到报文后,直接回应ICMP Echo Reply报文给源端(RouterA)
③源端(RouterA)收到报文后,通过计算源端(RouterA)接收时间和源端(RouterA)发送时间差,计算出源端到目的端的通信时间,从而清晰反应出网络性能。如没有收到ICMP Echo Reply报文则表示目的端不可达。据此判断监测的链路故障,可通告对应功能模块及时作出相应的处理。
三、配置ICMP NQA测试
在配置ICMP测试之前,需要NQA客户端与被测试设备间路由可达。ICMP NQA测试的基本配置思想包括三个方面:一是创建一个NQA测试例,然后配置测试例类型为ICMP,最后配置测试例的IP地址。
system-view
nqa test-instance admin-name test-name 创建NQA测试例,并进入测试例视图。admin-name创建进行NQA测试的管理员账户,test-name配置NQA测试例的测试例名称。
test-type icmp 配置测试例类型为ICMP NQA。
destination-address ipv4 ipv4-address 配置NQA测试例的目的IP地址。
description string
frequency interval 配置NQA测试例自动执行测试的时间间隔。
timeout time 配置一次探测的超时时间。
source-interface interface-type interface-number 配置NQA测试例的源端接口(必须是已经配置IP地址的接口)
source-address ipv4 ipv4-address 配置NQA测试的源端的IPv4地址,相当于ping命令中的“-a”选项
ttl number 配置NQA测试例测试报文的TTL值,相当于ping中的“-h”
datasize size 配置NQA测试例的报文数据区大小,相当于ping中的“-s”。
datafill fillstring 配置填充字符,相当于ping中的“-p”
sendpacket passroute 配置NQA测试例不查找路由表发送报文,此时会造成同时配置的ttl或ip-forwarding命令无效。
probe-count number 配置NQA测试例的一次测试探针数目。
tos value 配置NQA测试报文的服务类型
fail-percent percent 测试失败百分比,用来判断某次测试是否失败
interval seconds interval 配置测试报文的发送间隔,相当于ping中的“-m”
vpn-instance vpn-name 配置NQA测试例的VPN实例名
records history number 配置NQA测试的最大历史记录数目
records result number 配置NQA测试的最大测试结果记录数目。
agetime hh:mm:ss 配置测试例的老化时间
ip-forwarding 配置头结点强制走IP转发。
nexthop ipv4 ip-address 配置测试例的下一跳IPv4地址。
start now [end { at [yyyy/mm/dd] hh:mm:ss | delay { seconds second | hh:mm:ss} | lifetime {seconds second | hh:mm:ss}}] 三选一,立即启动NQA测试例
start at [yyyy/mm/dd] hh:mm:ss [end { at [yyyy/mm/dd] hh:mm:ss} | lifetime {seconds second | hh:mm:ss}}] 在指定时刻启动NQA测试例
start delay {seconds second | hh:mm:ss } [end {at [yyyy/mm/dd | delay {seconds second | hh:mm:ss} | lifetime {seconds second | hh:mm:ss}]}] 延迟指定时间后启动NQA测试例
restart 重新启动NQA测试例
四、ICMP NQA测试管理
①display nqa application:查看NQA客户端与业务对应的NQA测试例类型。
②display nqa-parameter:查看NQA客户端当前测试例的参数配置信息。
③display nqa support-server-type:查看NQA客户端支持的服务器类型
④display nqa support-test-type:查看NQA客户端支持的测试例类型
⑤display nqa-agent:查看NQA测试的客户端状态和配置信息。
⑥display nqa-server:在NQA服务器端查看服务器信息
⑦display nqa results [collection | success |failed ][test-instance admin-name test-name]:查看所有或指定的NQA测试例的NQA测试结果信息。
⑧display nqa history [test-instanceadmin-name test-name] [from start-date start-time to end-date end-time]:查看所有或指定NQA测试例的NQA测试的历史统计信息。
⑨clear-records:清除NQA测试例的统计信息
⑩reset ip nqa-compatible responder statistics:清除设备收到第三方设备或网管软件发送的NQA握手报文的统计信息。
五、ICMP NQA测试配置示例
A作为NQA客户端(Client),现在要测试B(作为NQA服务器端)是否可达
关于ICMP报文:
有很多情况都会发送ICMP 消息,例如,报文无法发送到目的地址,再如,网关设备没有足够的缓存来存储转发报文。
ICMP 消息封装在IP 报文中,格式如下:
ICMP 消息头部格式如下:
图2 ICMP 消息头部格式
其中,最后一个字段的长度和内容,取决于消息的类型和代码。对应的列表如下:
表1 ICMP 消息类型代码对应表
类型type | 代码code | 描述 |
0 | 0 | 回显应答(ping 应答) |
3 | 0 | 网络不可达 |
3 | 1 | 主机不可达 |
3 | 2 | 协议不可达 |
3 | 3 | 端口不可达 |
3 | 4 | 需要进行分片但设置不分片比特 |
3 | 5 | 源站选路失败 |
3 | 6 | 目的网络不认识 |
3 | 7 | 目的主机不认识 |
3 | 8 | 源主机被隔离(作废不用) |
3 | 9 | 目的网络被强制禁止 |
3 | 10 | 目的主机被强制禁止 |
3 | 11 | 由于TOS,网络不可达 |
3 | 12 | 由于TOS,主机不可达 |
3 | 13 | 由于过滤,通信被强制禁止 |
3 | 14 | 主机越权 |
3 | 15 | 优先权中止生效 |
4 | 0 | 源端被关闭 |
5 | 0 | 对网络重定向 |
5 | 1 | 对主机重定向 |
5 | 2 | 对服务类型和网络重定向 |
5 | 3 | 对服务类型和主机重定向 |
8 | 0 | 请求回显(ping 请求) |
9 | 0 | 路由器通告 |
10 | 0 | 路由器请求告 |
11 | 0 | 传输期间生存时间为0 |
11 | 1 | 在数据报组装期间生存时间为0 |
12 | 0 | 坏的IP 首部 |
12 | 1 | 缺少必须的选项 |
13 | 0 | 时间戳请求(作废不用) |
14 | 0 | 时间戳应答(作废不用) |
15 | 0 | 信息请求(作废不用) |
16 | 0 | 信息应答(作废不用) |
17 | 0 | 地址掩码请求 |
18 | 0 | 地址掩码应答 |
4.3.2 ICMP Echo Request/Reply 消息格式
报文格式
图1 ICMP Echo Request/Reply 消息格式
字段 | 长度 | 含义 |
Type | 1字节 | 消息类型: · 0:回显应答报文 · 8:请求回显报文 |
Code | 1字节 | 消息代码,此处值为0。 |
Checksum | 2字节 | 检验和。 |
Identifier | 2字节 | 标识符,发送端标示此发送的报文 |
Sequence Number | 2字节 | 序列号,发送端发送的报文的顺序号。每发送一次顺序号就加1。 |
Data | 可变 | 选项数据,是一个可变长的字段,其中包含要返回给发送者的数据。回显应答通常返回与所收到的数据完全 相同的数据。 |
|
|
|
4.3.3 ICMP 目的不可达消息格式
报文格式
图1 ICMP 目的不可达消息格式
字段 | 长度 | 含义 |
Type | 1字节 | 消息类型,此处值为3。 |
Code | 1字节 | 消息代码: · 0 = net unreachable;网络不可达 · 1 = host unreachable;主机不可达 字段 长度 含义 · 2 = protocol unreachable;协议不可达 · 3 = port unreachable; 端口不可达,Tracert 时发送的ICMP 报文即为此类。 · 4 = fragmentation needed and DF set;需要进行分片但设置不分片比特 · 5 = source route failed.源站选路失败 · 6 = Destination network unknown 目的网络不认识 · 7 = Destination host unknown 目的主机不认识 · 8 = Source host isolated (obsolete)源主机被隔离(作废不用) · 9 = Destination network administratively prohibited 目的网络被强制禁止 · 10 = Destination host administratively prohibited 目的主机被强制禁止 · 11 = Network unreachable for TOS 由于TOS,网络不可达 · 12 = Host unreachable for TOS 由于TOS,主机不可达 · 13 = Communication administratively prohibited by filtering 由于过滤,通信被强制禁止 · 14 = Host precedence violation 主机越权 · 15 = Precedence cutoff in effect 优先权中止生效 |
Checksum | 2字节 | 检验和。 |
Unused | 4字节 | 未使用,必须填0。 |
Internet Header+64 bits of Original Data Datagram | 可变 | IP 首部+原始数据包的前8 字节: · IP 首部:如果IP 首部没有选项字段时为20 字节 · 原始数据包的前8 字节:UDP 首部的8 字节或者TCP 首部的8 字节。 该数据是主机用来匹配消息。对于更高层协议的用户端口号,原始数据包的前64 比特的这些数据会被重组。 |
4.3.4 ICMP 重定向消息格式
报文格式
图1 ICMP 重定向消息格式
字段 | 长度 | 含义 |
Type | 1字节 | 消息类型,此处值为5。 |
Code | 1字节 | 消息代码: · 0 = Redirect datagrams for the Network · 1 = Redirect datagrams for the Host. · 2 = Redirect datagrams for the Type of Service and Network. · 3 = Redirect datagrams for the Type of Service and Host. |
Checksum | 2字节 | 检验和。 |
Gateway Internet Address | 4字节 | 即原始数据包里的IP 目的地址域。 |
Internet Header+64 bits of Original Data Datagram | 可变 | IP 头和原始数据包的前64 比特数据。该数据是主机用来匹配消息。对于更高层协议的用户端口号,原始数据包的前64 比特的这些数据会被重组。 |
4.3.5 ICMP 超时消息格式
报文格式
图1 ICMP 超时消息格式
字段 | 长度 | 含义 |
Type | 1字节 | 消息类型,此处值为3。 |
Code | 1字节 | 消息代码: · 0 = time to live exceeded in transit · 1 = fragment reassembly time exceeded |
Checksum | 2字节 | 检验和。 |
Internet Header+64 bits of Original Data Datagram | 可变 | IP 头和原始数据包的前64 比特数据。该数据是主机用来匹配消息。对于更高层协议的用户端口号,原始数 据包的前64 比特的这些数据会被重组。 |
4.3.6 ICMP 参数问题消息格式
报文格式
图1 ICMP 参数问题消息的格式
字段 | 长度 | 含义 |
Type | 1字节 | 消息类型,此处值为12。 |
Code | 1字节 | 消息代码: · 0 = pointer indicates the error. |
Checksum | 2字节 | 检验和。 |
Pointer | 1字节 | 标识出报文中出现错误地方的8 位片偏移量。 |
Internet Header+64 bits of Original Data Datagram | 可变 | IP 头和原始数据包的前64 比特数据。该数据是主机用来匹配消息。对于更高层协议的用户端口号,原始数 据包的前64 比特的这些数据会被重组。 |
4.3.7 ICMP 源端被关闭消息格式
报文格式
图1 ICMP 源端被关闭消息格式
字段 | 长度 | 含义 |
Type | 1字节 | 消息类型,此处值为4。 |
Code | 1字节 | 消息代码,此处值为0。 |
Checksum | 2字节 | 检验和。 |
Internet Header+64 bits of Original Data Datagram | 可变 | IP 头和原始数据包的前64 比特数据。该数据是主机用来匹配消息。对于更高层协议的用户端口号,原始数 据包的前64 比特的这些数据会被重组。 |