P2P网络杂烩

P2P网络是什么

P2P是指位于同一网络中的每台计算机都彼此平等,身份对等,各个节点共同提供网络服务,不存在任何“特殊”节点。网络节点以“扁平”的拓扑结构相互连通。 网络中不存在任何服务器端、中央化的服务、以及层级结构。点对点网络中的节点同时提供和消费服务,互惠互利。点对点网络也因此具有可靠性、去中心化,以及开放性。

早期的互联网就是点对点网络架构的一个典型用例:IP网络中的各个节点完全平等。当今的互联网架构具有分层架构,但是IP协议仍然保留了扁平拓扑的结构。

先问几个问题

  1. IP协议解决了什么问题?其他网络协议呢?
  2. 计算机如何发现对方?数据如何传输到远程计算机?

P2P的例子

  1. Skype
  2. BitTorrent
  3. Gnutella
  4. VoIP
  5. Spotify
  6. SMTP(server - server)
  7. WebRTC
  8. Blockchain

现有的网络

网络
  1. IP 有限
  2. 大量的局域网IP

问题:咱们国内的网到底是个局域网还是广域网

P2P 的技术难点

  1. Discovery - Registration
  2. NAT Traversal
  3. Firewalls
  4. Asymmetrical bandwidth
  5. Security
  6. Optimization
p2p模型

P2P网络的数据流动

//udp
sendto(ip,port,buffer);
//tcp
send(fd,buffer,length,0)
去中心化网络

上面的红色箭头是P2P真实的数据流动,那么数据怎么发送到客户端B的呢?

说下链路层地址与IP地址。许多链路层协议也有自己的地址,一般是MAC地址,比如最常用的以太网。链路层地址在链路层协议中使用,表明这个链路层报文会被发给谁;而IP地址在IP层协议中使用,表明这个报文最终要发给谁。可以分为两种情况:

  1. 直接通过链路层发送:
    链路层地址: (源MAC地址) (目的MAC地址)
    IP地址: (源IP地址) (目的IP地址)
  2. 经过网关转发
    从本机出发发往网关时,链路层的目的是网关而IP层的目的不是网关:
    链路层地址: (本机源MAC地址) (网关MAC地址)
    IP地址: (本机IP地址) (目的IP地址)
    网关转发到其他网关:
    链路层地址: (网关MAC地址) (下一跳网关MAC地址)
    IP地址: (本机IP地址) (目的IP地址)
    最后一个网关转发到目标:
    链路层地址: (最后一个网关MAC地址) (目的MAC地址)
    IP地址: (本机IP地址) (目的IP地址)
    在转发过程中,IP报文的源和目的保持不变,链路层地址则只和这一跳的双方有关,甚至如果中间经过了不一样的链路层,还会更换二层数据包的格式。

NAT (Network Address Translation) 穿透

我们知道了网关(路由器)可以帮助我们转发数据,那么剩下的就是找到对方IP地址。这就涉及到NAT穿透。

NAT

完全锥形:不拦截
IP限制锥形NAT:限制特定IP
端口限制锥形NAT:限制IP加端口
对称NAT:网关给不同端发送数据分配不同的ip和端口

问题:

  1. 如何判断客户端网关的NAT类型
  2. 如果对所有的网关NAT穿透
  3. 如何测试客户端数量
  4. 有没有穿透不了的情况?

网络拓扑

最早的BitTorrent 网络,需要一个中心服务器也就是种子服务器,来帮助各个 Peers 节点找到彼此进行文件下载


tracker
trackerless

DHT

在 P2P(peer-to-peer) 网络中,节点的相互发现及网络成型的过程会面临一些问题。
早年间的 P2P 文件共享技术,比如 Napster,使用单个服务器共享信息,信息中记录谁拥有什么文件。某个节点向中心服务器发起连接并提交记录自己所拥有文件的列表。另一个节点之后向同一个中心服务器发起连接,寻找自己所需文件的存储节点,然后和找到的节点建立联系。然而这是一个有缺陷的系统 —— 系统很容易遭受攻击,而且中心化服务器节点可能会吃官司。(译者注:单个服务器上存储文件内容和节点的对应关系,如果提供了一些受版权保护内容的链接关系,那么这个中心化服务器的提供者将直接受到原版权方的法律追责)
因此,点对点网络亟需另一种解决方案。研究者们经过数年研究和实验,提出了分布式哈希表(DHT)。

Kademlia 是 Petar Maymounkov 和 David Mazières 于 2002 年发明的 DHT 协议。我觉得这个协议可能是最流行,而且使用最广泛的 DHT 协议

Kademlia 使用 XOR(异或操作符) 作为距离函数。XOR 函数的特点在于,只有当输入不同时,输出才为 true。下面是用二进制标识符表示的例子。

XOR 10011001 00110010 -------- 10101011
上面的这个例子是说,十进制数字 153 和 50 之间的距离是 171。

