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

2015年初时产生了一个疑问:基于不可靠的通信链路,为什么在两将军问题中永远无法达到共识,而在TCP三路握手中可以?

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

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

如果还不好理解,可以扣下字眼:

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

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

3. 正确性是无论收到的通信结果是否有干扰(不完全满足一致性),正常工作的节点能够做出正确的决策。

拜占庭将军问题难以理解的原因有很多,比如本身变体比较多(传令官背叛还是将军背叛、错误指令范围等),为了更好地理解,需要形式化的定义。其本身也有多种特定前提下的解法使用在不同场景。

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

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。没有中文版。

原文地址:https://www.cnblogs.com/wuyuegb2312/p/4269505.html

时间: 2024-10-21 15:12:10

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

拜占庭将军问题(一)

一.什么是拜占庭将军问题 拜占庭将军问题(Byzantine Generals Problem,是由莱斯利·兰波特在其同名论文[1]中提出的分布式对等网络通信容错问题.在分布式计算中,不同的计算机通过通讯交换信息达成共识而按照同一套协作策略行动.但有时候,系统中的成员计算机可能出错而发送错误的信息,用于传递信息的通讯网络也可能导致信息损坏,使得网络中不同的成员关于全体协作的策略得出不同结论,从而破坏系统一致性.拜占庭将军问题被认为是容错性问题中最难的问题类型之一. 莱斯利·兰波特在其论文中描述了

【转载文章】拜占庭将军问题深入探讨

原文地址:http://www.8btc.com/baizhantingjiangjun part1: 拜占庭将军问题是什么? 1.1 拜占庭将军问题场景 1.2 与拜占庭将军相关问题:两军问题 part2:问题实质及形式化 2.1 拜占庭将军问题实质 2.2 形式化条件的推演  1)一致性 2)正确性 Part3:口头协议 满足以下三个条件的方式称为口头协议: A1:每个被发送的消息都能够被正确的投递 A2:信息接收者知道是谁发送的消息 A3:能够知道缺少的消息 3.1 口头协议算法OM(m)

拜占庭将军

拜占庭将军问题很多人可能听过,但不知道是什么意思,本文从非专业的角度来讲讲,拜占庭将军问题到底是说什么的. 拜占庭将军问题(Byzantine Generals Problem),首先由Leslie Lamport与另外两人在1982年提出,很简单的故事模型,却困扰了计算机科学家们数十年. 故事大概是这么说的: 拜占庭帝国即中世纪的土耳其,拥有巨大的财富,周围10个邻邦垂诞已久,但拜占庭高墙耸立,固若金汤,没有一个单独的邻邦能够成功入侵.任何单个邻邦入侵的都会失败,同时也有可能自身被其他9个邻邦

[区块链] 拜占庭将军问题

接触区块链的同学,多少都听说过拜占庭将军问题,经常看到或听到某某区块链使用某某算法解决了拜占庭将军问题,那么究竟什么是拜占庭将军问题呢? 什么是拜占庭将军问题: "拜占庭将军问题"也被称为"拜占庭容错". 拜占庭将军问题是Leslie Lamport(2013年的图灵讲得住)用来为描述分布式系统一致性问题(Distributed Consensus)在论文中抽象出来一个著名的例子. 这个例子大意是这样的: 拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围

拜占庭将军问题(Byzantine Generals Problem)

拜占庭将军问题(Byzantine Generals Problem),是由莱斯利·兰波特在其同名论文[1]中提出的分布式对等网络通信容错问题. 在分布式计算中,不同的计算机通过通讯交换信息达成共识而按照同一套协作策略行动.但有时候,系统中的成员计算机可能出错而发送错误的信息,用于传递信息的通讯网络也可能导致信息损坏,使得网络中不同的成员关于全体协作的策略得出不同结论,从而破坏系统一致性.拜占庭将军问题被认为是容错性问题中最难的问题类型之一. 在分布式对等网络中需要按照共同一致策略协作的成员计算

什么是拜占庭将军问题

接触区块链的同学,多少都听说过拜占庭将军问题,经常看到或听到某某区块链使用某某算法解决了拜占庭将军问题,那么究竟什么是拜占庭将军问题呢? 什么是拜占庭将军问题 也被称为"拜占庭容错"."拜占庭将军问题". 拜占庭将军问题是Leslie Lamport(2013年的图灵讲得住)用来为描述分布式系统一致性问题(Distributed Consensus)在论文中抽象出来一个著名的例子. 这个例子大意是这样的: 拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围

“拜占庭容错”、“拜占庭将军问题”

接触区块链的同学,多少都听说过拜占庭将军问题,经常看到或听到某某区块链使用某某算法解决了拜占庭将军问题,那么究竟什么是拜占庭将军问题呢? 什么是拜占庭将军问题 也被称为"拜占庭容错"."拜占庭将军问题".拜占庭将军问题是Leslie Lamport(2013年的图灵讲得住)用来为描述分布式系统一致性问题(Distributed Consensus)在论文中抽象出来一个著名的例子. 这个例子大意是这样的: 拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围这

TCP连接的三路握手

本文内容参考<Unix网络编程>,大概描述了TCP连接的三次握手过程,这是我看到的最清楚的描述,记录在这里,希望能帮助到大家对于TCP连接过程的理解. 传输控制协议(TCP)是TCP/IP协议簇里非常重要的一个协议.它提供客户与服务器之间的连接,并且提供可靠的数据传输功能.关于这个协议的具体规定,请参考相关文献.这里简单讲述一下三路握手. 建立一个TCP连接时会发生以下几个过程: 1.服务器必须做好接受外来的连接的准备.这个过程通过调用socket.bind和listen这三个函数来完成. 2

TCP连接建立的三次握手过程可以携带数据吗?

前几天实验室的群里扔出了这样一个问题:TCP连接建立的三次握手过程可以携带数据吗?突然发现自己还真不清楚这个问题,平日里用tcpdump或者Wireshark抓包时,从来没留意过第三次握手的ACK包有没有数据.于是赶紧用nc配合tcpdump抓了几次包想检验一下.但是经过了多次实验,确实都发现第三次握手的包没有其它数据(后文解释).后来的探究中发现这个过程有问题,遂整理探究过程和结论汇成本文,以供后来者参考. 先来张三次握手的图(下面这张图来自网络,若侵犯了作者权利,请联系我删除): RFC79