导航菜单

一种基于LLDP的链路层拓扑发现系统的开发实现

庞振源

(中国电子科技集团公司第二十研究所,陕西 西安 710068)

【摘 要】LLDP(Link Layer Discovery Protocol,链路层发现协议)是一种标准的、公开的链路层网络拓扑信息交换协议,目前已经得到了主流网络设备商的支持。LLDP协议自身已经实现了链路层的拓扑发现功能,是该问题的理想解决方案。从网络运维人员的日常需求出发,基于LLDP开发了一个轻量级的拓扑发现系统,并详细介绍了系统的实现过程,为基于LLDP的应用程序的实现提供参考。

教育期刊网 http://www.jyqkw.com
关键词 拓扑发现;LLDP;轻量级

0 引言

数据链路层网络拓扑是指以太网络中,以交换机为主的网络节点之间在数据链路层的连接关系,它反映了网络节点之间真实的物理连接拓扑。在网络运维工作中,内网拓扑结构的核实与确认是一个常见且重要的问题,因为它与故障定位、网络安全防护息息相关。思科公司最早推出了思科发现协议[1](Cisco Discovery Protocol,CDP),然而它是内置在网络设备内部的私有协议,与其它平台不具备兼容性;基于交换机地址转发表的拓扑发现技术[2]解决了兼容性问题,然而这种技术算法非常复杂,且要求采集到的数据具有一定的完整性。链路层连接协议(Link Layer Discovery Protocol, LLDP)的发布意味着这个问题已经得到解决。LLDP的功能与CDP类似,拓扑关系的识别和维护由协议来实现,应用程序只需对拓扑信息进行提取即可;而且LLDP是公开的标准化的协议,不存在兼容性问题。

1 LLDP分析

LLDP提供了一种标准的拓扑沟通机制,可以将本端设备的的主要能力、管理地址、设备标识、接口标识等信息按照TLV(Type/Length/Value,类型/长度/值)的结构进行组织,并封装在以太网帧中发布给邻居设备。所有设备在收到这些信息后将其以标准MIB(Management Information Base,管理信息库)的形式保存起来,以供网络管理系统查询及判断链路的通信状况。LLDP的框架结构如图1所示[3]。

由图1可见,PTOPO MIB、Entity MIB、Interface MIB以及Other MIB这四个MIB 库分别对应物理拓扑MIB、实体MIB、接口MIB 和其他MIB。LLDP 模块通过与设备上的这些MIB的交互来更新自己的LLDP local system MIB库以及自己定义的 LLDP扩展MIB,然后通过 LLDP帧将自己的相关信息通过连接到远端设备的接口,发送给远端设备。

同时,它接收远端设备发来的LLDP 帧来更新 LLDP remote system MIB库。通过更新和维护这个 MIB 库,设备就知道自己邻接设备的信息,包括本地端口、连接的对端设备的接口、对端接口MAC 地址等等。

2 系统分析与设计

2.1 需求分析

网络管理员在日常工作中经常会遇到这样的问题:内网的整体框架、网络设备台账都是已知的,只需要对局部的详细拓扑进行快速的核实确认。在极少数网络环境发生较大变更的情况下,在网络设备台账、网络整体架构等基础信息都不完整时,也需要对拓扑结构、设备台账等信息进行提取和整理。

因此,网络管理员需要这样一种网络拓扑发现系统:在指定了网络设备IP时,它能够快速、灵活地进行拓扑关系提取和展现;而在仅给出IP地址区间时,它能够对网络中的设备类型进行识别,发现网络拓扑,并整理出设备与主机的台账。

2.2 系统架构

系统的整体架构如图2所示。

系统分为展现层、逻辑层和数据层。数据层与网络设备进行交互,采集原始数据;逻辑层是系统的核心层,它对原始数据进行运算处理,得到拓扑信息;展现层以图形化的方式对拓扑关系进行表达。

2.3 数据结构

系统的主要数据结构可归纳为表1。

拓扑关系(L2Link)包含4个要素:本地IP、本地接口和对端IP、对端接口,它由逻辑层对LLDP数据进行计算处理得到。另外,系统还需要几个全局列表。IP/设备名映射表(ipNameMap)用于根据设备名查找设备IP。系统输入(input)是用户输入的一系列IP或子网地址列表。有效IP地址列表(validIpList)是由输入计算得到的有效的IP地址列表;在线IP地址列表(onlineIpList)是对有效IP地址列表进行轮询Ping操作后得到,通过这个环节可以剔除掉未使用的IP;交换机列表(switchList)和主机列表(hostList)是系统的输出。

