前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何通过LLDP获取网络拓扑?

如何通过LLDP获取网络拓扑?

作者头像
腾讯云TStack
发布2019-12-10 23:10:12
8K0
发布2019-12-10 23:10:12
举报

cloudman

主要专注于云计算方向,openstack研发

热爱技术和生活

导 言

在某些应用场景中,需要获取网络中的拓扑信息,比如服务器网口和交换机的连接关系。为了满足这个要求,可以利用lldp协议,来实现该要求。

1

LLDP协议

LLDP(Link Layer Discovery Protocol)链路层发现协议,协议设计的主要目的是进行信息的通告,进而获得关于网络拓扑以及相关管理配置信息。这是一个二层协议,它提供了一种标准方式来发现链路连接关系的能力,使得接入网络的一台设备可以将其主要的能力,管理地址,设备标识,接口标识等信息组织成不同的TLV(Type/Length/Value),并封装在LLDPDU(Link Layer Discovery Protocol Data Unit,链路层发现协议数据单元)中,发送给接入同一个局域网络的其它设备。

LLDP协议有四种工作模式:

TxRx:既发送也接收LLDP帧

Tx: 只发送不接收LLDP帧

Rx:只接收不发送LLDP 帧

Disable:既不发送也不接收

LLDP的工作原理

LLDP协议,从本质上来讲就是一个信息发现和通告协议。设备中的LLDP实体维护了两个MIB(Management Information Base) 库,一个是local system MIB,用来维护本地设备的相关信息;一个是remote system MIB,用来维护远端设备的相关信息。

LLDP 通过与相关的MIB库交互来初始化并维护本地MIB,并经本地的相关信息通告出去,同时接收其他设备的通告信息,并将其更新到remote system MIB。通过这种方式,就可以获取设备的邻居信息。用户就可以使用这两个MIB 库来完成自己的需求。

LLDP 报文格式

封装有LLDPDU (lldp 协议的协议数据单元)的报文,称之为LLDP帧。其封装格式有两种:Ethernet II 和 SNAP(Subnetwork Access Protocol,子网访问协议)。我们经常使用的就是以太帧,所以这儿就重点说一下基于Ethernet II 的LLDP报文。

Destination MAC address:目的MAC地址,为固定的组播MAC地址0x0180-C200-000E。

Source MAC address:源MAC地址,为端口MAC地址或设备桥MAC地址(如果有端口地址则使用端口MAC地址,否则使用设备桥MAC地址)

Type:报文类型,固定为0x88CC。

Data:数据,为LLDPDU

FCS:帧检验序列

其中LLDPDU 就是封装在LLDP报文数据部分的数据单元。只不过在组成LLDPDU之前,设备会先将本地的相关信息封装成TLV,然后再将多个TLV组合成一个LLDPDU,封装在LLDP报文的数据部分进行传送。

LLDPDU 格式

每个LLDPDU 最多可以携带28种TLV,LLDP报文预订,Chasis ID TLV, Port ID TLV, TTL TLV 和 End TLV 这四种是必须携带的,其余的TLV则是可选的。

下面是一个基本TLV的list:

2

TLV 格式

TLV是组成LLDPDU的单元,其基本格式如下:

其中TLV Type 和 TLV Info String Length 称为TLV的header, 剩下的信息就是TLV的数据部分,根据TLV Length字段的值,就可以拿到具体的TLV数据。

其中 TLV Type的定义和分配如下表:

其中type 0-8为基本的TLV集合,其中Mandatory 则为必须的TLV,必须包含在lldp 数据报文中。

3

获取lldp邻居信息

通过lldptool

linux提供了一个工具 lldptool 来查询和管理lldp信息。在安装了lldptool 相关工具的服务器上,我们可以获取到该服务器的物理拓扑信息:连接的交换机和交换机的相关端口信息。

下面是我们从服务器抓取到的lldp 信息。

上图中,我们可以看到,通过lldp ,抓取到该eth0网卡上联的交换机名称(System Name TLV),交换机端口(Port ID TLV)和 当前所述的VLAN信息(Port VLAN ID TLV)。

通过原始套接字,抓取lldp数据帧

当然除了使用lldptool 工具来获取拓扑 信息,还可以自己通过抓取lldp 报文来分析相关的TLV信息,进而获取相连的邻居信息。

下面一个就是我通过原始套接字抓取的lldp 信息:

可以看到,列表中的每一项均为,key,value的 元组形式,其中key表示的就是TLV type,value就是该type的所表示的具体信息,当前是以二进制的形式,需要将二进制解码为字符串,就可以得到与lldptool 一样的拓扑信息。

 4 

参考

1.https://learningnetwork.cisco.com/docs/DOC-26851

2.https://blog.csdn.net/goodluckwhh/article/details/10948065

3.http://www.023wg.com/message/message/cd_feature_lldp_message_format.html

猜你还想看这些内容

●如何使用dex搭建一个身份认证系统?

●Ceph Bulestore磁盘空间分配初探

●搬运基础服务到kubernetes,遇这3类大坑怎么破?

· END ·

记得文末点个好看鸭~


点就完事儿了!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云TStack 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • LLDP(Link Layer Discovery Protocol)链路层发现协议,协议设计的主要目的是进行信息的通告,进而获得关于网络拓扑以及相关管理配置信息。这是一个二层协议,它提供了一种标准方式来发现链路连接关系的能力,使得接入网络的一台设备可以将其主要的能力,管理地址,设备标识,接口标识等信息组织成不同的TLV(Type/Length/Value),并封装在LLDPDU(Link Layer Discovery Protocol Data Unit,链路层发现协议数据单元)中,发送给接入同一个局域网络的其它设备。
  • LLDP协议有四种工作模式:
  • TxRx:既发送也接收LLDP帧
  • Tx: 只发送不接收LLDP帧
  • Rx:只接收不发送LLDP 帧
  • Disable:既不发送也不接收
  • LLDP的工作原理
    • 通过lldptool
      • linux提供了一个工具 lldptool 来查询和管理lldp信息。在安装了lldptool 相关工具的服务器上,我们可以获取到该服务器的物理拓扑信息:连接的交换机和交换机的相关端口信息。
        • 下面是我们从服务器抓取到的lldp 信息。
          • 下面一个就是我通过原始套接字抓取的lldp 信息:
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档