Go-Back-N ARQ 协议的小程序实现正确吗?
-
29-09-2020 - |
题
我正在阅读一本描述带有有限状态机的 Go-Back-N (GBN) 协议的教科书,如下图所示:
$\Lambda$ 仅表示“初始状态”或“无操作”,具体取决于上下文。我的问题是
这是 GBN 的交互式动画链接 https://media.pearsoncmg.com/aw/ecs_kurose_compnetwork_7/cw/content/interactiveanimations/go-back-n-protocol/index.html。假设我们正在发送数据包 0、数据包 1 和数据包 2,数据包 1 在到达接收者之前丢失了。因此,当超时时,GBN将使发送者重新播放数据包1和数据包2,我发现一个有趣的东西,如果您尝试使用上述方案的链接,并且在超时发生之前发送数据包3,则此操作重置该操作。计时器,因为您可以看到超时是推迟的(否则您会看到屏幕上的数据包1,2,3飞行)。但是根据发件人的FSM,在发送数据包3后,立即发生超时,然后发件人将重新介绍数据包1和数据包2,但由于推迟超时而没有发生,这与以下事实相矛盾:只有时间才能重置
base = nextseqnum
?关于接收方的FSM,为什么需要设置
expectedseqnum = 1
并根据它制作一个数据包?为什么我们不能设置expectedseqnum = 0
作为唯一的初始化操作?
解决方案
我将首先解决问题 2,因为它看起来比另一个更容易。答案很简单,因为两个发射器都开始标记其有效负载消息 1
, ,即与 nextseqnum = 1
;您可以从您发布的图片的左上角看到发件人的情况就是如此。不要被接收者发出的事实误导 sndpkt = make_pkt(0, ACK, checksum)
一开始;第一个数据包仅被制作,但未发送(如果接收者击中了 default
状态)。另一方面,小程序枚举其数据包的方式可能存在不一致,因为它从 0
.
问题1似乎是在问:如果一个数据包序列 0
, 1
, 2
已发送并且
- 包
1
丢失了 - 一个新的数据包,
3
, 在超时之前发送
然后不会发生超时,尽管似乎没有指令对此进行编码。虽然我用手数着时间的流逝,但你的观察似乎是正确的:鉴于上述条件,在发送新数据包时,与超时相关的事件不会显现。这可能是由于小程序中的一个小错误造成的,尽管我会在联系本书作者之前确定更多信息。
这与只有当 base = nextseqnum 时时间才会重置的事实相矛盾?
谨防!当收到非最后一个确认时,计时器也会重置,如图 3.20 底部所示。但是,我认为您的实验不会受到这种行为的影响,因为不满足触发条件。