CDP,LLDP,STP知识详解
(1) CDP
CDP(Cisco Discovery Protoco:Cisco发现协议)是Cisco专有的用来发现邻接点的协议 ,所有的Cisco产品都支持CDP。CDP只显示直接相连的邻居信息,如果中间隔了一个其他设备,也就是跨设备的话,CDP是不能发现的,所以CDP的目的是获取直接相邻设备的信息。CDP非常有助于验证一台路由器是否连在它邻居的适当端口。
要运行CDP协议,物理介质必须支持SNAP协议(SubNetwork Access Protocol:子网络访问协议)。SNAP规范了在IEEE802 网络上传输IP 数据报的标准方法。
CDP协议是数据链路层协议,运行CDP的路由器定时广播带有CDP更新数据的报文。默认情况下,路由器每60秒以01-00-0c-cc-cc-cc 为目的地址发送一次组播通告,当达到180秒的holdtime上限后仍未获得邻居设备的通告时,将清除邻居设备信息。
cdp相关命令如下:
cdp run命令:这个命令是用来在全局模式下开启CDP协议,默认情况下,CDP协议在全局模式下是开启的,我们可以通过使用no cdp run命令来关闭CDP协议,运行完毕no cdp run后,网络内的所有设备(包括交换机与路由器)的CDP协议都将被禁用掉。
cdp enable命令:这个命令需要在端口模式下配置,它在一个特定的端口开启CDP协议,在默认情况下,CDP支持所有的端口发送和接收CDP协议消息,可是在例如异步端口,CDP协议是关闭的。我们也可以通过使用no cdp enable来在某个端口关闭CDP协议消息更新。如果在全局模式下用no cdp run命令手动关闭了CDP协议,网络端口就不能开启CDP协议。
show cdp命令:这个命令的功能是显示发送CDP协议消息的间隔时间。我们还可以通过这个命令来查看CDP协议的版本信息。
show cdp entry {*|device-name[*][protocol |version]},我们可以用show cdp entry命令来查看特定邻居设备的信息,通过这个命令,我们可以查看特定邻居的IP地址、硬件平台、相连接的端口、IOS版本信息。
show cdp interface [type number],如果你想查看CDP协议在特定端口是开启的还是关闭的,可以使用show cdp interface命令,这个命令也可以显示CDP的消息更新时间等内容。
show cdp neighbors [type number] [detail]用show cdp neighbors命令我们可以获得相连接的CDP邻居的平台、设备类型和相连接的端口等信息。
clear cdp counters命令:这个命令是用来重置CDP协议流量计数器的,当使用这个命令后,我们再用show cdp traffic命令时,就会看到所有的进出CDP数据包信息等信息都被清空了。
(2) LLDP (一)
LLDP 产生背景
目前,网络设备的种类日益繁多且各自的配置错综复杂,为了使不同厂商的设备能够在网络中相互发现并交互各自的系统及配置信息,需要有一个标准的信息交流平台。
LLDP( Link Layer Discovery Protocol,链路层发现协议)就是在这样的背景下产生的,它提供了一种标准的链路层发现方式,可以将本端设备的的主要能力、管理地址、设备标识、接口标识等信息组织成不同的 TLV( Type/Length/Value, 类型/长度/值), 并封装在 LLDPDU( Link Layer Discovery Protocol Data Unit,链路层发现协议数据单元)中发布给与自己直连的邻居,邻居收到这些信息后将其以标准 MIB( Management Information Base,管理信息库)的形式保存起来,以供网络管理系统查询及判断链路的通信状况。
LLDP 基本概念
1. LLDP 报文
封装有 LLDPDU 的报文称为 LLDP 报文,其封装格式有两种: Ethernet II 和 SNAP(Subnetwork Access Protocol,子网访问协议)。
(1) Ethernet II 格式封装的 LLDP 报文
图 1 Ethernet II 格式封装的 LLDP 报文
如 图 1 所示,是以Ethernet II格式封装的LLDP报文,其中各字段的含义如下:
z Destination MAC address:目的 MAC 地址,为固定的组播 MAC 地址 0x0180-C200-000E。
z Source MAC address:源 MAC 地址,为端口 MAC 地址或设备桥 MAC 地址(如果有端口地址则使用端口 MAC 地址,否则使用设备桥 MAC 地址)。
z Type:报文类型,为 0x88CC。
z Data:数据,为 LLDPDU。
z FCS:帧检验序列。
(2) SNAP 格式封装的 LLDP 报文
技术介绍
局域网协议 LLDP
2
图 2 SNAP 格式封装的 LLDP 报文
如 图 2所示,是以SNAP格式封装的LLDP报文,其中各字段的含义如下:
z Destination MAC address:目的 MAC 地址,为固定的组播 MAC 地址 0x0180-C200-000E。
z Source MAC address:源 MAC 地址,为端口 MAC 地址或设备桥 MAC 地址(如果有端口地
址则使用端口 MAC 地址,否则使用设备桥 MAC 地址)。
z Type:报文类型,为 0xAAAA-0300-0000-88CC。
z Data:数据,为 LLDPDU。
z FCS:帧检验序列。
2. LLDPDU
LLDPDU 就是封装在 LLDP 报文数据部分的数据单元。在组成 LLDPDU 之前,设备先将本地信息封装成 TLV 格式,再由若干个 TLV 组合成一个 LLDPDU 封装在 LLDP 报文的数据部分进行传送。
图 3 LLDPDU
如 图 3所示, 每个LLDPDU共可携带28 种TLV, 其中深蓝色的Chasis ID TLV、 Port ID TLV、 TTL TLV和End TLV这四种是必须携带的,其余的TLV则为可选携带。
3. TLV
TLV 是组成 LLDPDU 的单元,每个 TLV 都代表一个信息。 LLDP 可以封装的 TLV 包括基本TLV、802.1 组织定义 TLV、 802.3 组织定义 TLV 和 LLDP-MED( Media Endpoint Discovery,媒体终端发现) TLV。
基本 TLV 是网络设备管理基础的一组 TLV, 802.1 组织定义 TLV、802.3 组织定义 TLV 和 LLDP-MEDTLV 则是由标准组织或其他机构定义的 TLV,用于增强对网络设备的管理,可根据实际需要选择是否在 LLDPDU 中发送。
(1) 基本 TLV
在基本TLV中,有几种TLV对于实现LLDP功能来说是必选的,即必须在LLDPDU中发布,如 表 1 所示。
表 1 基本 TLV
TLV 名称 说明 是否必须发布
End of LLDPDU 标识 LLDPDU 结束 是
Chassis ID 发送设备的桥 MAC 地址 是
Port ID标识 LLDPDU 发送端的端口。当设备不发送MED TLV 时,内容为端口名称;当设备发送 MED TLV 时,内容为端口的 MAC 地址,没有端口 MAC 时使用桥 MAC是
Time To Live 本设备信息在邻居设备上的存活时间 是
Port Description 以太网端口的描述字符串 否
System Name 设备的名称 否
System Description 系统描述 否
System Capabilities 系统的主要功能以及已使能的功能项 否
Management Address 管理地址,以及对应的接口号和 OID( Object Identifier,对象标识) 否
(2) 802.1 组织定义 TLV
IEEE 802.1 组织定义TLV的内容如 表 2所示。
表 2 IEEE 802.1 组织定义的 TLV
TLV 名称 说明
Port VLAN ID 端口的 VLAN ID
Port And Protocol VLAN ID 端口的协议 VLAN ID
VLAN Name 端口 VLAN 的名称
Protocol Identity 端口支持的协议类型
(3) 802.3 组织定义 TLV
IEEE 802.3 组织定义TLV的内容如 表 3所示。
表 3 IEEE 802.3 组织定义的 TLV
TLV 名称 说明MAC/PHY Configuration/Status 端口的速率和双工状态、是否支持端口速率自动协商、是否已使能自动协商功能以及当前的速率和双工状态Power Via MDI 端口的供电能力Link Aggregation 端口是否支持链路聚合以及是否已使能链路聚合Maximum Frame Size 端口支持的最大帧长度,取端口配置的 MTU( Max Transmission Unit,最大
传输单元)
(4) LLDP-MED TLV
LLDP-MED TLV为VoIP( Voice overIP,在IP上传送语音)提供了许多高级的应用,包括基本配置、网络策略配置、地址信息以及目录管理等,满足了语音设备的不同生产厂商在成本有效、易部署、技术介绍局域网协议 LLDP
4
易管理等方面的要求,并解决了在以太网中部署语音设备的问题,为语音设备的生产者、销售者以及使用者提供了便利。LLDP-MED TLV的内容如 表 4所示。
表 4 LLDP-MED TLV
TLV 名称 说明
LLDP-MED Capabilities 当前设备的 MED 设备类型以及在 LLDPDU 中可封装的 LLDP-MED TLV 类型Network Policy 端口的 VLAN ID、支持的应用(如语音和视频)、应用优先级以及使用策略等
Extended Power-via-MDI 当前设备的供电能力
Hardware Revision MED 设备的硬件版本
Firmware Revision MED 设备的固件版本
Software Revision MED 设备的软件版本
Serial Number MED 设备的序列号
Manufacturer Name MED 设备的制造厂商
Model Name MED 设备的模块名
Asset ID MED 设备的资产标识符,以便目录管理和资产跟踪
Location Identification 位置标识信息,供其它设备在基于位置的应用中使用
4. 管理地址
管理地址是供网络管理系统标识网络设备并进行管理的地址。管理地址可以明确地标识一台设备,从而有利于网络拓扑的绘制, 便于网络管理。 管理地址被封装在 LLDP 报文的 Management Address TLV 中向外发布。
LLDP 工作机制
1. LLDP 的工作模式
LLDP 有以下四种工作模式:
z TxRx:既发送也接收 LLDP 报文。
z Tx:只发送不接收 LLDP 报文。
z Rx:只接收不发送 LLDP 报文。
z Disable:既不发送也不接收 LLDP 报文。
当端口的 LLDP 工作模式发生变化时,端口将对协议状态机进行初始化操作。为了避免端口工作模式频繁改变而导致端口不断执行初始化操作,可配置端口初始化延迟时间,当端口工作模式改变时延迟一段时间再执行初始化操作。
2. LLDP 报文的发送机制
当端口工作在 TxRx 或 Tx 模式时,设备会周期性地向邻居设备发送 LLDP 报文。如果设备的本地配置发生变化则立即发送 LLDP 报文,以将本地信息的变化情况尽快通知给邻居设备。但为了防止本地信息的频繁变化而引起 LLDP 报文的大量发送,每发送一个 LLDP 报文后都需延迟一段时间后再继续发送下一个报文。
技术介绍
局域网协议 LLDP
5
当设备的工作模式由 Disable/Rx 切换为TxRx/Tx, 或者发现了新的邻居设备(即收到一个新的 LLDP报文且本地尚未保存发送该报文设备的信息)时,该设备将自动启用快速发送机制,即将 LLDP 报文的发送周期缩短为 1
3. LLTP (2)
一、LLDP协议概述
随着网络技术的发展,接入网络的设备的种类越来越多,配置越来越复杂,来自不同设备厂商的设备也往往会增加自己特有的功能,这就导致在一个网络中往往会有很多具有不同特性的、来自不同厂商的设备,为了方便对这样的网络进行管理,就需要使得不同厂商的设备能够在网络中相互发现并交互各自的系统及配置信息。
LLDP(Link Layer Discovery Protocol,链路层发现协议)就是用于这个目的的协议。LLDP定义在802.1ab中,它是一个二层协议,它提供了一种标准的链路层发现方式。LLDP协议使得接入网络的一台设备可以将其主要的能力,管理地址,设备标识,接口标识等信息发送给接入同一个局域网络的其它设备。当一个设备从网络中接收到其它设备的这些信息时,它就将这些信息以MIB的形式存储起来。
这些MIB信息可用于发现设备的物理拓扑结构以及管理配置信息。需要注意的是LLDP仅仅被设计用于进行信息通告,它被用于通告一个设备的信息并可以获得其它设备的信息,进而得到相关的MIB信息。它不是一个配置、控制协议,无法通过该协议对远端设备进行配置,它只是提供了关于网络拓扑以及管理配置的信息,这些信息可以被用于管理、配置的目的,如何用取决于信息的使用者。
LLDP的框架结构如图所示:
此图也表明LLDP就是一个信息发现与通告协议,LLDP的实体主要维护了两个MIB库,一个 local system MIB,一个remote system MIB。从其名字也可以看出,一个用于维护本地相关的设备MIB信息,一个用于维护远端设备MIB信息。
LLDP通过与上图中右侧的几个MIB库交互来初始化并维护 local system MIB,并将本地的相关信息通告出去;同时当接收到来自其它设备的信息时就将其更新到remote system MIB中。通过这种工作方式,一个设备就可以将自己的信息通告出去并获得网络中其它设备的相关信息,最终获得反应网络拓扑以及其它配置信息的两个MIB库。这两个库可以被其用户用来完成各种功能。
需要说明的是LLDP信息的通告以及接收处理不受端口的STP状态的影响。
封装有 LLDPDU 的报文称为 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:帧检验序列。
目地地址实际上包括三个,分别为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中的概念,包括这三者的网络以及各个地址的作用范围如下图所示:
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 TimeTo Live TLV和End Of LLDPDU TLV之间可以包含0个到多个可选的其它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。
· organizationallydefined subtype:组织自定义的类型。
· organizationallydefined information string:传输的信息。
几个强制的必须包含的TLV的定义如下。非强制的可以参考IEEE802.1AB。
该TLV用于标识LLDPDU的结束。其格式如下:
由于length=0,因此它不包含value域。
该TLV用于通告该LLDPDU发送者的chassis ID。由于有很多方式可用来标识一个chassis,因此在该类TLV中包含一个子类型域用于告诉接收者,发送者的chassis ID采用的是哪一种标识方式。其格式如图所示:
每个LLDPDU必须包含且仅包含一个该类型的TLV。由于chassis ID实际上是用于标识设备的,因此在连接可用时它应该保持不变。
chassis子类型所可能的取值如图所示:
它用于标识发送该LLDPDU的设备的端口。类似于chassis ID,有很多方式可以标识一个Port,因此该TLV也包含一个子类型域。其格式如下图所示:
每个LLDPDU必须包含一个且只能包含一个该类型的TLV。同时,当端口可用时,从该端口发送出去的LLDPDU的该TLV应该保持不变。
其子类型的可能取值如下图所示:
该TLV用于告诉接收端,它接收到的这些信息的有效期有多长。其格式如图所示:
TTL的时间单位是秒,由于只有2个字节长,因而最大有效时间是65536秒。如果在这个时间到期了还没有新的LLDPDU被收到,则该TLV所属的那个LLDPDU携带的信息会被从MIB中删除。如果收到了新的LLDPDU,则:
· 如果TTL不为0,则会用新收到的LLDPDU的信息替换MIB库中的相应的信息(即与该LLDPDU的发送者相关的MIB信息,LLDP使用ChassisID + Port ID来判断是否来自于同一个源,这也是要求这两者保持不变的原因)。
· 如果TTL为0,则删除相应的MIB库中的信息(即与该LLDPDU的发送者相关的MIB信息)。因此TTL为0的LLDPDU又被称为SHUTDOWN LLDPDU。
每一个LLDPDU必须包含且只能包含一个该类型的TLV。
LLDP是一个用于信息通告和获取的协议,但是需要注意的一点是,LLDP发送的信息通告不需要确认,不能发送一个请求来请求获取某些信息,也就是说LLDP是一个单向的协议,只有主动通告一种工作方式,无需确认,不能查询、请求(比如像ARP协议那样请求某个IP的MAC地址)。
LLDP主要完成如下工作:
1. 初始化并维护本地MIB 库中的信息。
2. 从本地MIB 库中提取信息,并将信息封装到LLDP 帧中。LLDP帧的发送有两种触发方式,一是定时器到期触发,一是设备状态发生了变化触发。
3. 识别并处理接收到的LLDPDU帧
4. 维护远端设备LLDP MIB 信息库。
5. 当本地或远端设备MIB信息库中有信息发生变化时,发出通告事件。
LLDPDU的发送可以被如下事件触发:
· 与本地MIB信息库相关联的定时器txTTR到期时,这将确保远端接收系统中的相关信息不会因为TTL到期而过期。
· 本地MIB信息库中的信息发生了改变时,会立即发送LLDPDU,这将保证改变能及时被更新。
· 如果一个“新邻居”被识别,将会启用快速发送机制,在很短的时间内连续发送指定数量(txFastInit,默认值为4)的LLDPDU,以确保“新邻居”能被快速更新。如果远端系统MIB信息库因为过载(tooManyNeighbors)而不能容纳新的邻居信息,则会为了避免过多的PDU传输而抑制快速发送行为。
LLDP的常规发送时间是建立在系统的tick之上的,间隔为1秒一个,为了防止在共享介质的LAN(sharedmedia LAN)中同时出现大量的LLDPDU(因为接入同一个LAN的多个系统的时间是同步的,因而多个系统上的基于tick的1秒定时器可能同时到期),发送定时器引入了一个随机的抖动,这就使得常规的LLDP帧的发送间隔时间的平均值仍是1秒,但是具体到某一次到期时间可能并不是准确的1秒。
同时为了防止在有多个端口需要发送LLDPDU的系统中,所有的端口的定时器都在同一时间到期,因而标准建议将采用某种机制将多个发送实例的定时器到期时间给错开,以避免一个系统在同一时刻发送大量的LLDPDU。
LLDPDU的发送状态机如图所示
对于该状态机:
· 为了防止过于频繁的重新初始化发送状态机,在LLDP的发送状态机中引入了一个延时,该延时限制了在关闭发送状态机后,必须至少等待多长时间才能重新初始化发送状态机。
· 是否发送SHUTDOWNLLDPDU由本地的LLDP工作状态决定。
· 是否发送正常的LLDPDU由txNow和txCredit决定。这两个变量都由发送定时器状态机更新。txNow决定是否发送,而txCredit则是一个信用量,决定了可以发送的量,如果是0则不允许发送,只有大于0的值才允许发送,每发送一个该值就减1。更重要的是在本地信息快速改变时,txCredit即允许连续发送多个LLDPDU,但是又对可以连续发送的LLDPDU帧数做了限制,这使得本地状态的快速改变可以及时被通告出去,但是又不能无限发送导致网络出现大量LLDPDU帧。
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外,还会处理其它的定时功能。
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信息库。
在前两步都通过之后,LLDPDU的接收者就需要根据解析出来的信息更新远端MIB信息库。在MIB信息库中,LLDP使用chassisID + Port ID来标识、存储来自不同源的信息。
· 如果远端MIB库中已经有对应于该chassis ID + Port ID的信息,则使用收到的帧中的新的TTL来更新TTL。并用对于收到的新的LLDPPDU中的每一种type,如果有变化就进行更新,如果某种type原来不存在,则需要将其添加到MIB库中。
· 如果实现不支持某种类型的type,则
o 如果type不是127,则按照基本TLV的格式将其存储到远端MIB库,存储格式为type,length,value。
o 如果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信息)。
如果一个chassisID + Port ID标识的信息的TTL超时,则相应的MIB信息会被删除。
LLDPDU的接收状态机如图所示:
LLDP可以工作在多种模式下:
· TxRx:既发送也接收LLDP 帧。
· Tx:只发送不接收LLDP 帧。
· Rx:只接收不发送LLDP 帧。
· Disable:既不发送也不接收LLDP 帧(准确的说,这并不是一个LLDP的状态,这可能是LLDP功能被关闭了,也可能是设备就不支持)。
由于LLDP可以单独工作在发送或接收模式下,因此LLDP协议的实现需要支持单独初始化发送或者接收功能。当工作模式发生变化时,需要根据老的/新的工作模式来关闭/打开发送或者接收的功能。
(4) STP
1. STP的用途
STP(Spanning Tree Protocol,生成树协议)是根据IEEE协会制定的802.1D标准建立的,用于在局域网中消除数据链路层物理环路的协议。运行该协议的设备通过彼此交互报文发现网络中的环路,并有选择的对某些端口进行阻塞,最终将环路网络结构修剪成无环路的树型网络结构,从而防止报文在环路网络中不断增生和无限循环,避免主机由于重复接收相同的报文造成的报文处理能力下降的问题发生。STP包含了两个含义,狭义的STP是指IEEE802.1D中定义的STP协议,广义的STP是指包括IEEE 802.1D定义的STP协议以及各种在它的基础上经过改进的生成树协议。
2. STP的协议报文
STP采用的协议报文是BPDU(Bridge Protocol Data Unit,桥协议数据单元),也称为配置消息。STP通过在设备之间传递BPDU来确定网络的拓扑结构。BPDU中包含了足够的信息来保证设备完成生成树的计算过程。
BPDU在STP协议中分为两类:
配置BPDU(ConfigurationBPDU):用于进行生成树计算和维护生成树拓扑的报文。
TCN BPDU(Topology Change Notification BPDU):当拓扑结构发生变化时,用于通知相关设备网络拓扑结构发生变化的报文。
3. STP的基本概念
(1) 根桥
树形的网络结构,必须要有树根,于是STP引入了根桥(Root Bridge)的概念。根桥在全网中只有一个,而且根桥会根据网络拓扑的变化而改变,因此根桥并不是固定的。
网络收敛后,根桥会按照一定的时间间隔产生并向外发送配置BPDU,其他的设备对该配置BPDU进行转发,从而保证拓扑的稳定。
(2)根端口
所谓根端口,是指一个非根桥的设备上离根桥最近的端口。根端口负责与根桥进行通信。非根桥设备上有且只有一个根端口,根桥上没有根端口。
(3)指定桥与指定端口
指定桥与指定端口的含义
分类 | 指定桥 | 指定端口 |
对于一台设备而言 | 与交换机直接相连并且负责向交换机转发BPDU报文的设备 | 指定桥向本机转发BPDU报文的端口 |
对于一个局域网而言 | 负责向本网段转发BPDU报文的设备 | 指定桥向本网段转发BPDU报文的端口 |
(4)路径开销
路径开销是STP协议用于选择链路的参考值。STP协议通过计算路径开销,选择较为“强壮”的链路,阻塞多余的链路,将网络修剪成无环路的树型网络结构。
4. STP的基本原理
STP通过在设备之间传递BPDU来确定网络的拓扑结构。配置消息中包含了足够的信息来保证设备完成生成树的计算过程,其中包含的几个重要信息如下:
根桥ID:由根桥的优先级和MAC地址组成;
根路径开销:到根桥的最短路径开销;
指定桥ID:由指定桥的优先级和MAC地址组成;
指定端口ID:由指定端口的优先级和端口名称组成;
配置消息在网络中传播的生存期:Message Age;
配置消息在交换机中能够保存的最大生存期:Max Age;
配置消息发送的周期:Hello Time;
端口状态迁移的延时:Forward Delay。
(1) STP算法实现的具体过程
初始状态
各台设备在初始时会生成以自己为根桥的BPDU报文消息,根路径开销为0,指定桥ID为自身设备ID,指定端口为本端口。
最优配置消息的选择
各台设备都向外发送自己的配置消息,同时也会收到其他设备发送的配置消息。最优配置消息的选择过程如下:
1、每个端口收到配置消息后的处理过程如下:
当端口收到的配置消息比本端口配置消息的优先级低时,设备会将接收到的配置消息丢弃,对该端口的配置消息不作任何处理。
当端口收到的配置消息比本端口配置消息的优先级高时,设备就用接收到的配置消息中的内容替换该端口的配置消息中的内容。
2、设备将所有端口的配置消息进行比较,选出最优的配置消息。
配置消息的比较原则如下:
根桥ID较小的配置消息优先级高;若根桥ID相同,则比较根路径开销,比较方法为:用配置消息中的根路径开销加上本端口对应的路径开销,假设两者之和为S,则S较小的配置消息优先级较高;若根路径开销也相同,则比较以下的配置消息优先级,优先级较高的为根桥:指定桥ID、指定端口ID、接收该配置消息的端口ID等,。
根桥的选择
网络初始化时,网络中所有的STP设备都认为自己是“根桥”,根桥ID为自身的桥ID。通过交换配置消息,设备之间比较根桥ID,网络中根桥ID最小的设备被选为根桥。
根端口、指定端口的选择
根端口、指定端口的选择过程如下。
1、 非根桥设备将接收最优配置消息的那个端口定为根端口。
2、设备根据根端口的配置消息和根端口的路径开销,为每个端口计算一个指定端口配置消息:
根桥ID替换为根端口的配置消息的根桥ID;
根路径开销替换为根端口配置消息的根路径开销加上根端口对应的路径开销;指定桥ID替换为自身设备的ID;指定端口ID替换为自身端口ID。
3、设备使用计算出来的配置消息和需要确定端口角色的端口上的配置消息进行比较,并根据比较结果进行不同的处理:
如果计算出来的配置消息优,则设备就将该端口定为指定端口,端口上的配置消息被计算出来的配置消息替换,并周期性向外发送。
如果端口上的配置消息优,则设备不更新该端口配置消息并将此端口阻塞,该端口将不再转发数据,只接收但不发送配置消息;
说明:
在拓扑稳定状态,只有根端口和指定端口转发流量,其他的端口都处于阻塞状态,它们只接收STP协议报文而不转发用户流量。
一旦根桥、根端口、指定端口选举成功,则整个树形拓扑就建立
下面结合例子说明STP算法实现的计算过程。具体的组网如图1-2所示,Device A的优先级为0,Device B的优先级为1,DeviceC的优先级为2,各个链路的路径开销分别为5、10、4。
各台设备的初始状态
各台设备的初始状态如表1-4所示。
各台设备的比较过程及结果如表1-5所示。
设备 | 比较过程 | 比较后端口的配置消息 |
Device A | 端口AP1收到Device B的配置消息{1,0,1,BP1},Device A发现本端口的配置消息{0,0,0,AP1}优于接收到的配置消息,就把接收到的配置消息丢弃。 端口AP2收到Device C的配置消息{2,0,2,CP1},Device A发现本端口的配置消息{0,0,0,AP2}优于接收到的配置消息,就把接收到的配置消息丢弃。 Device A发现自己各个端口的配置消息中根桥和指定桥都是自己,则认为自己是根桥,各个端口的配置消息都不作任何修改,以后周期性的向外发送配置消息 | AP1:{0,0,0,AP1} AP2:{0,0,0,AP2} |
Device B | 端口BP1收到来自Device A的配置消息{0,0,0,AP1},Device B发现接收到的配置消息优于本端口的 配置消息{1,0,1,BP1},于是更新端口BP1的配置消息。 端口BP2收到来自Device C的配置消息{2,0,2,CP2},Device B发现本端口的配置消息{1,0,1,BP2} 优于接收到的配置消息,就把接收到的配置消息丢弃。 | BP1:{0,0,0,AP1} BP2:{1,0,1,BP2} |
Device B对各个端口的配置消息进行比较,选出端口BP1的配置消息为最优配置消息,然后将端口BP1定为根端口,它的配置消息不作改变。 Device B根据根端口BP1的配置消息和根端口的路径开销5,为BP2端口计算一个指定端口配置消息{0,5,1,BP2}。 Device B使用计算出来的配置消息{0,5,1,BP2}和端口BP2上的配置消息进行比较,比较的结果是计算出来的配置消息较优,则Device B将端口BP2定为指定端口,它的配置消息被计算出来的配置消息替换,并周期性向外发送。 | 根端口BP1:{0,0,0,AP1} 指定端口BP2:{0,5,1,BP2} | |
Device C | 端口CP1收到来自Device A的配置消息{0,0,0,AP2},Device C发现接收到的配置消息优于本端口的 配置消息{2,0,2,CP1},于是更新端口CP1的配置 消息。 端口CP2收到来自Device B端口BP2更新前的配置 消息{1,0,1,BP2},Device C发现接收到的配置消息优于本端口的配置消息{2,0,2,CP2},于是更新端口CP2的配置消息。 | CP1:{0,0,0,AP2} CP2:{1,0,1,BP2}
|
| 经过比较: 端口CP1的配置消息被选为最优的配置消息,端口CP1就被定为根端口,它的配置消息不作改变。 将计算出来的指定端口配置消息{0,10,2,CP2}和端口CP2的配置消息进行比较后,端口CP2转为指定端口,它的配置消息被计算出来的配置消息替换。 | 根端口CP1: {0,0,0,AP2} 指定端口CP2: {0,10,2,CP2} |
| 接着端口CP2 会收到Device B 更新后的配置消息{0,5,1,BP2},由于收到的配置消息比原配置消息优,则Device C 触发更新过程。 同时端口CP1 收到Device A 周期性发送来的配置消息,比较后Device C 不会触发更新过程。 | CP1:{0,0,0,AP2} CP2:{0,5,1,BP2} |
| 经过比较: 端口CP2 的根路径开销9(配置消息的根路径开销5+端口CP2 对应的路径开销4)小于端口CP1 的根路径开销10(配置消息的根路径开销0+端口CP1 对应的路径开销10),所以端口CP2 的配置消息被选为最优的配置消息,端口CP2 就被定为根端口,它的配置消息就不作改变。 将端口CP1 的配置消息和计算出来的指定端口配置消息比较后,端口CP1 被阻塞,端口配置消息不变,同时不接收从Device A 转发的数据,直到新的情况触发 生成树的计算,比如从Device B 到Device C 的链路down 掉。 | 阻塞端口CP1: {0,0,0,AP2} 根端口CP2: {0,5,1,BP2} |
经过上表的比较过程,此时以Device A为根桥的生成树就确定下来了,形状如图1-3所示。
(2)STP 的配置消息传递机制
当网络初始化时,所有的设备都将自己作为根桥,生成以自己为根的配置消息,并以Hello Time 为周期定时向外发送。
接收到配置消息的端口如果是根端口,且接收的配置消息比该端口的配置消息优,则设备将配置消息中携带的Message Age 按照一定的原则递增,并启动
定时器为这条配置消息计时,同时将此配置消息从设备的指定端口转发出去。
如果指定端口收到的配置消息比本端口的配置消息优先级低时,会立刻发出自己的更好的配置消息进行回应。
如果某条路径发生故障,则这条路径上的根端口不会再收到新的配置消息,旧的配置消息将会因为超时而被丢弃,设备重新生成以自己为根的配置消息并向外发送BPDU 和TCN BPDU,从而引发生成树的重新计算,得到一条新的通路替代发生故障的链路,恢复网络连通性。
不过,重新计算得到的新配置消息不会立刻就传遍整个网络,因此旧的根端口和指定端口由于没有发现网络拓扑变化,将仍按原来的路径继续转发数据。如果新选出的根端口和指定端口立刻就开始数据转发的话,可能会造成暂时性的环路。
(3)STP 定时器
STP计算中,需要使用三个重要的时间参数:Forward Delay、Hello Time 和MaxAge。
ForwardDelay 为交换机状态迁移的延迟时间。
链路故障会引发网络重新进行生成树的计算,生成树的结构将发生相应的变化。不过重新计算得到的新配置消息无法立刻传遍整个网络,如果新选出的根端口和指定端口立刻就开始数据转发的话,可能会造成暂时性的路径回环。
为此,生成树协议采用了一种状态迁移的机制,根端口和指定端口重新开始数据转发之前要经历一个中间状态,中间状态经过2 倍的Forward Delay 的延时后才能进入Forwarding 状态,这个延时保证了新的配置消息已经传遍整个网络。
Hello Time 用于交换机检测链路是否存在故障。
交换机每隔Hello Time 时间会向周围的交换机发送hello 报文,以确认链路是否存在故障。
Max Age 是用来判断配置消息在交换机内保存时间是否“过时”的参数,交换机会将过时的配置消息丢弃。
STP作用:为了防止单点故障,做交换机冗余,但是冗余外会带来广播环路,形成广播风暴,开启STP的交换机互相发送BPDU,通过比较优先级大小,选定根桥和根端口,和指定端口,没有被选为指定端口的端口处于阻塞状态,只能转发BPDU,不能通过数据。
1.选举根桥:根据优先级,默认32768,如果优先级相同,则比较mac地址,谁小谁根桥
#spanning-tree vlan1 priority 4096 讲优先级改为4096
或者
#spanning-tree vlan1 root primary(主根桥)或者 secondary(备用根桥)
2.在接口修改开销值,以便选取指定端口
#int f0/1
#spanning-tree vlan1 cost 10