LLDP(链路层发现协议)是定义在802.1ab中的一个二层协议,接入网络的设备可以通过其,将管理地址、设备标识、接口标识等信息发送给同一个局域网络的其它设备。

LLDP 帧格式

封装有 LLDP DU 的报文称为 LLDP 帧,其封装格式有两种:Ethernet II 和 SNAP(Subnetwork Access Protocol,子网访问协议)。

Ethernet II 格式封装的 LLDP 帧

其中各字段的含义如下:DA:目的 MAC地址,为固定的组播 MAC地址 0x0180-C200-000E。

SA:源 MAC地址,为端口 MAC 地址或设备 MAC 地址(如有端口地址则用端口 MAC 地址,否则用设备 MAC 地址)。

Type:帧类型,为 0x88CC。

Data:数据,为 LLDPDU。

FCS:帧检验序列。

SNAP 格式封装的 LLDP 帧

各字段的含义如下:DA:目的 MAC 地址,为固定的组播 MAC 地址 01-80-C2-00-00-0E。

SA:源 MAC 地址,为端口 MAC 地址或设备 MAC 地址(如果有端口地址则用端口 MAC 地址,否则用设备 MAC 地址)。

Type:帧类型,为 0xAAAA-0300-0000-88CC。

Data:数据,为 LLDPDU。

FCS:帧检验序列。

LLDP 工作机制

LLDP 是一个用于信息通告和获取的协议,但是需要注意的一点是,LLDP 发送的信息通告不需要确认,不能发送一个请求来请求获取某些信息,也就是说 LLDP 是一个单向的协议,只有主动通告一种工作方式,无需确认,不能查询、请求(比如像 ARP 协议那样请求某个 IP 的MAC 地址)。

LLDP 主要完成如下工作:1.初始化并维护本地MIB 库中的信息。

2.从本地 MIB 库中提取信息,并将信息封装到 LLDP 帧中。LLDP 帧的发送有两种触发方式,一是定时器到期触发,一是设备状态发生了变化触发。

3.识别并处理接收到的 LLDP DU 帧

4.维护远端设备 LLDP MIB 信息库。

5.当本地或远端设备 MIB 信息库中有信息发生变化时,发出通告事件。

LLDP DU 发送机制

LLDP DU 的发送可以被如下事件触发:与本地 MIB 信息库相关联的定时器 tx TTR 到期时,这将确保远端接收系统中的相关信息不会因为 TTL 到期而过期。

本地 MIB 信息库中的信息发生了改变时,会立即发送 LLDP DU,这将保证改变能及时被更新。

如果一个“新邻居”被识别,将会启用快速发送机制,在很短的时间内连续发送指定数量(txFastInit,默认值为4)的 LLDP DU,以确保“新邻居”能被快速更新。如果远端系统MIB信息库因为过载(tooManyNeighbors)而不能容纳新的邻居信息,则会为了避免过多的 PDU传输而抑制快速发送行为。

LLDP DU 接收机制

LLDP 帧的接收由3个阶段组成:帧的识别、帧的校验以及 LLDP 远端 MIB 信息库更新。

帧的识别

帧识别由在 LLDP/LSAP(链路服务访问点)进行,检查的内容是帧的目的地是否是 LLDP 的组播 MAC 地址,帧的类型是否是 LLDP。

帧的验证

该过程会首先根据 TLV 的格式定义依次校验 Chassis ID TLV,Port ID TLV, Time To Live TLV,如果这三个TLV都存在且有效,才会进一步的解码可选的 TLV 直到遇到 End Of LLDPDU TLV,然后根据获得的信息更新远端 MIB 信息库。

远端MIB 信息库更新

在前两步都通过之后,LLDP DU 的接收者就需要根据解析出来的信息更新远端 MIB 信息库。在 MIB 信息库中,LLDP 使用 chassis ID + Port ID 来标识、存储来自不同源的信息。如果远端 MIB 库中已经有对应于该 chassis ID + Port ID 的信息,则使用收到的帧中的新的 TTL 来更新 TTL。并用对于收到的新的 LLDPP DU 中的每一种 type,如果有变化就进行更新,如果某种 type 原来不存在,则需要将其添加到MIB库中。

如果实现不支持某种类型的 type,则:

如果 type 不是 127,则按照基本 TLV 的格式将其存储到远端MIB库,存储格式为 type, length,value。

如果 type 是127,则按照组织定义TLV的格式将其存储到远端MIB库,存储格式为 type, length,value,OUI,组织自定义子类型,以及信息域。

更新时,如果需要添加新的 chassis ID + Port ID 的表项,或者为某个 chassis ID + Port ID添加新的 TLV,则可能遇到没有内存的问题,标准没有规定必须如何处理,只是给出了一些建议:• 忽略新的 LLDP DU 的信息

• 删除最旧的信息以释放空间给新的信息

• 随机删除一些旧的信息以释放空间给新的信息

LLDP DU 携带的TTL(Time To Live)值会影响接收端的处理方式,如果它不为0,则更新相应信息的老化时间,如果接收到的 LLDPDU 中的 TTL 等于0,则将立刻老化掉相应的信息(即与该 LLDP DU 的发送者相关的MIB信息)。

如果一个 chassis ID+Port ID 标识的信息的 TTL 超时,则相应的 MIB 信息会被删除。

LLDP 工作模式

LLDP 工作模式:• TxRx:既发送也接收 LLDP 帧。

