BTC-网络
约 3123 字大约 10 分钟
2021-09-11
相关术语
The Bitcoin Network 比特币网络
application layer 应用层
P2P Overlay Network 点对点覆盖网络
seed node 种子节点
simple、robust,but not efficient 简单、鲁棒,不高效
Best effort 尽最大努力的服务模型(不可靠)
flooding 泛洪
之前了解的比特币工作了解过,用户把交易发布到比特币网络上,节点收到这些交易之后打包到区块里,然后把区块也发布到比特币网络上,那么这些新发布的交易,新发布的区块在比特币网络上是怎么传播的呢。现在就了解一下比特币网络的工作原理The Bitcoin Network
。
概述
比特币工作在应用层application layer
。网络层运行的是P2P Overlay Network
。比特币这个P2P网络是非常简单的,所有节点都是对等的。它不像其他P2P网络有所谓的超级节点super node
或者master node
。要加入这个网络,首先要知道seed node
,跟这个种子节点联系,它会告诉你它所知道的网络中其他节点。节点之间是通过tcp
来通信的,这样有利于传统防火墙。然后离开的时候,不需要什么操作,不需要通知其他节点,就退出应用程序就可以了。别的节点没有听到你的消息,过了一段时间就会把你删掉。
Seed Node
Seed Node(种子节点)是区块链网络中的一种特殊节点,其主要功能是帮助新节点加入网络并与其他节点建立连接。以下是对Seed Node的简洁介绍:
- 网络引导:Seed Node作为新节点加入区块链网络的入口点,提供网络中其他活跃节点的信息,确保新节点能够轻松连接并同步网络数据。
- 不参与共识:Seed Node通常不参与共识机制或验证交易,它们主要作为网络发现工具,帮助维护区块链网络的去中心化和点对点特性。
- 节点分类:
- 公共Seed Node:对所有新节点开放,提供广泛的网络接入。
- 私有Seed Node:在许可链或企业区块链中使用,限制只有授权节点才能访问。
- 备用Seed Node:作为主要Seed Node不可用时的备份,增强网络的可靠性。
- 重要性:Seed Node对于保持区块链网络的整体连通性和可扩展性至关重要,它们作为新节点的引导,确保网络保持开放和可扩展,同时防止网络分区,增强网络的弹性。
- 操作方式:
- 在新节点尝试加入区块链网络时,它会连接到Seed Node以获取活跃节点列表。
- 新节点根据Seed Node提供的列表建立与其他节点的直接连接,确保完全融入网络。
- Seed Node帮助新节点开始与区块链同步,连接到全节点或验证节点,以便下载最新的区块链数据。 Seed Node在区块链网络中扮演着关键角色,它们不仅确保了网络的连通性,还支持了网络的去中心化和稳定性。
TCP
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。以下是TCP的简洁介绍:
- 面向连接:在数据传输开始之前,TCP需要在两端建立一个连接,这通过一个称为三次握手的过程完成。
- 可靠的传输:TCP确保数据正确无误地从源传输到目的地。它通过确认应答、数据重传、序列号和校验和等机制来实现。
- 基于字节流:TCP将数据视为字节流,而不是消息或数据包,这使得它适用于各种大小和类型的数据传输。
- 全双工通信:TCP允许通信双方同时发送和接收数据,即全双工模式。
- 流量控制:TCP使用窗口机制来控制发送方的发送速率,以避免接收方处理不过来。
- 拥塞控制:TCP动态调整数据传输速率以避免网络拥塞,常用的算法包括慢启动、拥塞避免、快速重传和快速恢复。
- 端到端:TCP提供端到端的通信,即从一个应用程序直接到另一个应用程序,不依赖于中间网络设备的存储和转发。
- 适用场景:TCP适用于需要可靠传输的应用,如网页浏览(HTTP)、文件传输(FTP)、邮件传输(SMTP)等。
- 状态机:TCP通过一个复杂的状态机来管理连接的建立、数据传输和连接的终止。
- 端口号:TCP使用端口号来区分同一主机上的不同服务,每个TCP连接由一个唯一的源端口号和目的端口号对标识。
TCP是互联网协议套件(TCP/IP)的核心组成部分,为现代网络通信提供了坚实的基础。
设计原则
理解比特币网络的设计原则是simple、robust,but not efficient
,简单、鲁邦,而不是高效 。每个节点维护一个邻居节点的集合。消息在网络中传播采取的叫flooding
的方式。节点第一次听到某个消息的时候,把它传播给其他所有邻居节点,同时记录一下,这个消息已经收到过了。那么下一次再收到这个消息的时候,就不用再在转发给邻居节点了。邻居节点的选取是随机的,没有考虑底层的拓扑结构,比如一个在加利福利亚的节点他选的邻居节点可能是在阿根廷的。这样设计的好处是增强鲁邦性,但是牺牲的是效率。flooding
在计算机网络领域,"flooding" 这个术语通常翻译为“泛洪”。这个词描述的是一种网络通信策略,其中数据包被发送到网络中的所有设备,直到找到目的地为止。这种策略在某些网络协议中用于广播或多播数据,例如在ARP(地址解析协议)中用来询问某个IP地址对应的MAC地址。泛洪可能会导致网络流量激增,特别是在大型网络中,因此需要谨慎使用。
鲁棒性
"鲁棒性"(Robustness)是指系统、模型或算法在面对各种不确定性、变化、干扰、噪声和异常情况时,能够保持稳定、可靠且良好的性能的能力。它涉及到系统在复杂和多变的环境中的适应能力,与稳定性、可靠性和抗干扰性相比,鲁棒性强调的是系统在面对各种不确定性和干扰时的表现,包括在未知情况下的适应能力。
鲁棒性与稳定性、可靠性和抗干扰性有所区别:
- 鲁棒性更强调系统在面对各种不确定性和干扰时的表现,包括在未知情况下的适应能力。稳定性则更着重于系统在受到小幅扰动时不会出现剧烈的变化,表现为输出对于输入的微小变化具有较小的响应。
- 鲁棒性强调系统在各种情况下都能保持稳定的性能,即使面对未知的情况或变化。可靠性更侧重于系统在长时间运行中的一致性和正确性,即系统能够在规定的条件下始终提供正确的结果。
- 鲁棒性与抗干扰性有一定的重叠,但抗干扰性通常更强调系统对于特定类型的干扰、噪声或攻击的抵抗能力。鲁棒性则更全面,包括对多种类型的不确定性和干扰的适应性。
总的来说,鲁棒性是一个广泛的概念,它强调系统在多样性的环境和情况下的适应能力和稳定性。
新发交易
理解比特币系统中每个节点要维护一个等待上链的交易的集合。比如这个里面的交易都是等待要写入到区块链里面的,那么第一次听到某个交易的时候,把这个交易加入这个集合。并且转发这个交易给邻居节点。以后再收到这个交易后就不用转发了。这样避免这个交易在网络上无限传播下去。转发的前提是这个交易是合法的,要有合法的签名、以前没有被花过。这里有个,有可能有俩个有冲突的交易,差不多同时被广播到网络上。比如A->B,A->C,这俩个交易如果差不多同时被广播到网络上,那每个节点根据在网络上的位置不同,有的可能先收到第一个,有的可能先收到第二个。比如有的先收到A->B,那么把他加到集合里,之后再收到A->C,就不会加到集合里,因为有冲突。这个集合里的交易如果写到区块链里面,就会从这个集合中删掉。比如这个节点听到一个新发布的区块,里面包含了A->B的交易,那么这个交易就可以删掉了,因为已经写到区块链里了。如果它听到到的新发布的区块是A->C的交易,也要把集合里的A->B删掉,因为如果A->C写入了,那么A->B就是非法的了,就是double spending
了。新发区块
理解新发布的区块在网络上传播的方式跟新发布的交易类似。每个节点除了要检查这个区块的内容的合法性,还有检查是不是在最长合法链上。越是大的区块在网络上传播的速度越慢。比特币对区块大小有个显示,最大是1M。Best effort
比特币的网络传播是属于best effort
。一个交易发布到比特币网络上,不一定所有的节点都能收到,而且不一样的节点收到的顺序也不一定是一样的,网络传播存在延迟,而且这个延迟有时候会很长。而且有点节点不一定按照比特币的要求进行转发,就不想转发,导致某些合法的交易收不到,也有的节点可能转发一些不该转发的消息,比如转发一些不合法的交易。这就是一个去中心化的系统中面临的实际问题。
Best effort
"Best effort" 是一种服务模型,通常用于网络通信和数据处理,其核心思想是:
- 尽力而为:服务提供者会尽力去完成请求的任务,但不保证结果的成功或性能的最优。
- 无保证:在数据传输或服务交付中,不提供成功或时效的保证,服务的结果依赖于当前的条件和能力。
- 适应性:在网络通信中,"best effort" 意味着数据包尽可能被发送和接收,但如果网络拥堵或资源有限,一些数据包可能会丢失或延迟。
- 成本效益:这种服务模型通常成本较低,因为它不需要额外的资源来保证服务质量,适用于对成本敏感但对服务质量要求不高的场景。
- 适用性:适用于那些可以容忍一定程度失败或延迟的应用,如电子邮件、网页浏览等,这些应用不需要即时或完全可靠的数据传输。
"Best effort" 服务模型强调的是尽力提供服务,但不承诺服务质量,这与那些需要高可靠性和服务质量保证的服务(如实时视频会议或在线游戏)形成对比。