1 概述
MPLS作为一种转发技术已经发展了很多年,起初以提高转发效率而提出的这种技术经过多年发展因其本身良好的扩展性,为其赋予了新的生机。随着基于MPLS技术的VPN应用、TE和QoS等各种应用不断在各大网络上部署,MPLS逐渐成为网络世界中新热点的同时,也逐渐成为网络设备的卖点之一。
虽然MPLS转发技术位于二、三层之间,但是其实现需要路由协议、LDP等标签分配协议等上层协议作为支撑,并且为了实现基于MPLS的各种应用,还对很多上层协议进行了扩展。可以说,MPLS模块涵盖了众多相关协议,是一个非常复杂的知识体系。这也为作为测试人员的我们提出了很高的要求。
说到测试方法,其实对于任何一个模块,任何一个协议没有一个固定的、一成不变的测试方法。不同的测试人员,测试手段不同、关注点不同、思维方式不同都能形成一套自己特有的测试方法,并且随着测试不断进行,对协议、对整个模块的理解和对其应用的理解也在不断深入,测试方法也随之不断丰富、完善。测试方法不断丰富的同时,测试也会变得不断深入。
本文是平时测试中使用的一些方法和遇到的一些问题粗略总结,算是抛砖引玉,希望不断补充完善,共同丰富我们这个测试方法,共同提高测试水平!
需要特别指出的是,一个基于MPLS的重要应用:TE(Traffic Engineering)由于其具有相对独立的知识体现和自身复杂性,将有专门文章介绍它的测试方法,本文将不对其进行讨论。
2 MPLS基础协议测试方法描述
MPLS基础协议是指支撑MPLS VPN等各种应用的协议,包括:LDP、MBGP和各种路由协议多实例等。确保基础协议功能完备是其他MPLS应用功能正常的保证。因此,这里首先总结一些对MPLS基本协议测试的方法。
说到协议测试,不外乎包括基本功能测试、协议一致性测试、互通测试和性能测试等几个方面。协议测试方法也包括通用测试方法和根据不同协议而特有的测试方法,通用测试方法包括:命令行配置删除、边界值和非法值设置、接口板连接线热插拔等,这些方法相信大家都已经掌握,本文也就不再将其罗列到各个部分测试方法描述中。这里主要讨论的是我们在测试相关协议时需要关注、容易出现问题的方面,和在测试这些协议特性时通常使用的一些测试手段。
2.1 LDP测试方法
LDP(Label Distribute Protocol)是实现通用标签分配协议,可服务于所有MPLS应用。由于LDP协议本身非常复杂,定义了不同的标签分配模式、标签控制模式和标签保持模式,设备可被配置在多种模式下工作。同时,LDP还支持Loop-Detect等特性,使其测试组网、测试手段都非常复杂,下面我们从LDP协议几个主要功能部分讨论对它的测试。
2.1.1 基本功能测试
2.1.1.1 邻居建立
LDP通过TCP建立邻居关系,并在邻居间直接传递标签映射消息。协议规定,在两个LSR设备直接只允许存在一个LDP会话关系(LDP Session),这也是测试会话功能的重点。主要测试方法包括:在两台LSR直接创建多个多种类型直连接口,并在物理接口上封装各种类型的链路协议,包括:以太网、ATM、FR子接口,PPP、MP、MFR等,同时可以指定建立LDP会话使用的IP地址,包括各种物理接口IP地址、子接口和虚接口IP地址,地址借用接口IP地址,地址协商接口IP地址等,验证此时LDP会话是否正确建立,LDP会话是否唯一。
设备支持在同一个接口上配置多个IP地址,同样LDP支持利用这些子IP(Sub IP)建立会话关系。子IP又分为配置在主接口、子接口和各种虚接口上等不同组合。将接口和各种类型IP地址结合是测试LDP常常使用的方法。在测试LDP邻居时,我们不但需要验证相邻设备之间建立LDP会话,还要测试任意两台设备之间创建Remote方式LDP会话。
LDP协议通过TCP建立邻居间会话关系,同时也提供基于TCP MD5认证机制。与测试其它协议认证类似,在配置LDP认证后,关注是否会影响LDP会话建立,以及各种协议报文传递,TCP、LDP各种状态显示是否正确。特别需要注意的是,对于携带MD5认证信息的TCP邻居,在显示其状态时会有一个星号“*”进行标识,这也是确认认证是否成功的方法之一。
反复Up/Down接口、子接口、虚接口状态,插拔物理连接线,热插拔接口板,修改接口IP地址等操作是否会影响LDP会话状态。记得曾经出过这样一个网上问题:由于连接两台设备之间的光电转换器质量不好,引起LSR接口反复Up/Down,LDP会话反复建立,一定时间后LDP会话无法建立,重启设备后恢复正常。在实验室复现这个问题时还出现了由于不断插拔物理连接线引起设备宕机的严重问题。
LDP会话建立另一个方面就是LDP能力和参数协商。在修改接口参数、LDP工作状态参数后,LDP会话参数能否正确建立,协商后的参数和能力是否正确。
2.1.1.2 标签分配
LDP是广泛使用的标签分配协议,主要功能是为不同FEC(路由)自动分配标签,所以标签分配是否正确是衡量协议是否正确工作的基本标准。LDP协议会为本地直连路由、动态路由分配标签,将标签和路由绑定关系封装在MAP消息中传递给上游LSR,从而在MPLS域中产生对应该路由的LSP。前面提到,由于标签分配模式、标签控制模式和标签保持模式的不同组合,LDP可能工作在多种模式下。而最常用的是DU+自由标签保持+独立标签控制模式,这也是MPLS应用的主要方式。
LSP是LSR依据路由逐跳创建的,LSP出接口应与路由出接口保持一致,并且在V5版本上还支持为等价路由创建多条不同接口LSP。对LSP的测试包括LSP与路由同步,在路由或其下一跳发生变化时,LSP能否同步变化,切换时间不应过长。LSP完整建立包括在MPLS域内对所有路由都应建立对应的LSP(除缺省路由和聚合路由外)。LSP建立完成后,可以查看LSR上MPLS LSP、ILM、FTN(V5版本对应FIB)和NHLFE等表项,各个表项建立、相互关系应该一致正确。特别是在路由常常发生变化的网络中,设备曾经出现过LSP已经删除,标签已经释放,但是底层ILM和NHLFE表项未删除导致转发不通的问题。
由于设备支持全局标签空间,LSR为每一条路由分配一个标签,不同标签对应不同的FEC。因此,对于不应出现LSR为不同FEC分配相同标签的情况,保证在LSR上标签与FEC对应的全局唯一性。同样,在FEC对应路由消失后,LSR应及时释放为其分配的标签资源,并通过LDP消息通知上游邻居。被释放的标签能够被再次分配给其他FEC。特别是在大量路由出现路由振荡时,应特别检查是否会出现标签未被释放和不能重新分配的标签泄漏现象。
LDP另一个常常会出现问题的地方就是同一路由在多条备份链路上反复切换、等价路由某些出接口反复振荡时,LDP不能正确与路由变化保持同步,某些表项反复建立导致某些已经过期的表项无法及时删除,ILM、FTN与NHLFE对应不一致引起MPLS转发不通。
测试LSP时一个重要测试工具就是LSP ping命令。普通的ping命令只能检测路由可达性,对判断LSP逐跳是否建立完整无能为力。这时,我们可以使用LSP ping命令,为找到存在问题的LSP提供了一个很好的手段。
2.1.1.3 环路检测
为了防止因为路由层面产生环路引起MPLS转发环路,LDP可以在MAP消息中携带环路检测信息,包括Hop-Count属性和Path-Vector属性。设备上通过设置允许建立LSP经过的最大跳数来防止环路产生。在实验室中由于路由产生环路比较困难,因此测试中通常通过设置较小的LDP跳数达到检测环路目的。配置了环路检查的路由器与没有配置环路检查路由器之间LDP邻居关系建立、对没有携带环路检查的LDP MAP消息处理和没有环路检查属性的MAP消息处理。对即将达到和已经达到甚至超过规定跳数的LDP消息处理等。
2.1.2 协议一致性测试
目前,很多厂商的测试设备都提供了对各种基础协议进行一致性测试的测试套,包括Angilent公司的RouterTester、Sprient公司的AX4000和IXIA公司的IxANVL。这些测试套都是仪器厂商严格依据标准RFC开发的自动化脚本,几乎覆盖了对应RFC中定义的每一个功能点。利用这些协议一致性测试套,能够非常准确地测试设备是否按照标准协议实现,能帮助我们发现很多互通测试和遍历测试中无法发现的深层协议问题。对于MPLS部分,主要测试仪都有LDP协议测试套,协议一致性测试也早已在平台产品测试部得到广泛使用。
同时,部分厂商仪器还提供对BGP、MBGP、L2VPN和VPLS等其他MPLS应用模块的协议一致性测试套,具体支持模块的详细信息请参见原仪器集中组相关文档。