lldp java拓扑 lldp生成线性网络拓扑图_Wireshark

一些 PROFINET 网络调试和诊断工具,如西门子公司的 PRONETA 软件和 HMS 旗下 PROCENTEC Atlas 产品,能够在线扫描并生成整个 PROFINET 网络的拓扑图,这种拓扑图是如何生成的呢?

lldp java拓扑 lldp生成线性网络拓扑图_lldp java拓扑_02


拓扑生成依赖 LLDP 协议

PROFINET 设备(Conformance Class - A)都需要支持 IEEE 802.1 AB 规范所定义的链路层发现协议(Link Layer Discovery Protocol)简称 LLDP,相互连接的 PROFINET 设备之间使用 LLDP 协议来交互连接信息,诊断工具通过读取这些信息来生成拓扑图。

💡 Tips

在 PROFINET 网络中应避免使用不支持 LLDP 协议的设备,如交换机等网络组件。

PROFINET 设备在启动后,将定期地通过每个已连接的端口对外发送 LLDP 以太网报文。

lldp java拓扑 lldp生成线性网络拓扑图_Wireshark_03


LLDP 报文格式


lldp java拓扑 lldp生成线性网络拓扑图_lldp java拓扑_04

LLDP 以太网报文格式

  • 目标 MAC 使用固定的多播地址 01:80:C2:00:00:0E, 确保所有的 PROFINET 设备都能正确接收此以太网帧,但任何收到此以太网帧的设备都不应进行转发。
  • 源 MAC 使用的是发送该以太网帧的 PROFINET 设备端口 MAC,同一个设备如果有多个端口,那么每个端口发送的 LLDP 源 MAC 都是不一样的

💡 Tips

PROFINET 设备有多个 MAC 地址,设备本身有 MAC 地址,设备的每一个端口也有其唯一的 MAC 地址。

  • 以太网类型使用固定值 0x88CC

lldp java拓扑 lldp生成线性网络拓扑图_网络_05

Wireshark 实际抓包报文

  • LLDPDU 数据字段包含多个 IEEE 802.1AB 规定和 PNIO 扩展的 TLV(Type Length Value)

lldp java拓扑 lldp生成线性网络拓扑图_网络_06

每一个 TLV 都至少包含以下三个字段:

lldp java拓扑 lldp生成线性网络拓扑图_抓包_07

  • 类型(Type)
  • 信息字符串长度(Information String Length)
  • 信息字符串(Information String)

下面为大家介绍 LLDPDU 里面包含的各种 TLV 内容。


LLDPDU 中 TLV 介绍

Chassis ID TLV

Chassis ID TLV 是 IEEE 802.1AB 规定的必需项

  • 当 PROFINET 设备的设备名称还未分配上,则 Sub Type=4,Chassis ID 里面实际包含的是 PROFINET 设备的设备 MAC
  • 当 PROFINET 设备的设备名称已经分配,则 Sub Type=7,Chassis ID 里面实际包含的是 PROFINET 设备的设备名称

lldp java拓扑 lldp生成线性网络拓扑图_Wireshark_08


lldp java拓扑 lldp生成线性网络拓扑图_Wireshark_09

Wireshark 实际抓包报文


Port ID TLV

Port ID TLV 是 IEEE 802.1AB 规定的必需项

里面包含的是发送该数据帧的设备端口号的字符串表示。

lldp java拓扑 lldp生成线性网络拓扑图_lldp java拓扑_10


lldp java拓扑 lldp生成线性网络拓扑图_网络_11

Wireshark 实际抓包报文


TTL TLV

TTL TLV 是 IEEE 802.1AB 规定的必需项

TTL 给出了数据的有效时长,单位为秒,由于只有 2 个字节长,因而最大有效时间是 65536 秒

如果在这个时间到期了还没有新的 LLDPDU 被收到,则该 TLV 所属的那个 LLDPDU 携带的信息会被从 MIB 中删除。

lldp java拓扑 lldp生成线性网络拓扑图_lldp java拓扑_12


lldp java拓扑 lldp生成线性网络拓扑图_网络_13

Wireshark 实际抓包报文


Management Address TLV

大多数 PROFINET 设备在发送 LLDP 帧时也会填充可选的 Management Address, TLV Type=8, 该 TLV 包含的是 PROFINET 设备正在使用的 IP 地址信息


lldp java拓扑 lldp生成线性网络拓扑图_lldp java拓扑_14

Wireshark 实际抓包报文

当 TLV Type=127 时,Information String 中的格式可由其他组织进行扩展。

lldp java拓扑 lldp生成线性网络拓扑图_Wireshark_15


IEEE 802.3 TLV

IEEE 802.3 (OUI = 00:12:0F) 扩展了设备的 MAC/PHY 配置和状态信息,用于通知接收方其支持的 MAU 类型和当前使用的配置信息。


lldp java拓扑 lldp生成线性网络拓扑图_Wireshark_16

Wireshark 实际抓包报文


PNIO TLV

PNIO (OUI = 00:0E:CF) 通过扩展 LLDP 可以向接收方通知其延时测量值、端口状态、MRP 连接状态、设备 MAC 地址等信息。


lldp java拓扑 lldp生成线性网络拓扑图_Wireshark_17

Wireshark 实际抓包报文


End of LLDPDU TLV

在 LLDPDU 的最后都需要包含一个 End of LLDPDU TLV, 用于指示接收方

lldp java拓扑 lldp生成线性网络拓扑图_Wireshark_18


lldp java拓扑 lldp生成线性网络拓扑图_lldp java拓扑_19

Wireshark 实际抓包报文


PROFINET 设备如何存储 LLDP 信息

支持 LLDP 的设备,会定期对外发送 LLDP 数据帧,也会实时更新其每个端口接收到的 LLDP 数据帧并进行解析。通过这种方式,LLDP 设备能够获悉其每个端口连接的邻居设备的详细信息,并会将这些信息保存到设备内部

PROFINET Conformance Class – A 等级的设备会将这些信息保存到 PDev 数据库中.

PROFINET Conformance Class – B 等级的设备也会向这些数据保存到 LLDP-MIB (Management Information Base) 数据库中。

PROFINET 网络调试和诊断工具,如西门子公司的 PRONETA 软件,可以通过扫描网络上所有设备,并读取设备上保存的 LLDP 信息,生成网络连接表,也可以通过可视化的方式生成网络拓扑图。

  • PDev 中保存的信息可以通过 PROFINET 非周期读取索引 PDPortDataReal
  • LLDP-MIB 中的信息可以通过标准的 SNMP 协议读取(需要设备是 PROFINET Conformance Class – B 等级)
  • 或者使用 PROFINET DCP 读取命令读取 StationNameAlias

示例

lldp java拓扑 lldp生成线性网络拓扑图_网络协议_20

上图所示的连接通过读取网络上所有设备保存的 LLDP 信息,可以生成如下表所示的网络设备连接表,用于图形化的显示

lldp java拓扑 lldp生成线性网络拓扑图_lldp java拓扑_21

💡 Tips

自 2022 年 9 月起,Ethernet/IP 设备如需一致性认证也需要支持 LLDP 协议