两将军问题、拜占庭将军问题、TCP三路握手过程的联系

2015年初时产生了一个疑问:基于不可靠的通讯链路,为何在两将军问题中永远没法达到共识,而在TCP三路握手中能够?算法

 

今天抽出了一些时间进行研究发现,实际上TCP三路握手也不是彻底可靠的,只是一个近似的解决协议而已,能够看作是两将军问题的一个实际场景下的近似解决方案。.net

 

此外,两将军问题常常被与拜占庭将军问题搞混。必定要区分两个是彻底不一样的讨论对象。简而言之,两将军问题探讨的是不可靠信道下两方的通讯准确性问题,而拜占庭将军问题探讨的是多方通讯结果一致性和决策正确性的问题。对象

 

若是还很差理解,能够扣下字眼:blog

1. 准确性是指发送的是什么,接收的就是什么;ip

2. 一致性是在节点更多的状况下的准确性;同步

3. 正确性是不管收到的通讯结果是否有干扰(不彻底知足一致性),正常工做的节点可以作出正确的决策。cli

 

拜占庭将军问题难以理解的缘由有不少,好比自己变体比较多(传令官背叛仍是将军背叛、错误指令范围等),为了更好地理解,须要形式化的定义。其自己也有多种特定前提下的解法使用在不一样场景。im

 

推荐几个进一步理解的文章:通信

https://blog.csdn.net/bjweimengshu/article/details/80222416 漫画拜占庭将军问题。后面介绍的Raft算法其实只解决对应场景拜占庭将军问题中一致性的一面,而在leader节点收到client提交后未同步就发生故障的场景下,正确性不能彻底保证。或许给leader收到client、同步全部follower后再给client一个回执可以提高正确性。协议

https://www.8btc.com/article/70370,点名了两将军问题和拜占庭将军问题的区分,也有按照做者理解的形式化定义和拜占庭问题证实思路解析,证实思路我没有细看。

http://en.wikipedia.org/wiki/Two_Generals'_Problem 两将军问题英文wiki。没有中文版。

相关文章
相关标签/搜索