基本算法

Kademlia 是分布式散列表(DHT,Distributed Hash Table)的一种,类似的还有 Chord,Pastry 等。DHT 技术是去中心化 P2P 网络中最核心的一种路由寻址技术,可以在无中心服务器(trackerless)的情况下,在网络中快速找到目标节点。

https://zhuanlan.zhihu.com/p/40286711

假设现在的当前节点是 001,它想要查的目标节点是 101 节点。


查找

我们可以看到,整个检索过程是不断收敛的,查询复杂度是可以证明是 Log N

BTC节点类型及角色

管比特币点对点网络中的各个节点地位对等,但是根据所提供的功能不同,各节点可能具有不同的角色。比特币节点是路由、区块链数据库、挖矿、钱包服务这些功能的集合。全节点(full node)包括如下图所示的四个功能(钱包,矿工,完整的区块链数据库和网络路由的比特币网络节点):

角色

下图描述了扩展比特币网络中多种类型的节点、网关服务器、边缘路由器、钱包客户端以及它们相互连接所需的各类协议。z


image.png

矿工网络分成矿机、矿池、钱包等几个主要部分,有时矿池软件与钱包安装在一起,可合称为矿池。

矿机与矿池软件之间的通讯协议是stratum,而矿池软件与钱包之间的通讯是bitcoinrpc接口

比特币传输网络

虽然比特币点对点网络服务于各种各样类型节点的一般需求,但是对于比特币挖矿节点的特殊需求,它的网络延迟就显得太高了。

比特币矿工参与的是时效性很强的竞争,以解决工作证明问题,延长区块链。在参与这项竞争的同时,比特币矿工必须尽可能缩短从传播一个获胜区块到开始下一轮竞争之间的时间。挖矿中,网络延迟与利润率直接相关。

传输网络不是替代比特币的点对点网络。相反,它们是重叠网络,在具有特殊需求的节点之间提供额外的连接,就像高速公路不能替代乡村道路,而是交通繁忙的两点之间的捷径,仍然需要通过小路连接高速公路。

Matt Corallo创建的Fast Internet Bitcoin Relay Engine 或者 FIBRE。 FIBER是一种基于UDP的传输网络,可以节点网络内传输区块。 FIBRE实现了压缩区块优化,以进一步减少数据传输量和网络延迟。

康奈尔大学研究的另一个传输网络(仍在提案阶段)是 Falcon。 Falcon使用“直通路由”而不是“存储转发”来减少延迟,方法是在接收到区块时就开始部分传输,而不是等到接收到完整的区块。

网络发现

当新的网络节点启动后,它必须发现网络中的其他比特币节点才能参与。要启动这个过程,新节点必须在网络上发现至少一个现有节点并连接到该节点。其他节点的地理位置在哪儿都没有关系,比特币网络拓扑结构没有地理位置的定义。因此,可以随机选择任何现有的比特币节点。

为了连接到一个已知的对等点,节点会建立一个TCP连接,通常连接到端口8333(通常被称为比特币使用的端口),或者如果指定了另一个端口,则连接到另一个端口。

新节点如何找到对等节点? 第一种方法是使用一些“DNS种子”来查询DNS,DNS种子就是提供比特币节点IP地址列表的DNS服务器。 其中一些DNS种子提供了稳定的比特币侦听节点的IP地址静态列表。 一些DNS种子是BIND(Berkeley Internet Name Daemon)的自定义实现,它从爬虫程序或长时间运行的比特币节点收集的比特币节点地址列表中返回一个随机子集。 Bitcoin Core客户端包含五种不同DNS种子的名称。 不同DNS种子的所有权的多样性和实现的多样性为初始引导过程提供了高水平的可靠性。

或者,一个刚刚启动的节点,对网络一无所知,必须被赋予至少一个比特币节点的IP地址,之后才可以通过进一步的引见建立连接。 在使用初始种子节点完成引见后,客户端将断开连接并使用新发现的对等节点。

建立连接
地址传播和发现
交换库存

总结

  1. 先说明了IP协议本身就是去中心化和扁平的,P2P是最天然的基于IP协议的传输方式。
  2. 由于IP是有限的,我们利用网关组件了局域网。
  3. 局域网通过网关发送数据到目标IP,这时候我们如果想建立P2P就需要知道对方的真实IP。
  4. P2P网络可以有不同的拓扑结构。
  5. 区块链是没有中心化tracker的拓扑结构。
  6. Kademlia及其改进协议提供了对数级别的查找节点的算法。
  7. BTC的网络分为不同的角色。
  8. BTC网络建立也需要有网络发现和数据同步的过程。

参考

Stratum_mining_protocol
MasterBitcoin2CN
P2P 网络核心技术:Kademlia 协议
内网,外网,NAT,网络穿透的故事

你可能感兴趣的:(P2P网络杂烩)