P2P 网络基础

P2P

Peer-to-Peer(对等网络)

视频通话、文件共享、区块链,我们每天使用的许多服务背后,都运行着同一个理念:设备之间直接相连,而不依赖中央服务器。本站将带你了解 P2P 与客户端-服务器模式的区别、NAT 穿透与 DHT 的工作方式,以及 P2P 在真实应用中的身影,并配以图解和互动模拟。

内容一览

P2P 深入解析

01. P2P 的历史
1999

Napster:中央索引带来的震撼

大学生肖恩·范宁开发的音乐共享服务 Napster 采用了划时代的设计:中央服务器只管理「谁拥有哪首歌」的索引,而实际的文件传输在用户之间直接进行。鼎盛时期用户数以千万计,但索引服务器正是它的软肋。当版权诉讼令服务器关闭时,整个服务也随之终结。这件事留下了一个教训:只要依赖中心,系统就会因一点被击破而停摆。

2000

Gnutella:对完全去中心化的挑战

为克服 Napster 的弱点而出现的 Gnutella 彻底去掉了中央服务器。每个节点只与少数邻居相连,并把搜索请求像洪水一样从邻居转发给邻居(洪泛)来寻找目标文件。虽然谁也无法关停它,但随着参与者增多,搜索消息可能淹没整个网络,暴露出根本性的可扩展性问题。后来它演化出设置「超级节点」的分层设计来应对。

2001

BitTorrent:分片与蜂群的发明

布拉姆·科恩设计的 BitTorrent 把焦点从「如何找到文件」转向「如何高效分发文件」。文件被切分成小片(分片),正在下载的节点之间互相交换已有的分片,从而实现了颠覆常识的特性:文件越热门,下载越快。其「针锋相对(tit-for-tat)」策略优待愿意上传回报的节点,也内置了对搭便车问题的防范。随着后来引入 DHT,连追踪服务器都变得可有可无。

2001 年起

DHT 研究的开花:Chord、Kademlia

大约同一时期,学术界的分布式哈希表(DHT)研究蓬勃发展。MIT 的 Chord 提出了优美的模型:把哈希空间排成环,每个节点负责其中一段;而 Kademlia 基于 XOR 距离的实用设计被 BitTorrent、以太坊等众多真实系统采用。有了 DHT,无需中央服务器也能以 O(log n) 的效率定位数据,P2P 从「蛮力」成熟为「工程」。

2008

比特币:P2P 承载「价值」

中本聪的论文标题本身就写着 P2P,即《比特币:一种点对点的电子现金系统》。通过让所有节点各自保存交易账本(区块链)的副本并相互验证,它在没有银行等中央机构的情况下建立了一套货币系统。这证明了 P2P 网络不仅能传输文件,还能承载「信任」与「价值」,为其后的 Web3 运动奠定了基础。

2015 年起

IPFS 与 WebRTC:浏览器时代的去中心化

IPFS(星际文件系统)提出了「面向内容」的分布式文件系统,直接用内容计算出的哈希值作为地址,并用基于 Kademlia 的 DHT 定位数据。另一方面,由 W3C 与 IETF 标准化的 WebRTC 让浏览器无需安装任何软件即可直接互连。通过视频通话、屏幕共享等,P2P 已悄然融入日常,甚至让人无从察觉。

如此回顾便会发现,P2P 的演进并非一条直线。针对「搜索效率」「分发效率」「信任去中心化」这三个不同课题的答案,各自作为独立谱系发展,最终汇流到一起。

02. 架构差异

客户端-服务器 vs 点对点

网络应用的设计大体可分为「中心化」与「去中心化」两类。理解两者的结构差异,是学习 P2P 的起点。

我们日常使用的网站和流媒体服务,大多是客户端-服务器系统。角色划分清晰:提供数据和服务的「服务器」,以及使用它们的「客户端」。当你打开一个网页时,你的设备作为客户端向服务器发送请求,服务器返回响应,一切都建立在这种一问一答之上。由于角色固定,容易保持数据一致性,也便于处理访问控制、计费、监控等「管理」事务。