系统需要从网络设备中提取的原始数据可归纳如表2所示。

LLDP信息的定义位于LLDP MIB中的lldpRemTable,这些字段描述了对端设备的信息。测试表明,思科和华为交换机对于lldpRemPortId字段的实现与字段名称存在歧义,该值默认为接口的名称,如果该接口配置了别名,则取值为别名。

接口信息的定义位于IF-MIB, 它描述了接口的名称、别名等信息。

端口信息的定义位于Q-Bridge-MIB,该字段揭示了物理端口号与接口之间的映射关系。

设备信息的定义位于RFC1213- MIB,定义了设备的名称和服务能力。需说明的是,sysName即设备名称,值取决于网络设备的配置。sysServices值标识了该设备工作在网络体系的哪一层。具体算法为:以0为初始值,对于网络体系的每一层L,如果提供该层的服务,那么总值就要加上2^(L-1),比如,某设备提供数据链路层服务,那么总值要加上2;如果同时提供网络层服务,那么再加上4。如果同时提供网络层和应用层服务,那么它是计算机。根据此方法可确定网络节点的类型。

2.4 实现算法

算法的输入为一个IP地址列表,其中每个IP可附加斜杠和子网掩码表示网络地址。

算法的输出为一个交换机列表、一个主机列表和图形化的拓扑结构。

完整的实现算法可组织为以下过程:

(1)对输入进行解析,将网络地址转换为有效IP,最终得到一个有效IP地址列表。

(2)遍历有效IP地址列表,进行Ping操作,得到在线IP地址列表。

(3)遍历在线IP地址列表,采集系统数据,分析设备类型,得到交换机列表、主机列表。

(4)遍历交换机列表,采集接口数据以及LLDP数据。

(5)遍历交换机列表,提取LLDP数据,得到本地IP/本地端口<->对端接口/对端设备名称的关系;根据对端设备名称匹配对端设备IP;根据本地端口匹配本地接口名称。至此,得到本设备上的所有拓扑关系。

(6)遍历交换机列表,遍历交换机的拓扑信息列表,在图形用户接口上进行生动直观的网络拓扑展现。

3 系统实现

3.1 开发环境

Java是纯面向对象的编程语言,语法简单,易于开发。它具有卓越的通用性、高效性、平台移植性和安全性[4],我们选择Java进行开发。

SNMP4J是面向Java平台的企业级开发库,我们使用它实现底层的协议操作,提高开发效率。

JUNG是一个开源软件包,它提供了一种公共和可扩展的框架来实现数据的建模[5],我们使用它来绘制网络拓扑图。

3.2 开发过程

系统的关键实现过程如下所示。

首选,系统对用户输入进行分析,得到得到交换机列表和主机列表,然后遍历交换机列表,读取分析拓扑信息,最后进行图形化展示。

最终效果如图3所示。可见,系统能够以生动直观的形式对交换机之间的拓扑关系进行展现。

4 总结

本文针对网络管理员的日常运维需求,基于LLDP实现了一个链路层拓扑发现系统,它能够对指定的网络设备进行拓扑发现,具有快速、轻量级的特性;另外,在网络信息未知的情况下,只需要给出IP网段地址,系统即可进行网络设备和网络拓扑的探测。LLDP的出现标志着链路层网络拓扑的发现在技术上已经不存在问题,目前LLDP已经得到了主流厂商的兼容并逐渐普及开来,该问题的彻底解决只剩下时间问题。

教育期刊网 http://www.jyqkw.com
参考文献

[1]CISCO. Cisco Discovery Protocol Version 2 [EB/OL]. http://www.cisco.com/c/en/us/td/docs/ios-xml/ios/cdp/configuration/15-mt/cdp-15-mt-book/nm-cdp-disco,2015-3-21.

[2]庞振源.网络节点状态监测系统的研究与实现[D].西安:长安大学,2012:7-9.

[3]HUAWEI. LLDP技术白皮书[EB/OL].http://enterprise.huawei.com/ilink/cnenterprise/download/HW_197516,2012-10-31.

[4]Horstmann Gay S. Java核心技术[M].北京:电子工业出版社,2011:2-3.

[5]开源中国社区. Jung [EB/OL]. http://www.oschina.net/p/jung/,2014-10-31.

[责任编辑:汤静]

下载文本