VRF是虚拟路由转发,你如果用过虚拟机就明白了:虚拟成不同的路由器,彼此之间不相互影响的,那对于ospf来说,区分的方法就是不同的进程号了.第二个问题,能.第三个问题,通过MBGP协议.
边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的多路连接的协议。 BGP 构建在 EGP 的经验之上。 BGP 系统的主要功能是和其他的 BGP 系统交换网络可达信息。网络可达信息包括列出的自治系统(AS)的信息。这些信息有效地构造了 AS 互联的拓朴图并由此清除了路由环路,同时在 AS 级别上可实施策略决策。
BGP属性
路由器发送关于目标网络的BGP更新消息,更新的度量值被称为路径属性。属性可以是公认的或可选的、强制的或自由决定的、传递的或非传递的。属性也可以是部分的。并非组织的和有组合的都是合法的,路径属性分为4类:公认必遵、公认自决、可选过渡、可选非过渡。
公认属性:
是公认所有BGP实现都必须识别的属性,这些属性被传递给BGP邻居。
公认强制属性必须出现在路由描述中,公认自由决定属性可以不出现在路由描述中。
可选属性:
非公认属性被称为可选的,可选属性可以是传递的或非传递的。
可选属性不要求所有的BGP实现都支持。
对于不支持的可选传递属性,路由器将其原封不动的传递给其他BGP路由器,在这种情况下,属性被标记为部分的。
对于可选非传递属性,路由器必须将其删除,而不将其传递给其他BGP路由器。
(1)公认必遵(Well-Known Mandatory)
ORIGIN(起源):这个属性说明了源路由是怎样放到BGP表中的。有三个可能的源IGP,EGP,以及INCOMPLETE路由器在多个路由选择的处理中使用这个信息。路由器选择具有最低ORIGIN类型的路径。
AS_PATH(AS路径):指出包含在UPDATE报文中的路由信息所经过的自治系统的序列。
Next_HOP(下一跳)声明路由器所获得的BGP路由的下一跳,对EBGP会话来说,下一跳就是通告该路由的邻居路由器的源地址。
(2)公认自决(Well-Known Discretionary)
LOCAL_PREF(本地优先级):本地优先级属性是用于告诉自治系统内的路由器在有多条路径的时候,怎样离开自治系统。本地优先级越高,路由优先级越高。
ATOMIC_AGGREGATE(原子聚合):原子聚合属性指出已被丢失了的信息。
(3)可选过渡(Optional Transitive)
AGGREGATOR(聚合者):此属性标明了实施路由聚合的BGP路由器ID和聚合路由的路由器的AS号。
COMMUNITY(团体):此属性指共享一个公共属性的一组路由器。
(4)可选非过渡(Optional Nontransitive)
MED(多出口区分):该属性通知AS以外的路由器采用哪一条路径到达AS,它也被认为是路由的外部度量,低MED值表示高的优先级。
ORIGINATOR_ID(起源ID):路由反射器会附加到这个属性上,它携带本AS路由器的路由器ID,用以防止环路。
CLUSTER_LIST(簇列表):此属性显示了采用的反射路径。
协议结构
Marker (16 bytes) Length (2 bytes) Type (1 byte)
Marker – 信息包含信息接收端可预测值。
Length – 包含协议头的信息长度。
Type –信息类型。信息可能是:Open、Update、Notification、Keepalive。
打开(Open)分组,用来与相邻的另一个BGP发言人建立联系
更新(Update)分组,用来发送某一路由的信息,以及列出多条要撤销的路由
保活(Keepalive)分组,用来确认打开分组和周期性地证实邻站关系
通知(Notification)分组,用来发送检测到的差错 [2]
在传输协议连接建立之后,各端发送的第一个信息是 OPEN 信息。如果 OPEN 信息可以接收,会返回发送确认 OPEN 信息的 KEEPALIVE 信息。一旦 OPEN 信息获得确认,UPDATE、KEEPALIVE 和 NOTIFICATION 信息进行相互交换。
报文结构
BGP的报文结构如下所示 [1]
标记
长度
类型
报文数据(变长)
16字节 2字节 1字节
BGP的报文分成报文与报文数据两部分,其中,BGP报文数据根据不同的报文类型有所不同,报文头由以下3个字段构成:
(1)标记(Marker)字段。标记字段由16个字节构成。标记字段的值是一个通信双方(对等路由器) 都可认可的字节串,双方都统一使用改制来标识一个合法的BGP报文的开始。通常,标记字段用于承载鉴别信息。对于通信双方,在任何情况下标记的值都必须保持一致。标记字段用于报文接收的同步。由于BGP报文用过TCP来简化,而TCP 协议是一个无结构的流(stream)传输协议。在TCP协议上部位高层提供数据流的结构识别,因此也无法为BGP标识两个报文之间的边界。由于传输协议不指定报文边界,因此,为了确保发送方和接收方的报文边界准确保持同步,BGO要求在每个报文的开头放置了一个双方已知的序列,接收方通过该序列来检验报文头的正确性。
(2)报文长度,16比特,制定了以字节为单位计算的报文总长度。最小的报文为19i节,最大允许报文长度为4096字节。
(3)报文类型,1字节,指出报文所属的类型。
MCE概述
MCE 功能是Multi-CE 的简称,具有MCE 功能的网络设备可以在BGP/MPLS *** 组网应用中承担多个*** 实例的CE 功能,减少用户网络设备的投入。
工作原理
BGP/MPLS ***以隧道的方式解决了在公网中传送私网数据的问题,但传统的BGP/MPLS ***架构要求每个***实例单独使用一个CE与PE相连,如图 所示。
随着用户业务的不断细化和安全需求的提高,很多情况下一个私有网络内的用户需要划分成多个***,不同*** 用户间的业务需要完全隔离。此时,为每个*** 单独配置一台CE 将加大用户的设备开支和维护成本;而多个*** 共用一台CE,使用同一个路由表项,又无法保证数据的安全性。使用MCE 功能,可以有效解决多*** 网络带来的用户数据安全与网络成本之间的矛盾,它使用CE 设备本身的VLAN 接口编号与网络内的*** 进行绑定,并为每个*** 创建和维护独立的路由转发表(Multi-VRF)。这样不但能够隔离私网内不同*** 的报文转发路径,而且通过与PE 间的配合,也能够将每个*** 的路由正确发布至对端PE,保证***报文在公网内的传输。
下面举例介绍MCE对多个***的路由表项进行维护,并与PE交互***路由的过程:
如右图所示,左侧私网内有两个***站点:***1 和***2,分别通过MCE设备接入MPLS骨干网,其中***1 和***2 的用户,需要分别与远端***1用户和***2 用户建立***隧道。通过配置MCE 功能,可以在MCE 设备上为***1 和***2 创建各自的路由转发表,并使用VLAN 2 接口与***1 进行绑定、VLAN 3 与***2 进行绑定。在接收路由信息时,MCE 设备根据接收接口的编号,即可判断该路由信息的来源,并将其维护到对应*** 的路由转发表中。同时,在PE1 上也需要将连接MCE 的接口与*** 进行绑定,绑定的方式与MCE 设备一致。MCE与PE1 之间通过Trunk 链路连接,并允许VLAN 2 和VLAN 3 的报文携带VLAN Tag 传输,从而使PE1 在接收时可以根据报文所属VLAN 判别该报文属于哪一个***,将报文在指定的隧道内传输。
MCE 设备是如何将多个*** 实例的私网路由信息准确传播到PE 设备?这包括两部分:MCE与***站点的路由信息交换,MCE与PE之间的路由信息交换。这些路由信息的交换都有很多种方法,如静态路由、RIP、OSPF、ISIS、BGP路由协议。如果使用BGP路由协议来实现路由信息交换,则就是使用BGP MCE功能,因此BGP MCE功能就是BGP协议支持VRF,能够实现VRF下BGP路由信息的交换。需要在MCE 上为每个VRF 实例配置BGP 对等体,并引入相应*** 内的IGP 路由信息。由于各个*** 间正常情况下是处在不同的AS 内,因此使用EBGP 进行路由的传播。 [3]
在配置OSPF时,我们采用的是router ospf命令,在该命令后面需要加上这个OSPF进程的进程号(Process-Id),进程号用于在一台路由器上区分不同的OSPF进程。这就有点像人格分裂的感觉 —— 一个自然人有多种不同人格,每种人格之间相互独立,互不影响。进程号的取值范围是1-65535。
拓扑中,R1使用进程号10创建了一个OSPF进程,同时激活了自己的直连接口FE0/0,而R2使用进程号20创建了一个OSPF进程,同时也在自己的直连接口上激活了OSPF。虽然这两个进程号不一样,但是R1-R2之间的邻居关系建立是完全没有问题的。因为OSPF进程号只具有本地意义,路由器之间交互的所有OSPF报文中,都不会体现任何关于进程号的信息。进程号只在一台路由器上用于区分多个OSPF进程,因此对于R1而言,它并不关心它的直连OSPF邻居R2使用的是什么OSPF进程号,10也号,20也罢,这就有点像“自己的事自己知道就行“ -- 本地意义。
当然,在实际的网络部署中,除非有特定的需求,我们还是建议全网使用统一的进程号,虽然每台设备使用不同的进程号对OSPF的运行没什么影响,但是却给网络的管理和维护带来了多余的成本,你不会这么干的,对吧
1 多个OSPF进程
拓扑很有意思,在R2上,常规的做法是用一个进程号创建一个OSPF进程,同时将自己的两个直连接口都宣告进这个OSPF进程,但是为了讲解OSPF进程ID的本地意义,我这里在R2上使用两个进程号分别创建了两个OSPF进程,并且分别宣告了R2的两个直连接口,换句话说,R2使用OSPF进程12与R1建立邻居关系,使用OSPF进程23与R3建立OSPF邻居关系。如此一来,R2在本地就有了两个OSPF进程,使用进程号12及23进行区分。整个网络中也就出现了两个OSPF域(OSPF Domain)。这两个OSPF进程,都会各自从其邻居R1和R3学习到OSPF路由,但是值得强调的是:
这两个OSPF进程相互独立和隔离(两个OSPF Domain),两个进程独立维护各自的LSDB。换而言之R2通过OSPF进程12从R1学习到的OSPF路由(严格的说,应该是LSA),例如描述1110/24的LSA,缺省时不会传递到进程23的(这是因为在R2,这两个OSPF进程互相独立互相隔离),当然,从R3学习过来的OSPF路由,R2虽然自己能学习到,但是照样不会传递给R1,这就好像,这两个进程虽然都在R2上,但是彼此之间有着一道鸿沟,世界上最遥远的距离,莫过于此啊。
再者,R2这两个OSPF进程虽然说彼此隔离,但是都可以为R2自身贡献路由,例如如果R1更新过来一条路由1110/24,R3更新过来一条3330/24,那么在R2的全局路由表里都是能看到这两条路由的。但这两条路由不会互相灌进对方的OSPF进程(造成的直接结果是R1没有R3的路由,R3没有R1的路由),除非 -- 对了,路由重发布,你懂的。
2 OSPF进程之间的路由重发布
同一台路由器上的不同OSPF进程相互独立,各自维护自己的LSDB。如果要把一个OSPF进程内的路由注入到另一个进程中,就需要部署路由重发布,例如上图所示,R2作为一台ASBR,要把进程12中的路由注入到进程23中,配置如上。当然,如果要实现全网路由互通,则还需要在OSPF进程12中,将进程23的路由重发布进来。
3 什么时候会使用不同的OSPF进程
我们知道一台路由器可以创建多个OSPF进程,而且进程之间相互隔离。一般情况下,当我们在做网络建设时,整个网络就是一个统一的路由选择域,如果选用OSPF作为路由协议,则所有的OSPF路由器使用一个OSPF进程即可。
展示了一个大型企业的网络拓扑,R1、R2、R3及R4是省公司的设备,SW1、SW2及往下是市公司的设备,R5是区县站点设备(实际上有多个区县站点,此处只显示了一个)。为了实现市公司与各区县站点的网络互通,我们在市公司所有设备,以及区县站点的所有路由器上都配置了OSPF并且进行了多区域的规划。由于整个企业数据网络的规模较大,要想打通整个网络的路由,使用一个OSPF域直接从区县站点往上拉到省公司,显然是不靠谱的,一来整个域太大,路由前缀数量太多,二来OSPF的多区域设计在面对这么大规模网络的时候显得还是有点力不从心,三来总公司并不希望看到分公司以及下面的子站点的路由明细,路由汇总势必是要考虑的,加之对流量的走向还有严格的要求,策略部署上如何考虑因此为省公司网络规划了另外一个OSPF域,在省公司的边界设备R3、R4上创建两个OSPF进程,进程1面向总公司,进程2面向下面的市公司及区县站点。两个进程相互独立不互相干扰,而R3及R4又能够学习到省公司、分公司及各个区县站点的路由,两个OSPF域可以独立规划,域内Area的设计又变得更加宽松和灵活。
当然,省公司、总干以及地市公司是需要相互通信的,这时候由于省公司的网络属于OSPF进程1,而市分公司及区县站点的网络属于OSPF进程2,相互独立,为了把路由打通,就需要在R3和R4上执行OSPF进程之间的路由相互重发布。一旦把R3、R4设计为路由重发布的执行点,他俩瞬间就变得非常重要和牛逼了,因为在重发布的过程中,可以执行路由策略、可以做路由过滤,更可以做路由汇总,网络的设计和规划就变得非常有弹性了。
下面再来看多进程OSPF的另一个例子:
网络中,存在两个不同的业务。生产及办公,两个业务各有自己的服务器网络,两台Router分别连接着这两个业务的服务器网络。而终端用户则连接在SW上,现在终端用户需要访问各自业务的服务器,那么SW当然是需要有相应的路由的。我们希望将生产及办公的业务进行隔离,但是这两个业务的终端用户又都是连接在SW上,如何隔离很简单,在SW上创建两个OSPF进程,其中进程1用于生产业务,进程2用于办公业务。在OSPF进程1中,激活VLAN10及VLAN20对应的SVI,并激活与SC-Router对接的三层接口;在OSPF进程2中,激活VLAN30、40对应的SCI,并激活与BG-Router对接的三层接口,如此一来办公及生产服务器网段的路由通过这两个OSPF进程在SW上进行了隔离。
这的确是一种好方法,但是虽然OSPF进程是隔离的,SW的全局路由表中却拥有者生产及办公两个业务的路由,也就是说两个业务的路由实际上在SW这个点上是打通的,显然不够安全,如果有人从办公网络登到办公终端,然后再从办公终端跳转,去访问生产服务器就麻烦了。所以,我们又引入了另一个概念——VRF(Virtual Routing Forwarding,虚拟路由转发),所谓的VRF你可以理解为虚拟设备,通过在SW上创建VRF实例,并且将生产的OSPF进程关联到一个VRF实例中,从而彻底将生产路由与办公路由进行隔离(办公路由及业务跑在根设备上,生产路由及业务跑在VRF实例上,两者完全隔离,可以想象为两台SW)。
平平网网红猛料返回首页
绑架动漫美女用胶带封嘴视频有哪些 哪里可以下载
2022-07-19 07:49 编辑:wendy
在动漫中,有很多的动漫都有将女生绑架的戏码,这时日漫中一个常见的镜头。在日漫中经常会掺杂这一些情欲的元素,有可能是不明显的表达,但是却能够让屏幕外的你感觉到满满的紧张感,如果我们在真人版中有对女性的绑架,并且给女神用胶带封上自己的嘴的话,那肯定是不允许的,但是在动漫中确实可以的,今天就来看一看动漫中有那些美女被绑架,被封嘴的和视频吧!