而在点对点(P2P)系统中,参与的每台设备都是对等的「节点(peer,即对等方)」,各自同时扮演客户端和服务器两种角色。某个节点可能一边从其他节点接收文件的一部分,一边把自己已有的数据提供给别人。也就是说,P2P 的本质在于观念的转变:用户本身成为基础设施的一部分

客户端-服务器

Server

所有请求都经过中央服务器(一极集中)

  • 便于管理运维,容易保持数据一致性
  • 访问控制、认证、计费易于实现
  • 服务器容易成为瓶颈和单点故障(SPOF)
  • 用户越多,服务器成本和负载越高

点对点

节点之间以网状直接通信(去中心化)

  • 参与者越多,整体处理能力和带宽也越大
  • 即使部分节点离线,整个网络仍可运行
  • 无需巨额的中央服务器投入
  • 维持数据一致性、防范恶意节点变得更难

从带宽的角度思考

两者的差异在「向众多用户分发大文件」时最为明显。例如要把一个 10GB 的文件分发给 100 人,客户端-服务器模式下服务器必须上传共计 1TB(10GB×100 人),服务器的线路速度成为整体上限。而在 P2P 模式下,开始接收文件的节点会立刻成为他人的供给源,所需的上传量被分摊到所有参与者身上。理论上,完成分发所需的时间随参与人数只会缓慢增长,这正是 P2P 可扩展性的源泉。你可以在下方的模拟中亲自体验这种差异。

角度客户端-服务器点对点
角色分工固定为服务器与客户端所有节点对等(兼任两种角色)
容错性服务器宕机则整体停摆部分离线仍可持续
扩展需增强服务器(成本上升)参与者增加=供给力增加
数据一致性中心管理,容易需要共识机制
典型例子网站、云服务BitTorrent、区块链、WebRTC 通话
03. P2P 的种类

三种 P2P 模型:「如何找到对方」的演进

P2P 网络设计归根结底集中在一个问题上:如何找到拥有目标数据的节点?根据这一查找方式的不同,P2P 大体可分为三种模型。

纯粹型(非结构化)

完全没有中央服务器,每个节点只与少数邻居相连。查找数据时,节点把搜索请求发给邻居,收到的节点再转发给自己的邻居,以洪泛方式把请求扩散到整个网络。早期的 Gnutella 是典型代表。

  • 不存在单点故障,谁也无法关停
  • 维护网络结构的成本几乎为零
  • 搜索消息呈指数增长,规模变大时容易崩溃
  • 网络中「较远」的数据有时找不到

混合型

中央服务器只管理索引(谁拥有什么),而节点之间承担了实际的数据传输。搜索只需向服务器查询一次,因而很快。早期的 Napster 以及使用追踪器的 BitTorrent 都属于此模型。

  • 搜索快速可靠,实现也简单
  • 传输负载被分散(服务器可保持轻量)
  • 索引服务器成为单点故障,也是法律上的弱点
  • 访问信息集中于服务器运营者

结构化型(DHT)

通过分布式哈希表(DHT),用数学规则决定「哪个节点负责哪个键」。由于可以从数据的键(哈希值)计算出负责节点,无需洪泛那样的无用查询,就能以很少的跳数到达目标节点。

  • 无需中央服务器,且查找效率高(O(log n) 跳)
  • 数据位置有保证(只要存在就一定能找到)
  • 节点频繁进出(churn)时有重组成本
  • 以精确匹配查找为主,不擅长模糊搜索

经典 DHT:Chord 的原理

MIT 开发的 Chord 也许是对 DHT 思想最优美的表达。节点 ID 与数据的键用同一个哈希函数(如 SHA-1)映射为 0 到 2^m−1 的数值,并把这个数值空间视为一个。只用一条规则:每个键归属于 ID 大于等于它且最接近的节点(后继节点),就能唯一确定每份数据的归属。

