区块链节点之间怎么找到彼此、加密对话、并行传数据,很多项目没有从零发明轮子,而是用 libp2p 这套模块化网络栈。本文拆解它的身份(PeerID 与 Multiaddr)、传输与加密分层、流复用、Gossipsub 消息扩散、DHT 发现与 NAT 穿透各模块,以及 IPFS 与以太坊共识层的实际采用情况和选型时要看的边界。
汇总与「网络协议」相关的文章,帮助你系统了解该主题。
区块链节点之间怎么找到彼此、加密对话、并行传数据,很多项目没有从零发明轮子,而是用 libp2p 这套模块化网络栈。本文拆解它的身份(PeerID 与 Multiaddr)、传输与加密分层、流复用、Gossipsub 消息扩散、DHT 发现与 NAT 穿透各模块,以及 IPFS 与以太坊共识层的实际采用情况和选型时要看的边界。
EIP-2718给交易加了类型字节,但块里放得下不等于节点之间传得出去。EIP-2976在2020年补上八卦协议这一环:交易消息直接装类型化交易的字节串,收到不认识类型的节点应当断开对端,升级前禁止广播新类型。这条Final提案解释了为什么新交易类型上线不需要再抬devp2p版本号。本文讲清规则文本、断开策略的缘由,以及它和交易哈希公告的配合关系。
BOLT 1 的 ping/pong 用回包长度做关联:num_pong_bytes 小于 65532 必须回 pong,不小于则静默忽略;收不到 pong 可以断连接但不得作废通道。本文按规范拆解字段、保活用法与比特币层 ping 的分界。
分叉指纹让以太坊节点在握手阶段就能踢掉不同链的邻居,但它的算法是按区块高度喂入的。合并之后分叉改按时间排期,老算法出现两个盲区。EIP-6122把时间戳也喂进指纹计算,本文拆解这次修补的来龙去脉。
以太坊同步协议曾经允许节点按状态哈希逐条索要trie节点和合约代码,这条GetNodeData消息最终被EIP-4938从eth/67里删除。本文讲清这条消息原本干什么、为什么效率问题大到必须取消,以及删掉之后节点靠什么补齐缺的数据。
节点发 getdata 点货,对端手里没有对应数据时回一条 notfound,把"在路上了"和"根本拿不到"区分开。比特币核心源码 protocol.h 定义该消息类型,net_processing.cpp 在处理 getdata 时把取不到的条目攒进 vNotFound 回给请求方。本文拆解它出现的位置、与孤儿交易等待和区块补洞的配合,以及误读它导致的排障弯路。
新节点连上网络的第一步不是同步区块,而是“找人”。本文拆解以太坊发现协议 discv4/discv5 的 Kademlia 思路:节点 ID 之间的距离度量、桶状路由表怎么逐级逼近、以及它和 DNS 种子节点的分工。
比特币节点之间会周期性发送一种叫 feefilter 的 P2P 消息,把“我当前内存池愿意接受的最低费率”提前告诉对方,让邻居在通知交易前先自查费率,省掉大量无效的 inv 与 getdata 往返。这套机制定义在 BIP133,对应协议版本 70013,Bitcoin Core 从 0.13.0 起支持。本文讲清它解决什么问题、消息内容是什么、为什么它是“允许而非强制”的规则,以及它对普通用户广播交易意味着什么。