基础
P2P网络
-
与Client-Server网络相比:所有节点平等,数据互相传输
-
特性
- 存储、带宽资源利用率高,比如最早期的BT下载工具
- 抗单点故障
- Network Blocking
- DDoS
- Censorship
P2P网络更加充分地利用带宽资源
P2P网络更加充分地利用带宽资源
DHT
-
DHT(Distributed Hash Table)是在BitTorrent、IPFS网络中采用的P2P协议
-
DHT通过去中心化的方式存下了一个key-value表,key是文件的hash,value是文件所在节点的ip:port
- 每个节点任选一个hash值作为节点id
- 每个节点仅存hash值和自己id接近的key及其value
- 每个节点会维护自己所有peer的ip:port及其id
- 当检索一个key的时候,通过multi-hop search找到节点
检索key为0000的value(图片来源)
Gossip Protocol
-
Gossip Protocol和DHT(Distributed Hash Table)一样是P2P网络中的通信协议
-
Gossip和P2P的区别
- 每个节点都存全量的数据,本地检索
- 每个节点从Peer拉取数据,达到和Peer数据一致
- 节点收到或产生新数据的时候,会转发给Peer,最终经过Multi-hop之后到达全网
https://nakamoto.com/bitcoins-p2p-network/
-
优点
- 享有P2P网络抗单点故障的优点
- 相比DHT更不容易受到网络阻隔(partition)
-
缺点
- Multi-hop造成消息的延迟。这也是区块链挖矿、浏览器经常需要解决的问题
- 重复接收相同消息。通过”Gossip消息hash,如果没有再拉取消息“的方式缓解
比特币节点要在出块后多久才能收到块
改进方向1:消息延迟
增加Peer数量
- 问题:Peer数量不够,节点则容易失去同步
- 解决:Seed/Bootstrap/Sync Nodes
-
在网络中设置一些固定的节点,与大量的Peer进行连接
-
其他节点Peer数量不够的时候,从这些固定节点获取Peer列表
https://nakamoto.com/bitcoins-p2p-network/
排除恶意Peer
- 问题:存在恶意行为的Peer会影响节点的同步
- 解决:Misbehave/Network Score
- 对每个peer进行打分
- DDoS:不断推无效数据给你
- 自私:不断从你拉数据,你找他拉数据他不给
- 网络:延时高、带宽低
- 打分低的Peer会被Ban
- 打分高的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;