若只是沿环逐一查找,最坏需要 n 跳,因此每个节点都保存一张指针表(finger table):记录距自己 2^k 处所对应负责节点的捷径清单。每次查找都能把剩余距离至少减半,所以即便在百万节点的网络中,也能约 20 跳到达任意数据。当节点加入或离开时,只需在局部完成键区间的交接和指针表的更新,无需重建整个网络。

在实际系统中,使用 XOR 距离的另一种 DHT,即 Kademlia,最为广泛。BitTorrent 的无追踪器模式和 IPFS 的内容查找都源自 Kademlia 一脉。

N0N8N16N24N32N40N48N56哈希空间(0 到 2^m-1 的环)

Chord 环示意图。虚线是 N0 指针表提供的「捷径」,每跳一次剩余距离减半。

阅读深入解析 →DHT 深入解析
04. 核心机制

支撑 P2P 的三大技术要素

让节点直接相连看似简单,实则必须解决三个技术难题:找到对方、越过 NAT 之墙、以及高效地分享数据。这里我们按从建立连接到交换数据的顺序逐步来看。

步骤 01

节点发现(Peer Discovery):先弄清「有谁在」

刚加入 P2P 网络的节点谁也不认识。作为第一个立足点,它通常会连接到软件中预置的引导节点(已知的入口节点),并向它询问其他节点的信息。

此后的节点收集会根据系统并用多种方法:

  • 追踪器方式:BitTorrent 的经典做法,向追踪服务器询问「当前参与该文件蜂群的节点列表」。可靠,但仍保留对追踪器的依赖。
  • DHT 方式:把文件的哈希值作为键在 DHT 中查找,获取持有该文件的节点地址。无需服务器,也更抗审查。
  • 节点交换(PEX):向已连接的节点询问「它所知道的其他节点」。网络像口碑一样不断扩散。
步骤 02

NAT 穿透(STUN / TURN / 打洞):越过「连不上」

找到对方并不意味着能立刻连上。家庭和办公室的设备通常位于路由器的 NAT 之内,只有私有 IP 地址,因而无法从外部直接接受连接。在 P2P 中,双方大多都在 NAT 之内,这被公认为构建 P2P 系统最大的难关。

解决方案分三步进行:

  1. STUN:向外部的 STUN 服务器询问「从 NAT 外部看,我的 IP 地址和端口是什么」。
  2. 打洞:通过信令交换彼此的外部地址,然后双方几乎同时互相发包。由于 NAT 会放行「对内部发出通信的回复」,这种同时发送便能打开双向的洞。
  3. TURN:当对称型 NAT 等情况下打洞失败时的最后手段。TURN 服务器中继所有通信。虽然一定能连上,但失去了 P2P「直接通信」的优势,且中继会消耗服务器带宽。

在 WebRTC 中,标准化了一套名为 ICE 的框架,会尝试所有这些候选路径(直连、经 STUN、经 TURN),并自动选出最优路径。

STUNNAT ANAT BPeer APeer B(1) 查询自己的外部地址(2) 同时发送=打洞直连通路建立失败时:(3) 由 TURN 服务器中继
步骤 03

分片与蜂群:「边收边发」的高效化

连接建立后,便进入数据交换。以 BitTorrent 为代表的现代 P2P 分发,会把文件切分为几百 KB 到几 MB 的分片(piece),并以分片为单位交换。这种切分有两重重要含义。

其一,正在下载的节点也能成为供给方。即使只持有整个文件 1% 的节点,也能把这 1% 提供给需要它的人。在共享同一文件的节点群(蜂群)中,人人「边收边发」,分发能力便随参与者数量成比例增长。

其二,便于防篡改校验。每个分片的哈希值事先记录在元数据(如 .torrent 文件)中,并在每次接收时核对。非法数据会被立即丢弃,因此即便从陌生对象处下载,也能保证完整性。

