网络协议学习---LLDP协议学习

简介

LLDP(Link Layer Discovery Protocol)链路层发现协议,协议设计的主要目的是进行信息的通告,进而获得关于网络拓扑以及相关管理配置信息。这是一个二层协议,它提供了一种标准方式来发现链路连接关系的能力,使得接入网络的一台设备可以将其主要的能力,管理地址,设备标识,接口标识等信息组织成不同的TLV(Type/Length/Value),并封装在LLDPDU(Link Layer Discovery Protocol Data Unit,链路层发现协议数据单元)中,发送给接入同一个局域网络的其它设备。
我们通常用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 数据报文中。
以上内容转自cloudman《如何通过LLDP获取网络拓扑?》
在这里插入图片描述

方法

目前有两种方法来获取LLDP信息。
一种是lldpad,另一种是lldpd。
首先查看一下网卡信息。

[root@localhost ~]# lspci | grep Eth      
1a:00.0 Ethernet controller: Intel Corporation Ethernet Connection X722 for 10GbE SFP+ (rev 09)
1a:00.1 Ethernet controller: Intel Corporation Ethernet Connection X722 for 10GbE SFP+ (rev 09)
1a:00.2 Ethernet controller: Intel Corporation Ethernet Connection X722 for 1GbE (rev 09)
1a:00.3 Ethernet controller: Intel Corporation Ethernet Connection X722 for 1GbE (rev 09)

当网卡是X722或者711类型时,需要一个共同配置,关闭网卡自身的lldp

echo 'lldp stop' > /sys/kernel/debug/i40e/0000\:1a\:00.2/command

照着做就行了。
在这里插入图片描述

然后分别介绍一下两种方法

lldpad

首先安装
yum install lldpad

然后启动服务
lldpad -d

最后进行一下配置再显示

lldptool set-lldp -i eno3 adminStatus=rxtx
lldptool -T -i eno3 -V sysName enableTx=yes
lldptool -T -i eno3 -V portDesc enableTx=yes
lldptool -T -i eno3 -V sysDesc enableTx=yes
lldptool -T -i eno3 -V mngAddr enableTx=yes

最后进行查看

[root@localhost ~]# lldptool -t -n -i eno3
Chassis ID TLV
        MAC: 5c:a7:21:b0:46:58
Port ID TLV
        Ifname: GigabitEthernet1/0/11
Time to Live TLV
        121
Port Description TLV
        GigabitEthernet1/0/11 Interface
System Name TLV
        H3C
System Description TLV
        H3C Comware Platform Software, Software Version 7.1.070, Release 6318P01
H3C S5130S-28TP-EI
Copyright (c) 2004-2020 New H3C Technologies Co., Ltd. All rights reserved.
System Capabilities TLV
        System capabilities:  Bridge, Router
        Enabled capabilities: Bridge, Router
Management Address TLV
        IPv4: 192.168.32.5
        Ifindex: 635
Port VLAN ID TLV
        PVID: 1
Link Aggregation TLV
        Aggregation capable
        Currently not aggregated
        Aggregated Port ID: 0
MAC/PHY Configuration Status TLV
        Auto-negotiation supported and enabled
        PMD auto-negotiation capabilities: 0x6c01
        MAU type: 1000 BaseTFD
Power via MDI TLV
        Bad Power Via MDI TLV: 0101011000000000
Maximum Frame Size TLV
        10240
End of LLDPDU TLV

可以看到本机插在了交换机的“GigabitEthernet1/0/11 Interface”口上。包含的TLV还真多,真是小孩光屁股-----有啥让你知道啥。
在这里插入图片描述

lldpd

安装软件

yum install lldpd -y

启动服务

systemctl start lldpd.service

调用命令

[root@localhost ~]#  lldpcli show neighbors
-------------------------------------------------------------------------------
LLDP neighbors:
-------------------------------------------------------------------------------
Interface:    eno3, via: LLDP, RID: 1, Time: 0 day, 00:00:51
  Chassis:     
    ChassisID:    mac 5c:a7:21:b0:46:58
    SysName:      H3C
    SysDescr:     H3C Comware Platform Software, Software Version 7.1.070, Release 6318P01
                  H3C S5130S-28TP-EI
                  Copyright (c) 2004-2020 New H3C Technologies Co., Ltd. All rights reserved.
    MgmtIP:       192.168.32.5
    Capability:   Bridge, on
    Capability:   Router, on
  Port:        
    PortID:       ifname GigabitEthernet1/0/11
    PortDescr:    GigabitEthernet1/0/11 Interface
    TTL:          121
-------------------------------------------------------------------------------

同样能看到连接的网口,交换机的信息,管理口的IP等。
在这里插入图片描述

C语言的方法

还可以用socket模拟方式,接收lldp协议,主要函数为

int  sock = socket(PF_PACKET, SOCK_RAW, htons(0x88CC));

接收的以太网帧类型为0x88cc。

源码下载
在这里插入图片描述

结束语

如果是真的话,那真是挺险恶的
在这里插入图片描述

  • 7
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖哥王老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值