3. PROFINET协议栈解析
PROFINET并不是单一协议,而是一套运行在标准以太网之上的协议族。它把实时过程数据、非实时参数、设备发现与拓扑诊断等不同性质的信息,分别封装在不同层次和不同协议通道中。理解协议栈的分层与封装关系,是后续抓包分析、故障定位和性能优化的基础。本节从下往上逐层拆解,重点说明各层承载什么、如何封装,以及诊断时应该关注哪些字段。
一、协议栈分层与封装总览
PROFINET的协议栈可以理解为“一条以太网,多条通道”。最底层是标准以太网(IEEE 802.3),之上并行存在几条路径:
- PN-RT(实时通道):直接封装在以太网层,以太网类型为0x8892,不经过IP和UDP/TCP,用于周期性IO数据和报警,追求确定性时延。
- UDP/IP通道:承载DCP、LLDP之外的记录读写、诊断、参数化等非周期数据,端口通常为34964(PNIO)等。
- TCP/IP通道:用于基于TCP的通信,如SNMP、HTTP诊断页面、部分工程组态下载。
- DCP:基于以太网二层(EtherType 0x8892,FrameID 0xFEFC/0xFEFD等),用于设备发现、名称与IP分配。
- LLDP:基于以太网二层(EtherType 0x88CC),用于邻居发现和拓扑识别。
关键点在于:实时数据不走IP。很多初学者抓包时只过滤IP,结果看不到PN-RT帧,误以为设备没有通信。正确做法是按以太网类型过滤,例如 ether proto 0x8892。
二、各层职责与关键字段
以太网层是PROFINET的物理承载。标准以太网帧包含目的MAC、源MAC、EtherType、载荷和FCS。PROFINET通过EtherType区分通道:0x8892表示PN-RT和DCP,0x88CC表示LLDP,0x0800表示IP。若启用VLAN,802.1Q标签插入在源MAC之后,其中PCP(优先级)字段可把实时帧标记为高优先级,配合交换机实现优先级队列转发。
IP层承载非实时通信。设备需要IP地址用于工程组态、诊断和跨网段访问。IP层本身不保证实时性,因此周期IO数据不会走IP。诊断时若发现IP可达但IO不通,说明问题在实时通道或组态关系,而非网络层连通性。
UDP/TCP位于IP之上。UDP用于PNIO非周期服务,如记录读写、诊断查询,端口34964是常见入口;TCP用于SNMP、HTTP等管理类通信。UDP无连接、开销小,适合请求-响应式诊断;TCP可靠但有重传和拥塞控制,不适合硬实时。
DCP(Discovery and Configuration Protocol)运行在以太网二层,不依赖IP。它用于设备发现、分配设备名称和IP地址。DCP帧的FrameID为0xFEFC(请求)和0xFEFD(响应)。当设备没有IP时,仍可通过DCP被识别和命名,这是PROFINET设备替换后“即插即用”的关键。
LLDP(Link Layer Discovery Protocol)同样运行在二层,EtherType为0x88CC。它周期性地向邻居发送本端口信息,包括机箱ID、端口ID、系统名称等。控制器和工程工具通过LLDP构建拓扑,判断设备连接在哪个交换机端口,是拓扑诊断和故障定位的重要依据。
三、PN-RT帧结构与封装机制
PN-RT帧直接封装在以太网帧中,结构紧凑。其核心字段是FrameID(2字节),用于标识帧类型和用途。常见取值如下:
| FrameID | 用途 | 说明 |
|---|---|---|
| 0x8000 | 周期IO数据 | RT Class 1,典型循环通信 |
| 0xFC01 | 报警/诊断 | 非周期,高优先级 |
| 0xFEFC | DCP 请求 | 设备发现与配置 |
| 0xFEFD | DCP 响应 | 设备应答 |
| 0xFE01 | PTCP | 时间同步相关 |
PN-RT的封装机制强调“短帧、高优先级、确定性转发”。周期IO帧通常很小,避免分片;交换机根据PCP和FrameID进行优先级调度;接收端按循环周期和看门狗时间判断通信是否正常。若看门狗超时,设备会进入故障安全状态。
# 只抓 PROFINET 实时帧
tcpdump -i eth0 ether proto 0x8892 -w pnrt.pcap
# 抓 DCP 帧(FrameID 0xFEFC/0xFEFD)
tcpdump -i eth0 ether proto 0x8892 and ether[14:2] = 0xfefc
# 抓 LLDP 帧
tcpdump -i eth0 ether proto 0x88cc
# Wireshark 显示过滤器
pn_rt || pn_dcp || lldp
四、案例与排障场景
某产线更换了一台远程IO设备,新设备上电后控制器无法建立IO连接。工程师先ping设备IP,发现不通;随后用DCP工具扫描,能看到设备但名称为空。通过DCP分配设备名称和IP后,IO通信恢复。这个案例说明:IP可达性不是PROFINET通信的前提,设备名称和DCP配置才是。设备替换后,名称不匹配会导致组态关系无法建立。
另一个场景是IO数据偶发丢包。抓包发现PN-RT帧正常发送,但交换机端口有大量广播或非实时流量。检查发现该端口未启用优先级调度,实时帧与普通数据竞争队列。启用VLAN优先级和QoS后,丢包消失。这说明实时性不仅取决于端点,还取决于交换机的队列策略。
- 只过滤IP抓包,看不到PN-RT和DCP帧,误判为“没有通信”。
- 认为PROFINET全部走TCP/IP,忽视二层实时通道。
- 设备替换后只改IP,不改设备名称,导致组态不匹配。
- 忽视LLDP,无法定位设备实际连接的交换机端口。
五、复盘要点
掌握协议栈的关键在于建立“分层对应”的思维:看到现象先判断属于哪一层。IP不通查网络层,IO不通查实时通道和组态,设备发现不了查DCP,拓扑不清查LLDP。抓包时按EtherType和FrameID过滤,而不是只按IP。理解PN-RT的FrameID和优先级机制,才能解释为什么实时数据能获得确定性时延。把这些层次关系与真实字段对应起来,后续的诊断和优化才有据可依。