Skip to content
Wireshark Wiki 中文翻译整理专题首页原始页面

PRP

概述

PRP 通过在两个独立网络上传送同一帧的两个副本来实现第 2 层网络冗余。每个帧都会添加一个冗余控制尾部(RCT)(其中包含用于丢弃重复帧的序列号)。

重要提示:PRP dissector 默认是禁用的。你必须启用它才能解析 PRP trailer(edit->preferences->protocols->prp)。默认情况下只会解析监督帧。这是因为 trailer dissector 可能产生误报,例如仅仅因为 payload 恰好以正确的 2 个字节(PRP-1 为 4 个字节)结尾,就检测出 PRP-0 trailer。

当前的 Wireshark dissector 可识别 PRP-0(PRP 2010,IEC 62439-3 (2010))和 PRP-1(PRP 2012,IEC 62439-3 (2012)),它们是同一协议的两个版本,具有不同的帧格式。你可以在此 bugreport 附件中找到一些示例帧。

下面的文本描述的是较早的 PRP-0 协议。虽然其中许多内容仍然适用,但 trailer 格式已经改变,序列编号方式也已改变。较新的 2012 版 PRP 与 HSR 协议非常相似。也请参阅关于 PRP 的 Wikipedia Article。

基础

1 PRP 工作原理

1.1 网络和网络元素

PRP 在端节点中实现冗余功能,而不是在网络元素中实现。这是它与 RSTP 或 MRP 等协议的一个主要区别。端节点连接到两个拓扑任意、相互分离并并行运行的类似 LAN。这些 LAN 必须按两者独立故障的方式布置,例如冗余 LAN 不得由同一电源供电。两个 LAN 之间不能建立直接连接。Figure1 将总体网络描述为两个交换网络,它们可以采用任意拓扑,例如树形、环形或网状。

这两个 LAN 命名为 LAN_A 和 LAN_B,在 MAC 层协议上相同,但它们在性能和拓扑上可以不同。传输延迟也可能不同。这些 LAN 彼此之间没有直接连接,并假定它们故障相互独立。在某些应用中,只有对可用性要求关键的节点需要双重连接,而其他节点不需要。为了满足特定要求,PRP 定义了不同类型的端节点。

  • Dual Attached Node (DAN) 连接到两个 LAN。

  • 非关键节点可以只连接到一个 LAN,因此称为 Single Attached Nodes (SAN)。需要相互通信的 SAN 位于同一个 LAN 上。

  • 当单接口节点必须连接到两个网络时,使用 Redundancy Box (RedBox)。这样的节点可以与所有其他节点通信。由于 RedBox 后面的节点对于其他节点来说看起来像 DAN,因此称为 Virtual DANs (VDAN)。RedBox 本身是一个 DAN,并代表其 VDAN 充当代理。RedBox 拥有自己的 IP 地址用于管理目的。

1.2 DAN 的结构

每个 DAN 有两个并行工作的端口,并通过链路冗余实体(LRE)连接到通信栈的相同上层,如 figure 2 所示。

当上层协议发送帧时,LRE 会复制该帧,并几乎同时通过两个端口发送。两个帧以不同延迟穿过两个 LAN。理想情况下,它们会在一个很小的时间窗口内到达目标节点。接收时,节点的 LRE 将第一个收到的帧转发给其上层,并丢弃重复帧。LRE 生成并处理重复帧。该层向其上层呈现的接口与非冗余适配器的网络适配器相同。LRE 有两个任务:处理重复帧和管理冗余。为了监督冗余,LRE 会在每个发送帧后追加一个 32-bit 冗余控制尾部(RCT),并在接收时移除该 RCT。DAN 在两个端口上使用相同的 MAC 地址,并且只有一组 IP 地址。这使冗余对上层透明。特别是,这允许 Address Resolution Protocol (ARP) 像使用 SAN 时一样工作。

1.3 SAN 与 DAN 之间的通信

