PBFT常见问题:为什么是f+1、2f+1、3f+1?prepare阶段和commit阶段的作用?恶意节点如何作恶?

这篇具有很好参考价值的文章主要介绍了PBFT常见问题:为什么是f+1、2f+1、3f+1?prepare阶段和commit阶段的作用?恶意节点如何作恶?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

说明

1、为什么客户端要收到f+1个执行结果相同的reply才能确认?

2、为什么prepare和commit阶段需要2f+1个确认?

3、为什么副本总数是3f+1?

4、能不能去掉prepare阶段?为什么有prepare阶段?

5、能不能去掉commit阶段?为什么有commit阶段?

6、视图变换何时提出?怎样开始?过程如何?

7、视图切换如何进行?恶意副本有没有可能在视图切换时作恶?

8、视图切换后未完成的请求如何继续?

说明

  1. 本文是基于PBFT的原文的讲解:https://pmg.csail.mit.edu/papers/osdi99.pdf
  2. PBFT中的每一个消息都包含客户端请求消息的摘要,而请求信息又包含客户端的签名,所以消息不能被篡改(原文中讲到“我们假设攻击者和他控制的故障节点的计算能力是有限的以至于他几乎不可能破解前面提到的密码学技术。例如,攻击者不能产生非故障节点的有效签名,也不能通过消息摘要计算出整个消息,也不能找到拥有相同摘要的两个消息。”)。
  3. PBFT算法是一种状态机复制,每一个“节点”是一个副本,有一个主副本,其他全为从副本。
  4. 算法的目的是:保证正常副本的弱同步(过程不一定全同步,但执行结果和执行顺序同步)
  5. 很多地方是个人解读,有错误望指正。

PBFT常见问题:为什么是f+1、2f+1、3f+1?prepare阶段和commit阶段的作用?恶意节点如何作恶?

 

1、为什么客户端要收到f+1个执行结果相同的reply才能确认?

        f+1个执行结果相同的reply必定是全部来自正常副本,因为恶意副本只有f个。

2、为什么prepare和commit阶段需要2f+1个确认?

        如果是f+1,可能其中f是恶意副本,伪装经过prepare和commit阶段后,在执行请求时开始作恶,那么客户端就收不到f+1个reply确认。但如果是2f+1,就确保了f+1个正常副本同时开始执行请求。

3、为什么副本总数是3f+1?

        问题2的解答说明副本总数最少是2f+1,在此基础上我们看:因为f恶意副本可能会不发送消息,那么除去这f个恶意副本的消息我们也要达到2f+1的确认。换句话说我们必须有2f+1个正常副本才可以在f个恶意副本拒绝发送消息的情况下顺利进行确认和整个流程。2f+1个正常副本加上f个恶意副本就是3f+1个总副本。

4、能不能去掉prepare阶段?为什么有prepare阶段?

        去掉这两个阶段后如果主副本作恶就无法解决。(prepare阶段用于可在主副本不作为(不发送pre-prepare消息)的情况下提出视图变换)

5、能不能去掉commit阶段?为什么有commit阶段?

        commit阶段用于在切换主节点之后也能继续执行未完成的请求m(若在视图v中副本i以编号n执行了请求m,那么在v+1中未执行请求m的副本j也能以编号n执行请求m)。避免了视图切换后一系列执行到中途的过程从头开始。

6、视图变换何时提出?怎样开始?过程如何?

        主副本在pre-prepare阶段、commit阶段和reply阶段可能会作恶。在pre-prepare阶段和commit阶段作恶会被发现然后被执行视图变换。在reply阶段作恶虽然不会被发现,但并不影响f+1个正常副本的执行。(所有恶意副本通过篡改消息或拒绝通信都不能组织正确副本达成共识。如果恶意主副本拒绝发送pre-prepare请求(所有从副本会根本不知道这一次客户端请求)超过一定时间后,客户端会给所有副本发送自己的请求从而发现主副本的恶意行为)

7、视图切换如何进行?恶意副本有没有可能在视图切换时作恶?

        所有正常副本只要收到f+1个视图切换(view-change)消息,自己便也发出相同的视图切换消息。新的主副本(例如:p’ =(v + 1)mod |R|)收到2f+1个视图切换消息后自己会发出new-view消息。(2f+1是为了确保有最少有f+1个正常节点进入视图变换以成功发出f+1个reply确认,道理同问题2)。故f个恶意副本并不能无中生有发起视图变换。

8、视图切换后未完成的请求如何继续?

        view-change消息中包含了自己的日志,新的主副本通过收集这些日志(尤其是日志中的序列号n,n保证了执行结果顺序的统一)来了解每个请求的执行情况并继续执行。文章来源地址https://www.toymoban.com/news/detail-433740.html

