【问题标题】:How does Byzantine Reliable Broadcast ensure that each correct process eventually delivers a message?拜占庭可靠广播如何确保每个正确的进程最终都传递一条消息?
【发布时间】:2018-02-03 18:27:38
【问题描述】:
我不明白拜占庭式可靠广播如何通过其整体属性确保如果某个消息由任何正确的进程传递,则每个正确的进程最终都会传递一条消息。
在发件人正确的情况下,我了解拜占庭可靠广播的工作原理,但如果发件人是拜占庭,我不知道。
例如考虑一个场景,其中有四个进程:A、B、C 和 D,并且 A 是拜占庭发送者,因此我们尊重进程总数 N(即 4)大于三倍的约束。错误进程 f(即 3f = 3)。现在如果 A 只向 B 和 C 发送消息 m,拜占庭可靠广播如何确保 D 也传递消息 m?
【问题讨论】:
标签:
process
distributed-computing
distributed-system
【解决方案1】:
你的问题是……
给定四个进程(N=4,f=1):A,B,C,D; A是拜占庭故障节点,
如果 A 只向 B 和 C 发送消息 m,拜占庭可靠广播如何确保 D 也传递消息 m?
在回答你的问题之前,让我先澄清一件事。你为什么考虑 D 传递消息 m?我的意思是,totality 属性只表示“如果某些消息是由任何正确的进程传递的,那么每个正确的
进程最终会传递一条消息。”在您的场景中,B 和 C 都尚未传递消息 m。因此 D 不需要确保已传递 m。
但是如果你的意图是询问如何在正确的进程之间实现一致性,即使在拜占庭发送者向不同进程发送不同消息的情况下,我可以回答这个问题。
那是因为 B 和 C 广播从 A 发送的消息以验证 A 是否实际上是拜占庭发送者。然后,由于假定 B 和 C 都正确,D 没有收到 A 的消息的情况得到解决。
如果您查看拜占庭可靠广播的详细协议,您的问题中还有两个步骤未提及。因此,如果 C 在第一阶段没有收到来自发送者的任何消息,C 将在第二阶段知道这一事实,因为 B 和 C 都会广播该消息并尝试收集匹配消息的 2f+1 个数量(法定人数)。