SAN 可以连接到任意 LAN。连接到一个 LAN 的 SAN 不能直接与连接到另一个 LAN 的 SAN 通信。由于 SAN 不实现任何冗余功能,DAN 必须生成这些 SAN 能理解的帧。然而条件是 SAN 会忽略帧中的 RCT;这应该成立,因为 SAN 无法将 RCT 与 IEEE 802.3 padding 区分开来。反过来,DAN 能理解 SAN 生成的帧,因为这些帧不会追加 RCT。由于 SAN 流量只使用一个 LAN,它们只向其上层转发一个帧。如果 DANP 无法识别远端节点是 DAN,则不会插入 RCT。

2 处理重复帧的方法

由于 DAN 会通过两个适配器接收同一帧(如果两者都正常运行),它应保留一个并忽略重复帧。处理重复帧有两种方法:

  • Duplicate accept,即发送方使用原始帧,接收方将其收到的两个帧都转发给上层协议层;以及
  • Duplicate discard,即发送方在其发送的两个帧后追加 redundancy control trailer,接收方使用该 redundancy control trailer 过滤掉重复帧。

2.1 Duplicate accept

此方法不尝试在链路层丢弃重复帧。发送方通过两个 LAN 发送同一帧,就像在非冗余情况下发送一样。接收方的 LRE 将一对帧中的两个帧(如果两者都到达)都转发给其上层,并假定设计良好的网络协议和应用能够处理重复帧(IEEE 802.1D 明确说明高层协议必须能够应对重复帧)。互联网传输协议 UDP 和 TCP 被假定能够抵御重复帧。TCP 协议被设计为拒绝重复帧,因此它会丢弃一对帧中的第二个帧。UDP 层按定义是无连接且无确认的。所有使用 UDP 的应用都必须能够处理重复帧,因为在任何网络中都可能发生帧重复。特别是,UDP 帧被假定为幂等的,即发送两次与发送一次具有相同效果。ICMP 和 ARP 等管理协议不受重复帧影响,因为它们有自己的序列编号。因此,可以假定重复帧处理由标准网络协议负责,但必须检查每个应用是否符合这些假定,并在这些条件下提供预期性能。这种简单的 Duplicate accept 方法的缺点是无法提供网络监督,因为它不会跟踪两个帧是否都被正确接收。

2.2 链路层中的 Duplicate discard

为了减轻应用处理器负担并改进冗余监督,在链路层就丢弃重复帧是有利的。LRE 可以执行重复帧拒绝,可能使用独立的预处理器或智能 Ethernet 控制器。Duplicate discard 协议在帧中使用一个额外的四 octet 宽字段,即 redundancy control trailer (RCT),LRE 会将其插入到从上层接收的每个帧中,如 figure 3 所示。RCT 由以下参数组成:

  • 一个 16-bit sequence number
  • 一个 4-bit LAN identifier,LAN_A 为 1010 (0xA),LAN_B 为 1011 (0xB)
  • 一个 12 bit frame size

追加 RCT 可能会生成超过 IEEE 802.3-2005 所允许最大帧大小的超大帧。为了保持符合 IEEE 802.3-2005 标准,使用 RCT 的 DAN 中的通信软件应配置为最大 payload size 为 1496 octets。

每次链路层向特定目标发送帧时,发送方都会增加对应于该目标的 sequence number,并通过两个 LAN 发送(几乎)相同的帧。接收节点随后可以基于 RCT 检测重复帧。为了让接收方容易地区分来自遵循 PRP 的节点的帧和非冗余节点的帧,发送方会在 12-bit frame size 字段中向帧追加链路服务数据单元(LSDU)的长度,单位为 octets。在 VLAN 中,frame tags 可能会在穿过交换机期间被添加或移除。为了使 length 字段不依赖于 tagging,size 中只考虑 LSDU 和 RCT。接收方从帧末尾开始扫描。如果它检测到末尾前的 12 bits 对应于 frame size,并且 LAN identifier 与其所连接的 LAN 的 identifier 匹配,则该帧是可被拒绝的候选帧。由于短帧需要 padding 才能满足 64 octets 的最小帧大小,发送方已经包含 padding,以加快从后向前扫描的速度,如 figure 4 所示。

