我正在阅读一本描述带有有限状态机的 Go-Back-N (GBN) 协议的教科书,如下图所示:enter image description here

enter image description here

$\Lambda$ 仅表示“初始状态”或“无操作”,具体取决于上下文。我的问题是

  1. 这是 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?

  2. 关于接收方的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 底部所示。但是,我认为您的实验不会受到这种行为的影响,因为不满足触发条件。

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top