我们接着《网络体检技术大揭秘》的上篇聊。在上篇中我们介绍了网络体检的必要性,并提前和大家剧透了下我们将从OSI七层网络模型或TCP/IP模型的二三层分别和大家一起认识一些标准的、主流的网络体检手段,接着给大家展示了一种名曰EFM的二层体检手段。
记忆力好的同学应该能猜到我们今天要讲点啥,因为我们在上篇中用一个表格给大家展示了两种二层体检手段的异同。没错,上篇的EFM应用范围属于链路级,所以也比较简单。
今天打算和大家一起认识的这位大兄弟能耐比EFM高,它的应用范围属于网络级的,也就是所整个二层网络(不管有多大,只要是二层的就行)它都能搞定。NB的人物必须配备NB的接待规格,NB的技术我们就单设个中篇来描述,也算是一种对NB技术的致敬吧~
2. CFD技术
(1) 概念介绍
· MD
MD(Maintenance Domain,维护域)是指连通错误检测所覆盖的一个网络或网络的一部分,它以"MD名称"来标识。
为了准确定位故障点,在MD中引入了级别(层次)的概念。MD共分为八级,用整数0~7来表示,数字越大级别越高,MD的范围也就越大。不同MD之间可以相邻或嵌套,但不能交叉,且嵌套时只能由高级别MD向低级别MD嵌套,即低级别MD必须包含在高级别MD内部。低级别MD的CFD PDU进入高级别MD后会被丢弃;高级别MD的CFD PDU则可以穿越低级别MD;相同级别的MD的CFD PDU不可以互相穿越。
图4 MD嵌套示意图
在实际应用中,要对MD进行合理规划:如图4所示,有MD_A和MD_B两个MD,MD_B嵌套在MD_A中,要在MD_A中进行连通性检测,就要求MD_A的CFD PDU能够穿越MD_B,因此需要将MD_A的级别配置得比MD_B高。这样,MD_A的CFD PDU就可以穿越MD_B,从而实现了整个MD_A的连通性故障管理,而MD_B的CFD PDU则不会扩散到MD_A中。
· MA
MA(Maintenance Association,维护集)是MD的一部分,一个MD可划分为一个或多个MA。MA以"MD名称+MA名称"来标识。
一个MA服务于一个VLAN,MA中的MP所发送的报文都带有该VLAN的标签,同时MA中的MP可以接收由本MA中其它MP发来的报文。
· MP
MP(Maintenance Point,维护点)配置在接口上,属于某个MA,可分为MEP(Maintenance association End Point,维护端点)和MIP(Maintenance association Intermediate Point,维护中间点)两种。
· MEP
MEP确定了MA的边界,它以"MEP ID"来标识。
MEP所属的MA确定了该MEP发出的报文所属的VLAN;MEP的级别等于其所属MD的级别,MEP发出的报文的级别等于该MEP的级别。MEP的级别决定了其所能处理的报文的级别:当MEP收到高于自己级别的报文时不会进行处理,而是将其按原有路径转发;而当MEP收到小于等于自己级别的报文时才会进行处理。需要注意的是,本段是针对同一VLAN内的报文处理方式进行描述,不同VLAN内的报文之间是相互隔离的,不会相互影响。
MEP具有方向性,分为内向MEP和外向MEP两种:
- 内向MEP通过除其所在的接口以外的所有接口向外发送CFD PDU,即在其所属MA所服务的VLAN中进行广播。
- 外向MEP则直接通过其所在的接口向外发送CFD PDU。
· MIP
MIP位于MA的内部,不能主动发出CFD PDU,但可以处理和响应CFD PDU。MIP可以配合MEP完成类似于ping和tracert的功能。当MIP收到不等于自己级别的报文时不会进行处理,而是将其按原有路径转发;只有当MIP收到等于自己级别的报文时才会进行处理。
图5 CFD的分级配置
图5所示为CFD的一种分级配置方式,图中共有0、2、3、5四个级别的MD,标识号较大的MD的级别高、控制范围广;标识号较小的MD的级别低、控制范围小。在Device A~Device F的各接口上配置了MP,譬如Device B的接口Ethernet1/1上配置有:级别为5的MIP、级别为3的内向MEP、级别为2的内向MEP和级别为0的外向MEP。
(2) 协议报文
CFD的协议报文被称为CFD PDU。不同的CFD PDU具有相同的报文头,通过头部的类型字段来区分报文类型。
图6 CFD PDU报文格式示意图
图6所示为CFD PDU的报文格式和常见的CFD PDU,CFD PDU中重要字段的含义如表4所示。
表4 CFD PDU重要字段含义
表5和表6对常见CFD PDU的类型、目标MAC地址、用途等给大家做了个直观的展示。
表5 常见的CFD PDU表6 组播地址中x和y的取值
表6 组播地址中x和y的取值
(3) 连续性检测功能
MEP之间的连通失败可能由设备故障或配置错误造成,连续性检测(Continuity Check,CC)功能就是用来检测MEP之间的连通状态。该功能的实现方式是:由MEP周期性地发送CCM PDU,相同MA的其它MEP接收该报文,并由此获知远端状态。若MEP在3.5个CCM PDU发送周期内未收到远端MEP发来的CCM PDU,则认为链路有问题,会输出日志报告。当MD中的多个MEP在发送CCM PDU时,就实现了多点到多点之间的链路检测。
CCM PDU中时间间隔域(Interval域)的值、CCM PDU的发送间隔和远端MEP的超时时间这三者之间的关系如表7所示。
(4) 环回测试功能
环回测试(Loopback,LB)功能类似于IP层的ping功能,用于验证源MEP与目标MP之间的连接状态。该功能的实现方式是:由源MEP发送LBM PDU给目标MP,并根据能否收到对端反馈的LBR PDU来检验链路状态。
图7 环回测试示意图
如图7所示,在Device A与Device C之间进行环回测试的过程如下:
- Device A向Device C发送LBM PDU,其中携带有该报文的发送时间;
- Device C收到该报文后,回复LBR PDU给Device A,其中携带有LBM PDU的发送和接收时间,以及LBR PDU的发送时间。
在超时时间内,如果Device A收到了Device C回应的LBR PDU,则可以根据其中携带的时间信息算出Device A到Device C的网络时延;否则,便认为Device A到Device C不可达。此外,通过连续发送多个LBM PDU并观察LBR PDU的返回情况,还可以了解网络的丢包情况。
(5) 链路跟踪功能
链路跟踪(Linktrace,LT)功能类似于IP层的tracert功能,用于确定源MEP到目标MEP的路径,其实现方式是:由源MEP发送LTM PDU给目标MEP,目标MEP及LTM PDU所经过的MIP收到该报文后,会发送LTR PDU给源MEP,源MEP则根据收到的LTR PDU来确定到目标MEP的路径。
图8 链路跟踪示意图
如图8所示,在Device A与Device C之间进行链路跟踪的过程如下:
- Device A向Device C发送LTM PDU,其中携带有TTL值和目标MEP的MAC地址;
- Device B收到该报文后,先将其TTL值减1,再继续转发给Device C,并回复LTR PDU给Device A,其中也携带有TTL值(等于Device A发送来的LTM PDU中的TTL值减1);
- Device C收到该报文后,回复LTR PDU给Device A,其中也携带有TTL值(等于Device B转发来的LTM PDU中的TTL值再减1)。由于根据LTM PDU中携带的目标MEP的MAC地址,Device C可以判断出自己就是目标MEP,因此不会再转发该报文。
如果Device A到Device C之间的路径有故障,则故障点下游的设备将无法收到LTM PDU,也不会回复LTR PDU,据此可判定故障点的位置。例如,若Device A能收到Device B回复的LTR PDU,但收不到Device C回复的LTR PDU,就可以判定Device B和Device C之间的路径有故障。
(6) 告警抑制功能
告警抑制功能是ITU-T Y.1731基于CFD定义的扩展功能,用来减少MEP故障告警的数量。如果MEP在3.5个CCM PDU发送周期内未收到远端MEP发来的CCM PDU,便立刻开始周期性地发送AIS(Alarm Indication Signal,告警指示信号) PDU,该报文的发送方向与CCM PDU相反。其它MEP在收到AIS PDU后,会抑制本端的故障告警,并继续发送AIS PDU。此后,如果MEP收到了CCM PDU,便停止发送AIS PDU并恢复故障告警。
图9 告警抑制示意图
如图9所示,告警抑制的触发过程如下:
- 当Device B和Device C之间的链路出现故障,Device B和Device C之间的连续性检测失败,向用户发出故障告警信息;
- 检测到故障后,Device B向Device A发送AIS PDU,而Device C则向Device D发送AIS PDU;
- Device A和Device D收到AIS PDU后,都进入告警抑制状态。此后,如果Device A和Device D之间的连续性检测失败,将不再向用户发出故障告警信息。
AIS PDU的缺省发送周期为1秒,由于告警抑制功能可以配置很多发送VLAN,而报文发送数量过多将对设备CPU造成负担,因此在这种情况下可将AIS PDU的发送周期调整为1分钟,从而减少报文发送数量。
(7) 单向丢包测试功能
单向丢包测试(Loss Measurement,LM)功能用来检测MEP之间的单向丢包情况,其实现方式是:由源MEP发送LMM(Loss Measurement Message,丢包测试报文) PDU给目标MEP,目标MEP收到该报文后,会发送LMR(Loss Measurement Reply,丢包测试应答) PDU给源MEP,源MEP则根据两个连续的LMR PDU来计算源MEP和目标MEP间的丢包数,即源MEP从收到第二个LMR PDU开始,根据本LMR PDU和前一个LMR PDU的统计计数来计算源MEP和目标MEP间的丢包数。
源MEP发送LMM PDU时会填充当前接口的发包统计计数TxFCf,目标MEP收到该报文后,会获取当前接口的收发包统计计数,并向源MEP回应。LMR PDU中携带以下统计值:
- TxFCf:从收到的最后一个LMM PDU中的TxFCf字段复制而来。
- RxFCf:收到最后一个LMM PDU时,当前接口的收包统计计数。
- TxFCb:发送LMR PDU时,当前接口的发包统计计数。
源MEP收到LMR PDU后(至少需要两次报文交互过程),进行丢包统计的计算公式如下:
- 远端丢包数=|TxFCb[tc] – TxFCb[tp]| – |RxFCb[tc] – RxFCb[tp]|
- 本端丢包数=|TxFCf[tc] – TxFCf[tp]| – |RxFCl[tc] – RxFCl[tp]|
其中,tc表示前一次收发的测试报文,tp表示当前一次收发的报文。
图10 单向丢包测试示意图
如图10所示,Device A与Device B之间的单向丢包测试过程如下:
- Device A以100毫秒为间隔向Device B发送指定数量(缺省为5个)的LMM PDU,报文中填充有发送接口的发包统计计数TxFCf。
- Device B收到LMM PDU时,先获取当前接口的收包统计计数RxFCf,并在向Device A回应LMR PDU时获取当前接口的发包统计计数TxFCb。LMR PDU中会同时填充有TxFCf、RxFCf和TxFCb。后向Device A回应DMR PDU,其中填充有TxTimef、RxTimef和TxTimeb
- Device A收到LMR PDU时,先获取当前接口的收包统计计数RxFCl。从收到第二个LMR PDU开始,Device A就按前面的公式分别计算远端和本端的丢包数,并记录本次交互的计算结果。在本次测试完成后再进行平均的测试统计结果。
单向丢包测试结果的准确度依赖于发送LMM PDU和LMR PDU,以及接收LMM PDU时,获取硬件统计计数的及时性和和准确性。一般需要硬件支持直接向报文中填充报文的收发统计计数。
(8) 帧时延测试功能
帧时延测试(Delay Measurement,DM)功能用来检测MEP之间报文传输的时延情况,分为单向时延测试和双向时延测试两种:
a. 单向时延测试
单向时延测试功能的实现方式是:源MEP发送1DM(One-way Delay Measurement,单向时延测试) PDU给目标MEP,该报文中携带有其发送时间。目标MEP收到该报文后记录其接收时间,并结合其发送时间来计算并记录链路传输的时延和抖动(即时延变化值)。
1DM PDU中的TxTimeStampf字段填充源MEP的发送时间TxTimef,RxTimeStampf字段填充目标MEP的接收时间RxTimef。源MEP会以100毫秒为间隔发送指定数量(缺省为5个)的1DM PDU。目标MEP收到该报文后,计算RxTimef与TxTimef的差值即为此次测试的时延。时延抖动则是本次测出的时延与已测出的最小时延的差值。单向时延测试要求测试设备之间已完成时钟同步,否则测试出的时延有较大误差,而只能进行时延抖动测试。
b. 双向时延测试
双向时延是用于测量报文从本端发送到接收的一次往返过程中,报文在链路上的消耗时间。测试是从源MEP向目的MEP发送测试请求报文,然后在接收到目的MEP的应答报文后,根据应答报文的接收时间和测试请求的发送时间的差值计算双向报文时延。
DMM PDU中的TxTimeStampf字段填充源MEP的发送时间TxTimef,目标MEP收到此报文后直接将其中的TxTimef填充到DMR PDU中,并在DMR PDU中填充上DMM PDU的接收时间RxTimef和DMR PDU的发送时间TxTimeb。
源MEP在收到DMR PDU后,需要获取到DMR PDU的接收时间RxTimeb。如果报文中填充了DMM PDU的接收时间和DMR PDU的发送时间,则可根据以下公式计算出报文往返消耗在链路上的双向时延:双向链路时延= (RxTimeb – TxTimef) – (TxTimeb – RxTimef);否则,只能计算出双向报文时延= RxTimeb – TxTimef。
如图11所示,Device A与Device B之间的双向时延测试过程如下:
- Device A以100毫秒为间隔向Device B发送指定数量(缺省为5个)的DMM PDU,报文中填充有发送时间TxTimef。
- Device B收到DMM PDU后向Device A回应DMR PDU,其中填充有TxTimef、RxTimef和TxTimeb。
- Device A收到DMR PDU后,计算出本此交互的双向链路时延。从收到第二个DMR PDU开始,还要计算出双向时延抖动和平均双向时延。
(9) 比特错误测试功能
比特错误测试功能用来测试MEP之间的报文比特错误。由源MEP发送指定数量的TST(Test,比特错误测试) PDU给目标MEP(每个TST PDU都携带不同的递增序号),该报文中携带有伪随机序列或全0值。目标MEP收到该报文后,根据其中指定的测试模式和测试比特内容进行计算和比较,从而确定报文是否有比特错误。测试的比特长度为32位,有以下几种测试模式:
- 全0比特不带校验和
- 全0比特带校验和
- 伪随机比特带校验和
- 伪随机比特不带校验和