必须考虑一种特殊情况:发送方生成一个 VLAN tagged 短帧,并填充到 64 octets 的大小。该帧经过一个中间节点时 tag 被移除,因此在 RTC 之后应用第二次 padding,如 figure 5 所示。如果 VLAN tagged frame 的最小大小设置为 68 octets 而不是 64,则这种情况应该永远不会发生。

2.3 Duplicate discard 算法

接收方假定来自每个遵循 PRP 的源的帧按递增 sequence numbers 顺序发送。下一个帧期望的 sequence number 保存在变量 ExpectedSeqA 和 ExpectedSeqB 中。接收时,可以通过比较 ExpectedSeqA 或 expectedSeq 与 RCT 中收到的 sequence number(currentSeq)来检查正确序列。无论结果如何,expectedSeq 都会被设置为 currentSeq 加一,以允许检查该线路上的下一个期望 sequence number。因此两个 LAN 都维护一个连续 sequence numbers 的滑动丢弃窗口,其上界为 expectedSeq(该 LAN 上的下一个期望 sequence number),不包含该值;下界为 startSeq(会导致该 LAN 上丢弃的最低 sequence number),如 figure 6 对 LAN_A 所示。

检查正确的 sequence number 之后,接收方决定是否丢弃该帧。假设 LAN_A 已建立一个非空 drop window,则来自 LAN_B 且 sequence number 落入 A 的 drop window 的帧将被丢弃(figure 6 中的 dropB)。在所有其他情况下,帧会被保留并转发给上层协议层(figure 6 中的 keepB)。丢弃该帧(figure 6 中的 dropB)会缩小 LAN_A 上的 drop window 大小,因为不再期望来自 LAN_B 且 sequence number 更早的帧,因此 startSeqA 会增加到收到的 currentSeqB 加一。此外,B 上的 drop window 被重置为大小 0(startSeqB = expectedSeqB),因为显然 LAN_B 落后于 LAN_A,不应丢弃来自 LAN_A 的帧,如 figure 7 所示。

在 Figure 8 的情形中,如果多个帧按顺序通过同一个 LAN_A 到达,但 LAN_B 上没有任何帧到达,则这些帧会被保留,因为它们的 currentSeq 位于 LAN_B 的 drop window 之外,并且 LAN_A 的 drop window 增长一个位置。如果帧继续通过 LAN_A 到达而 LAN_B 没有帧到达,当达到最大 drop window size 时,startSeqA 也会递增以滑动 drop window。当收到的帧位于另一个 LAN 的 drop window 之外时,它会被保留,并且该线路的 drop window 被缩减到大小 1,意味着只有来自另一条线路且具有相同 sequence number 的帧会被丢弃,而另一条线路的 drop window 被重置为 0,意味着不会丢弃任何帧,如 figure 8 所示。

最常见的情况是两条线路同步,且两个 drop windows 都缩减为 0,意味着接下来到达的第一个帧会被保留,并且 drop window 会打开一个位置,只允许丢弃一个与已收到帧具有相同 sequence number 的帧,如 figure 9 所示。

sequence counter 有 16 bits,允许 drop window size 为 32768,这个大小足够大,即使在最坏网络延迟和最高帧速率情况下,sequence numbers 也不会回绕。当帧乱序到达时,该算法没有变化。如果应用了 layer 2 prioritization,就可能发生这种情况。由于 RCT 中的 LAN identifier 字段,重复帧在一个 bit(以及 FCS)上不同。接收方检查帧是否来自正确的 LAN。它不会拒绝来自错误 LAN 的帧,因为这可能是一个合法帧,只是其最后 12 bits 恰好包含 length information,但它会计数错误 cntWrongLanA 或 cntWrongLanB,因为这可能提示配置错误。由于这种错误是永久性的,它会被快速检测到。

