数据链路层学习之LLDP

数据链路层学习之LLDP

1、LLDP协议概述 

随着网络技术的发展,接入网络的设备的种类愈来愈多,配置愈来愈复杂,来自不一样设备厂商的设备也每每会增长本身特有的功能,这就致使在一个网络中每每会有不少具备不一样特性的、来自不一样厂商的设备,为了方便对这样的网络进行管理,就须要使得不一样厂商的设备可以在网络中相互发现并交互各自的系统及配置信息。 
LLDP(Link Layer Discovery Protocol,链路层发现协议)就是用于这个目的的协议。LLDP定义在802.1ab中,它是一个二层协议,它提供了一种标准的链路层发现方式。LLDP协议使得接入网络的一台设备能够将其主要的能力,管理地址,设备标识,接口标识等信息发送给接入同一个局域网络的其它设备。当一个设备从网络中接收到其它设备的这些信息时,它就将这些信息以MIB的形式存储起来。
这些MIB信息可用于发现设备的物理拓扑结构以及管理配置信息。须要注意的是LLDP仅仅被设计用于进行信息通告,它被用于通告一个设备的信息并能够得到其它设备的信息,进而获得相关的MIB信息。它不是一个配置、控制协议,没法经过该协议对远端设备进行配置,它只是提供了关于网络拓扑以及管理配置的信息,这些信息能够被用于管理、配置的目的,如何用取决于信息的使用者。

2、LLDP结构

LLDP的框架结构如图所示:
此图也代表LLDP就是一个信息发现与通告协议,LLDP的实体主要维护了两个MIB库,一个 local system MIB,一个remote system MIB。从其名字也能够看出,一个用于维护本地相关的设备MIB信息,一个用于维护远端设备MIB信息。

LLDP经过与上图中右侧的几个MIB库交互来初始化并维护 local system MIB,并将本地的相关信息通告出去;同时当接收到来自其它设备的信息时就将其更新到remote system MIB中。经过这种工做方式,一个设备就能够将本身的信息通告出去并得到网络中其它设备的相关信息,最终得到反应网络拓扑以及其它配置信息的两个MIB库。这两个库能够被其用户用来完成各类功能。html

须要说明的是LLDP信息的通告以及接收处理不受端口的STP状态的影响。网络

3、LLDP基本概念

1.LLDP帧格式

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

1.1 Ethernet II格式封装的LLDP帧 

 
上图是以Ethernet II格式封装的LLDP帧,其中各字段的含义以下: 
  • DA:目的 MAC地址,为固定的组播 MAC地址 0x0180-C200-000E。 
  • SA:源 MAC地址,为端口 MAC地址或设备MAC地址(若有端口地址则用端口MAC地址,不然用设备MAC地址)。 
  • Type:帧类型,为 0x88CC。 
  • Data:数据,为 LLDPDU。 
  • FCS:帧检验序列。

1.2 SNAP格式封装的LLDP帧

 
上图是以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:帧检验序列。

1.3 目地地址

目地地址实际上包括三个,分别为01-80-C2-00-00-0E,01-80-C2-00-00-03,01-80-C2-00-00-00。这三个地址分别用于不一样的目地,它们能够跨越不一样的网络。框架

 

  • 01-80-C2-00-00-0E,也被称为Nearest Bridge组地址:不管是Two-Port MAC Relay (TPMR)组件仍是S-VLAN组件仍是C-VLAN组件,仍是802.1D网桥都不能转发目地为该地址的帧。简单的说任何类型的网桥都不能转发目地为该地址的帧,目地为该地址的帧被限制在链接两个网桥接口的链接上传输。
  • 01-80-C2-00-00-03,也被称为Nearest non-TPMR Bridge组地址:对于目地地址为该地址的帧,Two-Port MAC Relay (TPMR)组件将成为一个中继器,即不接收它。而S-VLAN组件,C-VLAN组件,以及802.1D网桥不能转发它,而是须要进行接收并处理。所以目地地址为该地址的帧将跨越TPMR。
  • 01-80-C2-00-00-00,也被称为Nearest non-Customer Bridge组地址:对于目地地址为该地址的帧,Two-Port MAC Relay (TPMR)组件以及S-VLAN组件将成为中继器,即不接收它。而C-VLAN组件,以及802.1D网桥不能转发它,而是须要进行接收并处理。所以目地地址为该地址的帧将跨越TPMR以及S-VLAN。
TPMR以及S-VLAN,C-VLAN都是802.1Q中的概念,包括这三者的网络以及各个地址的做用范围以下图所示:

 

 

2. LLDPDU

 

LLDPPDU是LLDP的有效负载,用于承载要发送的消息。LLPDU的格式以下图所示:
 
LLDPDU采用了TLV的格式,即type+lenght+value的格式,type表示TLV的类型,length是以字节为单位的TLV的长度,value是该TLV的值。其中Chassis ID TLV,Port ID TLV Time To Live TLV以及End Of LLDPDU TLV是强制的,必须包含的部分,除此以外在TLV Time To Live TLV和End Of LLDPDU TLV之间能够包含0个到多个可选的其它TLV。

