zoukankan      html  css  js  c++  java
  • 拜占庭将军问题

    拜占庭将军问题”是由著名计算机科学家莱斯利•兰伯特(LeslieLamport)提出的点对点通信中的基本问题,也可称为“两军问题”或者“拜占庭容错”。

    在5〜15世纪,拜占庭就是当时的东罗马帝国,也就是现在土耳其的伊斯坦布尔。可以想象,拜占庭军队有许多分支,驻守在敌人城外随时准备进攻,每一个分支都有各自的将军。当时的环境决定了骑马传递信息是将军之间通信和协调统计进攻时间的唯一途径。

    由于敌人的防御比较强大,任何一个军队分支的单独入侵行动都会失败,而且入侵的分支还会被歼灭。因此,只有一半以上的分支同时进攻才能成功占领敌人的城池。

    在观察了敌情以后,将军们需要制订出一个统一的进攻计划,即确定出在哪一天的哪一时刻进攻。然而将军中存在一个叛徒,他的任务就是破坏忠诚将军们的进攻计划,使他们的进攻不能达成一致。这样只要进攻时的军队分支少于一半,敌人就会胜利,叛徒的目的就达到了。这是一个由互不信任的各方构成的网络,但是他们需要完成一个共同使命(除叛徒以外)。

    由于各个将军之间互相不信任,认为只有在自己的城堡以及军队范围内才能保障自己的生命安全,所以将军们不会聚集到一起开会。在这种情况下,他们在任意时间以任意P率派出任意数量的信使到任意对方,内容如下:“我将在第X天的第X点进攻,你同意吗?”

    如果收到信息的将军同意该做法,他就会在原信上附上一份盖章验证的回信,然后把合并之后的信息拷贝再次发送给其余的将军们,要求他们也这样做。他们的目标就是通过原始信息的积累使最后的信息链盖上他们所有将军的图章,在时间上达成共识。

    问题出现在这里,假设有10个将军,每个将军向其他9个将军派出一名信使,那么就是10个将军每人派出了9名信使,而在任意时间内有总计90次的传输,并且每个将军分别收到9个信息,可能每一封信的进攻时间都不同。另外,叛变的将军还会同意超过一个以上将军的攻击时间,然后重新广播超过一条的信息链。于是,这个系统迅速演变成一个信息虚假和攻击时间相互矛盾的纠结体。

  • 相关阅读:
    Chromium(Chrome) frame structure detail
    Chromium(Chrome) Sandbox Details
    ECMA6 New Features
    Asynchronous programming in javascript
    Restful OData Protocol
    java 历年版本特征(简化)
    λ 演算学习
    远程访问其他主机的Mysql(Ubuntu)
    NoSQL基础学习
    Apache solr 6.6.0安装
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13312591.html
Copyright © 2011-2022 走看看