基础

P2P网络

  1. 与Client-Server网络相比:所有节点平等,数据互相传输

  2. 特性

    1. 存储、带宽资源利用率高,比如最早期的BT下载工具
    2. 抗单点故障
      1. Network Blocking
      2. DDoS
      3. Censorship

    P2P网络更加充分地利用带宽资源

    P2P网络更加充分地利用带宽资源

DHT

  1. DHT(Distributed Hash Table)是在BitTorrent、IPFS网络中采用的P2P协议

  2. DHT通过去中心化的方式存下了一个key-value表,key是文件的hash,value是文件所在节点的ip:port

    1. 每个节点任选一个hash值作为节点id
    2. 每个节点仅存hash值和自己id接近的key及其value
    3. 每个节点会维护自己所有peer的ip:port及其id
    4. 当检索一个key的时候,通过multi-hop search找到节点

    检索key为0000的value(图片来源)

    检索key为0000的value(图片来源

Gossip Protocol

  1. Gossip Protocol和DHT(Distributed Hash Table)一样是P2P网络中的通信协议

  2. Gossip和P2P的区别

    1. 每个节点都存全量的数据,本地检索
    2. 每个节点从Peer拉取数据,达到和Peer数据一致
    3. 节点收到或产生新数据的时候,会转发给Peer,最终经过Multi-hop之后到达全网

    https://nakamoto.com/bitcoins-p2p-network/

    https://nakamoto.com/bitcoins-p2p-network/

  3. 优点

    1. 享有P2P网络抗单点故障的优点
    2. 相比DHT更不容易受到网络阻隔(partition)
  4. 缺点

    1. Multi-hop造成消息的延迟。这也是区块链挖矿、浏览器经常需要解决的问题
    2. 重复接收相同消息。通过”Gossip消息hash,如果没有再拉取消息“的方式缓解

    比特币节点要在出块后多久才能收到块

    比特币节点要在出块后多久才能收到块

改进方向1:消息延迟

增加Peer数量

  1. 问题:Peer数量不够,节点则容易失去同步
  2. 解决:Seed/Bootstrap/Sync Nodes
    1. 在网络中设置一些固定的节点,与大量的Peer进行连接

    2. 其他节点Peer数量不够的时候,从这些固定节点获取Peer列表

      https://nakamoto.com/bitcoins-p2p-network/

      https://nakamoto.com/bitcoins-p2p-network/

排除恶意Peer

  1. 问题:存在恶意行为的Peer会影响节点的同步
  2. 解决:Misbehave/Network Score
    1. 对每个peer进行打分
      1. DDoS:不断推无效数据给你
      2. 自私:不断从你拉数据,你找他拉数据他不给
      3. 网络:延时高、带宽低
    2. 打分低的Peer会被Ban
    3. 打分高的Peer会优先进行Gossip
/**
 * Increment peer's misbehavior score. If the new value >= DISCOURAGEMENT_THRESHOLD, mark the node
 * to be discouraged, meaning the peer might be disconnected and added to the discouragement filter.
 * Public for unit testing.
 */
virtual void Misbehaving(const NodeId pnode, const int howmuch, const std::string& message) = 0;