探究LLDP协议
探究LLDP
LLDP 是网络工程中非常常见的协议,用于网络设备之间自动发现;
早先各个网络设备厂商有自己的设备发现协议(比如思科的 cdp 协议)用于设备之间的发现和沟通,但由于是私有协议,各家之间无法互通相互兼容;后来 IEEE 定义了公有的 LLDP 协议,统一了邻居发现协议;
什么是LLDP
LLDP 是“链路层发现协议”的缩写,定义在 IEEE 802.1ab 中的一个二层协议,接入网络的设备可以通过该协议将管理地址、设备标识、接口标识等信息发送给同其它设备。
运行 LLDP 协议的进程叫做LLDP agent,LLDP是以端口为基本单位运行的,也就是说同一设备的不同端口可以表现出不同行为;
LLDP 协议在网络层面上是无状态的,只是发送通告,没有逻辑上的数据交互,因此部署该协议可以是单向的,只发送、只接收、发又收、不发不收都是可以的,这种收发行为称为 “Admin Status”;A 能发现 B 但是 B 不能发现 A 这种情况也是可以的。
示例(通过LLDP发现的邻居):
H3C vSR 分别与H3C、Vyos、Juniper、思科、锐捷设备互联,使用lldp协议发现邻居:
Local Interface Chassis ID Port ID System Name
GE1/0 7425-8ae4-4db2 GigabitEthernet1/0 R1
GE2/0 5076-cb00-ab00 5076-cb00-ab01 vyos
GE3/0 2c6b-f5d6-c2c0 538 JunOS
GE4/0 5062-b600-aa00 Gi1/0/4 C9K
GE5/0 5094-3900-a901 Gi0/4 Ruijie-RSR
同类协议
- CDP (Cisco Discovery Protocol) 以太网设备巨头制造商思科的私有网络发现协议。
- EDP (Extreme Discovery Protocol) Extreme 公司的网络发现协议。
- SONMP (SynOptics Network Management Protocol) Nortel Networks公司的网络发现协议,类似 cdp 但更简单一点。
- NDP (Nortel Discovery Protocol) SONMP 后续版本叫做 NDP。
上述协议包括 LLDP 或多或少都借鉴了 CDP 的设计思想,笔者没有考证具体哪个协议最先出现,各种发现协议都是各自为政无法兼容,这种情况随着 LLDP 协议的出现才统一。
其实现今很多设备都支持 cdp 或者在lldp的实现中兼容cdp,可见其影响力.
协议报文格式
LLDP 主要用于网络设备邻居自动发现,网络设备从二层到多层都有,为了保持最佳的兼容性,采用二层报文以组播方式封装,使得最基础的二层交换机也可以无负担的部署该功能。
抓包可见,LLDP 直接工作在二层,使用二层封装以组播方式发送。
LLDP 作为一个二层协议,使用以太网二层数据帧封装,由于历史原因以太网二层帧格式有两种 ---- Ethernet II 和 IEEE 802.3 ,这两种帧格式在实际环境中都是合法的,LLDP 对上述两种帧格式都支持,区别只在type字段不一样,Ethernet II封装,Type值为0x88CC,802.3 LLC SNAP封装,type值为0xAAAA-0300-0000-88CC。
0xAAAA-0300-0000-88CC 其实可以再拆分解释(如下 Wireshark 展示的),这里为了方便,将type直接定义为“0xAAAA-0300-0000-88CC”。
抓包:LLDP 不同以太网帧格式
目的地址
IEEE 802.1AB规定 LLDP 目的地址有三个:
01-80-C2-00-00-0E 最近网桥(Nearest Bridge):用于 link 两端的设备相互发现。
01-80-C2-00-00-03 非两端口MAC中继网桥(Nearest non-TPMR Bridge):用于非 TPMR 设备发现。
01-80-C2-00-00-00 最近的客户网桥(Nearest Customer Bridge):用于对端 Customer 设备发现。
LLDP 中网桥术语解释:
- TPMR Bridge:仅有两个端口的类似 802.1d 中定义的网桥,但缺少 802.1d 定义的部分特性。
- Customer Bridge:和Service Bridge 相对,可以理解为用户侧,源自QinQ 中的C-vlan;
- Service Bridge:和Customer Bridge 相对,可以理解为服务侧,源自QinQ 中的S-vlan;
不同的目的地址能够穿透的网桥类型不同:
- “01-80-C2-00-00-0E 最近网桥(Nearest Bridge)”:无法穿透任何网桥,也就是说这种 lldp 数据报文应该被任意设备终结(符合 802.1d),不能被转发。
- 01-80-C2-00-00-03 非两端口MAC中继网桥(Nearest non-TPMR Bridge)能够穿透TPMR Bridge,也就是说TPMR Bridge无法被lldp发现,此种情况将TPMR Bridge视为透明。
- 01-80-C2-00-00-00 最近的客户网桥(Nearest Customer Bridge):穿透至对端customer,此种 lldp 报文不会被 Service 设备终结,也就是可以穿透至对端 Customer;
0180C2开头的报文(LLDP 或 STP 等协议使用)网桥或者简单来讲交换机应该特殊处理,而不是像常见的单播和组播一样转发。
标准的 802.1d 网桥和 TPMR(Two-Port MAC Relay,双端口 MAC 中继)都不应该转发目的地址为 01-80-C2-00-00-0E 的二层数据包;
但市面上常见的家用交换机(俗称hub,已经不是传统意义上的hub了,本质上还是一个交换机)有些并没由执行802.1d标准,实际测试可以发现这些交换机没有终结目的地址为 01-80-C2-00-00-0E 的数据包,而是像正常二层包一样转发。导致 lldp 在一个接口可以发现多个设备。
LLDP 演示
使用如下拓扑演示 lldp (设备均为H3C vSR):
- R1 R4 开启 “Nearest Bridge agent” 和 “Nearest Customer Bridge Agent” ;
- R2 R3 作为Service Bridge;
- R1 的 LLDP 使用 802.3 帧封装,其余均使用Ethernet II;
由于我不会模拟 TPMR,所以只针对上述Nearest Bridge 和 Nearest Customer Bridge 两种情况演示一下。
配置:
### R1 ###
sysname R1
## 全局开启 LLDP 后默认只启用 Nearest Bridge agent ,也就是最常见的 LLDP 工作方式。
lldp global enable
#
interface GigabitEthernet1/0
port link-mode route
ip address 192.168.1.1 255.255.255.0
## 设置接口 mac ,一般用于 LLDP 协议的源地址
mac-address 7425-8a00-0001
## 设置 LLDP Nearest Bridge 使用 802.3 封装
lldp encapsulation snap
## 设置 LLDP Nearest Service Bridge 使用 802.3 封装
lldp agent nearest-customer encapsulation snap
## 设置 LLDP Nearest Service Bridge 收/发,Nearest Bridge 已经默认开启收/发;
lldp agent nearest-customer admin-status txrx
##下面为默认配置
#lldp tlv-enable basic-tlv all
#lldp tlv-enable dot1-tlv all
#lldp tlv-enable dot3-tlv all
#lldp tlv-enable med-tlv all
### R4 ###
sysname R4
#
lldp global enable
#
interface GigabitEthernet1/0
port link-mode route
ip address 192.168.1.4 255.255.255.0
mac-address 7425-8a00-0004
lldp agent nearest-customer admin-status txrx
### R2 ###
#
sysname R2
#
lldp global enable
## 开启 lldp service 模式,作为 Service 设备,不会终结目的为 01-80-C2-00-00-00 的数据包,而是将其透传给另一侧的 Customer 设备。
lldp mode service-bridge
#
interface GigabitEthernet1/0
port link-mode bridge
#
interface GigabitEthernet2/0
port link-mode bridge
### R3 ###
#
sysname R3
#
lldp global enable
lldp mode service-bridge
#
interface GigabitEthernet1/0
port link-mode bridge
#
interface GigabitEthernet2/0
port link-mode bridge
-
R1 在 G1/0 接口上有一个 Nearest Bridge Neighbor 和一个 Nearest Customer Bridge Neighbor。
-
R4 和 R1 类似。
-
R2 和 R3 仅有最常见的 Nearest Bridge Neighbor
-
R1 接收到的两种帧
LLDP TLV
LLDP 定义了一个通用公告信息集、一个传输公告的协议和一种用来存储所收到的公告信息的方法。要公告自身信息的设备可以将多条公告信息放在一个局域网数据包内传输,传输的数据使用 TLV 方式组织。
LLDP TLV 指的就是 LLDP 发布的信息,常见的有如下:
- basic-tlv:基础信息,比如 Chassis ID 、Port ID 等。
- dot1-tlv:IEEE 802.1标准组织定义的TLV,一般是 vlan 和 聚合接口相关,比如vlan id、Link Aggregation 等;
- dot3-tlv: IEEE 802.3组织定义的TLV,用于描述物理接口相关,比如 PHY、MDI 等等。
- med-tlv:VoIP 提供基本配置、网络策略配置等
## 下面罗列了一些扩展/额外 LLDP TLV
## 提取自 vSR 的 dis lldp tlv-config 命令输出
Basic optional TLV:
Port Description TLV
System Name TLV
System Description TLV
System Capabilities TLV
Management Address TLV
IEEE 802.1 extend TLV:
Port VLAN ID TLV
Port And Protocol VLAN ID TLV
VLAN Name TLV
DCBX TLV
Link Aggregation TLV
Management VID TLV
IEEE 802.3 extend TLV:
MAC-Physic TLV
Power via MDI TLV
Maximum Frame Size TLV
LLDP-MED extend TLV:
Capabilities TLV
Network Policy TLV
Location Identification TLV
Extended Power via MDI TLV
Inventory TLV
输出展示
不同设备/OS 通过 LLDP 默认发布的信息除强制的外可能各不相同,下展示了几种系统 LLDP 的详细:
下面信息采集自中间的 R 设备。
display lldp neighbor-information verbose
## H3C ##
LLDP neighbor-information of port 17[GigabitEthernet1/0]: ## 本地接口
LLDP agent nearest-bridge: ## LLDP agent 类型
LLDP neighbor index : 1 ## LLDP 邻居索引
Update time : 0 days, 0 hours, 4 minutes, 12 seconds ## 邻居启动时间
Chassis type : MAC address
Chassis ID : 7425-8ae4-4db2
Port ID type : Interface name
Port ID : GigabitEthernet1/0
Time to live : 121 ## 邻居的存活超时时间,超过这个时间未收到 LLDP 报文可以理解为邻居已消失;
Port description : GigabitEthernet1/0 Interface
System name : R1
System description : 系统描述
H3C Comware Platform Software, Software Version 7.1.064, Release 1362P12
H3C VSR1000
Copyright (c) 2004-2023 New H3C Technologies Co., Ltd. All rights reserved.
System capabilities supported : Bridge, Router, Customer Bridge, Service Bridge ## 邻居的网络特性,比如此例中邻居有“交换”、“路由”、“Customer Bridge”、“Service Bridge”的能力
System capabilities enabled : Bridge, Router, Customer Bridge ## 启用的网络特性,此例中未启用上述的“Service Bridge”的能力
Management address type : All802
Management address : 50d1-7c00-9200 ## 由于演示拓扑设备未配置 IP 地址,此处显示为mac地址,如果配置有 IP 地址则会显示对应的 IP;
Management address interface type : IfIndex
Management address interface ID : Unknown
Management address OID : 0
Link aggregation supported : Yes ## 链路聚合支持能力
Link aggregation enabled : No ## 聚合是否启用
Aggregation port ID : 0
Auto-negotiation supported : Yes ## 是否支持自动协商
Auto-negotiation enabled : Yes ## 自动协商是否启用
OperMau : Speed(1000)/Duplex(Full)
Power port class : PD ## POE 支持
PSE power supported : No ## 是否支持POE供电
PSE power enabled : No ## 是否启用POE
PSE pairs control ability : No ## 是否支持 POE 1236或者4578供电控制
Power pairs : Signal ## 供电线序
Port power classification : Class 0
Maximum frame size : 16384 ## 二层 MTU
## Vyos ##
LLDP neighbor-information of port 33[GigabitEthernet2/0]:
LLDP agent nearest-bridge:
LLDP neighbor index : 1
Update time : 0 days, 0 hours, 19 minutes, 40 seconds
Chassis type : MAC address
Chassis ID : 5076-cb00-ab00
Port ID type : MAC address
Port ID : 5076-cb00-ab01
Time to live : 120
Port description : eth1
System name : vyos
System description :
VyOS 1.5-rolling-202403050022
System capabilities supported : Bridge, WlanAccessPoint, Router, StationOnly
System capabilities enabled : Router
Management address type : IPv6
Management address : FE80::5276:CBFF:FE00:AB00
Management address interface type : IfIndex
Management address interface ID : 2
Management address OID : 0
Link aggregation supported : Yes
Link aggregation enabled : No
Aggregation port ID : 0
Auto-negotiation supported : Yes
Auto-negotiation enabled : Yes
OperMau : Speed(1000)/Duplex(Full)
Device class : Connectivity device
## Juniper ##
LLDP neighbor-information of port 49[GigabitEthernet3/0]:
LLDP agent nearest-bridge:
LLDP neighbor index : 1
Update time : 0 days, 0 hours, 42 minutes, 38 seconds
Chassis type : MAC address
Chassis ID : 2c6b-f5d6-c2c0
Port ID type : Locally assigned
Port ID : 538
Time to live : 120
Port description : ge-0/0/2
System name : JunOS
System description :
Juniper Networks, Inc. vmx internet router, kernel JUNOS 22.3R1.11, Build dat
e: 2022-09-21 19:40:05 UTC Copyright (c) 1996-2022 Juniper Networks, Inc.
System capabilities supported : Bridge, Router
System capabilities enabled : Bridge, Router
Management address type : All802
Management address : 5061-d300-a700
Management address interface type : IfIndex
Management address interface ID : 1
Management address OID : 0
Link aggregation supported : Yes
Link aggregation enabled : No
Aggregation port ID : 0
Auto-negotiation supported : No
Auto-negotiation enabled : No
OperMau : Speed(0)/Duplex(Unknown)
Maximum frame size : 1514
## 下应该是 Juniper 的私有TLV,未作考证
Unknown organizationally-defined TLV:
TLV OUI : 00-90-69
TLV subtype : 1
Index : 1
TLV information : 0x564d3637 33394144 33303834
Unknown organizationally-defined TLV:
TLV OUI : 00-90-69
TLV subtype : 12
Index : 1
TLV information : 0x65000000 00000000
## Cisco ##
LLDP neighbor-information of port 65[GigabitEthernet4/0]:
LLDP agent nearest-bridge:
LLDP neighbor index : 1
Update time : 0 days, 0 hours, 43 minutes, 44 seconds
Chassis type : MAC address
Chassis ID : 5062-b600-aa00
Port ID type : Interface name
Port ID : Gi1/0/4
Time to live : 120
Port description : GigabitEthernet1/0/4
System name : C9K
System description :
Cisco IOS Software [Dublin], Catalyst L3 Switch Software (CAT9K_IOSXE), Versi
on 17.10.1prd7, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2022 by Cisco Systems, Inc.
Compiled Wed 21-Sep-22 22:33 by mcpre
System capabilities supported : Bridge, Router
System capabilities enabled : Bridge
Port VLAN ID(PVID) : 1
Auto-negotiation supported : No
Auto-negotiation enabled : Yes
OperMau : Speed(0)/Duplex(Unknown)
## Ruijie ##
LLDP neighbor-information of port 81[GigabitEthernet5/0]:
LLDP agent nearest-bridge:
LLDP neighbor index : 1
Update time : 0 days, 0 hours, 43 minutes, 59 seconds
Chassis type : MAC address
Chassis ID : 5094-3900-a901
Port ID type : Interface name
Port ID : Gi0/4
Time to live : 121
Port description : GigabitEthernet 0/4
System name : Ruijie-RSR
System description :
Ruijie (X86 TESTBENCH) by Ruijie Networks.,
Running on RGOS Software RG-NSE-Route(V1.06) (M17522304222023)
System capabilities supported : Bridge, Router
System capabilities enabled : Bridge, Router
Management address type : IPv4
Management address : 127.0.0.1
Management address interface type : IfIndex
Management address interface ID : 5
Management address OID : 0
Port VLAN ID(PVID) : 0
Port and protocol VLAN ID(PPVID) : 0
Port and protocol VLAN supported : No
Port and protocol VLAN enabled : No
Link aggregation supported : Yes
Link aggregation enabled : No
Aggregation port ID : 0
Auto-negotiation supported : No
Auto-negotiation enabled : No
OperMau : Speed(0)/Duplex(Unknown)
Maximum frame size : 1500
## HillStone(这个是后补的,从其他设备采集,上面拓扑中没体现) ##
LLDP neighbor-information of port 2375[Ten-GigabitEthernet2/1/0/47]:
LLDP agent nearest-bridge:
LLDP neighbor index : 1
Update time : 235 days, 10 hours, 4 minutes, 35 seconds
Chassis type : MAC address
Chassis ID : 001c-54f5-a6f5
Port ID type : Interface name
Port ID : xethernet0/8
Time to live : 120
System name : Hillstone
System description :
SG-6000-P1242
System capabilities supported : Bridge, Router
System capabilities enabled : Bridge, Router
Management address type : IPv4
Management address : 192.168.1.1
Management address interface type : IfIndex
Management address interface ID : 512
Management address OID : 0
再看一个抓包并结合802.1ab标准,看看 LLDP 中定义的系统特性(System capabilities)有哪些:
此表格源自 IEEE Std 802.1AB-2009 Page46
- 其他能力
- 802.3 中继器能力
- MAC 网桥,即交换能力
- 无线接入点能力
- 路由能力
- 电话能力
- DOCSIS 线缆设备能力(通过有线电视网络传输数据)
- 仅具有终端能力,表明仅有终端能力,不具备其他特性,也就意味着此flag不能与其他flag共存
- Service Bridge 能力
- Customer Bridge 能力
- TPMR 能力
12-16 暂时保留,供后续使用。
拓扑中 Vyos LLDP 报文抓包:
软路由系统Vyos 1.5-rolling-202403050022版本中 LLDP 协议的实现貌似存在一些问题,首先是StationOnly flag 不应该与其他flag共存,再有其发布了弃用的 TLV;
参考
https://grouper.ieee.org/groups/802/1/files/public/docs2013/liaison-parsons-response-supporting-ols-443-0313-v1.pdf
https://www.h3c.com/cn/d_200805/605853_30003_0.htm
https://www.ieee802.org/802_tutorials/2013-03/8021-IETF-tutorial-final.pdf
https://www.ieee802.org/3/frame_study/0409/blatherwick_1_0409.pdf
https://rfc.nop.hu/ieee/802.1AB-2009.pdf