
区块链通识——网络层
发布日期:2021-05-07 07:09:22
浏览次数:35
分类:精选文章
本文共 1330 字,大约阅读时间需要 4 分钟。
网络层
一丶概述
- 网络层封装了区块链系统的组网方式,消息传播协议和数据验证机制等要素
- 结合实际应用需求,通过设计特定的传播协议和数据验证机制
- 可使得区块链系统中每个节点都能参与区块数据的校验和记账过程
- 仅当区块数据通过全网大部分节点验证后,才能记入区块链
二丶组网方式P2P网络
- 组网方式:
- 区块链系统的节点一般具有分布式,自治性,开放可自由进出等特性
- 因而一般采用对等式网络(Peer-to-peer networl, P2P网络)来组织散布全球的参与数据验证和记账的节点
- P2P网络
- 每个节点均地位对等且以扁平式拓扑结构相互连通和交互
- 不存在任何中心化的特殊节点和层级结构
- 每个节点均会承担网络路由,验证区块数据,传播区块数据,发现新节点等功能
- 按照节点存储数据量不同,可以分为全节点和轻量节点
- 特点
- 永不停止
- 初始化时通过硬编码的种子节点建立连接
三丶数据传播协议
- 任一区块数据生成后,将由生成该数据的节点广播到全网其他所有的节点来加以验证
- 现有的区块链系统一般根据实际应用需求设计比特币传播协议的变种
- 以太坊块链集成了所谓的幽灵协议
- 以解决因区块数据确认速度快而导致的高区块作废率和安全性风险
- 根据中本聪的设计比特币系统的交易数据传播协议包括如下步骤:
- 比特币交易节点将新生成的交易数据向全网所有节点进行广播
- 每个节点都将收集到的交易数据存储到一个区块中
- 每个节点基于自身算力在区块中找到一个具有足够难度的工作量证明
- 当节点找到区块的工作量证明后,就向全网所有节点广播此区块
- 仅当包含在区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性
- 其他节点接受该数据区块,并在该区块的末尾制造新的区块以延长该链条,而将被接受区块的随机哈希值视为先于新区块的随机哈希值
四丶数据验证机制
- 数据验证机制
- P2P网络中的每个节点都时刻监听比特币网络中广播的数据与新区块
- 节点接受到邻近节点发来的数据后,将首先验证该数据的有效性
- 如果数据有效,则按照接受顺序为新数据建立存储池以暂存尚未记入区块的有效数据,同时继续向邻近节点转发
- 如果数据无效,则立即废弃该数据,从而保证无效数据不会在区块链网络继续传播
- 以比特币为例
- 比特币的矿工节点会收集和验证P2P网络中广播的尚未确认的交易数据
- 并对照预定义的标准清单
- 从数据结构,语法规范性,输入输出和数字签名等各方面校验交易数据的有效性
- 并将有效交易数据整合到当前区块中
- 同理,当某矿工“挖”到新区块后
- 其他矿工节点也会按照预定义标准来校验该区块是否包含足够工作量证明,时间戳是否有效等
- 如确认有效,其他矿工节点会将该区块链接到住区块链上,并开始下一个新区块
五丶总结
- 由网络层设计机理可见,区块链是典型的分布式大数据技术
- 特点:
- 冗余备份,数据可用性高
- 全网数据同时存储于去中心化系统的所有节点上
- 即使部分节点失效,只要仍存在一个正常运行的节点
- 区块链主链数据就可完全恢复而不会影响后续区块数据的记录与更新
- 数据安全性好
- 这种高度分散化的区块存储模式与云储存模式的区别在于
- 后者是基于中心化结构基础上的多重存储和多重数据备份模式,即“多中心化”模式
- 而前者则是完全去中心化的存储模式,具有更高的数据安全性
- 冗余备份,数据可用性高
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月05日 16时15分51秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
8 个警示和学习的 5 个阶段
2021-05-09
c# 图片带水纹波动
2021-05-09
H5 贪吃蛇源码
2021-05-09
从零开始学安全(十六)● Linux vim命令
2021-05-09
从零开始学安全(三十四)●百度杯 ctf比赛 九月场 sqli
2021-05-09
3389连接痕迹清除
2021-05-09
发生系统错误 6118
2021-05-09
c# API接受图片文件以文件格式上传图片
2021-05-09
阿里巴巴Json工具-Fastjson教程
2021-05-09
Spring Cloud Gateway - 快速开始
2021-05-09
Spring Security 实战干货:理解AuthenticationManager
2021-05-09
Java对象转JSON时如何动态的增删改查属性
2021-05-09
Python 面向对象进阶
2021-05-09
Linux常用统计命令之wc
2021-05-09
Git安装及使用以及连接GitHub方法详解
2021-05-09
docker容器与虚拟机的区别
2021-05-09
shell脚本里使用echo输出颜色
2021-05-09
Python2跟Python3的区别
2021-05-09
并发编程——IO模型详解
2021-05-09
Java之封装,继承,多态
2021-05-09