上周有朋友求助大文:DAG和DHT有什么区别?
DAG全程有向无环图,我们之前有过介绍,是一种针对公有链的扩容方案,其代表项目包括IOTA和Phantom。但因为开发难度大、依然有技术难关需要攻克,因此目前公有链市场中优秀的DAG项目并不多见。
DHT全称分布式散列表或分布式哈希表,是区块链系统实现分布式网络的底层算法,具体到每个项目又有不同,如比特币使用的gossip protocol, 以太坊使用的Kademlia。
今天为大家详细讲讲DHT。
DHT的诞生可以说是现代互联网去中心化的一个标志:最初的互联网是彻底去中心化的,每台计算机(节点)之间通过FPS等各种协议互相访问。在之后的发展过程中,互联网逐渐发展出了适合进行大规模商业应用的服务器+客户端模式,将部分节点特殊化成为服务器,其他节点之间的访问逐渐减少,这也是现代互联网被冠上“中心化”称呼的原因。
在互联网中心化的发展过程当中,以BT下载为代表的P2P网络协议成为了互联网去中心化的标志。P2P全称对等式网络(peer-to-peer),又称点对点技术,是无中心服务器、依靠用户群(peers)交换信息的互联网体系,它的作用在于,减低以往网路传输中的节点,以降低资料遗失的风险。与有中心服务器的中央网络系统不同,对等网络的每个用户端既是一个节点,也有服务器的功能,任何一个节点无法直接找到其他节点,必须依靠其户群进行信息交流。
从某种意义上说,区块链技术是P2P的延伸。与P2P相比,区块链将应用场景进行了极大的扩展,并且解决了对节点的奖励问题。而P2P本身强调的离散性、伸缩性、容错性也能够完美的支持区块链网络运行。其中:
离散性:构成系统的节点并没有任何中央式的协调机制。
伸缩性:即使有成千上万个节点,系统仍然应该十分有效率。
容错性:即使节点不断地加入、离开或是停止工作,系统仍然必须达到一定的可靠度。
以比特币采用的Gossip Protocol算法为例,Gossip算法能够利用一种随机的方式将信息散播到整个网络中,正如Gossip的本意“绯闻八卦”一样。
Gossip在运行过程中,网络中的某个节点随机的选择其他若干个个节点作为传输对象,该节点向其选中的若干个个节点传输相应的信息,随后接收到信息的节点重复完成相同的工作,最终建立了比特币节点网络。
在以太坊中采用的Kademlia(也被称为Kad)算法则直接规定了网络的结构,也规定了通过节点查询进行信息交换的方式。Kademlia网络节点之间使用UDP进行通讯。参与通讯的所有节点形成一张虚拟网,并通过节点ID来进行身份标识,与文件散列直接对应,它所表示的那个节点存储着哪儿能够获取文件和资源的相关信息。当我们在网络中搜索某些值的时候,Kademlia算法需要知道与这些值相关的键,然后分步在网络中开始搜索。每一步都会找到一些节点,这些节点的ID与键更为接近,如果有节点直接返回搜索的值或者再也无法找到与键更为接近的节点ID的时候搜索便会停止。这种搜索值的方法是非常高效的:与其他的分散式杂凑表的实现类似,在一个包含n个节点的系统的值的搜索中,Kademlia仅访问O(log(n))个节点。非集中式网络结构还有更大的优势,那就是它能够显著增强抵御拒绝服务攻击的能力。即使网络中的一整批节点遭受泛洪攻击,也不会对网络的可用性造成很大的影响,通过绕过这些漏洞(被攻击的节点)来重新编织一张网络,网络的可用性就可以得到恢复。这也是以太坊系统较比特币系统更为高效的原因之一。