首页 > 编程知识 正文

链路状态协议,数据链路层传输的协议数据单元

时间:2023-05-06 19:34:49 阅读:14666 作者:4500

一方面,LLDP协议概述随着网络技术的发展,接入网络的设备种类越来越多,配置越来越复杂,来自不同设备制造商的设备也往往添加自己的功能,其结果是,一个网络中是否有不同特性的不同制造商为了便于这种网络的管理,有必要使不同制造商的设备能够在网络中发现并相互作用各自的系统和配置信息。

链路分层发现协议(LDP )是用于此目的的协议。 LDP在802.1ab中定义,是一种双层协议,提供标准的链路层发现方案。 通过LDP协议,进入网络的一个设备可以将其主要能力、管理地址、设备标识符、接口标识符等信息发送到接入同一LAN网络的其他设备。 当一个设备从网络接收到其他设备的信息时,该信息将存储为MIB。

这些MIB信息可用于发现设备的物理拓扑并管理配置信息。 另外,LLDP只设计用于发布信息,用于发布一个设备的信息,可以获取其他设备的信息,并获取相关的MIB信息。 不能配置远程设备,而不是配置、控制协议。 只要提供有关网络拓扑和管理配置的信息,这些信息就可以用于管理和配置目的,如何使用取决于信息的用户。

二、LLDP结构LLDP的框架结构如图所示。

此图还显示LLDP是信息发现和通告协议。 LLDP实体主要维护两个MIB库,一个维护本地系统MIB,另一个维护远程系统MIB。 如从名称可见,一个用于维护本地相关的设备MIB信息,另一个用于维护远程设备MIB信息。

LDP与上图右侧的几个MIB库进行交互,以初始化和维护本地系统MIB,并通知您本地相关信息。 此外,当收到来自其他设备的信息时,它会更新为远程系统MIB。 这样,一个设备就可以通知自己的信息,获取有关网络上其他设备的信息,并最终获取两个对网络拓扑和其他配置信息作出响应的MIB库。 这两个库可用于用户执行各种功能。

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

三、LLDP的基本概念1.LLDP帧格式封装LLDPDU的消息称为LLDP帧,其封装格式为以太网ii和子网接入协议(snap )的

1.1以太网ii格式封装的LLDP帧上的图是以太网ii格式封装的LLDP帧,每个字段的含义如下:

DA :目标MAC地址,固定多播MAC地址0x0180-C200-000E。 SA )源MAC地址、端口MAC地址或设备MAC地址(如果有端口地址,则为端口MAC地址,否则为设备MAC地址)。 类型:帧类型,0x88CC厘米。 数据:数据,液晶屏PDU。 FCS :帧检查序列。 1.2以snap格式封装的LLDP帧

上图是封装为SNAP格式的LLDP帧,每个字段的含义如下:

DA :目标MAC地址,固定多播MAC地址01-80-C2-00-00-0E。 SA )源MAC地址、端口MAC地址或设备MAC地址(如果有,则为端口MAC地址,否则为设备MAC地址)。 类型:帧类型,0xAAAA-0300-0000-88CC。 数据:数据,液晶屏PDU。 FCS :帧检查序列。 1.3目标地址实际有三个,分别为01-80-C2-00-00-0E、01-80-C2-00-03、01-80-C2-00-00-0E。 这三个地址分别用于不同的目的地,并且可以跨越不同的网络。

01-80-C2-00-00-0E也被称为Nearest Bridge组地址。 无论是two-portMACrelay(tpmr )组件、S-VLAN组件、C-VLAN组件还是802.1D网桥,目标都不能传输该地址的帧。 简单地说,任何类型的网桥都不能由目的地传输该地址的帧。 目标为该地址的帧仅限于在连接两个桥接接口的连接上传输。

01-80-C2-00-00-03也称为Nearest non-TPMR Bridge组地址。 对于目标地址为该地址的帧,two-portMACrelay(tpmr )组件将作为中继器,不接收。 S-VLAN组件、C-VLAN组件和802.1D网桥不能传输,必须接收和处理。 因此,目标地址为该地址的帧跨越TPMR。

01-80-C2-00-00-00,也称为Nearest non-Customer Bridge组地址:有关目标地址为该地址的帧,请参见two-portMACrelay(tpmr 无法传输C-VLAN组件和802.1D网桥,必须接收和处理。 因此,目的地地址为该地址的帧跨越TPMR和S-VLAN。

TPMR以及S-VLAN、C-VLAN都是802.1Q中的概念,包含这3个的网络及各地址的作用范围如下图所示。


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。

四、工作机制

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

初始化并维护本地MIB 库中的信息。 从本地MIB 库中提取信息,并将信息封装到LLDP 帧中。LLDP帧的发送有两种触发方式,一是定时器到期触发,一是设备状态发生了变化触发。 识别并处理接收到的LLDPDU帧 维护远端设备LLDP MIB 信息库。 当本地或远端设备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,则可能遇到没有内存的问题,标准没有规定必须如何处理,只是给出了一些建议:

忽略新的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协议的实现需要支持单独初始化发送或者接收功能。当工作模式发生变化时,需要根据老的/新的工作模式来关闭/打开发送或者接收的功能。

(转载自:http://blog.csdn.net/goodluckwhh/article/details/10948065)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。