3. TLV

TLV是组成 LLDPDU的单元,每一个 TLV都表明一个信息。LLDPDU的TLV能够分为两大类:
  • 被认为是网络管理的基础的TLV集合,全部的LLDP实现都须要支持。
  • 组织定义的TLV扩展集和,包括 802.1组织定义 TLV、802.3组织定义TLV以及其余组织定义的TLV。这些TLV用于加强对网络设备的管理,可根据实际须要选择是否在 LLDPDU中发送。 
TLV的基本格式如图所示:
 
TLV的类型域的定义及分配以下图所示:
 
其中type0-8属于基本的TLV集合。对于其中的Mandatory的TLV,它是必须包含在LLDP中的。
组织定义TLV集合的格式以下图所示:
 
其中:
  • OUI:组织机构的ID。
  • organizationally defined subtype:组织自定义的类型。
  • organizationally defined information string:传输的信息。

4. 基础TLV集合的TLV定义

几个强制的必须包含的TLV的定义以下。非强制的能够参考IEEE802.1AB。

4.1 End Of LLDPDU TLV

该TLV用于标识LLDPDU的结束。其格式以下:
 
因为length=0,所以它不包含value域。

4.2 Chassis ID TLV

该TLV用于通告该LLDPDU发送者的chassis ID。因为有不少方式可用来标识一个chassis,所以在该类TLV中包含一个子类型域用于告诉接收者,发送者的chassis ID采用的是哪种标识方式。其格式如图所示:
 
每一个LLDPDU必须包含且仅包含一个该类型的TLV。因为chassis ID其实是用于标识设备的,所以在链接可用时它应该保持不变。
chassis子类型所可能的取值如图所示:
 

4.3 Port ID TLV

它用于标识发送该LLDPDU的设备的端口。相似于chassis ID,有不少方式能够标识一个Port,所以该TLV也包含一个子类型域。其格式以下图所示:
 
每一个LLDPDU必须包含一个且只能包含一个该类型的TLV。同时,当端口可用时,从该端口发送出去的LLDPDU的该TLV应该保持不变。
其子类型的可能取值以下图所示:
 

4.4 Time To Live TLV

该TLV用于告诉接收端,它接收到的这些信息的有效期有多长。其格式如图所示:
 
TTL的时间单位是秒,因为只有2个字节长,于是最大有效时间是65536秒。若是在这个时间到期了尚未新的LLDPDU被收到,则该TLV所属的那个LLDPDU携带的信息会被从MIB中删除。若是收到了新的LLDPDU,则:
  • 若是TTL不为0,则会用新收到的LLDPDU的信息替换MIB库中的相应的信息(即与该LLDPDU的发送者相关的MIB信息,LLDP使用Chassis ID + Port ID来判断是否来自于同一个源,这也是要求这二者保持不变的缘由)。
  • 若是TTL为0,则删除相应的MIB库中的信息(即与该LLDPDU的发送者相关的MIB信息)。所以TTL为0的LLDPDU又被称为SHUTDOWN LLDPDU。
每个LLDPDU必须包含且只能包含一个该类型的TLV。

4、工做机制

LLDP是一个用于信息通告和获取的协议,可是须要注意的一点是,LLDP发送的信息通告不须要确认,不能发送一个请求来请求获取某些信息,也就是说LLDP是一个单向的协议,只有主动通告一种工做方式,无需确认,不能查询、请求(好比像ARP协议那样请求某个IP的MAC地址)。
LLDP主要完成以下工做:
  1. 初始化并维护本地MIB 库中的信息。
  2. 从本地MIB 库中提取信息,并将信息封装到LLDP 帧中。LLDP帧的发送有两种触发方式,一是定时器到期触发,一是设备状态发生了变化触发。
  3. 识别并处理接收到的LLDPDU帧
  4. 维护远端设备LLDP MIB 信息库。
  5. 当本地或远端设备MIB信息库中有信息发生变化时,发出通告事件。

1.LLDPDU发送

1.1 发送机制

LLDPDU的发送能够被以下事件触发:
  • 与本地MIB信息库相关联的定时器txTTR到期时,这将确保远端接收系统中的相关信息不会由于TTL到期而过时。
  • 本地MIB信息库中的信息发生了改变时,会当即发送LLDPDU,这将保证改变能及时被更新。
  • 若是一个“新邻居”被识别,将会启用快速发送机制,在很短的时间内连续发送指定数量(txFastInit,默认值为4)的LLDPDU,以确保“新邻居”能被快速更新。若是远端系统MIB信息库由于过载(tooManyNeighbors)而不能容纳新的邻居信息,则会为了不过多的PDU传输而抑制快速发送行为。
LLDP的常规发送时间是创建在系统的tick之上的,间隔为1秒一个,为了防止在共享介质的LAN(shared media LAN)中同时出现大量的LLDPDU(由于接入同一个LAN的多个系统的时间是同步的,于是多个系统上的基于tick的1秒定时器可能同时到期),发送定时器引入了一个随机的抖动,这就使得常规的LLDP帧的发送间隔时间的平均值还是1秒,可是具体到某一次到期时间可能并非准确的1秒。
同时为了防止在有多个端口须要发送LLDPDU的系统中,全部的端口的定时器都在同一时间到期,于是标准建议将采用某种机制将多个发送实例的定时器到期时间给错开,以免一个系统在同一时刻发送大量的LLDPDU。

