0%

参考:protocol documentbtcd

  • 协议其实就是一个标准,btc有多种语言的实现版本,他们之间能够正常通信的基础就是共同遵守了这个标准。btc定义的协议有很多,包括p2p之间通信协议、交易认证协议、pow共识协议等等。本文主要分析p2p网络的消息协议及代码实现
  • btc 的p2p网络的传输层支持tcp、udp、onion,应用层使用的即是本文讨论的消息协议
阅读全文 »

参考:btcd

  • btc在p2p网络中与每一个节点的连接都视为一个peer对象,与该节点的消息交换都是通过该peer进行。本文主要分析peer对象的创建以及wire协议消息的收发机制。对应btcd中package peer,该package主要提供了与其他节点连接建立之后peer的创建,协商,消息处理,以及close功能。
阅读全文 »

参考:btcd

  • connmanamger 负责节点的连接处理,包括监听来自其他节点的连接请求和主动向其他节点发起连接请求,并将获取到的连接对象conn交给回调函数处理,实际上这些回调函数是由server实现的,它们会根据conn生成对应的peer,交由peer处理之后的逻辑
  • 默认outbound peer数量为8
  • 节点发现
    • address database (第一次启动时为空)
    • -addnode -connect (手动)
    • dns seed (通过dns获取addr)
    • hard-coded seeds(代码中的seed)
    • getaddr from other peers (通过其他节点同步)
阅读全文 »

参考:btcd

  • addrmanager 主要提供了peer地址的管理功能,包括地址的增删查改
  • 通过存储json序列化后的数据到本地文件实现持久化
  • btc启动的时候,会读取该json文件,将保存的节点信息读取到内存中
  • btc运行的过程中,每过一段时间(十分钟)就持久化一次,以备下次启动时使用
  • btc退出时,会再次持久化一次
阅读全文 »