BitTorrent 还通过「最稀缺优先」策略(先获取蜂群中最稀有的分片)以及优待愿意上传回报者的「针锋相对」策略,同时提升整体效率与公平性。

节点之间交换彼此缺少的分片

被切分为四个分片的文件,各节点通过交换所缺的部分逐步凑齐

05. 互动模拟

亲身感受分发速度的差异

即便分发同一个文件,随着节点数量增加,客户端-服务器与 P2P 的速度增长方式也大不相同。切换模式,亲自比较一下吧。

轮次: 0完成节点: 0 / 14整体进度: 0%
种子 / 服务器尚未获取完成节点圆环 = 已持有分片比例
06. 实际案例

身边的 P2P 技术

「P2P=文件共享软件」这一印象是片面的。实际上,P2P 的思想正默默支撑着我们每天使用的服务。来看看那些标志性的案例。

文件共享协议BitTorrent

专注于文件分发的 P2P 协议的丰碑。文件被切分为若干片,蜂群中的节点相互交换,因此内容越热门分发越快。它至今仍广泛用于合法的大规模分发,例如 Linux 发行版的 ISO、游戏更新等。最初依赖追踪器,如今主流是基于 Kademlia 的 DHT 的无追踪器运行。

实时通信标准WebRTC

浏览器之间直接交换音频、视频和任意数据的 W3C/IETF 标准。内置通过 STUN/TURN/ICE 的 NAT 穿透和 DTLS 加密,几行 JavaScript 即可使用。它广泛应用于视频会议、屏幕共享、在线对战游戏、浏览器间文件传输等需要「无服务器实时性」的场景。

分布式账本区块链

比特币和以太坊的基石。所有节点各自保存交易账本的副本,并在 P2P 网络上传播和验证新区块,从而在没有中央管理者的情况下实现抗篡改的记录系统。交易通过流言(gossip)协议扩散到全网,节点发现使用 Kademlia 系的 DHT,融合了 P2P 领域的多项核心技术。

分布式文件系统IPFS

采用内容寻址的分布式文件系统,用内容的哈希而非位置(URL)来指向数据。同一个文件无论由世界上何处的谁持有,都拥有相同的 CID(内容 ID),并用 DHT 查找持有者。作为对网络中心化的对策,它被用于 NFT 元数据存储和抗审查的内容发布。

互联网电话Skype(早期)

2003 年问世的早期 Skype 由 Kazaa 的开发团队打造,用基于超级节点的 P2P 架构实现通话,在压低服务器成本的同时爆发式普及。其 NAT 穿透技巧和超级节点中继等,对后来的 P2P 通信技术影响深远(后期转向云架构)。

混合应用分发优化 / 游戏分发

Windows Update 的「传递优化」功能,让同一局域网内或互联网上的 PC 之间互相交换更新文件的片段,采用了 P2P 分发。把 CDN 与 P2P 结合以同时降低分发成本和下载时间的做法,也已在视频直播和游戏客户端分发中投入实用。

这些案例的共同点是务实:并不拘泥于「纯粹的 P2P」,而是让中央服务器与 P2P 各展所长、因地制宜地结合。信令与认证交给服务器,海量数据传输走 P2P,这种分工已成为现代分布式系统设计的定式。此外,本站运营团队也公开了开源 P2P 库 mistlib,以及基于它构建的一系列浏览器应用(在 TC Home 查看应用列表),无需安装即可亲身体验 P2P 通信与空间同步。

阅读深入解析 →P2P 元宇宙流言协议
07. 优点与缺点

P2P 的光与影

P2P 并非万灵药。它优雅地解决了中心化的弱点,同时也带来了去中心化特有的新课题。让我们梳理其中的设计权衡。

