IEC62439PRP滑动下拉窗口丢包算法详解

来源:互联网 发布:软件测试员工资 编辑:程序博客网 时间:2024/04/28 15:33

IEC62439PRP滑动下拉窗口丢包算法详解

IEC 62439
Edition 1.0   2008-05

6.1.6.3.6 丢包算法

接收者假设来自DANP的帧是按递增序列号发送的。期待接收的下一帧的序列号保存在变量ExpectedSeqA。对于B网类似,为变量ExpectedSeqB。

       在接收处,正确的序列号可以通过比较ExpectedSeqA进行检测,它是包含在接收RCT中的序列号,视为当前序列号,名为CurrentSeqA。无论结果如何,ExpectedSeqA都会被设置成比CurrentSeqA大一的值,以便在该线路上检测下一个期待的序列号。这同样适用于LAN_B线路上的ExpectedSeqB 和CurrentSeqB变量。

       在两个网络上都各自保持了一个连续序列号的滑动下拉窗口,其上界是ExpectedSeqA(局域网上下一个期待的序列号),不包括ExpectedSeqA,下界为StartSeqA(导致在此局域网上要丢弃的最低序列号),图27显示了LAN_A滑动下拉窗口,LAN_B类似。


图 27 – PRP LAN_A上的下拉窗口

 

检测了正确的序列号后,接收者决定是否丢弃帧。假设LAN_A建立了一个非空下拉窗口dropWinodwA(如图27),一个从LAN_B接收的其当前序号CurrentSeqB落在LAN_A的dropWinodwA中帧被丢弃(图27中的dropB),所有其他情形,该帧被保留并转发到上面的协议层(图27中的keepB)。

  丢弃帧(图27中的dropB)会缩小LAN_A的下拉窗口,直到没有更多来自B的带有较早序列号的帧,于是StartSeqA被增加到接收的CurrentSeqB大一的值。而且,B的下拉窗口被重置为大小0(StartSeqB = ExpectedSeqB),因为B明显落后A,因此没有来自A的帧被丢弃,如图28所示。

Figure 28 – PRP 丢弃后窗口减小示意图

       在图28中的情形下,如果一些按顺序到来的帧超过同一个LAN_A,而LAN_B没有,

从他们的CurrentSeqA超出LAN_B的下拉窗口起,他们会一直保持,且LAN_A的下拉窗口会增加一个位置(译注:应该是说ExpectedSeqA会不断增长,从而导致窗口位置增加,而StartSeqA因为超出dropWindowB,会一直保持,直到如后的情形)。如果只有超过LAN_A的帧到来而没有LAN_B的,当下拉窗口达到最大尺寸时,StartSeqA也会增加到滑动下拉窗口。(以使滑动窗口不超过最大尺寸)。

       当一个接收的帧在其他LAN的下拉窗口之外时,它被保持并且该线上的下拉窗口的尺寸被减小到1,意思为其他线上仅会有一个相同序号的帧会被丢弃,而其他线路的下拉窗口被复位为0,也就是说没有帧被丢弃。如图29所示。

 

Figure 29 – PRP 来自 LAN_B的帧不会被丢弃

 

最常见的情形是两条线路是同步的且下拉窗口都被减小为0,意思为最先到来的帧被保持而其下拉窗口打开为1,从而仅允许一个相同序列号的帧作为已经收到的帧(译注:一条线路打开了一个窗口,另一个相同序列号的帧将落在这个窗口里,从而被丢弃)。如图30所示。


Figure 30 – PRP 同步LANs

 

序列号为16位,下拉窗口的最大尺寸为32768,一个大到足以满足在最坏情况下的网络延迟和最高帧速率下,序列号不会环绕。当序列号超出时算法不必改变。有时候,这种方法可能会失败,比如有结点故障恢复或网络失效后重连,但在有疑问的情况下,重复是可接受的,而帧并没有丢失。