动漫中的一些美女被绑架之后,他们的一些绳子都会选择在他的胸前绕上几下,然后在脚踝上面在绑上一圈,这个时候的动漫美女的的嘴巴上面封上一层胶带,这个时候的动漫美女的胸部被露了出来,然后胸部看起来非常的大的,然后裙子的的下面而又一根绳子,然后绳子会在大腿的地方绕过去,大腿部分的性感的白皙的皮肤就露出出来,这样的场景真的会让我们血脉喷张的哦!

很多的动漫的情节中,我们会看到的是我们的美女被绑架的场景,在场景中有这样的一个场景是非常的有感觉的,就是将我们的女生吊在了天花板上,然后吊住了女孩的胳膊还有腿,然后女孩的眼睛也被蒙了起来,齐刘海的紫色的长发,给人的感觉是满满的的非主流的感觉,这样的绑架场景是不是非常的有酷感的设计呢?女生胸前有一种摇摇欲醉的感觉。是不是给屏幕外的人带来热血的感觉呢?

白色的衣服是很多的宅男的最爱,很多的宅男,他们非常的喜欢女孩穿白色的衣服,中的女生是一个被绑架的场景,被绑架的女孩她并没有在嘴上给她粘上胶带,而是是绑住了她的脚和她的手,上衣是一个小的露脐装,而且还有流苏的设计,非常的性感的设计,穿的是一个小的三角的内裤,若隐若现的臀部是会给屏幕外的人带了更多的遐想,大腿部分的高筒高跟鞋是非常的有特色的。这样的场景最为让人尖叫。