优点

  • 可扩展性:参与者越多,上传带宽和算力总量也越大。这是一种需求增长伴随供给增长的罕见结构
  • 容错性:没有单点故障,部分节点掉线整体仍可运行。也被作为灾害时的消息分发网络加以研究
  • 低成本:几乎无需庞大的中央服务器和带宽,小型组织乃至个人也能大规模分发
  • 抗审查:难以通过打击某一个运营者或服务器来关停,对信息管制有很强的抵抗力
  • 隐私潜力:数据和元数据不集中于中心,运营者难以从结构上实施大规模监控

缺点

  • 安全性:由于与不特定多数直接通信,必须防范恶意节点、被篡改的数据、IP 地址暴露等风险
  • 搭便车问题:只下载不贡献的参与者增多,会削弱整个网络的供给能力,需要激励设计
  • 一致性维护:让所有人共享「此刻正确的数据」很难,需要共识算法等复杂机制
  • 管理与审计困难:无法集中掌握谁持有、分发了什么,违法内容的处置与合规都很棘手
  • 终端负担与非对称线路:带宽和存储的负担落在用户设备上,家庭线路上行较窄,往往制约供给力

搭便车问题与激励设计

有一个 P2P 特有的课题值得深入一看,那就是搭便车问题。P2P 网络靠参与者的贡献(上传带宽和存储)运转,但对每个个体而言,只取不予才是最划算的行为。对早期 Gnutella 的调查发现,绝大多数节点根本不共享任何文件;放任下去,网络就会枯萎。

对此的答案,是把激励嵌入协议本身。BitTorrent 的「针锋相对」策略优先向那些回报上传的节点上传,营造出「贡献得越多下载越快」的局面。在区块链中,出块奖励激励着维护网络的工作。「不依赖善意,而是设计成让理性的自利产生集体利益」,这一思想表明,P2P 是一门处于计算机科学、博弈论与经济学交汇处的技术。

08. 术语表

P2P 术语表

汇总了阅读 P2P 相关文章和规范时频繁出现的术语,可与正文配合,当作词典随时查阅。