1.2 发送状态机

LLDPDU的发送状态机如图所示
 
对于该状态机:
  • 为了防止过于频繁的从新初始化发送状态机,在LLDP的发送状态机中引入了一个延时,该延时限制了在关闭发送状态机后,必须至少等待多长时间才能从新初始化发送状态机。
  • 是否发送SHUTDOWNLLDPDU由本地的LLDP工做状态决定。
  • 是否发送正常的LLDPDU由txNow和txCredit决定。这两个变量都由发送定时器状态机更新。txNow决定是否发送,而txCredit则是一个信用量,决定了能够发送的量,若是是0则不容许发送,只有大于0的值才容许发送,每发送一个该值就减1。更重要的是在本地信息快速改变时,txCredit即容许连续发送多个LLDPDU,可是又对能够连续发送的LLDPDU帧数作了限制,这使得本地状态的快速改变能够及时被通告出去,可是又不能无限发送致使网络出现大量LLDPDU帧。

1.3发送定时器状态机

LLDP发送定时器状态机如图所示:
 
localChange表示本地信息是否发生改变;txTTR表示下一次定时器到期的时间;newNeighbor表示是否发现了新的邻居,并由接收状态设置,由该状态机清除;txTick表示基于系统时间的1秒定时器是否到期。
对于该状态机:
  • SIGNAL_TX用于触发发送,它会将txNow设置为容许发送,并设置本地信息发生改变为FALSE,若是当前不是在快速发送状态(txFast = 0)就设置发送定时器下次到期时间为msgTxInterval(msgTxInterval默认为30秒,取值范围1-3600秒),不然设置发送定时器下次到期时间为msgFastTx(msgFastTx默认值为1秒,取值范围1-3600秒)
  • 若是本地信息发生了改变,就当即进入SIGNAL_TX
  • 若是定时器到期,则若是txFast大于0,则将其减1并进入SIGNAL_TX,不然直接进入SIGNAL_TX
  • 若是发现了新邻居,则首先将发现新邻居的标识更新为没有发现新邻居,而后若是当前已经处于快速发送状态就直接进入发送定时器到期状态(以触发一次当即发送),不然设置txFast的值为txFastInit的值(txFastInit默认值为4,取值范围1-8)
  • 若是基于系统时间的1秒定时器到期,则给txCredit增长信用量,其最大值为txCreditMax,txCreditMax是一个取值在1到10之间的值,默认值为5。
这里有取值范围的几个变量都是可配置的变量。
从上述两个状态机的工做状态能够看出,发送定时器状态机用于维护信用量以及是否容许发送LLDPDU帧,而发送状态机根据这两个信息来决定是否发送。
另外须要注意的是LLDP所使用的全部定时器操做都是基于“基于系统时间的1秒定时器的”,每当这个定时器到期时它除了会将txTick设置为TRUE外,还会处理其它的定时功能。

2.LLDPDU 接收

2.1 接收机制

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

2.1.1 帧的识别

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

2.1.2 帧的验证

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

2.1.3 远端MIB信息库更新

在前两步都经过以后,LLDPDU的接收者就须要根据解析出来的信息更新远端MIB信息库。在MIB信息库中,LLDP使用chassis ID + Port ID来标识、存储来自不一样源的信息。学习

 

  • 若是远端MIB库中已经有对应于该chassis ID + Port ID的信息,则使用收到的帧中的新的TTL来更新TTL。并用对于收到的新的LLDPPDU中的每一种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,则可能遇到没有内存的问题,标准没有规定必须如何处理,只是给出了一些建议:spa

  • 忽略新的LLDPDU的信息
  • 删除最旧的信息以释放空间给新的信息
  • 随机删除一些旧的信息以释放空间给新的信息
LLDPDU 携带的TTL(Time To Live)值会影响接收端的处理方式,若是它不为0,则更新相应信息的老化时间,若是接收到的LLDPDU 中的TTL 等于0,则将马上老化掉相应的信息(即与该LLDPDU的发送者相关的MIB信息)。
若是一个chassis ID + Port ID标识的信息的TTL超时,则相应的MIB信息会被删除。

2.2 接收状态机

LLDPDU的接收状态机如图所示:
 

3. LLDP工做模式

LLDP能够工做在多种模式下:
  • TxRx:既发送也接收LLDP 帧。
  • Tx:只发送不接收LLDP 帧。
  • Rx:只接收不发送LLDP 帧。
  • Disable:既不发送也不接收LLDP 帧(准确的说,这并非一个LLDP的状态,这多是LLDP功能被关闭了,也多是设备就不支持)。
因为LLDP能够单独工做在发送或接收模式下,所以LLDP协议的实现须要支持单独初始化发送或者接收功能。当工做模式发生变化时,须要根据老的/新的工做模式来关闭/打开发送或者接收的功能。
相关文章
相关标签/搜索