在互联网里有个很麻烦的问题,叫拜占庭将军问题。它提出了一个疑问,在所有通信节点中,如果发生信息丢失、或被篡改,整个网络怎么维持工作。
为了方便大家理解,它的提出人兰伯特用中世纪活跃在地中海东岸的拜占庭帝国的模拟场景来举例说明,因此这个互联网世界的论点被称为拜占庭问题。
假设有十个拜占庭将军分别率领十支军队包围了敌人的一个城市,他们分散在敌城周边,随时准备进攻。
由于敌人也不是吃干饭的,必须有六支以上的拜占庭军队联合行动才能击败敌军占领城市。
这时候拜占庭将军们就将面临一个问题了。
比如一号将军决定在明天下午一点发动进攻,为保证胜利,他必须把行动时间和地点通知其余九位将军,让他们和自己同时发起攻击。
这个信息是要靠通信兵来传达的,通信兵是不是可靠,或者是不是傻子记性特别差,都不能保证,而且一号将军也不能确定其余九位将军中,有没有人已经被敌军收买叛变了。
一个看似简单的战役,在这里由于出现这些问题,变得复杂起来。
比如去二号将军那里的通信兵已经被敌军收买了,本来明天下午一点的总攻时间,被他擅自更改到后天下午一点。
这就等于二号将军已经退出了这次行动,如果到明天下午一点,收到正确信息的将军只有五个,那么拜占庭大军就会被敌人击败。
这里可能大家还会说,哪有那么傻的将军,二号将军再派个传令兵去一号将军哪里核实一下就可以了嘛。
对不起,提出这个问题的科学家真不是傻子,拜占庭将军问题,是在信息通道绝对没问题的情况下的假设,也就是说不管收到的是正确的还是错误的信息,对方肯定能收到信息。
要是你说派人核实,那就是另一个事了,“二军问题”。也很复杂,稍微说一下:
比如一号将军和二号将军之间,有敌军驻扎或者频繁巡逻,为了安全起见,二位将军不能冒险去对方那里开会商量,免得在路上被敌军干掉。那就得派通信兵来负责联系。
于是,这个看似简单的事情,在这种通信通道里就会出现一个很无聊循环,具体如下。话说二号将军接到了错误的指令信息后,派出一个通信兵去一号将军那里核实:“我家将军叫我来问问,您是不是叫我们后天下午一点一起进攻?”
一号将军一听,气的暴跳如雷,跟二号将军的通信兵说:“犊瘪子玩意,老子非宰了那个通信兵不可,我说的是明天下午一点。”
二号通信兵回去和二号将军一说,二号将军一听,还好还好,幸亏我聪明,派了个人核实一下。赶紧再派一个人去一号将军那里通知一声,我同意明天下午一点和你一起进攻。
好了,无聊的循环开始了。
一号将军也学聪明了,也派了个通信兵去二号将军那里回答:“我知道你同意明天下午一点一起进攻了。”
二号将军不放心,于是又派了一个通信兵去一号将军哪里说:“OK,我知道你知道我同意明天下午一起进攻了。”
一号又派通信兵去二号,“好的,我知道你知道我知道你同意明天下午一起进攻了。”
二号又来,“行,我知道你知道我知道你知道我明天下午一起进攻了”
一号再来:“我知道你知道我知道你知道我知道……”
二号:“我知道你知道我知道………………………”
一号:“我知道………………………………………………”
二号:“……………………………………………………………”
一号……………………………………………………………………
怎么感觉有点混字数的嫌疑。
看起来网络通信是个没法确认的大麻烦,要是通信成了这个样子,我们就没法干活了。
那么怎么解决拜占庭问题呢?
网友评论