• Tx:只发送不接收 LLDP 帧。

• Rx:只接收不发送 LLDP 帧。

• Disable:既不发送也不接收 LLDP 帧(准确的说,这并不是一个 LLDP 的状态,这可能是• LLDP 功能被关闭了,也可能是设备就不支持)。

由于 LLDP 可以单独工作在发送或接收模式下,因此 LLDP 协议的实现需要支持单独初始化发送或者接收功能。当工作模式发生变化时,需要根据老的/新的工作模式来关闭/打开发送或者接收的功能。

lldp协议代码阅读_LLDP链路层发现协议详解相关推荐

  1. lldp协议代码阅读_LLDP(链路层发现协议)和OpenFlow

    1.LLDP(链路层发现协议)机制 链路层发现协议(LLDP)是一个厂商无关的二层协议,它允许网络设备在本地子网中通告自己的设备标识和性能.它提供了一种标准的链路层发现方式.LLDP协议使得接入网络的 ...

  2. 不会还有人不会配置LLDP链路层发现协议吧?

    实验目的 1.了解链路层发现协议LLDP的运行原理 2.掌握链路层发现协议LLDP的配置方法 实验拓扑 实验需求 1.根据实验拓扑图,完成设备的基本配置: 2.在R1上使用LLDP查看SW1和R2的设 ...

  3. LLDP(链路层发现协议)

    LLDP 链路层发现协议(LLDP)是一个厂商无关的二层协议,它允许网络设备在本地子网中通告自己的设备标识和性能. 目前,网络设备的种类日益繁多且各自的配置错综复杂,为了使不同厂商的设备能够在网络中相 ...

  4. 什么是链路层发现协议LLDP和LLDP-MED

    什么是LLDP? LLDP 是一种 IEEE 标准协议(IEEE 802.1AB),它定义封装在以太网帧中的消息,目的是为设备提供向 LAN 上的其他设备宣布基本设备信息的方法.它类似于CDP,用于网 ...

  5. LLDP链路层发现协议介绍

    目录 背景 基本概念 LLDP报文 Ethernet II格式封装的LLDP报文 SNAP格式封装的LLDP报文 LLDPDU TLV 特点 工作机制 LLDP的工作模式 LLDP报文的发送机制 LL ...

  6. LLDP链路层发现协议

    工作方式相同于思科CDP发现协议 将本端设备的的主要能力.管理地址.设备标识.接口标识等信息组织成不同的TLV(Type/Length/Value),封装在LLDPDU(链路层发现协议数据单元) 周期 ...

  7. 修改服务器lldp的mac地址,通过命令行界面(CLI)配置链路层发现协议(LLDP)在交换机的端口设置...

    SG350X#CONFIGURE 步骤3.进入您要通过输入以下配置的接口: SG350X(config)#interface [interface-id] Note:在本例中, ge1/0/6使用接口 ...

  8. 链路层典型协议(简述)

    链路层 以太网协议,ARP协议: 链路层负责了相邻数据之间的数据转发: 以太网协议: 用于描述相邻设备通信: 协议格式: 48位对端&源端MAC地址:描述了相邻的亮哥指定物理硬件设备: 16位 ...

  9. 网络 链路层 | 以太网协议与ARP协议

    数据链路层是计算机网络的底层,主要负责相邻设备之间的数据帧传输 链路层就是负责每一个相邻结点之间的数据传输,但是相邻设备之间也需要描述识别,主要是因为每一个设备都有可能有多个相邻的设备.这种识别在链路 ...

最新文章

  1. windows端口查看及进程查找
  2. Python基础--1.1Python基础介绍
  3. 线程不能被子进程继承
  4. Mac下ssh支持auto complete
  5. 【经典回放】多种语言系列数据结构算法:希尔排序(C/C#版)
  6. PHP怎样表示几时几分,PHP将时间戳转换为刚刚、N分钟前、今天几点几分、昨天几点几分......
  7. 宏定义函数container_of的解释
  8. window.opener方法的使用 刷新父页面
  9. gcc生成的汇编和keil生成的汇编_Linux编译工具:gcc入门
  10. WebPack配置文件抽离存放
  11. Sencha-命令-CMD(与Touch的结合运用)(官网文档翻译30)
  12. numpy——zeros(), ones(), empty(), eye()
  13. 使用 classList API
  14. visio 模板_Mac软件推荐:免费的流程图软件,完美替代Visio
  15. 购物小票的巧妙新设计
  16. creo二次开发python_使用C#/.net语言进行ProE/Creo二次开发
  17. 什么是html超文本语言,什么是超文本?HTML超文本标记语言怎么学?
  18. Java实现递归查询树结构
  19. ubuntu中中文名新加卷修改为英文名新加卷
  20. 服务器托管vs自建机房哪个好?

热门文章

  1. 关于LattePanda开发板安装Linux-Ubuntu-Debian重启的解决办法
  2. 【Modelsim仿真让状态机波形显示状态名字】
  3. windows文件夹锁
  4. 抖音直播间人气快速破1000人的4种套路,速看!
  5. 操作系统原理实验(四)深渊:竞争条件与死锁(硬件中断)
  6. Validform验证控件使用
  7. 直接更改图片文件jpg和png文件扩展名
  8. python作业之生成儿童谜语题试卷及答案(需搭配儿童谜语.csv文件使用)
  9. Linux服务器安全策略实战免费送给运维工程师
  10. 一文看懂四大报表之现金流量表