LLDP网络协议帧(一)
LLDP(Link Layer Discovery Protocol,链路层发现协议)是IEEE 802.1ab中定义的第二层发现(Layer 2 Discovery)协议。LLDP提供了一种标准的链路层发现方式,可以将本端设备的主要能力、管理地址、设备标识、接口标识等信息封装到LLDP报文中传递给邻居节点,邻居节点在收到这些信息后将其以标准MIB(Management Information Base,管理信息库)的形式保存起来,供NMS(Network Management System,网络管理系统)查询及判断链路的通信状况。封装有LLDP数据单元LLDPDU(LLDP Data Unit)的报文称为LLDP报文,其封装格式有两种:Ethernet II和802.3 LLC SNAP(Subnetwork Access Protocol,子网访问协议)。
一、 LLDP帧格式
+--------------15---------------31
| DMAC |
+ ----------------|
| | |
+-------------- |
| SMAC |
+-------------------------------|
| Type |
| |
+-------------------------------|
| Data |
| (n bytes) |
+-------------------------------|
| FCS |
+-------------------------------|
二、LLDP帧格式释义
字段 | 长度 | 含义 |
---|---|---|
DMAC | 6字节 | LLDP帧的目的MAC地址。IEEE 802.1AB规定可以取如下3种值:
|
SMAC | 6字节 | 源MAC地址,为端口MAC地址或设备桥MAC地址(如果有端口地址则使用端口MAC地址,否则使用设备桥MAC地址)。 |
Type | 2或8字节 | 协议类型:
|
Data | 变长 |
数据字段,标识帧的负载,为LLDPDU。 LLDPDU就是封装在LLDP报文数据部分的数据单元。在组成LLDPDU之前,设备先将本地信息封装成TLV格式,再由若干个TLV组合成一个LLDPDU封装在LLDP报文的数据部分进行传送。 |
FCS | 4字节 |
帧校验序列FCS(Frame Check Sequence)是为接收网卡提供判断是否传输错误的一种方法,如果发现错误,丢弃此帧。 FCS只是通用叫法,具体的FCS还可以细分多种校验方法。在以太帧中,FCS通常采用循环冗余码校验CRC(Cyclical Redundancy Check)。 |
三、LLDPDU格式
LLDPDU包含了多个TLV,以Chasis ID TLV、Port ID TLV、TTL TLV这三个TLV开头,以End TLV结尾,中间是可选TLV,如图2。LLDP报文中必须包含这4个TLV,并且不能多于一个,否则就属于非法报文。可选携带即LLDP报文中可以包含也可以不包含这些TLV。IEEE 802.1AB标准中将TLV分为基本TLV(Basic TLV)、组织TLV(Organizationally Specific TLVs)以及保留TLV。
3.1、Format of the LLDPDU
+----------------------------------------------+
| Chassis ID TLV(Type = 1bytes) |
+----------------------------------------------+
| Port ID TLV(Type = 2bytes) |
+----------------------------------------------+
| TTL TLV (Type = 3bytes) |
+----------------------------------------------+
| Optional TLV (Type = 4bytes) |
+----------------------------------------------+
| ... |
+----------------------------------------------+
| Optional TLV |
+----------------------------------------------+
| End TLV |
+----------------------------------------------+
3.2、LLDPDU基本TLV的格式
+----------------------------------------------+
| Chassis ID (Type = 1bytes) |
+----------------------------------------------+
| Port ID (Type = 2bytes) |
+----------------------------------------------+
| Time To Live (Type = 3bytes) |
+----------------------------------------------+
| Port Description (Type = 4bytes) |
+----------------------------------------------+
| System Name (Type = 5bytes) |
+----------------------------------------------+
| System Description (Type = 6bytes)|
+----------------------------------------------+
| System Capabilities (Type = 7bytes)|
+----------------------------------------------+
| Management Address (Type = 8bytes)|
+----------------------------------------------+
| End of LLDPDU |
+----------------------------------------------+
3.3、 LLDPDU Basic TLV
TLV名称 | 说明 | 是否必须发布 |
---|---|---|
End of LLDPDU | 2字节的全零的TLV,用于标记LLDPDU的结尾。当端口的状态发生改变(比如去使能LLDP或者端口shut down)时,端口会向邻接设备发送一个LLDPDU,其中Time to Live TLV中的TTL=0,这个报文就是shutdown报文。所以End of LLDPDU TLV只有类型和长度,没有TLV information string字段。
该TLV的格式如下: +----------------------------------------------+ | TLV type = 0 (7 bits) | +----------------------------------------------+ | TLV information string length = 0 (9 bits) | +----------------------------------------------+ |
是 |
Chassis ID (Type = 1) |
表示发送该LLDP报文的设备的ID,每个LLDP报文必须包含且只能包含一个Chassis ID TLV。LLDPDU的第一个TLV必须是Chassis ID TLV。 该TLV的格式如下: +----------------------------------------------+ | TLV type = 1 (7 bits) | +----------------------------------------------+ | TLV information string length (9 bits) | +----------------------------------------------+ | chassis ID subtype (8 bits) | +----------------------------------------------+ | chassis ID (1 < n < 255 octets) | +----------------------------------------------+ Chassis ID TLV的TLV Value域必须以8比特的chassis ID subtype开头,其含义如下: ID子类 含义 参考标准 0 预留 - 1 Chassis component IETF RFC 4133 2 Interface alias IETF RFC 2863 3 Port component IETF RFC 4133 4 MAC address IEEE Std 802 5 Network address 网络地址是个1字节的字符串, 标识网络地址族和对应的网络地址。 5 Interface name IETF RFC 2863 6 Agent circuit ID IETF RFC 3046 7 Locally assigned 是一个本地分配的包含字母和数字的字符串 8-255 预留 在使用VRP ®(Versatile Routing Platform)作为软件平台的华为设备上,Chassis ID TLV设置为设备的网桥MAC地址,子类为4。 |
是 |
Port ID (Type = 2) |
LLDPDU的发送端口名称。每个LLDPDU必须包含且只能包含一个Port ID TLV。 该TLV的格式如下: +----------------------------------------------+ | TLV type = 2 (7 bits) | +----------------------------------------------+ | TLV information string length (9 bits) | +----------------------------------------------+ | port ID subtype (8 bits) | +----------------------------------------------+ | port ID (1 < n < 255 octets) | +----------------------------------------------+ Port ID TLV也携带了ID之类字段,含义如下: ID子类 含义 参考标准 0 预留 - 1 Interface alias IETF RFC 2863 2 Port component IETF RFC 4133 3 MAC address IEEE Std 802 4 Network address 网络地址是个1字节的字符串, 标识网络地址族和对应的网络地址。 5 Interface name IETF RFC 2863 6 Agent circuit ID IETF RFC 3046 7 Locally assigned 是一个本地分配的包含字母和数字的字符串 8-255 预留 在使用VRP ®(Versatile Routing Platform)作为软件平台的华为设备上,Port ID TLV设置为IF-MIB(IETF RFC 2863)的ifName叶子节点的值,即子类为5。 |
是 |
Time To Live (Type = 3) |
是一个4字节的TLV,用于标识LLDP在邻居设备的存活时间。该TLV的值是一个0–65535的整数,它用来告诉接收端发送信息的有效期限,所以如果发送端在一段时间后 没有更新该信息的话,接收端将丢弃该信息,对端接受到此TLV后,会用这个有效时间去更新其远端邻居的信息老化时间,它的单位为秒。 该TLV的格式如下: +----------------------------------------------+ | TLV type = 3 (7 bits) | +----------------------------------------------+ | TLV information string length = 2 (9 bits) | +----------------------------------------------+ | time to live (TTL) (2 octets) | +----------------------------------------------+ 每个LLDPDU必须包含且只能包含一个Time To Live TLV。 |
是 |
Port Description (Type = 4) | 标识了本地设备端口的描述信息,如果设备支持IETF RFC 2863,这个TLV的值应该与RFC 2863的iftable表项的ifDescr叶子节点值一致。在一个LLDPDU报文中,只能包含一个Port Description TLV。
该TLV的格式如下: +----------------------------------------------+ | TLV type = 4 (7 bits) | +----------------------------------------------+ | TLV information string length (9 bits) | +----------------------------------------------+ | port description (0 < n < 255 octets) | +----------------------------------------------+ |
否 |
System Name (Type = 5) | 标识了本地设备的完整域名,如果设备支持IETF RFC 3418,这个TLV的值应该与RFC 3418中的sysName的值一致。在一个LLDPDU报文中,只能包含一个System Name TLV。
该TLV的格式如下: +----------------------------------------------+ | TLV type = 5 (7 bits) | +----------------------------------------------+ | TLV information string length (9 bits) | +----------------------------------------------+ | system name (0 < n < 255 octets) | +----------------------------------------------+ |
否 |
System Description (Type = 6) | 标识了本地设备的全称、系统硬件类型的版本号、操作系统、网络软件等。如果设备支持IETF RFC 3418,这个TLV 的值应该与RFC 3418中的sysDesc的值一致。在一个LLDPDU报文中,只能包含一个System Description TLV。
该TLV的格式如下: +----------------------------------------------+ | TLV type = 6 (7 bits) | +----------------------------------------------+ | TLV information string length (9 bits) | +----------------------------------------------+ | system description (0 < n < 255 octets) | +----------------------------------------------+ |
否 |
System Capabilities (Type = 7) |
标识设备支持的功能以及已使能的功能。如果该TLV列出的已使能功能不包含在系统支持功能中,该TLV会被视为有错误而被丢弃。 该TLV的格式如下: +----------------------------------------------+ | TLV type = 7 (7 bits) | +----------------------------------------------+ | TLV information string length = 4 (9 bits) | +----------------------------------------------+ | chassis ID subtype (8 bits) | +----------------------------------------------+ | system capabilities (2 octets) | +----------------------------------------------+ | enabled capabilities (2 octets) | +----------------------------------------------+ 系统功能及相应的标识位: 比特 支持能力 参考标准 1 Other - 2 Repeater IETF RFC 2108 3 MAC Bridge IEEE Std 802.1D 4 WLAN Access Point IEEE Std 802.11 MIB 5 Router IETF RFC 1812 6 Telephone IETF RFC 4293 7 DOCSIS cable device IETF RFC 4639 and IETF RFC 4546 8 Station Only IETF RFC 4293 9 C-VLAN Component IEEE Std 802.1Q 10 S-VLAN Component IEEE Std 802.1Q 11 Two-port MAC Relay (TPMR) IEEE Std 802.1Q 12–16 Reserved - |
否 |
Management Address (Type = 8) | 管理地址,以及对应的接口号和OID(Object Identifier,对象标识)。
该TLV的格式如下: +----------------------------------------------+ | TLV type= 8 (7 bits) | +----------------------------------------------+ | TLV information string length (9 bits) | +----------------------------------------------+ | management address string length (1 octet) | +----------------------------------------------+ | management address subtype (1 octet) | +----------------------------------------------+ | management address ( 1-31 octets) | +----------------------------------------------+ | interface numbering subtype (1 octet) | +----------------------------------------------+ | interface number (4 octets) | +----------------------------------------------+ | OID string length (1 octet) | +----------------------------------------------+ | object identifier (0-128 octets) | +----------------------------------------------+ |
否 |
四、组织自定义TLV的格式
该类TLV允许不同组织,例如IEEE 802.1、IEEE 802.3、IETF等标准组织,或者软件或设备厂商,自定义TLV。
4.1、组织自定义TLV的格式
+----------------------------------------------+
| TLV type= 127 (7 bits) |
+----------------------------------------------+
| TLV information string length (9 bits) |
+----------------------------------------------+
| organizationally unique identifier (OUI) |
| (3 octets) |
+----------------------------------------------+
| organizationally defined subtype (1 octet) |
+----------------------------------------------+
| organizationally defined information string |
| (0 < n < 507 octets) |
+----------------------------------------------+
4.2、组织自定义TLV的格式格式说明
Field | Length | Description |
---|---|---|
TLV type | 7比特 | 值为127,所以组织自定义TLV都采用这个值。 |
TLV information string length | 9比特 | 标识了TLV信息域的长度,字节为单位。 |
organizationally unique identifier (OUI) | 3字节 | 组织OUI标记,唯一标识了一个组织,在IEEE Std 802标准的第9章节定义了组织的OUI。 |
organizationally defined subtype | 1字节 | 组织自定义的TLV子类。 |
organizationally defined information string | 0 - 507字节 |
组织自定义TLV的信息域。 |
LLDP网络协议帧(二) https://www.wlgly.net/post-49.html
发表评论