节点(Peer)
参与 P2P 网络的每一台设备或节点。意为「对等方」,同时兼任客户端和服务器两种角色。
节点(Node)
构成网络的参与点的统称。在 P2P 语境中与 peer 几乎同义,但有时也用于包含路由器、中继服务器在内的更广含义。
覆盖网络
在物理互联网之上以逻辑方式构建的虚拟网络。P2P 网络是一种在 IP 网络之上构建自有连接关系的覆盖网络。
DHT(分布式哈希表)
把键值对表拆分保存到众多节点上的机制。每个节点负责哈希空间的一部分,无需中央服务器即可高效确定「哪个节点拥有哪份数据」。
Chord
DHT 的代表性算法之一。把节点和键放在同一哈希环上,每个节点持有称为指针表的捷径清单,实现 O(log n) 跳的查找。
Kademlia
以 XOR(异或)作为节点间距离的 DHT 算法。实现相对简单且容错性高,广泛用于 BitTorrent 的 DHT、以太坊的节点发现等真实系统。
蜂群(Swarm)
共享同一文件的节点群。在 BitTorrent 中指参与同一 torrent 的所有节点(种子与吸血者皆包含)。蜂群越大,分发往往越快。
分片 / piece
文件切分后的小数据块。节点以分片为单位交换数据,凑齐所有分片文件即告完成。每个分片都用哈希值做防篡改校验。
种子(Seeder)
持有文件全部分片、专门上传供给其他节点的参与者。种子越多,蜂群越健康,下载也越快。
吸血者(Leecher)
尚未凑齐全部分片、正在下载的参与者。在下载的同时,也把已有的分片上传给其他节点。
追踪器(Tracker)
在 BitTorrent 中管理并提供蜂群中节点 IP 地址列表的服务器。它是节点发现的窗口,但完全不接触文件本体。随着 DHT 普及,无追踪器也能运行。
NAT(网络地址转换)
家庭和办公室的路由器用于转换私有 IP 与全局 IP 的机制。NAT 内侧的设备无法从外部直接连接,是 P2P 通信的一大障碍。
STUN
让位于 NAT 内侧的设备得知「从外部看自己的 IP 地址和端口」的协议,也常指代运行该协议的轻量级服务器。
TURN
当连打洞也无法直连时,中继通信的服务器及其协议。虽然一定能连上,但中继会消耗带宽成本,故作为最后手段。
打洞
位于 NAT 内侧的两台设备基于 STUN 获得的地址信息互相同时发包,在 NAT 上打开「洞」以建立直连通路的技巧。
信令
在 WebRTC 等场景建立 P2P 连接前,交换彼此连接信息(候选 IP 地址、密钥材料等)的过程。该交换本身通常经由中央信令服务器完成。
洪泛
把搜索请求等消息接连转发给所有相邻节点的方式。简单可靠但网络负担大,是非结构化 P2P 可扩展性问题的根源。
搭便车者
只下载、不上传(贡献)的参与者。搭便车者增多会削弱整个网络的供给力。BitTorrent 的针锋相对策略是其对策的代表。
内容寻址
用「内容的哈希值」而非「存放位置(URL)」来指向数据的方式。IPFS 采用之,内容相同则地址相同,便于分布式环境下的去重与校验。
引导节点
新加入 P2P 网络时最先连接的已知节点。从它获取其他节点信息并汇入网络。即便是完全去中心化的系统,也需要「最初的入口」。
拜占庭故障
不仅是停机,还会发送虚假消息、对不同对象给出矛盾回应等任意(恶意)行为的故障。能容忍此类故障的共识算法称为 BFT(拜占庭容错)。
最终性(Finality)
已记录的交易「不再可逆」的性质。PBFT 等 BFT 型在达成一致的瞬间即确定,具有即时最终性;PoW 则随后续区块堆叠越发难以推翻,具有概率最终性。
中本共识
比特币引入的共识方式。用 PoW 抽签决定出块权,分叉时以累积算力最多的链为准。首次在自由参与的开放环境中实现了实用共识。
罚没(Slashing)
在 PoS 中,对做出矛盾双重投票等违规行为的验证者没收其质押(stake)的惩罚。是对无利害关系问题的对策,也是 PoS 安全性的关键。
验证者
在 PoS 网络中质押货币,进行区块提议、验证和投票的参与者。相当于 PoW 的矿工,正常运作则获奖励,违规则被罚没。
DID(去中心化标识符)
W3C 标准的去中心化标识符,形如 did:方法名:标识。解析后得到含公钥等信息的 DID 文档。其特点是由本人掌控、不依赖特定运营者。
可验证凭证(VC)
带有签发者数字签名、证明属性(学位、资格、年龄等)的电子凭证。由持有者用自己的钱包保管,验证者仅凭签名即可确认真伪,无需向签发者查询。
多重签名
对转移资产等操作要求 N 个密钥持有者中至少 M 人签名的机制(M-of-N)。从而消除「单个密钥被盗或丢失即导致全部损失」这一单点故障隐患。
门限签名(TSS)
把私钥以分片形式分散给多方,在完整密钥不在任何地方被重构的前提下,通过协同计算生成单个签名的密码技术。从外部看与普通签名无异。
智能合约
部署在区块链上、满足既定条件即自动执行的程序。无需中介即可可靠地执行约定内容,但代码中的漏洞同样会被可靠地执行。
Gas
在以太坊等链上执行智能合约所需手续费的单位。按处理量计费,也起到防止无限循环等滥用网络的作用。
重入攻击
利用转账处理途中外部调用的空隙,在状态更新之前递归调用同一函数以抽走资金的攻击。是 2016 年 The DAO 事件的成因。
预言机问题
确定性执行的智能合约无法自行获取价格、天气等外部现实世界信息的问题。若充当桥梁的预言机提供错误数据,即便合约本身逻辑正确也会执行出错。
女巫攻击
一个攻击者制造大量虚假身份、伪装成多数派以支配网络的攻击。PoW/PoS 以无法伪造的稀缺资源(算力、资产)衡量话语权,从而具备抵抗力。
日食攻击
用攻击者节点包围目标节点的连接,将其与正常网络隔离的攻击。只让目标看到虚假信息,被用于双花等。连接来源多样化是对策。
自私挖矿
把挖到的区块隐匿不发,让他人做无用挖矿后再一并公开,从而不正当地增加自己份额的 PoW 攻击策略。即便算力不过半也可能成立。
DApps(去中心化应用)
由前端、智能合约、分布式存储构成、不依赖中央服务器的应用。其特点是运营者无法擅自停止或更改。
DAO(去中心化自治组织)
由代币持有者投票运营的组织。金库(treasury)用多重签名或智能合约管理。
L2 / Rollup
在区块链本体(L1)之外汇总处理交易、仅把结果记录到 L1,以降低手续费和拥堵的扩容技术。把大量交易压缩为一笔的 Rollup 为主流。
流言协议(Gossip)
每个节点反复向随机选中的对象传递信息,借疫学式扩散在 O(log n) 轮内传遍全网的方式。因不维护任何结构,对故障和 churn 极为健壮。
Churn(节点流动)
P2P 网络中节点频繁加入、离开的现象。DHT 路由表维护和数据复制的设计,都围绕对 churn 的耐受性来构建。
AOI(兴趣区域)
虚拟空间中虚拟化身需要接收信息的范围(Area of Interest)。在 P2P 虚拟环境中,只有 AOI 相互重叠的节点才建立连接和同步,以此保证可扩展性。
航位推测(Dead Reckoning)
不逐帧发送坐标,而是根据速度等外推对方当前位置,仅当误差超过阈值时才发送校正的同步技法。网络游戏节省带宽的经典手段。
CRDT
一种数据类型(无冲突复制数据类型),即使更新到达顺序不同,所有副本也会收敛到相同状态。用于无中央仲裁的协同编辑和 P2P 状态同步。
ICE
把直连、经 STUN、经 TURN 等所有通路候选逐一尝试、确认连通后自动选出最佳路径的 NAT 穿透统一框架。WebRTC 标准采用。
会合服务器
NAT 之内的节点在打洞之前,用来交换彼此公网/内网端点的中介服务器。连接建立后即不再需要。
对称型 NAT
按通信目的地分配不同外部端口的 NAT。经 STUN 探得的端口不会用于与对方的通信,因此标准打洞失效,需用端口预测、多端口并发尝试或 TURN 应对。
法定人数(Quorum)
分布式系统中操作成立所需的最小赞成节点集合。多数派法定人数具有「任意两个法定人数必有交集」的性质,是 Paxos 与 Raft 安全性的基石。
领导者选举
在分布式共识中选出一台协调节点的过程。Raft 用随机化超时和任期(term),在避免票数分裂的同时迅速立起新领导者。
日志复制
领导者把接收的命令序列(日志)复制给跟随者,当多数派持有后即提交的机制。是 Raft 和 Multi-Paxos 状态机复制的核心。
Term(任期)
Raft 中逻辑时间的单位。单调递增的编号,每个任期至多存在一位领导者。拒绝过期任期的消息,可防止过时领导者造成混乱。

相关学术文献汇总于参考文献页面

09. 常见问题

FAQ:解答你对 P2P 的疑问

汇总了 P2P 初学者常提的问题及其解答。点击问题即可展开回答。

不。P2P 只是一种通信方式,技术本身完全合法。视频会议(WebRTC)、Windows Update 的传递优化、网络游戏通信、区块链等许多日常服务都在使用它。违法的是某种「用法」,即未经权利人许可共享或下载受版权保护的电影、音乐等。许多国家和地区的法律也将明知是非法上传内容仍下载的行为纳入规制。重要的是把技术与用途区分开来理解。