2.4 节点表

节点应维护一个表,其中为每个它发送帧到达或从其接收帧的节点(SAN 或 DAN)保留一个条目。nodes table 的目的是支持丢弃算法,并允许进行网络完整性监控。该表会为此节点发送到的每个 unicast、multicast 和 broadcast 地址包含一行。Table 1 列出了每个目标维护的条目。

Parameter Description sendSeq 一个 16-bit sequence number,由此节点用于向该远端节点或 multicast 或 broadcast 地址发送(经由零回绕) expectedSeqA expectedSeqB 对于每个 adapter A 和 B,一个 16-bit sequence number,表示远端节点最后一次在该 LAN 上用于与此节点通信的 sequence number,加一(经由零回绕) cntErrOutOfSequenceA cntErrOutOfSequenceB 对于每个 adapter A 和 B,一个 32-bit error counter,表示来自远端节点的帧未在该 LAN 上按顺序接收 startSeqA startSeqB 对于每个 adapter A 和 B,一个限制 drop window 的 16-bit cursor cntReceivedA cntReceivedB 对于每个 adapter A 和 B,一个 32-bit counter,表示通过该 adapter 接收的帧数 cntErrWrongLanA cntErrWrongLanB 对于每个 adapter A 和 B,一个 32-bit counter,表示每个 adapter 上的 mismatch 数 timeLastSeenA timeLastSeenB 对于每个 adapter A 和 B,一个 time 字段,表示此节点最后一次从远端节点接收帧的时间 sanA sanB 对于每个 adapter A 和 B,一个 boolean,表示远端节点可能是 SAN 和/或远端节点使用 Duplicate Accept Table 1: Nodes table entries

3 网络监督

必须监控每个 LAN 及其连接设备(端节点和交换机)的健康状态,否则冗余作用很小。接收方检查所有帧是否按顺序到达,以及帧是否通过两个通道正确接收。它维护网络管理可读取的错误计数器。为此,所有发送方和接收方都会维护与其通信的节点表,记录最后一次向该节点发送或从该节点接收帧的时间以及其他协议信息。同时,这些表允许建立连接以同步 sequence numbers,并检测序列间隙和缺失节点。由于该协议是松散面向连接的,对应于不存在节点的 sequence numbers 必须被清理。监督依赖于每个 DAN 周期性发送 supervision frame,以便检查网络完整性和节点存在性。同时,这些帧允许检查哪些设备是 DAN、它们使用的 MAC 地址以及它们支持的运行模式,即 duplicate accept 或 duplicate discard。

历史

IEC 65C/495/FDIS 正在进行中

协议依赖

  • Ethernet:对 Supervision frames 使用 Ethertype 0x88FB。

  • Ethernet:在 FCS 之前向每个帧追加 trailer

示例流量

XXX - 在此处添加示例流量(作为纯文本或 Wireshark 截图)。

Wireshark

PRP dissector 功能完整。该 dissector 默认禁用。

首选项设置

没有可用的首选项设置

示例捕获文件

  • Sample Capture: prp_capture.cap

显示过滤器

完整的 PRP display filter 字段列表可在 display filter reference 中找到

只显示 PRP Supervision frames:

 prp

捕获过滤器

你可以在捕获时过滤 PRP frames

仅 PRP Supervision frames:

 ether proto 0x88fb

外部链接

  • 关于 PRP 的 Wikipedia Article。

  • International Electrotechnical Commission

  • 教程:关于 PRP 的教程。

讨论

Imported from https://wiki.wireshark.org/PRP on 2020-08-11 23:23:41 UTC

原始页面图片

image002.jpg
image002.jpg
image004.jpg
image004.jpg
image006.jpg
image006.jpg
image008.jpg
image008.jpg
image010.jpg
image010.jpg
image012.jpg
image012.jpg
image014.jpg
image014.jpg
image016.jpg
image016.jpg
image018.jpg
image018.jpg

相关 Wireshark Wiki 页面

网络分析技术档案