到了这里,关于PBFT常见问题:为什么是f+1、2f+1、3f+1?prepare阶段和commit阶段的作用?恶意节点如何作恶?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【linux】/etc/security/limits.conf配置文件详解、为什么限制、常见限制查看操作

    /etc/security/limits.conf 是一个用于配置用户或用户组 资源限制 的配置文件。这个文件通常用于 设置系统资源的软限制和硬限制 ,以及一些特殊权限。 下面是一些 /etc/security/limits.conf 文件中可能包含的常见配置项: 描述 第一列表示用户和组(@开头),这里的 * 代表所有用户。

    2024年02月03日
    浏览(30)
  • 【网络技术】什么是DNS及常见问题

    域名服务器(Domain Name Server,DNS)是一种用于存储和管理域名解析信息的服务器。它们负责将易于记忆的域名(例如 www.example.com)转换为与之关联的 IP 地址(例如 192.0.2.1),以便在互联网上进行通信。 一句话总结: 域名系统 (DNS) 是互联网的电话簿 DNS(Domain Name System)是

    2024年02月12日
    浏览(31)
  • 为什么现在原生家庭的问题这么严重?

    匿名用户 191 人赞同了该回答 换一个玄学的角度来看这个问题,之前看b站,有一个up主说,中国有历史记载的人口数一直都很稳定,7-8千万到1亿左右,明朝2亿,清朝到民国算是增长比较多的,有4亿,但是从开国到现在增长了10亿,从轮回的角度来讲,哪来那么多的人来转世

    2024年02月13日
    浏览(51)
  • “为什么是三次握手”与“为什么是三次握手,却是四次挥手”其实是不同的问题

    “为什么是三次握手?” 这个问题言下之意其实在问:“为什么不是0次、1次、2次、4次甚至更多次握手”。 确保双方的 发送能力 和 接收能力 都是好的 。 该回答下的一评论:其实很简单, 1.a-b, 这个时候没有任何状态, 2. b-a, b给a发东西, 说明收到了a的东西, 证明了a的

    2024年02月10日
    浏览(41)
  • 0-1背包问题思路分析,重点解释一维dp数组的01背包问题为什么要倒序遍历背包,以及为什么不能先遍历背包,只能先遍历物品

    对0-1背包问题的二维dp数组以及一维dp数组的思路分析 来源:代码随想录 link 本文是我对01背包问题的理解 ,在本文中具体分析dp数组的形成过程,最核心的地方就是我对每种情况下的01背包问题给出了代码运行结果,便于读者理解。 重点解释了为什么一维dp数组的01背包问题

    2024年02月03日
    浏览(78)
  • 两级同步为什么能解决亚稳态问题?

    前言 不知道大家有没有一个疑惑,为什么两级同步电路结构能够解决亚稳态问题,之前一直疑惑的地方在于,当第一级DFF发生亚稳态时,他的输出呈现不确定性,会出现0或者1任意一个值。若输入是1,第一级DFF亚稳态之后稳定到了0,那么第二级采样的话不就错了吗?这个问

    2024年02月12日
    浏览(34)
  • Mybatis为什么需要预编译等一系列问题

    SQL 预编译是一种提高数据库访问效率的技术,它通过将 SQL 语句预编译并存储在数据库中,减少每次执行时需要进行解析和编译的开销,从而提高数据库访问的效率。 在预编译阶段,SQL 语句会被解析并转换为可执行的二进制代码,然后存储在数据库中。当需要执行该 SQL 语句

    2024年02月10日
    浏览(33)
  • 再谈StringBuilder为什么线程不安全以及带来的问题

    比较有意思的是,学习锁消除的过程中,有人讲到StringBuffer在方法内构建,不会被其他方法引用时,StringBuffer的锁会被消除, 于是,顺便看了一下同源的StringBuidler为什么线程不安全,以及为什么多线程不安全,和带来的问题, 有了这篇文章,分享出来,帮助读者轻松应对知

    2024年02月11日
    浏览(33)
  • 为什么分类问题不能使用mse损失函数,更容易理解版本

    分类问题通常不适合使用均方误差(Mean Squared Error,MSE)损失函数,原因如下: 输出差异的度量不同:MSE损失函数是基于预测值和真实值之间的差异的平方和进行计算的,适用于回归问题(建立一个模型来预测连续数值输出的问题, eg: 房价预测;股票价格预测…),其中

    2024年04月26日
    浏览(26)
  • 微信小程序多图列表页面性能问题为什么会出现?如何解决?

    微信小程序中的多图列表页面性能问题主要是由于以下几个原因导致的: 图片过大:在多图列表页面中,如果图片过大,会导致页面加载时间过长,从而影响用户体验。 请求过多:在多图列表页面中,如果一次请求加载过多的图片,会导致请求次数过多,从而影响页面加载

    2024年03月25日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包