网络层
含AI生成内容
第4章 区块链网络层
区块链网络层包含组网方式、消息传播机制和数据验证机制。通过**P2P(点对点)**组网方式及特定消息传播协议,为区块链系统提供开放、对等的底层环境。P2P网络中节点彼此对等,既作为服务/资源的提供者,又作为获取者。区块链的分布式、自治性、开放性本身也需要依靠去中心化的P2P共识网络来实现。
🎯 核心考点速览
| 序号 | 考点模块 | 核心内容 |
|---|---|---|
| 1 | P2P网络四大拓扑 | 中心化拓扑(Napster)、全分布式非结构化拓扑(洪泛/广播风暴)、全分布式结构化拓扑(DHT/Kad)、半分布式拓扑(超级节点) |
| 2 | 比特币节点类型 | 全节点 vs 轻节点(SPV);按功能分:核心客户端/全节点/独立矿工/轻量级钱包 |
| 3 | 比特币节点通信 | DNS种子发现 → version/verack握手 → addr地址传播 → getblocks/inv/getdata区块同步 → SPV通信 → 交易池 |
| 4 | 扩展比特币网络 | 矿池协议服务器、挖矿节点(Stratum协议)、轻型Stratum钱包 |
| 5 | 比特币中继网络 | Matt Corallo创建(2015),FIBRE(2016,UDP+前向纠错),Falcon(康奈尔大学) |
| 6 | Kademlia(Kad) | 160位节点ID,异或距离,K桶路由表(以太坊256个K桶,k=16),SHA3生成256位哈希码 |
| 7 | 以太坊节点通信 | discv4(节点发现,Ping/Pong/FindNode/Neighbors),rlpx(加密+ECDH密钥交换) |
| 8 | 网络层攻击 | DDoS攻击、延展性攻击、女巫攻击、路由攻击(分割/延迟,BGP劫持)、日蚀攻击(比特币+以太坊) |
4.1 P2P网络
4.1.1 P2P网络定义与特性
定义: 学术界和工业界尚无统一定义,但核心共识是——节点彼此对等,既作为服务/资源的提供者,又作为服务/资源的获取者。
- Intel定义: 通过系统间的直接交换达成计算机资源与信息的共享
- IBM定义: 由若干互相协作的计算机构成,具备以下特性之一:
- 依存于边缘化设备的主动协作
- 每个成员能直接从集体成员的参与中受益
- 每个成员同时扮演客户端和服务器的角色
- 用户能意识到彼此的存在而构成虚拟或真实的群体
- 关键特征: 对等节点通过共享部分资源共同提供网络服务,可被其他对等节点直接访问而无需经过中间实体。
P2P网络的优势:
- 可扩展性: 随着更多节点加入,系统整体资源和服务能力同步扩充
- 健壮性/可靠性: 没有中心服务器单点故障
- 负载均衡: 资源分布在多个节点上
- 去中心化: 节点是信息的发送方和接收方,共同维护区块链
与传统C/S架构对比:
- C/S架构:依赖中心服务器,中心服务器负载过大 → 整个系统瘫痪
- P2P架构:所有对等节点提供带宽、存储、计算能力,更为可靠稳健
4.1.2 P2P网络四种拓扑形式
P2P网络主要有4种常见拓扑形式:
(1)中心化拓扑(Centralized Topology)—— 第一代P2P网络
- 结构: 一台中心索引服务器 + 多个客户端节点
- 特点: 并非纯粹的P2P网络;中心索引服务器仅保存接入节点地址信息、提供地址索引服务(区别于C/S架构中服务器提供所有服务)
- 经典案例:Napster 音乐共享软件
- 中心服务器登记接入节点信息
- 用户查询 → 通过中心服务器检索 → 得到资源拥有者信息 → 直接连接资源拥有者进行传输
- 优点: 文件查询和传输分离,维护简单,查询高效复杂,资源发现率高;文件传输直接通过P2P,节省中央节点带宽,缩短传输时延
- 缺点: 扩展性非常有限;中心索引服务器一旦故障 → 整个网络无法工作
(2)全分布式非结构化拓扑(Decentralized Unstructured Topology)
- 结构: 无中心索引服务器,节点拥有真正的对等关系,通过邻居节点通信接入网络
- 组织方式: 随机图
- 数据广播方式: 洪泛(Flooding) —— 节点将接收到的消息向邻居节点转发,直到所有节点都收到或达到TTL限制
- TTL(Time To Live): 通过设置消息的存活时间来控制消息传播深度
- 查询流程: 节点向邻居发送查询 → 邻居有资源则建立连接传输;否则继续向自己的邻居扩散 → 直到找到资源
- 优点: 可以很快找到源节点到目标节点的路径,实现快速消息传播和资源查找
- 缺点: 可能出现广播风暴(Broadcast Storm)——随网络规模扩大,广播数据急剧增加,低带宽节点因网络资源过载而失效,导致网络分区、断链,资源查询范围受限,网络性能下降
(3)全分布式结构化拓扑(Decentralized Structured Topology)
- 核心技术: 分布式哈希表(Distributed Hash Tables, DHT)
- 原理: 将存储网络中所有资源信息的哈希表划分成很多不连续的小块,分散存储在多个节点上,每一块由一个节点维护。每个对象的名字/关键词通过加密哈希函数映射为128位或160位的哈希值
- 查询流程: 节点请求资源 → 找到包含对应资源关键词的哈希表所处节点 → 获取资源地址信息 → 连接对应节点实现资源请求与传输
- 优点: 自适应节点加入/退出,均匀分配节点ID,精准查询结果,良好的健壮性、可扩展性和动态适应性;以太坊采用这种拓扑
- 缺点: DHT中的Key是对象的名字或关键词 → 只支持精准关键词匹配查询,不支持模糊语义查询;节点频繁加入/退出造成网络波动,增加DHT维护代价
(4)半分布式拓扑(Partially Decentralized Topology)
- 结构: 综合中心化和全分布式非结构化的优点
- 选择网络中性能较高(处理、存储、带宽等)的机器作为超级节点
- 超级节点存储系统中其他部分节点的文件信息,维护地址、文件索引
- 超级节点之间形成高速转发层
- 与接入的普通节点形成自治的簇,簇内采用中心拓扑的P2P网络
- 查询流程: 先在簇内进行 → 超级节点查到资源在相邻叶子节点则转发;否则超级节点间进行有限的洪泛
- 优点: 容易管理,消除网络拥塞隐患,性能与可扩展性有一定优势
- 缺点: 对超级节点依赖性较大,容易受到攻击,影响容错性
P2P网络拓扑对比总结
| 拓扑类型 | 中心服务器 | 查找方式 | 代表案例 | 优点 | 缺点 |
|---|---|---|---|---|---|
| 中心化拓扑 | 有(索引服务器) | 中心索引检索 | Napster | 维护简单、查询高效 | 扩展性有限、单点故障 |
| 全分布式非结构化 | 无 | 洪泛(Flooding) | 早期比特币 | 快速传播 | 广播风暴 |
| 全分布式结构化 | 无 | DHT精准查询 | 以太坊(Kad) | 精准定位、健壮性好 | 不支持模糊查询、维护复杂 |
| 半分布式拓扑 | 超级节点 | 簇内查找+有限洪泛 | — | 易管理、无拥塞 | 依赖超级节点、容错性差 |
4.2 比特币网络
4.2.1 总体概述
- 比特币是基于区块链技术的第一个应用
- 早期比特币网络基于全分布式非结构化拓扑,节点彼此对等,不存在特权节点和索引服务器
- 通过共识机制使所有诚实节点保存一致的区块链视图
- P2P协议建立在传输层TCP之上
- 除了P2P协议,还运行其他协议如Stratum协议(应用于矿池挖矿、轻量级或移动端比特币钱包)
4.2.2 节点类型划分
按数据内容和验证能力划分
| 节点类型 | 数据存储 | 独立验证能力 | 特点 |
|---|---|---|---|
| 全节点(Full Node) | 完整区块链数据 | ✅ 可以 | 矿工需运行全节点;**归档节点(Archival Node)**是特例——存的是经过修剪的数据,删除无意义数据以减少磁盘使用 |
| 轻节点(Lightweight Node) | 仅部分信息(如区块头) | ❌ 不可以 | 通过**SPV(简易支付验证)**向其他节点请求数据完成验证;可更快启动运行,可在资源受限设备运行(如移动端钱包) |
按承载功能划分(四种功能)
节点可承载以下四种功能:
- 钱包(Wallet): 支持比特币交易、查询等
- 矿工(Miner): 运行工作量证明算法争夺创建新块资格,赚取系统奖励和交易手续费
- 完整区块数据存储(Full Blockchain): 存储完整数据,独立验证所有交易,无需借助外来参考
- 网络路由(Network Routing Node): 所有节点均具有,帮助转发交易和区块数据,发现和维护节点间连接
基础比特币网络四种节点类型
| 节点类型 | 钱包 | 矿工 | 完整区块存储 | 网络路由 |
|---|---|---|---|---|
| 核心客户端节点(Bitcoin Core) | ✅ | ✅ | ✅ | ✅ |
| 全节点(Full Block Chain Node) | — | — | ✅ | ✅ |
| 独立矿工节点(Solo Miner) | — | ✅ | ✅ | ✅ |
| 轻量级钱包(Lightweight Wallet) | ✅ | — | — | ✅ |
4.2.3 扩展比特币网络(Extended Bitcoin Network)
包含比特币P2P协议、矿池挖矿协议、Stratum协议及其他连接比特币系统组件的相关协议的整体网络结构。
常见扩展节点:
- 矿池协议服务器(Pool Protocol Server): 作为比特币网络与其他矿池挖矿节点的网关路由
- 挖矿节点(Mining Node): 轻量级节点,包含挖矿功能但不包含区块链数据,必须依赖矿池服务器维护的全节点进行工作,通常运行Stratum协议或其他矿池挖矿协议
- 轻型Stratum协议钱包(Lightweight Stratum Wallet): 运行在Stratum协议下包含钱包功能的节点
4.2.4 比特币节点通信
1. 节点发现(两种方式)
- DNS种子(DNS seeds): 客户端维护长期稳定运行节点的列表(种子节点),种子节点提供比特币节点IP地址列表
-seednode命令: 指定一个比特币节点的IP地址作为种子节点
2. 握手连接(version/verack)
节点A向节点B发送version信息,包含以下字段:
nVersion:客户端采用的比特币P2P协议版本nLocalServices:节点支持的本地服务列表(当前仅支持NODE_NETWORK)nTime:当前时间addrYou:当前节点可见的远程节点IP地址(节点B的IP)addrMe:当前节点的IP地址(节点A的IP)subver:节点运行的软件类型子版本号BestHeight:当前节点区块链的区块高度(初始为0,即只包含创世区块)
节点B收到version后发送verack确认建立连接。
3. 地址传播(addr/getaddr)
节点A发送包含自己IP地址的addr消息 → 节点B转发给相邻节点 → 节点A信息广播出去。
节点A可向节点B发送getaddr请求,要求发送已知的其他节点IP地址。
4. 地址管理(tried列表和new列表)
tried列表: 包含64个桶,每个桶存储成功建立过人连接或出连接的64个不同地址。保存最近一次成功连接到该节点的时间戳。桶满时:地址已存在则更新时间戳;否则随机选4个节点,最远一次成功连接的被替换并插入new列表。
new列表: 包含256个桶,每个桶可保存64个尚未成功发起连接的节点地址。利用种子节点或addr消息学习的信息填充。桶满时:遍历所有节点,将时间戳超过30天或多次尝试连接不成功的节点移出桶。
5. 全节点区块同步(getblocks/inv/getdata)
- 初始握手
version消息含BestHeight字段,节点了解对等节点区块高度 - 交换
getblocks消息(含本地区块链顶端区块的哈希值) - 拥有较多区块的一方识别缺少的区块,通过
inv消息分批传播(每个inv消息只包含500个区块的Hash信息) - 拥有较少区块的一方向所有已连接节点发送
getdata请求全区块数据 - 根据
inv消息的哈希值找到缺少的区块数据进行读取
6. SPV节点通信(简易支付验证)
SPV节点只存区块头部信息。验证步骤:
- 区块头同步
- 寻找包含该交易哈希值的区块,验证区块头是否包含在最长链中
- 获取构造默克尔树所需的交易哈希值,计算默克尔树根的哈希值
- 若计算出的哈希值与区块中默克尔树根的哈希值相等 → 交易存在于区块中
- 根据区块头所处位置判断交易确认数——经过6次确认即完成验证
隐私保护: 通过Bloom过滤器从交易集合中过滤选择SPV节点感兴趣的交易,不泄露SPV感兴趣的交易信息,保护隐私。
SPV请求头部: 使用getheaders消息请求区块头部,收到请求的节点用headers消息发送多达2000个区块头。
7. 加密和认证连接
Tor网络(洋葱路由器):
- 对传输数据加密和封装,隐藏信息发布者
- 数据链路:用户 → 入口节点(Guard Node)→ 中继节点(多次解密转发)→ 出口节点(Exit Node)
- 入口节点知道发送方地址,出口节点知道目的地地址,中继节点仅知道前后跳
- 每一跳都有独立密钥,保证安全性和无法追踪性
BIP-0150和BIP-0151:
- BIP-0150:定义节点间的对等认证
- BIP-0151:定义两个对等体间的协商加密通信方式
- BIP-0150要求认证前按BIP-0151建立加密通信
- 认证流程:创建密钥对 → 建立加密信道 → AUTHCHALLENGE → AUTHREPLY → AUTHPROPOSE → 验证授权
8. 交易池(Transaction Pool)
每个节点本地维护一个记录已被网络发现但未被区块链记录的交易的临时列表。
- 交易池: 初始化时为空,只包含未确认交易
- 孤立交易池(Orphan Pool): 父交易未被节点所知的且未上链的交易;父交易被添加入交易池后,孤立交易移出并加入交易池
- UTXO池(UTXO Pool): 初始化时已包含很多UTXO条目,只包含已确认交易
4.2.5 比特币中继网络(Bitcoin Relay Networks)
背景: 矿工打包好区块后需广播全网,但使用P2P网络广播有较高网络时延。 定义: 尝试最小化矿工之间传输块延迟的网络。
发展历程:
| 时间 | 事件 |
|---|---|
| 2015年 | Matt Corallo(Bitcoin Core开发者)创建原始比特币中继网络,由亚马逊Web服务基础架构上托管的专门节点组成,连接大多数矿池和矿工 |
| 2016年 | Matt Corallo创建FIBRE(Fast Internet Bitcoin Relay Engine)替代原始网络:基于UDP(替代TCP)+ 额外前向纠错数据补偿数据包丢失;基于压缩块减少传输数据量和网络延迟 |
| 后续 | 康奈尔大学研究者推出Falcon中继网络:通过传播块的部分来减少网络延迟,节点不用一直等待直到接收到完整的块 |
4.3 以太坊网络
4.3.1 总体概述
- 以太坊网络主要采用基于分布式哈希表(DHT) 技术的结构化P2P网络
- 通信协议:完全加密的网络,提供UDP(P2P节点发现)和TCP(数据传输与交互)两种连接方式
4.3.2 Kademlia(Kad)
Kad是以太坊分布式哈希表的实现技术,将所有信息作为哈希表条目存储,由各个节点分散维护。
节点ID与二叉树
- 每个节点分配一个随机生成的160位的节点ID
- 网络表示为具有160层的二叉树,所有节点为叶子节点
- 位置由节点ID的最短唯一前缀每一位的值(0或1)确定
- 160位空间非常大,即使有几百个节点也仅占一个小子集 → 节点ID可被视作高度随机
异或距离
两个节点之间的距离通过对两个节点ID进行异或(XOR) 运算来衡量,异或结果越小,距离越近。
例:3位ID空间,ID为001和100的节点距离:(001 XOR 100) = 101 = 5
子树拆分
任一节点以自己的视角将二叉树拆分为一系列连续的不包含自己的子树:
- 最高层子树:整棵树中不包含自己的另一半
- 下一层子树:剩下部分中不包含自己的部分
- 以此类推,直到分割完整棵树
通过知道每个子树中至少一个节点,可以通过递归路由不断逼近并最终到达目标节点。
K桶(K Bucket)——路由表
- 每个节点需要记录每个子树的k个节点(k是平衡系统性能和网络负载的常数)
- 记录一棵子树中k个节点的列表称为一个K桶
- 如果节点ID空间为n位,最多得到n个子树,需要维护n个K桶
- K桶存储与节点距离在
[2^i, 2^{i+1}]范围内的k个节点的状态信息(节点ID、UDP端口、IP地址) - K桶内部按上次访问时间顺序排列:最早访问在头部,最新访问在尾部
以太坊的Kad实现
- 对节点ID(Eckey算法生成的512位网络节点公钥)使用SHA3算法生成256位哈希码
- 节点距离 = 两个哈希码异或计算结果的1位最高位的位数
- 每个节点有256个K桶,k值 = 16
- K桶中记录节点ID、distance、endpoint、ip等信息,按与目标节点的距离排序
4.3.3 Kad网络操作
节点加入
- 新节点获取任一已加入Kad网络中节点信息,加入对应K桶,向该节点针对自己的ID发起查询请求
- 对等节点按距离更新自己的K桶,返回k个与新节点最近的节点
- 新节点将返回节点加入K桶,向这些节点发送查询请求,如此往复建立路由表
节点退出
不需要任何操作——节点维护K桶时主动把没响应的节点从K桶中删除。当节点信息不存在于任何一个节点的K桶时,相当于退出网络。
K桶更新
遵循抛弃最近最少访问节点原则:
- 计算节点本身与新节点的距离,选择对应K桶操作
- 若新节点信息已在K桶中 → 移动到列表尾部
- 若不在K桶中:
- K桶未满 → 直接添加到列表尾部
- K桶已满 → 检查列表头部最早访问的节点:
- 有响应 → 头部节点移到尾部,忽略新节点
- 无响应 → 抛弃头部节点,新节点添加到尾部
- 保留在线时间长的节点:因为在线时间长的节点继续保持在线概率更大
Kad网络节点查询
已知某个节点ID,查找当前节点与目标节点距离最短的k个节点的网络信息的过程。
查询流程:
- 从K桶中选出若干距离目标节点最近的节点,同时发送异步查询请求
- 收到请求的节点从K桶中找出自己知道的距离目标节点最近的若干节点信息返回
- 查询发起者收到后更新K桶,从目前已知的较近节点中选出若干没被请求过的节点发送查询请求
- 重复步骤2和3,直到第n次和第n-1次查询返回结果相等
4.3.4 以太坊节点类型
- 基本划分:全节点和轻节点(与比特币类似)
- 以太坊2.0新规划: 分片(Sharding)—— 将交易状态和交易历史划分为多个分片,每个分片存储和处理特定交易,有自己的验证网络。例如:以0x00开头的所有地址放入一个分片,以0x01开头的放入另一个分片。理论上可实现高效率交易验证。
- 高级分片形式允许跨分片通信功能
- 编写过程中以太坊社区又提出了共识与执行分离、Danksharding、Proposer-Builder分离等新节点架构方案(尚在讨论中)
4.3.5 以太坊节点通信
discv4协议——节点发现
定义了4种报文命令:
| 命令 | 功能 |
|---|---|
| Ping | 探测对等节点是否在线 |
| Pong | 响应Ping报文的应答 |
| FindNode | 向对等节点请求查询邻居节点 |
| Neighbors | 回传找到的邻居节点列表 |
节点生命周期(6种状态):
| 状态 | 说明 |
|---|---|
| 发现状态(Discovered) | 引导节点、从持久化文件加载的节点、被引荐的节点、接收Ping报文的节点 |
| 在线状态(Alive) | 回复Pong报文后 |
| 活跃状态(Active) | 节点处于K桶时的状态 |
| 候选状态(Evicteandidate) | K桶满时被新节点替代后暂置 |
| 不活跃状态(Noactive) | 向候选状态节点发Ping后长时间无响应 |
| 死亡状态(Dead) | 规定时间内未返回Pong报文(最终状态) |
节点发现过程: 以随机生成节点ID为目标ID → 从K桶找距离目标节点较近的节点 → 选择离本地节点距离大于离目标节点距离的K桶节点 → 发送FindNode请求 → 用响应的Neighbors报文中节点更新K桶。
rlpx协议——加密和认证连接
实现完备的前向安全性(每次连接使用不同密钥,即使现有密钥泄露也不会导致之前信道信息被破解)。
两个阶段:
- 密钥交换(ECDH算法):
- 每个节点有自己的公钥和私钥,通信时各自生成临时随机密钥对
- 通过ECDH算法,使用私钥和对方公钥计算共享密钥
- ECDH(A私钥, B公钥) = ECDH(B私钥, A公钥)
- 经过交换后双方都知道共享密钥和随机数
- 随机数用于生成消息认证码保证消息完整性
- 身份认证与协议握手:
- 双方用共享密钥加密hello报文(含P2P版本号、端口号、ID等)
- 校验协议版本 → 若双方都接受 → 开始建立通信
区块同步
- 握手连接(HandShake)→ 节点B将交易池中的交易信息同步给节点A
- 节点A发送
GetBlockHeadersMsg获取同步区块的区块头信息 - 节点A依次发送
GetBlockBodiesMsg、GetReceiptsMsg、GetNodeDataMsg请求获取block body、receipt(合约执行后的结果)和state(储存所有账号状态,包括余额等) - 被动同步: 如节点B挖出新区块,发送
NewBlockMsg或NewBlockHashesMsgNewBlockMsg→ A直接验证并存入本地NewBlockHashesMsg→ A通过请求获取区块头和区块体,再组织成完整区块存入本地
4.4 网络层安全
区块链的理论基础建立在信道安全的前提下。如果无法保证信道安全,共识算法保障的一致性和正确性将被瓦解。
区块链在面临网络层攻击时非常脆弱(“实际上,区块链在面对网络层攻击时非常脆弱”)。
4.4.1 分布式拒绝服务攻击(DDoS)
- 对象: 交易所、矿池钱包和区块链中的其他金融服务
- 与DoS的区别: DDoS借助客户端/服务器技术,将多台计算机联合作为攻击平台,对同一目标发动大量攻击请求,成倍提高拒绝服务攻击能力
- 传统DDoS: 通过病毒、木马、缓冲区溢出入侵大量主机形成僵尸网络
- 区块链DDoS: 不需要入侵主机建立僵尸网络,只需在应用层控制区块链网络中大量在线节点作为放大平台
- 攻击方式:
- 主动攻击: 主动向网络节点发送大量虚假索引信息,使后续访问都指向被攻击者;引入额外流量,降低节点查找和路由性能,影响文件下载速度
- 被动攻击: 修改区块链客户端或服务器软件,被动等待其他节点的查询请求,通过返回虚假响应达到攻击效果
- 危害: 恶意矿工可耗尽竞争者的网络资源,提高自己的有效哈希率
4.4.2 延展性攻击(Malleability Attack)
在原情况不变的情况下,利用外部的虚假交易实现攻击。
- 阻塞交易队列: 恶意攻击者支付高额手续费,以高优先级进行虚假交易,使矿工在验证上花费时间,浪费竞争矿工的时间和带宽
- 交易延展性攻击: 侦听未确认交易 → 修改交易签名使交易ID改变 → 生成新交易广播确认 → 参与交易的另一方无法根据原有交易ID查询确认信息 → 可能导致二次存款或双重提现风险
4.4.3 女巫攻击(Sybil Attack)
攻击者节点通过向网络广播多个身份信息,非法拥有多个身份标识,利用多重身份做出恶意行为:
- 改变交易顺序
- 阻止交易被确认
- 误导正常节点的路由表
- 消耗节点间的连接资源
- 数据冗余机制的有效攻击手段——原本备份在多节点的数据被欺诈备份到同一节点
- 利用投票机制时:伪造多重身份进行不公平重复投票,掌握网络控制权
防御方式:
- 工作量证明(PoW): 通过验证身份的计算能力方式,增加女巫攻击成本
- 身份认证: 每个新节点需经过可靠第三方节点或当前网络中所有可靠节点的认证
4.4.4 路由攻击(Routing Attack)
由于网络设备路由协议的不安全性和ISP的集中性,使用明文形式进行信息交换的区块链应用(如比特币)面临流量劫持、信息窃听、丢弃、修改、注入和延迟的风险。
两种类型:
| 攻击类型 | 方法 | 后果 |
|---|---|---|
| 分割攻击 | 利用BGP(边界网关协议)劫持拦截不同网络间交换的所有流量,将区块链网络隔离成两个独立子网(节点无断网感知)→ 网络合并后强制较短链上所有区块被永久抛弃 | 所有交易和矿工收入丢失 |
| 延迟攻击 | 利用区块请求超过一定时间后才再次发起请求的特点,对拦截的信息进行简单修改,延迟区块在受攻击节点的传播速度 | 重复支付、计算能力浪费等经济损失 |
4.4.5 日蚀攻击(Eclipse Attack)
攻击者通过侵占节点路由表的方式,控制节点的对外联系并使其保留在一个隔离的网络中,实施路由欺骗、拒绝服务、ID劫持等攻击行为。
比特币日蚀攻击:
- 每个节点最多接受117个连接请求,最多向外发起8个连接
- 攻击者用事先准备的攻击地址填充被攻击节点的tried列表,用不属于比特币网络的地址覆盖new列表
- 被攻击者重启或从表中选择节点构建连接时,8个向外连接有很高概率都是攻击者节点
- 同时攻击者占据被攻击者的人连接 → 完成日蚀
以太坊日蚀攻击:
- 以太坊上一个主机可运行多个ID的节点,攻击者只需两个恶意节点即可实现日蚀攻击
- 两种方式:
- 独占连接的日蚀攻击: 受害节点重启时通过人连接快速占领所有连接(geth 1.8.0已通过限制人连接数量不超过maxpeers修复)
- 占有表的日蚀攻击: 使用伪造节点ID在受害节点重启时重复发送Ping请求占据K桶,使出连接指向攻击者,再用入连接占据剩余所有连接
📌 名词解释(高频)
| 名词 | 解释 |
|---|---|
| P2P网络 | 点对点网络,节点彼此对等,既作为服务/资源提供者又作为获取者,无需中间实体 |
| 洪泛(Flooding) | 全分布式非结构化拓扑中的数据广播方式,节点将消息向所有邻居转发直到全网收到或TTL耗尽 |
| 广播风暴(Broadcast Storm) | 网络规模扩大后广播数据急剧增加,低带宽节点过载失效导致网络分区断链 |
| DHT(分布式哈希表) | 将哈希表分段分散存储在多个节点上,通过加密哈希实现结构化寻址和存储 |
| SPV(简易支付验证) | 轻节点不遍历完整区块链,只通过区块头和默克尔树验证交易存在性和确认数 |
| Kad(Kademlia) | 一种DHT技术,以异或距离+二叉树+K桶路由表实现快速路由和精准定位 |
| K桶(K Bucket) | Kad网络中记录特定距离范围内k个节点的路由表单元 |
| 交易池(Transaction Pool) | 节点本地维护的记录已被发现但未上链的交易的临时列表 |
| 孤立交易池(Orphan Pool) | 存储父交易未知的未确认交易的池 |
| UTXO池 | 包含所有UTXO的集合,仅包含已确认交易 |
| Stratum协议 | 矿机与矿池软件之间的通信协议 |
| FIBRE | Fast Internet Bitcoin Relay Engine,基于UDP+前向纠错的比特币中继网络 |
| discv4 | 以太坊节点发现协议,定义Ping/Pong/FindNode/Neighbors四种报文 |
| rlpx | 以太坊加密通信协议,实现密钥交换(ECDH)和身份认证的前向安全通信 |
| Bloom过滤器 | SPV节点用于过滤交易而不泄露感兴趣交易信息的隐私保护机制 |
| Tor网络 | 洋葱路由器网络,通过对数据多层加密和随机中继提供匿名性和不可追踪性 |
| 日蚀攻击 | 侵占节点路由表使受害节点脱离网络的攻击(比特币:8个外连+117人连;以太坊:仅需2个恶意节点) |
| 女巫攻击 | 单个攻击者伪造多个身份标识进行恶意行为(改变交易顺序、误导路由表等) |
⚖️ 重点对比 / 易混区分
| 对比维度 | 比特币网络 | 以太坊网络 |
|---|---|---|
| P2P拓扑 | 全分布式非结构化拓扑 | 全分布式结构化拓扑(基于Kad/DHT) |
| 节点发现 | DNS种子 / -seednode 命令 | discv4协议(Ping/Pong/FindNode/Neighbors) |
| 通信加密 | 默认不加密;可选Tor / BIP-0150+0151 | 默认完全加密(rlpx协议) |
| 传输层 | TCP | UDP(节点发现)+ TCP(数据交互) |
| 节点ID | — | 160位随机节点ID → SHA3生成256位哈希码 |
| 路由表 | tried列表(64桶×64地址)+ new列表(256桶×64地址) | K桶(256个K桶,k=16) |
| 节点距离 | — | 节点ID异或运算 |
| 外连限制 | 8个向外连接 + 最多117个人连接 | geth 1.8.0限制人连接不超过maxpeers |
| 数据存储 | 交易池 + UTXO池 + 孤立交易池 | state(账号状态)+ receipt(合约执行结果) |
| 扩展方案 | 比特币中继网络(FIBRE/Falcon) | 分片(Sharding) |
| 对比维度 | 全节点 | 轻节点(SPV节点) |
|---|---|---|
| 数据存储 | 完整区块链数据 | 仅区块头部分信息 |
| 独立验证 | ✅ 可独立验证 | ❌ 需向其他节点请求 |
| 验证方式 | 遍历完整区块链 + UTXO池 | 默克尔树证明 + 确认数(6次) |
| 运行设备 | 服务器/高性能计算机 | 资源受限设备(移动端) |
| 启动速度 | 慢(需同步完整链) | 快 |
| 对比维度 | 交易池 | UTXO池 |
|---|---|---|
| 初始化 | 空 | 已包含很多UTXO条目 |
| 内容 | 未确认交易 | 仅已确认交易 |
| 依赖因素 | 取决于节点启动/重启时间 | 与启动时间无关 |
| 对比维度 | DDoS(传统) | DDoS(区块链) |
|---|---|---|
| 建立方式 | 病毒/木马入侵主机 → 僵尸网络 | 应用层控制在线节点 → 放大平台 |
| 攻击资源 | 受控僵尸主机 | 在线节点的分布式存储和带宽 |
| 成本 | 较高 | 较低,且攻击者隐秘性强 |
❓ 可能考题
选择题
-
一个攻击者节点通过向网络广播多个身份信息,非法拥有多个身份标识,利用多重身份做出恶意行为的攻击模式称为( C )攻击。
- A. DDoS B. 延展性 C. 女巫 D. 日蚀
-
在区块链的一个节点中删除一个区块,则( A )。
- A. 删除的区块只影响本节点
- B. 删除的区块会全网消失
- C. 别的节点也会收到通知并一起删除
- D. 删除后会影响其他节点的稳定运行
-
以太坊网络节点的发现采用的是( C )协议。
- A. IPv4 B. IPv6 C. discv4 D. PoW
-
对女巫攻击描述错误的是( B )。
- A. PoW可以防御女巫攻击
- B. PBFT可以抵御女巫攻击(PBFT无法抵御女巫攻击,需要身份认证)
- C. 女巫攻击的攻击节点非法拥有多重身份
- D. 攻击节点会对网络造成数据冗余
-
以下不属于网络层攻击的是( D )。
- A. DDoS攻击 B. 延展性攻击 C. 女巫攻击 D. 暴力破解攻击
填空题
- 轻节点通过 SPV(简易支付验证) 的方式向其他节点请求数据来完成支付验证。
- 比特币网络的设计基于 全分布式非结构化 拓扑,网络中的节点彼此对等,不存在特权节点和索引服务器。
- 在比特币网络中,每个节点会在本地维护一个记录已被网络发现但未被区块链所记录的交易临时列表,这个列表被称为 交易池(Transaction Pool)。
- P2P网络主要有4种常见的拓扑形式:中心化拓扑、全分布式非结构化拓扑、全分布式结构化拓扑 和 半分布式拓扑。
- 女巫攻击指一个攻击者节点通过向网络广播多个身份信息,非法拥有多个身份标识,利用多重身份便利做出恶意行为。
简答题
1. 简单比较比特币网络与以太坊网络的异同。
- 相同点: 都基于P2P网络架构;都有全节点和轻节点(SPV验证);都支持节点发现、区块同步等基本通信功能;都面临网络层安全问题。
- 不同点: ①拓扑:比特币用全分布式非结构化拓扑(洪泛),以太坊用全分布式结构化拓扑(Kad/DHT);②加密:比特币默认不加密,以太坊默认完全加密(rlpx);③传输层:比特币基于TCP,以太坊UDP+TCP;④节点发现:比特币用DNS种子,以太坊用discv4协议;⑤扩展:比特币用中继网络(FIBRE/Falcon),以太坊用分片(Sharding)。
2. 比特币网络中的矿池是如何工作的?
矿池协议服务器作为比特币网络与其他矿池挖矿节点的网关路由。挖矿节点是轻量级节点,包含挖矿功能但不包含区块链数据(必须依赖矿池服务器维护的全节点工作),通常运行Stratum协议或其他矿池挖矿协议。矿池将挖矿任务分发给各挖矿节点,各节点共同计算,找到有效区块后按贡献算力分配奖励。
3. 常见P2P网络的拓扑结构有哪些?
- 中心化拓扑(如Napster):中心索引服务器+客户端
- 全分布式非结构化拓扑(如早期比特币):无中心,洪泛传播
- 全分布式结构化拓扑(如以太坊):DHT/Kad精准定位
- 半分布式拓扑:超级节点+簇结构(性能较高机器作超级节点)
4. 比特币和以太坊网络中轻节点的工作过程是怎样的?
SPV节点只存储区块头部信息:
- 同步区块头
- 寻找包含该交易哈希值的区块,验证区块头是否在最长链中
- 获取构造默克尔树所需的交易哈希值,计算默克尔根
- 比较默克尔根与区块头中的默克尔根
- 根据确认数(6次确认)完成验证
- 通过
getheaders请求区块头(每次最多2000个),通过Bloom过滤器保护隐私
5. 如何预防女巫攻击?
- 通过工作量证明(PoW) 机制,验证身份的计算能力,增加攻击成本
- 通过身份认证,每个新节点需经过可靠第三方节点或当前网络中所有可靠节点的认证,减少节点欺诈使用多重身份的可能性
补充:比特币中继网络发展时间线
| 时间 | 创建者 | 名称 | 特点 |
|---|---|---|---|
| 2015年 | Matt Corallo(Bitcoin Core开发者) | 原始比特币中继网络 | 亚马逊Web服务托管,TCP |
| 2016年 | Matt Corallo | FIBRE | UDP + 前向纠错 + 压缩块 |
| 后续 | 康奈尔大学 | Falcon | 传播块的部分,减少延迟 |
补充:日蚀攻击对比特币 vs 以太坊
| 维度 | 比特币 | 以太坊 |
|---|---|---|
| 攻击方式 | 填充tried列表+覆盖new列表 | ①独占连接攻击 ②占有表攻击 |
| 所需资源 | 大量攻击地址 | 仅需2个恶意节点 |
| 连接限制 | 8个外连 + 117个人连 | geth 1.8.0限制人连不超过maxpeers |
补充:区块链DDoS vs 传统DDoS
| 维度 | 传统DDoS | 区块链DDoS |
|---|---|---|
| 攻击平台建设 | 入侵主机形成僵尸网络 | 控制在线节点作为放大平台(无需入侵) |
| 攻击资源 | 受控主机 | 分布式存储和网络带宽 |
| 攻击方式分类 | — | 主动攻击(虚假索引信息)+ 被动攻击(修改客户端) |
关键数字记忆
| 数字 | 含义 |
|---|---|
| 4种 | P2P网络拓扑形式 |
| 4种功能 | 钱包、矿工、完整区块存储、网络路由 |
| 4种基础节点 | 核心客户端、全节点、独立矿工、轻量级钱包 |
| 128位/160位 | DHT中哈希值位数 |
| 160位 | Kad节点ID位数 |
| 256位 | 以太坊SHA3哈希码位数 |
| 256个K桶 | 以太坊每个节点的K桶数量 |
| k=16 | 以太坊Kad的k值 |
| 64桶×64地址 | 比特币tried列表结构 |
| 256桶×64地址 | 比特币new列表结构 |
| 30天 | new列表中未连接节点移除的时间阈值 |
| 8个外连 / 117个人连 | 比特币节点连接限制 |
| 500个 | 每个inv消息包含的区块Hash数量 |
| 2000个 | 每次headers消息发送的区块头数量 |
| 6次确认 | SPV完成交易验证的区块确认数 |
| 2个 | 以太坊日蚀攻击所需最小恶意节点数 |
| 6种状态 | discv4协议节点生命周期状态 |
| 4种报文 | discv4协议命令(Ping/Pong/FindNode/Neighbors) |
| BIP-0150/0151 | 比特币P2P认证和加密服务改进协议编号 |
| 2015年 | Matt Corallo创建原始比特币中继网络 |
| 2016年 | Matt Corallo创建FIBRE |
| geth 1.8.0 | 修复以太坊独占连接日蚀攻击的版本 |
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!










