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:
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
照着做就行了。
然后分别介绍一下两种方法
首先安装
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还真多,真是小孩光屁股-----有啥让你知道啥。
安装软件
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等。
还可以用socket模拟方式,接收lldp协议,主要函数为
int sock = socket(PF_PACKET, SOCK_RAW, htons(0x88CC));
接收的以太网帧类型为0x88cc。
如果是真的话,那真是挺险恶的
该文章是关于对班里学生某门课程成绩进行排序的问题。要求对班里的学生按照成绩从高到低排序输出。输入包括学生数目和每个学生的成绩,输出为按成绩从高到低的排序结果。
文章浏览阅读963次。集群健康度分片健康红:至少有一个主分片没有分配黄:至少有一个副本没有分配绿:主副本分片全部正常分配索引健康:最差的分片的状态集群健康:最差的索引的状态Health 相关的 APIGET _cluster/health集群的状态(检查 节点数量)GET _cluster/health?level=indices所有索引的健康状态 (查看有问题的索引GET _cluster/health/my_index单个索引的健康状态(查看具体的索引)GET _cl_es yellow删除索引
文章浏览阅读559次。A:透明度R:红色G:绿B:蓝Bitmap.Config ARGB_4444:每个像素占四位,即A=4,R=4,G=4,B=4,那么一个像素点占4+4+4+4=16位 Bitmap.Config ARGB_8888:每个像素占四位,即A=8,R=8,G=8,B=8,那么一个像素点占8+8+8+8=32位Bitmap.Config RGB_565:每个像素占四位,即R=5,G_图片数据像素点占比多少
文章浏览阅读512次。一、修改Ueditor的config.json的文档图片访问路径前缀改成FTP对外暴露的访问地址"imageUrlPrefix": "http://192.168.85.98:8280/up/"二、初始化Ueditor时绑定自定义文件上传方法<!-- 富文本编辑器 --><div id="content"> <script id="edit..._ueditor 上传图片 spring
文章浏览阅读2.2k次。相当部分的 STM32芯片都带USB模块,有时我们会考虑利用STM32芯片的USB模块进行程序代码的下载或升级。USB协议中有专门针对设备固件升级的类协议,即可以通过DFU类协议进行产品固件的加载或更新。 关于STM32产品的DFU程序下载和升级,ST官方有相关的资料文档。可以去www.stmcu.com.cn 或者去www.st.com 搜索DFUse下载相关资料。_syscfg_memoryremapconfig( syscfg_memoryremap_sram )作用是什么;
文章浏览阅读904次。过去,我是在写expect脚本来实现自动登陆并上传下载文件。不过略感不顺。参考文档:http://blog.chinaunix.net/uid-20526681-id-3549245.html现在有一个好的方法cd 到本地你要上传或下载的目录中ftp -niv << EOFopen ip_addressuser username passwordasciiput filen..._shell标本实现ftp
文章浏览阅读388次。星标/置顶小屋,带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 小鹿鹿lulu编 | YY前言由于 BERT-like 模型在 NLP 领域上的成功,研究者们开始尝试将其应用到更为复杂..._bert进行知识推理
文章浏览阅读45次。String 类常用方法注意点:字符串 str 中字符的索引从0开始,范围为 0 到 str.length()-1使用 indexOf 进行字符或字符串查找时,如果匹配返回位置索引;如果没有匹配结果,返回 -1使用 substring(beginIndex , endIndex) 进行字符串截取时,包括 beginIndex 位置的字符,不包括 endIndex 位置的字符“==” ...
文章浏览阅读334次。9月29日,ENVELOP项目在Crypto Horses社区举办了AMA活动,与5万多位社群成员分享了项目进展。项目CEOAlex Shedogubov与大家积极互动交流,一起探讨项目发展与治理。嘉宾及项目介绍Hi there! I am Alex Shedogubov and I am a CEO in ENVELOP. I manage the project and the product development. I have more than 8 years of mana..._envelop上了几个平台
文章浏览阅读3.4w次,点赞26次,收藏131次。Python中的f字符串的用法:要在字符串中插入变量的值,可在前引号前加上字母f,再将要插入的变量放在花括号内。举例子如下:first_name="ada"last_name="lovelace"full_name=f"{first_name}{last_name}"print(f"Hello,{full_name.title()}!")打印结果为:Hello,Ada Lovelace!还可以使用f字符串来创建消息,再把整条消息赋给变量:举例子:first_name=_python f
文章浏览阅读2.9k次。项目需求是需要实现一个垂直方向的跑马灯轮播,早期采用react-native-swiper解决方案,此方案在ios端正常使用,在android端不能使用,所有果断放弃。第二方案打算使用ant-mobile的Carousel组件,import { Carousel, WingBlank } from 'antd-mobile';import { Text } from 'react-nat..._react-native-anchor-carousel 竖向
文章浏览阅读2k次,点赞2次,收藏2次。[I]LK0001[Q]我国现行法律体系中专门针对无线电管理的最高法律文件及其立法机关是:[A]中华人民共和国无线电管理条例,国务院和中央军委[B]中华人民共和国无线电管理办法,工业和信息化部[C]中华人民共和国电信条例,国务院[D]中华人民共和国业余无线电台管理办法,工业和信息化部[P][I]LK0002[Q]我国现行法律体系中专门针对业余无线电台管理的最高法律文件及其立法机关是:[A]业余无线电台管理办法,工业和信息化部[B]个人业余无线电台管理暂行办法,国家体委和国家无委[C]业_a类无线电考试卷