前瞻知识:
L. Lamport, R. Shostak, and M. Pease. The Byzantine Generals Problem. ACM Transactions on Programming Languages and Systems, 4(3), 1982
拜占庭将军问题OM(m)函数递归过程:
算法流程如下:“
递归的等级用序号等级表示,以此为1、(1)、1)
序号等级 | 代表的递归函数 |
---|---|
1 | OM(2) |
(1) | OM(1) |
1) | OM(0) |
OM(2):
-
Commander发送值v给他的6个中尉1~6;
-
对中尉1:v1=v,中尉1执行OM(1):
(1)将v发给2~6; (2)对中尉2收到v,置v2=v,中尉2执行 OM(0): 1)将v发给3~6; 2)3~6置自己的列表里v2=v; (3)1~6的vi(对角线数值)为各自的majority(…)依次为{v,v,v,v,x,x} 中尉3&4的步骤同上(2)~(3); (2)对中尉5收到v,置v5=x,中尉5执行 OM(0): 1)将x发给2~4,6; 2)2~4,6置自己的列表里v5=x; (3)1~6的vi(对角线数值)为各自的majority(…)依次为{v,v,v,v,x,x}. 中尉6的步骤同5的(2)~(3); (这里如果56先于234先执行的话,234的值虽然初期会是x,但后期仍然会纠正过来, 这也是其支持分布式所在,要的只是最后的majority,最终结果与执行顺序无关)
2.对中尉2: v2=v,中尉2执行OM(1),与上述中尉1的序号2相似。
2.对中尉3: v3=v,中尉3执行OM(1),与上述中尉1的序号2相似。
2.对中尉4: v4=v,中尉4执行OM(1),与上述中尉1的序号2相似。
2.对中尉5: v5=x,中尉5执行OM(1),叛徒节点对信息进行篡改。
2.对中尉6: v6=x,中尉6执行OM(1),叛徒节点对信息进行篡改。
3.v1=majority{v,v,v,v,x,x}=v
3.v2=majority{v,v,v,v,x,x}=v
…
3.v5=majority{v,v,v,v,x,x}=x(叛徒节点可以进行篡改)
中尉6同5 。
递归过程结束