手把手教你用Wireshark抓包分析PRP冗余帧(附SoC-e MEZU开发板实战)

张开发
2026/4/21 20:29:45 15 分钟阅读

分享文章

手把手教你用Wireshark抓包分析PRP冗余帧(附SoC-e MEZU开发板实战)
实战指南Wireshark深度解析PRP冗余帧与SoC-e MEZU开发板应用工业网络可靠性是自动化系统的生命线。想象一下当变电站的继电保护信号或列车控制指令因网络单点故障丢失时可能引发的连锁反应足以让任何工程师脊背发凉。这正是IEC 62439-3标准中PRP协议的价值所在——它像给关键网络装上了双引擎即使一个引擎失效系统仍能无感切换继续运行。本文将带您亲历PRP网络的诊断全流程从Wireshark抓包技巧到SoC-e MEZU开发板的实战解析。1. PRP网络诊断环境搭建工欲善其事必先利其器。搭建PRP测试环境需要三个核心组件支持PRP的双节点设备(DANP)、两个独立物理网络(LAN A/B)以及抓包主机。SoC-e MEZU开发板作为RedBox使用时其背板接口配置如下接口类型功能描述连接对象Port 1LAN A接入交换机APort 2LAN B接入交换机BPort 3管理接口监控终端关键准备步骤物理连线使用不同颜色的网线区分LAN A/B网络推荐A网用蓝色B网用绿色IP规划两个网络应使用不同网段例如# LAN A网络配置 sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0 # LAN B网络配置 sudo ifconfig eth1 192.168.2.100 netmask 255.255.255.0Wireshark准备安装最新版(建议4.0)并加载PRP解析插件# 下载PRP解析Lua脚本 wget https://github.com/soc-e/prp-dissector/raw/master/prp.lua # 放入Wireshark插件目录 cp prp.lua /usr/share/wireshark/plugins/注意确保两个网络物理隔离任何形式的桥接都会导致PRP机制失效。建议使用不同品牌的交换机构建LAN A/B避免共用电源等单点故障风险。2. Wireshark抓包配置技巧普通以太网抓包与PRP诊断的最大区别在于需要同步捕获双网数据。推荐采用一主多从的抓包方案主捕获机配置双网卡绑定使用支持PCIe SR-IOV的服务器作为抓包主机时间同步配置PTPv2确保两个接口的时间戳误差1μs过滤策略先全量捕获再分析避免实时过滤丢包# 启动同步抓包需sudo权限 tshark -i eth0 -f not port 22 -w lan_a.pcapng tshark -i eth1 -f not port 22 -w lan_b.pcapng 关键过滤表达式基础过滤prp !stp排除生成树协议干扰序列号追踪prp.seq 1234跟踪特定帧的双网路径异常检测prp.lan_id 0xa prp.lan_id 0xb捕获LAN ID配置错误抓包参数优化建议参数推荐值说明缓冲区大小256MB防止高负载时丢包捕获格式pcapng支持多接口时间同步快照长度1522字节完整包含PRP帧尾部RCT3. PRP帧结构深度解析当我们在Wireshark中展开一个PRP帧时会看到标准以太网头部后追加的6字节RCT字段。这个看似简单的尾部却承载着PRP的核心逻辑RCT字段详解-------------------------------- | Sequence Number (16bit) | LSDU Size (12bit) |LanID| -------------------------------- | PRP Suffix (16bit) | -------------------序列号(Seq)分析 同一数据包在双网的Seq值相同通过prp.seq eq 0x0004可追踪测试ping包的完整路径 正常情况Seq应单调递增若出现以下情况需警惕重复Seq可能发生帧复制Seq跳变存在丢包风险LSDU大小校验 计算公式(IP总长度 14字节以太网头 6字节RCT) LSDU值常见异常# Python校验代码示例 def verify_lsdu(ip_len, lsdu): expected ip_len 20 # 146 return expected lsduLAN ID验证 正常值应为0xa或0xb若出现其他值可能表明设备配置错误帧在传输过程中被篡改在SoC-e MEZU开发板的实际抓包中我们能看到典型的PRP帧特征Frame 1234: 106 bytes on wire (848 bits) Ethernet II, Src: SoC-e_00:1f:3b, Dst: Ieee_00:1d:9e Internet Protocol Version 4, Src: 192.168.1.10, Dst: 192.168.1.20 ICMP echo request PRP: Redundancy Control Trailer Sequence Number: 0x0004 LSDU Size: 90 (0x5a) Lan Identifier: 0xa PRP Suffix: 0x88fb4. 典型故障诊断案例案例1冗余失效现象网络切换时应用层感知到丢包诊断步骤对比双网抓包时间差prp.time_delta 10ms检查Seq连续性prp.seq - prev(prp.seq) ! 1验证LSDU一致性prp.lsdu ! (frame.len - 14)案例2性能瓶颈现象高负载时延迟激增分析方法# 计算双网延迟差 capinfos -a -r lan_a.pcapng | grep Average packet rate capinfos -a -r lan_b.pcapng | grep Average packet rate配合IO图表分析Statistics → IO Graphs → Filter: prp → Y Axis: Bits/s案例3配置错误现象设备仅通过单网通信快速定位# 统计各LAN ID分布 tshark -r capture.pcapng -z io,phs,prp.lan_id预期应看到近似数量的0xa和0xb经验提示当怀疑PRP问题时先用prp.analysis过滤器快速定位异常帧。Wireshark 4.1版本内置的PRP分析器能自动标记以下问题重复帧(duplicate)失序帧(out-of-order)单网丢失(single-loss)5. 高级分析技巧对于需要深入理解PRP行为的场景可以尝试以下方法时间轴分析在Wireshark中启用Time → Time Display Format → Seconds Since Previous Packet对双网抓包执行Statistics → TCP Stream Graphs → Time-Sequence Graph观察两条曲线的重合度理想情况应保持高度同步流量对比矩阵指标LAN ALAN B允许偏差平均延迟1.2ms1.3ms0.5ms丢包率0.01%0.02%0.1%吞吐量85Mbps83Mbps5%自动化检测脚本#!/usr/bin/env python3 from scapy.all import rdpcap, PRP def analyze_prp(pcap_file): packets rdpcap(pcap_file) prp_pkts [p for p in packets if PRP in p] stats { total: len(prp_pkts), lan_a: sum(1 for p in prp_pkts if p[PRP].lan_id 0xa), lan_b: sum(1 for p in prp_pkts if p[PRP].lan_id 0xb), seq_errors: 0 } last_seq -1 for p in prp_pkts: if last_seq ! -1 and p[PRP].seq ! last_seq 1: stats[seq_errors] 1 last_seq p[PRP].seq return stats在实际使用SoC-e MEZU开发板进行长期稳定性测试时发现当网络负载超过70%时需要特别注意交换机的缓存配置。某次现场故障正是因为交换机的Buffer Size不足导致B网频繁丢包而PRP机制在双网都拥塞时会出现雪崩效应。后来通过调整以下参数解决了问题# 在工业交换机上的优化配置 set qos queue 1 buffer-size 20% set qos queue 2 buffer-size 30% set qos queue 3 buffer-size 50%

更多文章