1. 从零开始:PRP协议到底是什么,为什么你需要它?
如果你在工业自动化、电力控制或者轨道交通这些领域工作过,肯定对“网络可靠性”这个词有切肤之痛。一条网络链路闪断一下,可能就意味着生产线停机、电力监控失灵,损失可不是开玩笑的。传统的网络冗余技术,像生成树协议(STP),切换时间动辄秒级,这在要求毫秒级甚至微秒级响应的实时系统里,是完全不可接受的。
这时候,PRP(Parallel Redundancy Protocol,并行冗余协议) 就该登场了。你可以把它想象成网络世界的“双发引擎”飞机。飞机有两个引擎,正常时同时工作提供动力,一个坏了,另一个立刻顶上,飞机照飞不误,乘客甚至感觉不到颠簸。PRP协议干的就是类似的事儿:它让终端设备(比如一台工业PLC)同时连接两个完全独立的以太网网络,我们称之为网络A(LAN A)和网络B(LAN B)。设备发送的每一个数据帧,都会复制一份,同时扔进这两个网络。接收端则会从两个网络同时收包。
关键来了,这可不是简单的“一收二”,里面大有学问。PRP协议的精髓在于它的无缝冗余和零恢复时间。接收端会利用PRP帧头里携带的特定序列号等信息,智能地识别并丢弃后到的那个重复帧,只把最先到达的正确帧提交给上层应用。整个过程对应用层完全透明,应用根本不知道底下有两条网络在跑。当其中一条网络路径彻底中断时,所有数据流会自动、瞬间地切换到另一条路径上,切换时间为零——因为数据本来就在两条路上同时跑,断了一条,另一条上的数据照常送达。
所以,PRP协议特别适合那些“断不起”的场景:变电站的继电保护系统、汽车制造厂的机器人协同、列车的信号控制系统。它不依赖于复杂的网络层路由协议,工作在链路层之上,因此能和TCP/IP、PROFINET、EtherCAT等各种上层协议和谐共处。理解了它“双路并行,智能去重”的核心思想,我们就能更好地动手实践了。
2. 实战第一步:Linux内核中的PRP环境搭建与配置
理论懂了,手痒想试试吧?我们得先有个实验环境。PRP协议在Linux内核中是以“HSR/PRP”模块的形式提供的,因为PRP和另一个类似的协议HSR(High-availability Seamless Redundancy)在实现上共享了大量代码。我们的操作主要围绕这个内核模块展开。
2.1 内核模块编译与加载
首先,确保你的Linux内核版本支持HSR/PRP。较新的内核(例如4.x以上)通常已经将CONFIG_HSR编译为模块。你可以用grep CONFIG_HSR /boot/config-$(uname -r)来确认。如果输出是CONFIG_HSR=m,那就太好了。
如果内核没有编译该模块,你就需要重新配置内核,在Networking support -> Networking options -> High-availability Seamless Redundancy (HSR/PRP)中选择<M>,然后重新编译并安装模块。
假设模块已经就绪,加载它就非常简单:
sudo modprobe hsr
用lsmod | grep hsr检查一下,看到hsr模块就说明加载成功了。这个hsr.ko模块实际上同时包含了HSR和PRP协议的处理逻辑。
2.2 创建PRP虚拟网络接口
现在,我们需要两个真实的物理网卡作为冗余链路。假设你的机器上有两个网卡,分别叫enp3s0和


870

被折叠的 条评论
为什么被折叠?



