宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

文章目录参考说明两种情况case 1: normalcasecase 2: view change举栗

参考

bilibili算法主义视频讲解-PBFT基本概念介绍

浅出PBFT算法原理

解释PBFT、practicalbyzantinefaulttolerance和拜占庭容错算法。

PBFT是在联盟链的共识节点较少时BFT的解决方案。

pft算法的前提是使用密码学算法保证节点之间的消息传输是不可篡改的。

PBFT允许失效或恶意节点数: f,为了保证整个系统正常运行,需要2f 1个正常节点,系统的总节点数为|R|=3f 1。

pft是一种状态机复制算法,所有复制都在视图轮转期间进行,主节点由视图编号和节点数的集合决定。 即,主节点p=v mod |R|。 v :视图编号,|R|节点数,p :主节点编号。

附上典型的PBFT算法的流程图。

主节点: node0

1: request

客户端向主节点发送请求c o:请求、o、t、c o:请求的具体操作

t:请求时客户端添加的时间戳

c:客户端id

REQUEST:包含消息内容m和消息摘要d(m )

客户端必须在请求上签名

2: pre-prepare

主节点操作验证客户端请求消息中的签名是否正确if是否正确。 正确的请求需要编号n (用于对请求进行排序)。 广播前准备、v、n、d和m消息向其他副本节点else:发送非法请求,并丢弃v:视图号

d:客户端消息摘要

m:消息内容

n:位于[h,H]区间内

预准备,v,n,d进行主节点的签名

3: prepare

复制操作1 .检查主节点PRE-PREPARE消息签名是否正确2 .检查是否收到过相同v下、编号为n、签名不同的PRE-PREPARE、v、n、d、m34. I向其他节点(包括主节点) else:请求非法请求,丢弃v、n、d、m,其内容与上述预准备消息相同

I :当前节点的编号

PREPARE,v,n,d,I进行复制节点I的签名

在日志中记录PRE-PREPARE和PREPARE消息,并用于在View Change期间恢复未完成的请求操作。

4: commit

主节点和副本节点接收并验证PREPARE消息1 .验证副本节点的PREPARE消息的签名正确2 .验证接收到了同一视图v下的n34.验证n在[h,H]区间内验证与d一致的m中的d相同的if正确的:if i收到了2f 1个验证通过的预发送消息:广播COMMIT,v,n,d,I是其他节点(包括主节点)的else:

COMMIT,v,n,d,I进行复制节点I的签名

用于记录COMMIT消息并在View Change期间恢复未完成的请求操作。 在日志中记录其他复制副本节点发送的PREPARE消息。

5:reply

主节点和复制节点接收并验证COMMIT消息1 .验证消息签名正确2 .验证当前复制节点是否接收到同一视图v下的n3 .验证d和d(m )是否一致h )区间内if正确的:if i收到2f 1条验证合格的COMMIT消息(执行客户端请求操作o将REPLY,v,t,c,I,r向客户端else:返回非法请求,r )请求操作的客户端收到2f 1条相同的REPLY消息时,表示来自客户端的请求达成了全网的协议。 否则,客户端将在日志中记录其他复制副本节点发送的COMMIT消息。

两种情况case1:正规case正规case :如果队长不是拜占庭

replica0队长

replica3攻击节点

3358www.Sina.com/:客户端向队长replica0提出了一个要求

step1:队长replica0向其他人中继请求

step2

trong> :其他人收到队长转播的请求之后,不知道队长说的靠不靠谱,所以大家互相交换一下信息

step4 :互相交换完信息之后,所有人都清楚其他人的状况,这个时候应该有2f+1个一致的信息(f个有问题的节点,f<n/3)

step5 :所以所有的节点都知道这个信息是一致的,是靠谱的,所以大家都告诉其他人,我们可以commit这个信息了

step6 :等commit之后,节点再回复客户

Case2 : View Change

队长本身存在问题

step1 : client向队长replica0发出一个请求

step2 :队长给其余节点不同的信息

step3 :节点之间相互交流

step4 :各个节点之间等不到2f+1个相同信息(因为每个节点收到的消息都不一致)

step5 :各个节点,死等……等一个时间片

等一个时间片都等不到

换队长!

如果整个系统中有2f+1个人说要换队长,就更换队长,按顺序来,如原本replica0是队长,现在replica1变成队长。

举个栗子

Case1公正的哆啦A梦是队长,告诉大家9点出去玩耍,紧张的黑米不想wwdbwb和男孩出去玩,所以紧张的黑米作恶,但是由于哆啦A梦,wwdbwb,男孩的消息都是9点,也就是一共4个人,有3个一致的消息,所以大家达成一致,9点是正确的信息。

Case2作恶的紧张的黑米是队长,因为不想让wwdbwb和别的男孩玩,所以他告诉每个人的消息都不一样,当哆啦A梦,wwdbwb和男孩之间互通消息之后发现大家的信息都不一致,就知道队长传递的信息有误