上面的场景都是非常的性感的,甚至可以说透漏了某种低俗感觉的内容,这个给人的感觉会比较普通,一个褐色的中长的女生从穿着上看是一个非常普通的利落的女生,有可能还是一个中学生的女孩,在这次绑架中这个女孩的嘴巴被封住了,身上的绳子非常的真实,连胳膊上面都有绳子的勒痕了,而且她的手也是被绑住了,女孩的脸上还有留下的汗珠,我们可以感觉到当时的气愤的紧张感。
1 工作量证明(PoW)
中本聪在2009年提出的比特币(Bitcoin)是区块链技术最早的应用,其采用PoW作为共识算法,其核心思想是节点间通过哈希算力的竞争来获取记账权和比特币奖励。PoW中,不同节点根据特定信息竞争计算一个数学问题的解,这个数学问题很难求解,但却容易对结果进行验证,最先解决这个数学问题的节点可以创建下一个区块并获得一定数量的币奖励。中本聪在比特币中采用了HashCash[4]机制设计这一数学问题。本节将以比特币采用的PoW算法为例进行说明,PoW的共识步骤如下:
节点收集上一个区块产生后全网待确认的交易,将符合条件的交易记入交易内存池,然后更新并计算内存池中交易的Merkle根的值,并将其写入区块头部;
在区块头部填写如表11所示的区块版本号、前一区块的哈希值、时间戳、当前目标哈希值和随机数等信息;
表11 区块头部信息
随机数nonce在0到232之间取值,对区块头部信息进行哈希计算,当哈希值小于或等于目标值时,打包并广播该区块,待其他节点验证后完成记账;
一定时间内如果无法计算出符合要求的哈希值,则重复步骤2。如果计算过程中有其他节点完成了计算,则从步骤1重新开始。
比特币产生区块的平均时间为10分钟,想要维持这一速度,就需要根据当前全网的计算能力对目标值(难度)进行调整[5]。难度是对计算产生符合要求的区块困难程度的描述,在计算同一高度区块时,所有节点的难度都是相同的,这也保证了挖矿的公平性。难度与目标值的关系为:
难度值=最大目标值/当前目标值 (11)
其中最大目标值和当前目标值都是256位长度,最大目标值是难度为1时的目标值,即2224。假设当前难度为,算力为,当前目标值为,发现新区块的平均计算时间为,则
根据比特币的设计,每产生2016个区块后(约2周)系统会调整一次当前目标值。节点根据前2016个区块的实际生产时间,由公式(14)计算出调整后的难度值,如果实际时间生产小于2周,增大难度值;如果实际时间生产大于2周,则减小难度值。根据最长链原则,在不需要节点同步难度信息的情况下,所有节点在一定时间后会得到相同的难度值。
在使用PoW的区块链中,因为网络延迟等原因,当同一高度的两个区块产生的时间接近时,可能会产生分叉。即不同的矿工都计算出了符合要求的某一高度的区块,并得到与其相近节点的确认,全网节点会根据收到区块的时间,在先收到的区块基础上继续挖矿。这种情况下,哪个区块的后续区块先出现,其长度会变得更长,这个区块就被包括进主链,在非主链上挖矿的节点会切换到主链继续挖矿。
PoW共识算法以算力作为竞争记账权的基础,以工作量作为安全性的保障,所有矿工都遵循最长链原则。新产生的区块包含前一个区块的哈希值,现存的所有区块的形成了一条链,链的长度与工作量成正比,所有的节点均信任最长的区块链。如果当某一组织掌握了足够的算力,就可以针对比特币网络发起攻击。当攻击者拥有足够的算力时,能够最先计算出最新的区块,从而掌握最长链。此时比特币主链上的区块大部分由其生成,他可以故意拒绝某些交易的确认和进行双花攻击,这会对比特币网络的可信性造成影响,但这一行为同样会给攻击者带来损失。通过求解一维随机游走问题,可以获得恶意节点攻击成功的概率和算力之间的关系:
图11 攻击者算力与攻击成功概率
2 权益证明(PoS)
随着参与比特币挖矿的人越来越多,PoW的许多问题逐渐显现,例如随着算力竞争迅速加剧,获取代币需要消耗的能源大量增加,记账权也逐渐向聚集了大量算力的“矿池”集中[6-9]。为此,研究者尝试采用新的机制取代工作量证明。PoS的概念在最早的比特币项目中曾被提及,但由于稳健性等原因没被使用。PoS最早的应用是点点币(PPCoin),PoS提出了币龄的概念,币龄是持有的代币与持有时间乘积的累加,计算如公式(14)所示。利用币龄竞争取代算力竞争,使区块链的证明不再仅仅依靠工作量,有效地解决了PoW的资源浪费问题。
其中持有时间为某个币距离最近一次在网络上交易的时间,每个节点持有的币龄越长,则其在网络中权益越多,同时币的持有人还会根据币龄来获得一定的收益。点点币的设计中,没有完全脱离工作量证明,PoS机制的记账权的获得同样需要进行简单的哈希计算:
其中proofhash是由权重因子、未消费的产出值和当前时间的模糊和得到的哈希值,同时对每个节点的算力进行了限制,可见币龄与计算的难度成反比。在PoS中,区块链的安全性随着区块链的价值增加而增加,对区块链的攻击需要攻击者积攒大量的币龄,也就是需要对大量数字货币持有足够长的时间,这也大大增加了攻击的难度。与PoW相比,采用PoS的区块链系统可能会面对长程攻击(Long Range Attack)和无利害攻击(Nothing at Stake)。
除了点点币,有许多币也使用了PoS,但在记账权的分配上有着不同的方法。例如,未来币(Nxt)和黑币(BlackCion)结合节点所拥有的权益,使用随机算法分配记账权。以太坊也在逐步采用PoS代替PoW。
3 委托权益证明(DPoS)
比特币设计之初,希望所有挖矿的参与者使用CPU进行计算,算力与节点匹配,每一个节点都有足够的机会参与到区块链的决策当中。随着技术的发展,使用GPU、FPGA、ASIC等技术的矿机大量出现,算力集中于拥有大量矿机的参与者手中,而普通矿工参与的机会大大减小。
采用DPoS的区块链中,每一个节点都可以根据其拥有的股份权益投票选取代表,整个网络中参与竞选并获得选票最多的n个节点获得记账权,按照预先决定的顺序依次生产区块并因此获得一定的奖励。竞选成功的代表节点需要缴纳一定数量的保证金,而且必须保证在线的时间,如果某时刻应该产生区块的节点没有履行职责,他将会被取消代表资格,系统将继续投票选出一个新的代表来取代他。
DPoS中的所有节点都可以自主选择投票的对象,选举产生的代表按顺序记账,与PoW及PoS相比节省了计算资源,而且共识节点只有确定的有限个,效率也得到了提升。而且每个参与节点都拥有投票的权利,当网络中的节点足够多时,DPoS的安全性和去中心化也得到了保证。
4 实用拜占庭容错算法(PBFT)
在PBFT算法中,所有节点都在相同的配置下运行,且有一个主节点,其他节点作为备份节点。主节点负责对客户端的请求进行排序,按顺序发送给备份节点。存在视图(View)的概念,在每个视图中,所有节点正常按照处理消息。但当备份节点检查到主节点出现异常,就会触发视图变换(View Change)机制更换下一编号的节点为主节点,进入新的视图。PBFT中客户端发出请求到收到答复的主要流程如图41所示[10] [11],服务器之间交换信息3次,整个过程包含以下五个阶段:
图41 PBFT执行流程
目前以PBFT为代表的拜占庭容错算法被许多区块链项目所使用。在联盟链中,PBFT算法最早是被Hyper ledger Fabric项目采用。Hyperledger Fabric在06版本中采用了PBFT共识算法,授权和背书的功能集成到了共识节点之中,所有节点都是共识节点,这样的设计导致了节点的负担过于沉重,对TPS和扩展性有很大的影响。10之后的版本都对节点的功能进行了分离,节点分成了三个背书节点(Endorser)、排序节点(Orderer)和出块节点(Committer),对节点的功能进行了分离,一定程度上提高了共识的效率。
Cosmos项目使用的Tendermint[12]算法结合了PBFT和PoS算法,通过代币抵押的方式选出部分共识节点进行BFT的共识,其减弱了异步假设并在PBFT的基础上融入了锁的概念,在部分同步的网络中共识节点能够通过两阶段通信达成共识。系统能够容忍1/3的故障节点,且不会产生分叉。在Tendermint的基础上,Hotstuff[13]将区块链的块链式结构和BFT的每一阶段融合,每阶段节点间对前一区块签名确认与新区块的构建同时进行,使算法在实现上更为简单,Hotstuff还使用了门限签名[14]降低算法的消息复杂度。
5 Paxos与Raft
共识算法是为了保障所存储信息的准确性与一致性而设计的一套机制。在传统的分布式系统中,最常使用的共识算法是基于Paxos的算法。在拜占庭将军问题[3]提出后,Lamport在1990年提出了Paxos算法用于解决特定条件下的系统一致性问题,Lamport于1998年重新整理并发表Paxos的论文[15]并于2001对Paxos进行了重新简述[16]。随后Paxos在一致性算法领域占据统治地位并被许多公司所采用,例如腾讯的Phxpaxos、阿里巴巴的X-Paxos、亚马逊的AWS的DynamoDB和谷歌MegaStore[17]等。这一类算法能够在节点数量有限且相对可信任的情况下,快速完成分布式系统的数据同步,同时能够容忍宕机错误(Crash Fault)。即在传统分布式系统不需要考虑参与节点恶意篡改数据等行为,只需要能够容忍部分节点发生宕机错误即可。但Paxos算法过于理论化,在理解和工程实现上都有着很大的难度。Ongaro等人在2013年发表论文提出Raft算法[18],Raft与Paxos同样的效果并且更便于工程实现。
Raft中领导者占据绝对主导地位,必须保证服务器节点的绝对安全性,领导者一旦被恶意控制将造成巨大损失。而且交易量受到节点最大吞吐量的限制。目前许多联盟链在不考虑拜占庭容错的情况下,会使用Raft算法来提高共识效率。
6 结合VRF的共识算法
在现有联盟链共识算法中,如果参与共识的节点数量增加,节点间的通信也会增加,系统的性能也会受到影响。如果从众多候选节点中选取部分节点组成共识组进行共识,减少共识节点的数量,则可以提高系统的性能。但这会降低安全性,而且候选节点中恶意节点的比例越高,选出来的共识组无法正常运行的概率也越高。为了实现从候选节点选出能够正常运行的共识组,并保证系统的高可用性,一方面需要设计合适的随机选举算法,保证选择的随机性,防止恶意节点对系统的攻击。另一方面需要提高候选节点中的诚实节点的比例,增加诚实节点被选进共识组的概率。
当前在公有链往往基于PoS类算法,抵押代币增加共识节点的准入门槛,通过经济学博弈增加恶意节点的作恶成本,然后再在部分通过筛选的节点中通过随机选举算法,从符合条件的候选节点中随机选举部分节点进行共识。
Dodis等人于1999年提出了可验证随机函数(Verifiable Random Functions,VRF)[19]。可验证随机函数是零知识证明的一种应用,即在公私钥体系中,持有私钥的人可以使用私钥和一条已知信息按照特定的规则生成一个随机数,在不泄露私钥的前提下,持有私钥的人能够向其他人证明随机数生成的正确性。VRF可以使用RSA或者椭圆曲线构建,Dodis等人在2002年又提出了基于Diffie-Hellman 困难性问题的可验证随机函数构造方法[20],目前可验证随机函数在密钥传输领域和区块链领域都有了应用[21]。可验证随机函数的具体流程如下:
在公有链中,VRF已经在一些项目中得到应用,其中VRF多与PoS算法结合,所有想要参与共识的节点质押一定的代币成为候选节点,然后通过VRF从众多候选节点中随机选出部分共识节点。Zilliqa网络的新节点都必须先执行PoW,网络中的现有节点验证新节点的PoW并授权其加入网络。区块链项目Ontology设计的共识算法VBFT将VRF、PoS和BFT算法相结合,通过VRF在众多候选节点中随机选出共识节点并确定共识节点的排列顺序,可以降低恶意分叉对区块链系统的影响,保障了算法的公平性和随机性。图灵奖获得者Micali等人提出的Algorand[22]将PoS和VRF结合,节点可以采用代币质押的方式成为候选节点,然后通过非交互式的VRF算法选择部分节点组成共识委员会,然后由这部分节点执行类似PBFT共识算法,负责交易的快速验证,Algorand可以在节点为诚实节点的情况下保证系统正常运行。Kiayias等人提出的Ouroboros[23]在第二个版本Praos[24]引入了VRF代替伪随机数,进行分片中主节点的选择。以Algorand等算法使用的VRF算法为例,主要的流程如下:
公有链中设计使用的VRF中,节点被选为记账节点的概率往往和其持有的代币正相关。公有链的共识节点范围是无法预先确定的,所有满足代币持有条件的节点都可能成为共识节点,系统需要在数量和参与度都随机的节点中选择部分节点进行共识。而与公有链相比,联盟链参与共识的节点数量有限、节点已知,这种情况下联盟链节点之间可以通过已知的节点列表进行交互,这能有效防止公有链VRF设计时可能遇到的女巫攻击问题。
7 结合分片技术的公式算法
分片技术是数据库中的一种技术,是将数据库中的数据切成多个部分,然后分别存储在多个服务器中。通过数据的分布式存储,提高服务器的搜索性能。区块链中,分片技术是将交易分配到多个由节点子集组成的共识组中进行确认,最后再将所有结果汇总确认的机制。分片技术在区块链中已经有一些应用,许多区块链设计了自己的分片方案。
Luu等人于2017年提出了Elastico协议,最先将分片技术应用于区块链中[25]。Elastico首先通过PoW算法竞争成为网络中的记账节点。然后按照预先确定的规则,这些节点被分配到不同的分片委员会中。每个分片委员会内部执行PBFT等传统拜占庭容错的共识算法,打包生成交易集合。在超过的节点对该交易集合进行了签名之后,交易集合被提交给共识委员会,共识委员会在验证签名后,最终将所有的交易集合打包成区块并记录在区块链上。
Elastico验证了分片技术在区块链中的可用性。在一定规模内,分片技术可以近乎线性地拓展吞吐量。但Elastico使用了PoW用于选举共识节点,这也导致随机数产生过程及PoW竞争共识节点的时间过长,使得交易延迟很高。而且每个分片内部采用的PBFT算法通讯复杂度较高。当单个分片中节点数量较多时,延迟也很高。
在Elastico的基础上,Kokoris-Kogias等人提出OmniLedger[26],用加密抽签协议替代了PoW选择验证者分组,然后通过RandHound协议[27]将验证者归入不同分片。OmniLedger。OmniLedger在分片中仍然采用基于PBFT的共识算法作为分片中的共识算法[28],并引入了Atomix协议处理跨分片的交易,共识过程中节点之间通信复杂度较高。当分片中节点数量增多、跨分片交易增多时,系统TPS会显著下降。
Wang等人在2019年提出了Monoxide[29]。在PoW区块链系统中引入了分片技术,提出了连弩挖矿算法(Chu ko-nu mining algorithm),解决了分片造成的算力分散分散问题,使得每个矿工可以同时在不同的分片进行分片,在不降低安全性的情况下提高了PoW的TPS。
以上就是关于为什么每个VRF需要不同的OSPF过程(具有不同的process-id)全部的内容,包括:为什么每个VRF需要不同的OSPF过程(具有不同的process-id)、边界网关协议的BGP MCE、多进程OSPF及进程号的意义等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!