【发布时间】:2012-05-08 12:30:08
【问题描述】:
来自关于 ABP (http://en.wikipedia.org/wiki/Alternating_bit_protocol) 的维基百科条目:
当A发送消息时,它会不断地重发,同样的 序列号,直到它收到来自 B 的确认 包含相同的序列号。当这种情况发生时,A 补充 (翻转)序列号并开始传输下一条消息。
当 B 收到未损坏且有序列的消息时 数字 0,它开始发送 ACK0 并一直这样做,直到它收到 编号为 1 的有效消息。然后它开始发送 ACK1 等。
我不明白细节。
我理解鸣谢的借口和整个事情,但在不同的出版物中对过程本身的描述不同。
我的问题可以总结为以下两点:
“……并且一直这样做”是什么意思?这是否意味着接收方可以在 ack 通道上发送两个连续的 ack,而发送方根本没有任何活动? IE。那时它根本不与发件人同步?
“不断重发”是什么意思?同上 - 在重发期间,发送方是否完全独立于接收方?
这里有一个关于它的工作方式的替代报道,但它再次给出了一个相互矛盾的图片:http://staff.science.uva.nl/~psf/specifications/abp.html
【问题讨论】:
-
我不确定您所说的“与发件人同步”是什么意思。不过,该协议非常简单,您不断地重复发送一条消息,直到您收到它的 ACK。发送 ACK 的人会不断重新发送该 ACK,直到它收到一条新消息(其中 new 意味着它与收到的最后一条消息相比具有不同的序列号)。
-
我猜与发送者同步意味着通道是全双工的——接收者可以发送任意数量的请求,而发送者可能会也可能不会继续重新发送相同的消息。
-
您需要双向发送消息/确认,从这个意义上说,它是全双工的。接收者为特定消息发送确认,直到它收到一条新消息,而不是“尽可能多地”。这意味着,只要协议是可操作的,它就会发送确认。永永远远。发送者,一旦协议运行(即发送了第一条消息,并且没有人关闭事物),消息将被重复发送,直到发送者得到该消息的确认,它没有选择发送只发一次消息,或 10 次。它会重新发送该消息,直到收到确认为止。
-
此外,acks 没有被确认,即发送方没有通知接收方“我收到了你的确认,现在停止发送更多的确认”。因此,ack 将永远发送。