当前位置:网站首页>LLDP协议编写要点
LLDP协议编写要点
2022-06-10 18:55:00 【buildroot】
LLDP协议是一种标识交换机的协议,首先会想到交换机的名称,描述等,其实还有许多的内容,比如,端口的描述,ttl,管理ip,mac地址等。
抓取一个lldp报文,它的组成如下图所示

有目的地址(01:80:c2:00:00:0e)和源地址(00:26:f8:99:00:77),还有协议类型0x88cc
往下就是tlv了,比如Chassis subtype、port subtype、Time to Live(ttl)、port description等等
这些数据都是以字符的形式放入数组中的
一个一个地分析
一、目的地址是01:80:c2:00:00:0X形式,这个是管理帧,可以参考stp报文的目的地址,意思是可以通过block或discard状态的端口的报文,这类报文是会进入到cpu进行处理的。在开启一些环网协议后这些报文和普通的报文的处理方式不同。
二、源地址即交换机的地址,这个地址可以根据需要更改
三、TLV如下图所示

其中前面的几个是必须的数据,不过一般来说会将上图的所有的tlv写进代码里。当然只有在发送shutdown帧时会直接使用上面的几个。而且会将ttl=0,那样可以直接将该设备老化从而将其从交换机的lldp表中删除。
PS:在交换机连接PC电脑时,电脑也会发送lldp报文,但是它只有前面的几个内容。建议最好是编写识别这些报文的代码,然后取消掉这类的报文。在某些老旧的交换中发的报文也只会包含前面几个TLV建议和电脑的lldp报文一样让交换机丢弃。
TLV一般由三部分或四部分组成当然具体组成还是参考说明文档
一、四部分

上图是在88cc后接的tlv

它的类型是02,但是wireshark显示的是1,其实这个值是经过了左移了的,所以还原的时候需要右移一位2>>1=1,长度是07是指04-00-26-f8-99-00-77这7个数组值,子类型是04请参考lldp手册中的chassis子类型的类型值,其中4对应的就是mac地址,后面接的就是内容了,mac地址那么就是6个16进制的数组成的。它就是源mac地址。我们在发送和接收这个类型的时候可以用对应的函数在数组中一个一个的处理,注意此处的值是char型的数0对应的是ascii码的0值,所以将其变成字符或字符串形式进入传输或者打印复制的时候,要注意转换类型,比如同样是0,0是ascii码的第一个 BLANK NULL的非打印字符,而字符‘0’对应是值是48。
二、三部分

如上图所示其值的含义与上述有些不同,它是系统名称,没有子类型
第一个值是0x0a>>1=5即它的类型,第二个值代表长度为5,系统名称没有子类型。即后面的值是它的名称,这些值是16进制的,找到它们对应的ascii码,0x54,0x39,0x30,x034的十进制是84,57,48,48,52查下表可知即为T9004

报文的组成已经说完了,比较简单只需对应的位置编写即可
接下来是重点,即状态机,但是我讲得比较地简单,只说明最基本的形式,比如有只接收不发送的状态,只发送不接收状态、即接收又发送的状态、即不接收也不发送状态(关闭状态)等等就不区分了
我在网上找一个图,上面有什么初始化啊,什么发送状态啊,接收状态啊,状态改变时,空闲状态的处理啊,初学者可能一脸懵逼,这是啥,这咋写啊。其实不难。人家写的库函数不过是用#define的高级用法写的罢了。
不过最好还是自己看完人家的代码后感悟才是最大的。
新建一个线程。学过单片机的可以理解为一个while(1)的循环体,只不过在linux等操作系统中可以用实时性等操作可以有多个while(1)的程序在运行。这个while(1)有一个1s的延时,即每一秒运行一次该程序。
程序的核心1是ttl即存活时间,其实就是交换机中的老化时间。一旦时间到了,该设备会被表删除。
核心2是如果交换机的状态发生了变化状态机就会进入到另一个状态中,其实简单来说就一个switch语句,如果发生了变化就进入到另一个case中去了。比如在idle状态(即空闲状态)时将它关闭,交换机的lldp状态立马进入shutdown状态,即发送一个ttl=0的报文,对端交换机在收到这个报文后将其ttl置0那么它会立马老化,对端交换机将它从lldp设备表中删除
核心3是间隔发送时间,其实就是为了保持一直在对端交换机表中,防止老化,会每隔一段时间会自动发送lldp报文。这个报文传输时间应该小于间隔时间的1/4。这里有间隔时间,存活时间乘数,重初始化延时,传输延时等参数。有兴趣的话自行百度,这里不展开讨论。
核心4将这些信息与mib库联系起来,这里不展开讨论
边栏推荐
- 618 great promotion is coming, mining bad reviews with AI and realizing emotional analysis of 100 million comments with zero code
- Integrate machine learning to make Chrome browser more "understand" you
- 面试中经常问到的几个问题,快来看看能答对几道吧
- MySql的MyISAM引擎切换InnoDB时报错Row size too large (> 8126)解决
- [advanced C language] advanced pointer [Part 2]
- FPGA state machine
- 高考结束,VR全景云游为你展现景区的美好风光
- Looking for a room in the graduation season of college students, VR panoramic viewing helps you screen Online
- 【C语言】这些经典题型大家都掌握了吗?一文学会这些题
- Harbor image pull voucher configuration
猜你喜欢

HW蓝队中级面试复盘

Batch detection of specified ports of different URLs (py script)

Only three steps are needed to learn how to use low code thingjs to connect with Sen data Dix data

On the development trend of enterprise storage: cold thoughts on open source storage

禁止摆烂,软件测试工程师从初级到高级进阶指南,助你一路晋升

VR全景作品中各式各样的嵌入功能是如何做到的?

改变世界的开发者丨玩转“俄罗斯方块”的瑶光少年

It is forbidden to throw away rotten software. A guide for software test engineers to advance from elementary level to advanced level will help you promote all the way
![[advanced C language] data storage [part I] [ten thousand words summary]](/img/d3/077189a235fd688d4504b7a62456e3.png)
[advanced C language] data storage [part I] [ten thousand words summary]

软件测试月薪10K如何涨到30K,只有自动化测试能做到
随机推荐
On the development trend of enterprise storage: cold thoughts on open source storage
Harbor镜像拉取凭证配置
Soft deletion of data - when? How to realize it?
2022.05.27 (lc_647_palindrome substring)
Basic model and properties of SAR echo signal
In the all digital era, how can enterprise it complete transformation?
Developers changing the world - Yao Guang teenagers playing Tetris
批量检测不同url的指定端口(py脚本)
Looking for a room in the graduation season of college students, VR panoramic viewing helps you screen Online
大学生毕业季找房,VR全景看房帮你线上筛选
[6.4-6.10] wonderful review of Blog
【C语言】一不小心写出bug?凡人教你如何写出好代码【详解vs中调试技巧】
Easily learn pytoch full convolution neural network to realize expression recognition
Computer:成功教你如何使用一招—就能找回以前的密码(曾经保存的密码但当前显示为******号的密码)
Mongodb 唯一索引
Nature Biotechnol | 李家洋/余泓团队利用平铺删除策略打破性状连锁,突破水稻产量瓶颈
Is it safe to open an account online for futures? How to open an account specifically
Deep understanding of lightgbm
The annual salary of testers in large factories ranges from 300000 to 8K a month. Roast complained that the salary was too low, but he was ridiculed by netizens?
2022 software test interview strategy for the strongest version of fresh students to help you get directly to the big factory