在n=3f+1个副本之间达成共识后,为什么客户端只需要查看f+1个内容相同的消息?

after consensus is achieved among n=3f+1 replicas, why client need to look at just f+1 messages with same content?

我在许多研究论文中读到,在 n=3f+1 个副本之间达成分布式共识后,其中 f 是容忍的故障副本数,客户端只需要将至少 f+1 消息中包含的副本作为正确输出。如果拜占庭副本是 f+1 会怎样?当然不能达成共识,但是f+1个拜占庭节点还是可以给客户端发送消息的。我错过了什么?

当故障节点超过f个时,算法的安全性无法保证。当有f+1个或更多故障节点时,确实可以强制客户端接受任意响应。

客户端只需要收到f+1个响应,因为非故障节点不会继续提交消息,除非它收到2f+1个具有相同消息摘要、视图和序列号。这意味着在客户端收到的 f+1 个响应中至少有一个 "correct" 响应,因为在任何 f+1 和任何 2f+1 节点集之间必须有一个节点重叠。

例如,如果有7个节点且f = 2,则非故障节点无法提交,除非它收到另外4条匹配相同签名的COMMIT消息。假设主节点没有故障,您不能 select 3 个节点 (f+1) 而至少其中一个节点没有故障。这意味着客户端无法收到 f+1 个错误响应。