跳转到内容

对等 (P2P) 世界/所有章节

来自维基教科书,开放世界的开放书籍

前言

本书旨在向您解释对等 (P2P) 技术在当今世界的整体应用,它深入探讨了尽可能多的实现,并比较了益处、问题,甚至法律影响以及对社会行为和经济基础设施的改变。我们详细解释了该技术及其工作原理,并试图为您提供对未来期望的愿景。

读者指南

这是一本维基教科书 (en.wikibooks.org),因此您应该了解它是什么以及它是如何发挥作用的。

本书分为不同的部分,但由于这是一项不断发展的工作,因此可能缺少某些内容或它们不在应该在的位置,您可以自由地成为一名作者并贡献力量来修复问题……

读者评论

如果您对本文件的技术准确性、内容或组织有任何意见,请告诉我们(例如,通过使用“讨论”页面或通过电子邮件)。请务必在您的评论中包含文档的部分或部分标题以及您的书籍副本的日期。如果您真的相信自己的观点、信息或更正,那么请成为一名作者(在维基教科书上)并做这件事,如果有人不同意,它总是可以回滚的。

作者指南

作者/贡献者应该在打算对本书进行非匿名贡献时注册(这将使您对作品演变的意见和观点更有价值和相关性,并使其他人能够与您交谈),并尝试遵循结构。如果您有重大想法或重大更改,请使用讨论区域;一般情况下,只需顺其自然即可。

约定
在创建本书时,已经采用了一套约定,请在您在书籍的讨论页面上贡献任何内容之前阅读它们。

作者

以下人员是本书的作者

Panic

您可以通过检查维基教科书 (https://wikibooks.cn/) 的历史记录来验证谁对本书做出了贡献。

对于使用其他作品中的一些内容表示感谢,例如 维基百科theinfobox:Peer to Peer互联网技术

以上作者在其作品上发布以下许可证
除非另有说明,否则可用于独立形式的媒体和源代码具有其自身的版权和不同的许可证(但与作品的复制许可性质兼容)。媒体可能受合理使用的约束,这在某些司法管辖区不被承认。未列出版权或许可信息源代码或脚本应被视为公共领域。


什么是 P2P ?

This is a diagram of a Peer-to-Peer computer network.
这是一个对等计算机网络的图示。
A diagram of a server-based computer network.
一个基于服务器的计算机网络的图示。

一般来说,对等(或P2P)计算机网络指的是任何没有固定客户端和服务器的网络,而是由许多自主的对等节点组成的网络,这些节点既充当客户端,也充当网络上其他节点的服务器。这种网络排列模型与客户端-服务器模型形成对比(客户端-服务器模型无法扩展到今天的需求)。在 P2P 模型中,任何节点都应该能够启动或完成任何受支持的事务。对等节点在本地配置、处理速度、网络带宽和存储量方面可能有所不同。这是任何 p2p 系统的基本定义。

术语 P2P 在不同的上下文中对不同的人可能意味着不同的东西。例如,虽然该术语已应用于 Usenet 和 IRC 的所有化身,甚至适用于称为互联网的 IP 主机网络,但它最常用于限制在 20 世纪 90 年代后期开始开发的对等网络,其特点是根据接收者的请求而不是发送者的请求传输数据。这些早期的网络包括 Gnutella、FastTrack 和现在已不存在的 Napster,它们都提供在以动态和不可靠的方式连接到网络的个人计算机之间进行免费(并且某种程度上是匿名)文件传输的功能,以便共同努力实现共同的目标。

即使那些早期的网络也围绕着相同的概念或实现工作。在某些网络中,例如 Napster、OpenNap 或 IRC,客户端-服务器结构用于某些任务(例如搜索),而对等结构用于其他任务,即使那样也不一致。像 Gnutella 或 Freenet 这样的网络,在所有用途上都使用对等结构,有时被称为真正对等的网络,即使它们最近的演变现在正在使它们成为一种混合方法,在这种方法中,每个对等节点在功能上并不平等。

当术语对等用于描述 Napster 网络时,它暗示对等协议的性质很重要,但实际上 Napster 的伟大成就是赋予了对等节点权力(即网络的边缘)。对等协议只是一种实现这一目标的常用方法。

因此,最好的方法是将对等定义为一组严格的定义,而是将其扩展到技术/社会/文化运动的定义,该运动试图提供一种去中心化、动态和自我调节的结构(直接与旧的中央控制或服务器-客户端模型相反,该模型无法扩展到今天的期望),其目标是提供内容和服务。这样,任何试图摆脱使用中央服务器/存储库的需求并旨在赋予权力或向一组类似的计算机提供类似的服务/访问权限的计算机程序/协议都可以被称为 P2P 实现,实际上它将使每个人成为创作者/提供者,而不仅仅是消费者。每个 P2P 系统都是自供给的,参与者越多,它就越能满足其目标。

从计算机科学的角度来看

从技术角度讲,真正的点对点应用程序只应实现不识别“服务器”和“客户端”概念的对等协议。这种*纯粹*的对等应用程序和网络很少见。大多数被称为点对点的网络和应用程序实际上包含或依赖一些非对等元素,例如 DNS。此外,现实世界中的应用程序通常使用多种协议,并同时或随着时间的推移充当客户端、服务器和对等方。

从计算机科学的角度来看,P2P 为研究创造了新的有趣领域,这些领域不仅是网络组件角色的非近期转变,而且是由于它带来的意想不到的好处和资源优化,以及网络效率和稳定性。

点对点系统和应用程序引起了计算机科学研究的极大关注;一些著名的研究项目包括 Chord 查找服务、PAST 存储实用程序和 CoopNet 内容分发系统(有关这些项目的外部链接,请参见下面)。

同样重要的是要注意,计算机主要是一种信息设备,其主要功能是将数据从一个位置复制到另一个位置,甚至超过执行其他类型的计算。这使得数字复制成为任何计算机正常功能的内在组成部分,不可能实现任何类型的复制保护的通用开放计算目标。数字时代版权的执行不应被视为技术问题,而应被视为社会需要适应的新现实。

分布式系统

分布式系统 正在成为 IT 公司数据中心计算的关键组件。这些系统的通用示例是 Google 基础设施 或任何类似系统。如今,这些系统的大部分发展都集中在如何分析和提高性能。P2P 系统也是分布式系统,并且根据实现情况,它共享分布式系统的特性和问题(错误/故障检测、机器时间对齐等)。

Ganglia

Ganglia 是一种可扩展的分布式监控系统,适用于集群和网格等高性能计算系统。它基于针对集群联合体的层次结构设计。它利用了广泛使用的技术,例如 XML 用于数据表示、XDR 用于紧凑的便携式数据传输以及 RRDtool 用于数据存储和可视化。它使用精心设计的的数据结构和算法来实现非常低的每个节点开销和高并发性。
Ganglia 已移植到广泛的操作系统和处理器体系结构,目前正在全球数千个集群中使用。它已被用于连接大学校园和世界各地的集群,并且可以扩展以处理拥有 2000 个节点的集群。( http://ganglia.info/

分布式计算

分布式计算背后的基本前提是在空间上分布的多台机器之间分散计算任务,大多数新项目专注于利用“个人”分布式机器的空闲处理能力,即普通家庭用户的 PC。这种当前趋势是一个令人兴奋的技术领域,它与分布式系统的子集有关(客户端/服务器通信、协议、服务器设计、数据库和测试)。

这种旧概念的新实现源于人们认识到,现在我们的家中拥有数量惊人的计算机,这些计算机的使用率远远不足,不仅是家用计算机,而且很少有企业能够全天候使用其计算机。事实上,看似正在运行的计算机可能只使用其处理能力的一小部分。使用文字处理、电子邮件和网页浏览需要很少的 CPU 资源。因此,“新”概念是利用这种未被充分利用的资源(CPU 周期),它可以在成本上远远低于几台超级计算机,因为这些机器由公众单独拥有和操作。

SETI@Home

最著名的 分布式计算 项目之一,由 空间科学实验室 主持,位于 加州大学伯克利分校,位于 美国SETI搜寻地外文明计划 的首字母缩写。 SETI@home 于 1999 年 5 月 17 日向公众发布。

平均而言,它使用了数十万台连接到 互联网 的家用计算机来搜寻地外文明。该程序的全部意义是在您的 CPU 周期空闲时运行,原始项目现在已过时,将被纳入 BOIC

BOINC

BOINC 由加州大学伯克利分校空间科学实验室的一个团队开发,由 David Anderson 领导,他也领导着 SETI@home。

Boinc 代表伯克利开放网络计算基础设施,这是一个非商业性(免费/w:开源软件),在 LGPL 下发布的,中间件 系统,用于 志愿者计算,最初是为了支持 SETI@home 项目而开发的,并且仍然托管在( http://boinc.berkeley.edu/ )上,但旨在适用于其他领域的应用,这些领域多种多样,例如数学、医学、分子生物学、气候学和天体物理学。一个用于使用志愿者资源进行计算的开源软件平台,它扩展了原始概念,并允许您将计算能力捐赠给其他科学研究项目,例如

  • Climateprediction.net:研究气候变化。
  • Einstein@home:搜索脉冲星发出的引力信号。
  • LHC@home:改进 CERN LHC 粒子加速器的设计。
  • Predictor@home:研究与蛋白质相关的疾病。
  • Rosetta@home:帮助研究人员开发人类疾病的治疗方法。
  • SETI@home:寻找地外生命存在的无线电证据。
  • Folding@Home( http://www.stanford.edu/group/pandegroup/folding/ ):了解蛋白质折叠、错误折叠和相关疾病。
  • 细胞计算生物医学研究。(日语;需要非标准客户端软件)
  • 世界社区网格:推进我们对人类疾病的了解。(需要 5.2.1 或更高版本)

作为一个“准超级计算”平台,BOINC 在全球拥有超过 435,000 台活动计算机(主机)。BOINC 由 美国国家科学基金会 通过 SCI/0221529、SCI/0438443 和 SCI/0506411 奖项资助。

它也用于商业用途,因为有一些私营公司开始使用该平台来协助他们自己的研究。该框架受各种操作系统支持:Windows(XP/2K/2003/NT/98/ME)、UnixGNU/LinuxFreeBSD)和 Mac OS X

世界社区网格 (WCG)

由 IBM 创建的世界社区网格 ( http://www.worldcommunitygrid.org/ ) 与上述系统类似。14 台 IBM 服务器充当 WCG 的“中央指挥部”。当它们收到来自某个组织的研究任务时,它们会仔细检查任务是否存在安全漏洞,将其解析为数据单元,对其进行加密,将其通过调度程序运行,并将其以三份副本发送给志愿者 PC 军队。

要成为志愿者,只需下载一个免费的小型软件代理(类似于屏幕保护程序)。

项目的选择基于 WCG 技术的潜在益处以及解决人道主义问题的能力,并由一个独立的外部慈善家、科学家和官员委员会进行选择。

该软件是开源的 (LGPL),C/C++ 和 wxWidgets,并且可用于 Windows、Mac 或 Linux。

网格网络

网格最初出现在美国使用超级计算机中,因为科学家和工程师寻求访问集中在少数几个地点的稀缺高性能计算资源。

开放科学网格

开放科学网格 ( http://www.opensciencegrid.org/ ) 由 OSG 联盟构建和运营,它是一个美国网格计算基础设施,通过大学和国家实验室的科学研究人员和软件开发人员、存储和网络提供商之间的开放合作,支持科学计算。

Globus 联盟

Globus 联盟 ( http://www.globus.org/ ) 是一个由组织和个人组成的社区,他们开发“网格”背后的基础技术,该技术让人们可以跨企业、机构和地理边界安全地共享计算能力、数据库、仪器和其他在线工具,而不会牺牲本地自治。

Globus 联盟还提供 Globus 工具包,这是一个用于构建健壮、安全、网格系统(超级计算机、集群和其他高性能系统上的点对点分布式计算)和应用程序的开源软件工具包。Globus 开发人员社区可以使用一个 Wiki( http://dev.globus.org/wiki/Welcome )。

高通量计算 (HTC)

当一些科学家试图从他们的计算环境中提取更多每秒浮点运算 (FLOPS) 或每分钟浮点运算时,另一些人则专注于更大时间尺度(例如,几个月或几年)的相同目标,我们将这些环境称为高性能计算 (HPC) 环境。

HTC 一词是在 1996 年 7 月美国宇航局戈达德太空飞行中心的一次研讨会上创造出来的,用于区分高性能计算 (HPC) 和高吞吐量计算 (HTC)。

HTC 的重点在于处理能力,而不是网络,但系统也可以在网络上创建,因此可以看作是为处理能力优化的网格网络。

Condor 项目

Condor 项目的目标 ( http://www.cs.wisc.edu/condor/ ) 是开发、实施、部署和评估支持在大量分散拥有的计算资源上进行高吞吐量计算 (HTC) 的机制和策略。在这样的计算环境的技术和社会挑战的指导下,Condor 团队一直在构建软件工具,使科学家和工程师能够提高他们的计算吞吐量。

IBM 网格计算

IBM 以及其他 IT 池中的大鱼,花费了一些资源来调查网格计算。他们在网格计算方面的尝试列在项目门户页面上 ( http://www.ibm.com/grid )。所有这些似乎都试图利用服务器机器的企业地位为客户提供网格服务。最活跃的项目是 网格医疗档案解决方案,这是一个可扩展的虚拟存储解决方案,适用于医疗保健、研究和制药客户。

内容分发/托管

分发大型文件的传统方法是将它们放在中央服务器上。服务器和客户端可以通过网络使用约定的协议(从 HTTP、FTP 到无限数量的变体)共享内容,当使用 IP 连接时,数据可以通过 TCP 或 UDP 连接或两者的组合发送,这一切主要取决于服务、机器、网络和许多安全方面的要求。

关于优化速度、可用性和服务一致性的优点,在最优定位方面是众所周知的。Akamai TechnologiesLimelight Networks 以及其他类似的解决方案试图从商业上解决这个问题,甚至 Google 也将数据中心的地理位置分散,以提高其服务的响应速度。这解决了大型内容和服务分发的需求,但不是完全去中心化的控制结构。

P2P 的发展是为了解决一个不同的问题,即中央服务器无法很好地扩展。带宽、空间和 CPU 构成了一个故障点,很容易导致系统功能终止,就像任何服务的集中化一样。

注意
一个简单的例子说明了集中化是如何成为问题的,即 拒绝服务攻击,它通常包括一台或多台机器试图暂时或无限期地中断或暂停连接到互联网的服务器的服务,通常是通过过载服务器。

会议和论文

P2P 还没有成为一个成熟的研究领域,甚至不是一个专门的计算机科学领域。P2P 技术涵盖了太多主题,以至于将所有交互都限制为一个领域本身仍然很困难。因此,许多相关信息很难找到。

会议

对于会议来说,一个提供非商业性和平台无关的观点的更新信息的位置是 GNUnet 项目https://gnunet.org/conferences 提供的列表。


Clipboard

待办事项
创建年度会议列表


论文
Clipboard

待办事项
关于 P2P 的免费访问论文的地址

从经济学角度看

为了使 P2P 系统可行,必须在对等体之间平等共享工作,目标应该是平衡资源的消耗和生产,目标是在网络上维护一类参与者,共享相同的责任。大多数 P2P 系统难以激励用户进行生产(贡献),最终会产生金字塔形(或多层、树状)方案,因为用户在系统内交互,使得系统依赖于 网络效应。系统拥有的用户越多,它就越有吸引力(价值越高),就像任何依赖网络效应的系统一样,它的成功取决于兼容性和一致性问题。

数字革命掀起了一股变化的浪潮,有些变化还没有完全被理解。在经济学方面,最重要的是,商业商品生产者充分意识到的是,由于旧作品的积累和持久性不断增加,价值被稀释。数字媒体不仅使旧作品更持久,而且更容易获得和可见,并且积累成本低廉。

即使很少有人维护公共领域的著作,这些著作仍在继续使消费者从购买新著作的需求中解脱出来。随之而来的是,这使得我们共同的文化历史记录成为来自基本经济利益产生的黑暗势力的主要目标。

文化商品生产和分发的普及

P2P 从根本上改变了无形文化商品(知识产权)的分发和商业模式的经济学。由于大多数内容都是虚拟的,只由信息组成。这些信息可以是任何类型的非物质对象,这些对象是由思想(文本、多媒体等)构成的。因此,内容也是思想表达的无数方式。它可以包括音乐、电影、书籍或任何一个单一方面的组合。

音乐

数字革命迫使音乐行业以多种方式重塑自己。从推广到分发通过。

广播

长期以来,广播一直是该行业管理其产品需求的方式。这不是质量问题,而是产品“可见性”问题,以及从 版税 中获得收入的简便方法。

晶体管和随身听的出现应该已经让该行业意识到即将到来的变化。即使在这里,简单的数字化以及将广播从空中波段转移到互联网的可能性,也给该行业带来了巨大的痛苦,并大大侵蚀了它如何塑造需求。

从磁带到 MP3

另一个攻击方向来自出售内容的媒体本身。这是从 8 轨磁带 的出现开始的,最终演变成 紧凑型盒式磁带,这是对商业模式的又一次革命性变化,对音乐行业来说是革命性的,就像对视频一样。适应导致了 CD 和混合内容的出现。事实上,似乎所有改变的压力和动力都是由消费者和行业经济努力降低生产成本所驱动的,但那些对行业拥有决策权的人仍然对他们自己培养的技术变化视而不见。

在这里,向数字化的转变不仅使复制更容易,而且最终使产品完全虚拟化,独立于其出售的媒体。随身听演变成便携式 CD 播放器,最终在固态存储和便携式播放器接管市场时默默地消亡。

互联网
旁注

ACTA 音乐视频的死亡ACTA 音乐视频的死亡 丹·布尔 的 D.O.A.C.T.A(ACTA 的死亡),ACTA 是《反假冒贸易协定》,创作者简明扼要地解释了独立音乐创作者如何看待这种持续呼吁知识产权控制政策的呼声。

对内容中介的需求正在迅速下降。大多数中介除了能够为内容生产者提供更好的营销方向和一般的业务诀窍之外,并没有给产品增加太多价值。

唱片公司可以提供更好制作设施的时代已经过去,因为制作音频作品的价格现在对所有人来说都是可以接受的,即使是实体形式也是如此。事实上,中介变得过于昂贵,以至于无法提供他们仍然可以提供的额外福利。它们在生产者和消费者之间制造了不必要的障碍。

在当今相互关联的世界中,分发渠道非常多样化,因此为数字分发(实体或虚拟)创建人工控制方案只会降低消费者的满意度,而不会增加产品价值,只会增加授权分销商的成本。

如果客户遇到带有 DRM 的产品,那么如果未经授权的副本被公开提供,它将创建一个没有限制的竞争产品,从而创建一个价格更低、质量更好的产品。事实上,使用 DRM 创造了差异化,并促进了平行市场的产生(如果可以这样称呼它,因为大多数产品都是免费的,但多种 DRM 方案会以同样的方式分割市场),这是由消费者希望通过主要产品提供的产品或简单地提供更多选择而无法满足的需求所致。

如今,广播、电视和新闻媒体作为一种宣传工具,其效力正在逐渐被互联网允许的互动媒体所超越,并且可以被利用作为直接的分发渠道。越来越多的艺术家开始意识到控制其作品版权和负责分发其作品的优势,这也提升了与消费者的沟通水平。

这一点在音乐行业中已经变得非常明显,主要是因为该媒介一直非常不稳定,消费者拥有大量使用内容的方式,减少内容的流通自由一直都被尝试过但最终都失败了,视频领域也正在经历同样的情况,随着时间的推移,连书籍也将不得不面对这种新现实,就像现在印刷媒体所面临的情况一样。随着内容媒介变得无处不在、廉价且为消费者所接受,制作方将不得不适应。

视频

电影
电视

最近,一些电视网络正在重新思考其受众策略,这源于 DVD 影集的接受程度和兴趣程度,以及一些改善分发的在线尝试。由于现在任何人都可以轻松地非法下载他们喜欢的节目,类似于音乐录制行业中随着替代交付技术的兴起而出现的分发渠道碎片化的现象,如果电视行业未能适应并满足受众对快速轻松获取新内容的期望,将会产生类似的结果。


Clipboard

待办事项
扩展,探讨独立制作的兴起,将 P2P 的去中心化模式与行业的静态设定进行比较,我们现在都是制作方,实时互动


ISP

多年来,ISP 一直在塑造/限制 P2P 流量,特别是更受欢迎的网络,导致了 ISP 与 P2P 开发者之间持续的猫捉老鼠游戏。在美国,网络中立性的讨论,以及最近有关 ISP 针对 P2P 流量采取行动的证据,已将此事变成了一个政治问题。

2007 年 11 月,Azureus(一种 BitTorrent 应用程序)的创建者 Vuze 向 FCC 提出请愿,导致 FCC 于 2007 年 12 月举行了听证会。其中一个提出的问题是有关 BitTorrent 限速的数据量。这导致 Vuze 的总法律顾问 Jay Monahan 发表声明称:“我们创建了一个简单的软件“插件”,它与您的 Vuze 应用程序一起工作,以收集有关您互联网流量可能受到干扰的信息。”

这个 插件 一直在收集更多有关 ISP 行为的硬数据,导致一个不断增长的干扰 P2P 协议的 ISP 列表在 Azureus WIKI 上维护(http://www.azureuswiki.com/index.php/Bad_ISPs)。

从社会学的角度

从人到人或用户到用户,一个新世界正在诞生,每个人都是制作方和消费者。信息将是免费的,因为分发成本将继续下降,而任何人都可以参与创作。

这在道德上是否错误?

如前所述,没有共同的立场来回答这个问题,观点差异很大,甚至国家之间在解释或合法性方面也存在差异,即限制/实施知识产权。


Clipboard

待办事项


对于每个动作,都会有反应

如今,有证据表明,存在着一场反对普遍被视为版权对公共物品的腐败的社会运动,即法律上的少数群体试图对大多数规模庞大、跨国企业(绝大多数甚至不是这些商品的直接制造者)的经济利益进行扩展和缩减自由权利。在本例中,虚拟商品主要是数字商品,其复制成本接近于 0,且不受时间或使用的影响。

DRM(数字版权管理)

当我们谈论 DRM 时,需要记住,正在被“管理”的权利与在非数字媒体上获得保护的简单知识产权截然不同。由于允许的控制程度可能非常高,对于尊重 DRM 的人来说,有时从消费者手中剥夺的权利仅仅是过去媒体中存在的自由,例如借阅的自由。它已经发展到购买商品的概念正在缓慢转变为租赁的地步,以至于您最终并不拥有或完全控制您所支付的商品。

注意
关于 DRM 的问题已经发展到如此大的规模,以至于随着这种技术的滥用越来越严重,其暗藏的含义由于消费者缺乏意识和教育工作而开始显现,从而提供标签和指示,允许更明智地选择消费内容。 自由软件基金会 通过其 defectivebydesign.org 活动,从 2008 年开始推广使用独特的标签来标识无 DRM 内容/媒体(http://www.defectivebydesign.org/drm-free)。

一个更加统一的无 DRM 文件标记,还可以教育下载者了解 DRM,这是一种强大的方式,可以增加无 DRM 的价值。在亚马逊等地方寻找电子书的人通常难以分辨哪些电子书有 DRM,哪些没有,因为亚马逊不会宣传该信息。这个标签是朝着解决这个问题迈出的一步,使反对 DRM 的人可以轻松找到志同道合的艺术家、作者和出版商来支持。

2005 年末,基于市场的理由促使索尼 BMG 在数百万张 CD 上部署了 DRM 系统,这些系统威胁了其客户计算机的安全,并更广泛地损害了信息基础设施的完整性。这被称为索尼 BMG 根目录工具包丑闻(有关详细信息,请参见论文 Mulligan, Deirdre and Perzanowski, Aaron K., "The Magnificence of the Disaster: Reconstructing the Sony BMG Rootkit)。

2007 年 2 月,史蒂夫·乔布斯写了一封公开信,谈论 DRM,因为它正在影响苹果在 iTunes/iPod 商店的业务(http://www.apple.com/hotnews/thoughtsonmusic/)。

在 RIAA 的大卫·休斯于 2007 年在美国亚利桑那州立大学的一次演讲中,RIAA 技术高级副总裁大卫·休斯将苹果的“精神领袖”史蒂夫·乔布斯称为“伪君子”,因为他对 iTunes 上的 DRM 的态度。“尽管史蒂夫一直在敦促音乐公司放弃 DRM,但他却不愿意通过 iTunes 销售其皮克斯电影,而没有 DRM,也不愿意销售没有 CSS 加密的 DVD。”

对历史记录的危险

Clipboard

待办事项


P2P 联合

这是一个现已解散的组织,由六个最大的 P2P 群体(eDonkey、Grokster、Morpheus、Blubster、Limewire 和 BearShare 背后的组织)组成,亚当·艾斯格劳担任执行董事。该组织成立于 2003 年 7 月中旬,旨在为 P2P 在美国国会和世界知识产权组织(WIPO)游说提供途径,WIPO 是管理知识产权条约的联合国组织,因为文件共享行业(作为一个行业)在华盛顿或媒体中没有可识别的名称和面孔。

此举失败,自那以后,该组织的大多数成员都输掉了诉讼,或达成和解并停止运营。


Clipboard

待办事项
完成


点对点工作组

点对点工作组(P2Pwg)。

一篇关于工作组创建问题的好文章可在 (www.openp2p.com) 上获得,由蒂姆·奥莱利于 2000 年 10 月 13 日撰写,文章地址为(http://www.openp2p.com/pub/a/p2p/2000/10/13/working_grp.html)。

非技术领域的 P2P

还有一些运动试图建立如何在非技术领域(如政治、经济、生态等)应用 P2P 的概念。
其中一个尝试是点对点替代基金会(http://p2pfoundation.net),它作为这些开放/免费、参与式/点对点和公共资源导向的倡议的交换中心,旨在成为一个多元化的网络,以记录、研究和推广点对点替代方案。

这些网络上最常共享的文件是流行音乐的 MP3 文件和 DivX 电影文件。这导致许多观察者,包括大多数媒体公司和一些点对点倡导者,得出结论,这些网络对已建立的媒体公司的商业模式构成严重威胁。因此,点对点网络成为 RIAA 和 MPAA 等行业贸易组织的目标,被视为潜在威胁。Napster 服务被 RIAA 的诉讼关闭;RIAA 和 MPAA 两家组织都花费大量资金试图游说立法者实施法律限制。迄今为止(截至 2003 年 1 月),这些努力最极端的表现是加州众议员伯曼提出的一项法案,该法案将赋予版权所有者合法权利,可以侵入被认为非法分发受版权保护材料的计算机系统,并破坏点对点网络的运作。该法案于 2002 年在委员会中被否决,但伯曼众议员表示将在 2003 年的会议期间重新提出该法案。

随着媒体公司的攻击范围扩大,这些网络似乎以很快的速度适应,在技术上变得更加难以拆除。这导致这些系统的用户成为目标。有些人预测,开放网络可能会让位于封闭的、加密的网络,在这些网络中,请求方不知道共享方的身份。另一个免受媒体公司侵害的趋势似乎是无线自组织网络,在这些网络中,每个设备都以真正的点对点方式连接到其附近的设备。

虽然历史上 P2P 文件共享一直被用来非法分发受版权保护的材料(如音乐、电影和软件),但未来的 P2P 技术肯定会发展,并被用来改善材料的合法分发。


Clipboard

待办事项
..."IP 地址是在互联网上定位特定网络接口的标识符。无论是路由器、个人电脑、Mac、PDA、手机还是其他设备(只要是能够使用这种尺寸小到指甲盖大小的模块),IP 地址都只是一个标识符。IP 地址不能证明在传输过程中使用了哪种类型的计算机硬件(运行 Windows 的 PC、Linux 或其他自由软件、PDA、手机等)。不能对硬件做出任何假设,也不能对使用该硬件的任何用户做出任何假设。因此,我提出我的第二个观点,即这些电子设备(我上面列出的类型)的操作不受物理位置或 IP 地址实际拥有者的限制。" in "Patricia Santangelo files Answer, Demands Trial by Jury"...


正如现在显而易见的那样,P2P 技术给内容所有者、分发渠道控制和用户(消费者)权利带来的问题是巨大的,该技术正在打破控制生产者和消费者之间关系的标准意识形态,一些新的模式已被提出(例如,参见“P2P 问题解决方案” - http://groups.sims.berkeley.edu/pam-p2p/)。

2007 年,一些最富裕的国家(美国、欧盟委员会、日本、瑞士、澳大利亚、新西兰、韩国、加拿大和墨西哥)开始秘密谈判,以达成一项条约,创建一项新的全球知识产权保护标准,即《反假冒贸易协定》(ACTA),该协定最初计划在 2008 年 7 月的第 34 届八国集团首脑会议上通过,现在希望能在 2010 年达成协议。

有人认为,该条约的主要目的是为服务提供商提供安全港,以便他们不会犹豫向有关侵权者提供信息;例如,这可以用来在确认侵权者身份后迅速识别和阻止侵权者。

同样,该条约还规定将版权侵权行为刑事化,赋予执法部门进行刑事调查、逮捕和追究可能侵犯版权的嫌疑人的刑事指控或起诉的权力。

更令人担忧的是,作为一项国际条约,它允许这些条款(通常通过公开立法管理,并受司法监督)通过签署国行政机构成员之间的闭门谈判推行,一旦得到批准,便可利用贸易激励措施等手段说服其他国家在没有太多谈判余地的情况下接受其条款。

这违法吗?

P2P 本身并不是什么新鲜事。我们可以说,FTP 传输或任何一对一的传输都是 P2P,例如 IRC 用户向另一个用户发送 DCC 文件,甚至电子邮件,唯一可能违法的是对特定工具的使用方式。

P2P 的合法用途包括分发开放或公开内容,例如电影、软件分发(Linux、更新),甚至 维基百科 DVD 出现在 P2P 网络上。它还可以用来绕过审查制度,例如,迈克尔·摩尔的电影“西科”通过 P2P 泄露,或者用作宣传机器来推广产品和理念,甚至可以用作市场分析师工具。

但是,未经许可交易受版权保护的信息在大多数国家都是非法的。您可以自由分发您最喜欢的 Linux 发行版、您自己拍摄的视频或图片、您已获得许可在线发布的当地乐队的 MP3 文件,也许甚至可以复制开源软件或书籍。合法性的观点主要取决于文化和道德基础,在全球互联的世界中,没有可以避免跨越的固定界限,有一点是肯定的,大多数人不会制作受限制的内容,大多数人认为他们的创作是献给全球社区的,因此从数学上看,少数人受到对一般思想、概念和文化的自由流动使用和限制的保护。

正如我们将看到的,P2P 不仅关乎文件共享,更广泛地说,关乎内容/服务的传播。

Sharing is not theft and theft is not the same as piracy, this is true under any law.
分享不是偷窃,偷窃与盗版不同,这是任何法律都承认的。
分享是偷窃吗?偷窃是盗版吗?当然不是...

分享你无权分享的内容不算偷窃。在世界上任何地方它从未被视为偷窃。任何说这是偷窃的人都是错的。分享你不拥有(或没有分发权)的内容构成版权侵犯。复制数字商品不会降低原始商品的价值,也不会意味着从所有者那里减去同等价值的商品。另一方面,在没有许可的情况下将该数字商品提供给他人可能会导致该商品的知名度增加,从而产生免费广告和有关该商品的讨论,这通常会导致对该商品的需求增加,这一点已在数字书籍、音乐和视频发布的测试中得到验证。

使用“盗版”一词来描述版权侵犯是一种比喻式启发法,是代表版权所有者或拥有可商业化文化商品版权的大公司的游说集团为了误导公众和立法者而采取的一种公关手段。这会导致直接损害社会和文化的做法(参见 索尼·博诺版权期限延长法案或米老鼠保护法案)。

我们现在习惯听到的法律战主要围绕着控制,其次是权利保护。对分发方式的控制(谁以何种方式获得什么)导致了人为的稀缺。这与金钱有关,因为由于格式以及时间和空间上的限制,控制和限制访问权限会带来附加价值。

Cartoon about free culture, intellectual property and Internet Piracy. Found on The Pirate Bay in late February / early March '09.
关于自由文化、知识产权和互联网盗版的漫画。在 2009 年 2 月底/3 月初的“海盗湾”上找到。

内容和索引器

需要区分的另一个区别是内容分发(尤其是违反版权的内容分发)和对该内容的索引。索引的方式和目标似乎很重要,如果仅仅是因为版权所有者更愿意起诉那些能够为侵犯其权利付费的服务。但是,索引可能根本不构成违法行为,因为在某些司法管辖区,问题似乎在于它在多大程度上促进这种侵犯,以及它本身是否构成违法行为,这一点可能非常难以证明。无论如何,到 2015 年,大多数公开的 BitTorrent 跟踪器例如会公开遵守 DMCA 的要求,并实施下架程序,即使他们经常抱怨这些要求有时过于宽泛,甚至涵盖了申请者没有权利的作品。


Clipboard

待办事项

  • 加密
  • 恋童癖和恐怖分子


世界知识产权组织 (WIPO)

世界知识产权组织 是联合国的一个专门机构。WIPO 成立于 1967 年,其宗旨是“鼓励创造性活动,并在全世界促进知识产权保护”。建立世界知识产权组织的公约于 1967 年 7 月 14 日在斯德哥尔摩签署。


Clipboard

待办事项
添加更多关于 WIPO 和相关条约的信息。


An Italian manifest saying "to share is not steal", referring to P2P legal status in Italy.
一张意大利传单,上面写着“分享不是偷窃”,指的是意大利对 P2P 的法律地位。

2007 年 8 月,音乐产业在欧洲遭到拒绝,要求识别文件共享者,德国奥芬堡的一家法院拒绝命令 ISP 在音乐产业要求其这样做时识别订阅者,音乐产业怀疑特定账户被用于侵犯版权的文件共享,拒绝的依据是法院认为,命令 ISP 交出详细信息将是“不成比例的”,因为音乐产业代表没有充分解释订阅者的行为将构成“与犯罪相关的损害”,这可能是请求访问该数据的依据。

这并不是德国的孤立事件,因为同样是在 2007 年,策勒首席检察官办公室以没有显示重大损害为理由拒绝了数据请求,并且遵循了欧洲法院 (ECJ) 检察官总长朱利安·科科特两周前发布的建议,支持这一立场,因为它指出,法律限制向刑事案件提交识别数据的国家符合欧盟指令。该建议是针对西班牙的一起案件,其中一个版权持有人团体要求从 ISP 电信公司获取订阅者详细信息。ECJ 没有义务遵循检察官总长的建议,但实际上在超过四分之三的案件中都照做了。

在大多数欧洲国家,只有在商业规模上进行的版权侵犯才构成刑事犯罪。这种区别很重要,因为公共资金没有用于调查和起诉对经济影响有限的个人和最常见的私人版权侵犯行为。


Clipboard

待办事项


2007年6月12日,法国唱片制作者协会(SPPF - http://www.sppf.com/ ),一个代表法国独立音频创作的合法权益并为其收取版权费用的实体,公开宣布,他们已在巴黎初级法院提起民事诉讼,要求法院命令终止Morpheus(由Streamcast发布)、Azureus的传播和功能,并要求赔偿经济损失。2007年9月18日,对Shareaza采取了类似的行动,2007年12月20日,SPPF宣布对Limewire采取了新的行动。所有这些法律行动似乎都是基于对国家版权法的修正,该修正规定,可以对未采取措施阻止用户访问非法内容的软件创作者/发布者采取民事诉讼。


Clipboard

待办事项
也提到了反视听盗版协会(ALPA)


Clipboard

待办事项
数字经济法案


反版权盗版联合会(FACT)是一个英国的行业组织,旨在代表其在电影和广播业务中的成员在版权和商标问题上的利益。成立于1983年,FACT与执法机构合作解决版权侵权问题。

FACT制作了许多广告,这些广告出现在英国发行的视频和 DVD 的开头,以及电影院放映电影前的预告片。虽然FACT与美国电影协会 (MPAA)的功能相同,但FACT通过将大部分行动集中在打击涉及版权侵权的严重和有组织的犯罪,避免了公众的强烈反对。

在一个有趣的跨境相互支持的示范中,2008年,FACT帮助 MPAA 对流媒体链接网站 SurfTheChannel 进行了钓鱼行动。MPAA 不仅参与了质询,带来了自己的调查人员,还被允许检查被捕获的设备,并设法找到了一名在美国为该网站工作的程序员,以在法律诉讼中作证。这名程序员没有在美国受到起诉,但他同意向 MPAA 支付他在 SurfTheChannel 工作的收入(详细信息请参阅MPAA 代理商揭露据称的电影盗版者)。

2009年7月,在西班牙巴塞罗那,法官劳尔·N·加西亚·奥雷胡多宣布:“P2P 网络,仅仅是在互联网用户之间传输数据,原则上不会侵犯知识产权法保护的任何权利”,在驳回西班牙作家和出版商协会(SGAE)关闭 eD2K 链接网站 elrincondejesus.com 的法律诉讼时如此表示。

2009年8月,葡萄牙文化活动总督察局(IGAC)向葡萄牙最大的 ISP(葡萄牙电信,PT)发送了一份通知,要求其删除托管指向从外部页面免费下载未经授权的版权材料的链接的页面。这份通知是在互联网反盗版公民运动(Movimento Cívico Antipirataria na Internet,MAPINET)报告了这一情况后发出的,该协会最突出的成员是葡萄牙视听贸易协会(Associação de Comércio Audiovisual de Portugal,ACAPOR)、葡萄牙唱片协会(Associação Fonográfica Portuguesa,AFP)、权利管理和分配协会(Associação para a Gestão e Distribuição de Direitos,AUDIOGEST)、视频编辑联合会(Federação de Editores de Videogramas,FEVIP)、艺术家权利管理合作社(Cooperativa de Gestão dos Direitos dos Artistas,GDA)、作者权利管理协会(Associação para a Gestão de Direitos de Autor,GEDIPE,属于AGICOA 联盟)、葡萄牙作家协会(Sociedade Portuguesa de Autores,SPA)以及一些其他制作人和编辑以及一些翻译人员。由于葡萄牙电信控制的服务器上没有托管任何真正的非法内容,因此链接似乎没有违反用户在已识别的博客门户服务中的使用条款,到目前为止还没有采取任何行动。一份以葡萄牙语写成的文章中列出了 28 个违规页面的列表

挪威的个人数据法 (PDA) 要求该国的所有 ISP 删除其客户超过三周的所有 IP 地址日志,因为这些日志被视为个人信息。这是个人数据保护法律向前迈出的一大步,但也将使“盗版猎手”的工作更加困难。Simonsen 律师事务所就是一个例子,该事务所以律师 Espen Tøndel(处理此类事务的领军人物)而闻名,并且自 2006 年(现已终止)以来,该事务所获得了挪威数据保护办公室的临时许可,可以监控可疑的 IP 地址,无需法律监管。

美国

根据美国法律,“Betamax 判决” (索尼公司诉环球影业公司案) 认为,如果可以对“技术”进行大量的非侵权使用,那么复制“技术”本身并不违法。这一判决早于互联网的广泛使用,适用于大多数数据网络,包括点对点网络,因为可以合法地分发一些文件。这些非侵权用途包括发送开源软件、知识共享作品以及公有领域作品。其他司法管辖区往往以类似的方式看待这种情况。

美国也是世界知识产权组织条约的签署国,这些条约部分促成了《数字千年版权法案》(DMCA) 的创建和通过。

美国版权法所述,必须牢记关于合理使用、许可、版权滥用和诉讼时效的规定。

米高梅诉格洛克斯特案


Clipboard

待办事项
http://www.eff.org/IP/P2P/MGM_v_Grokster/


美国唱片业协会 (RIAA)

一旦在线音乐文件共享变得流行,RIAA 和唱片公司就采取了强硬的立场。他们在 2001 年取得了早期胜利,关闭了著名的音乐共享服务 Napster。

该网站是一个容易的目标,因为 Napster 物理上维护了存储非法音乐文件的计算机服务器,这些文件通常以高保真、压缩、便于下载的 MP3 格式存储。[在 P2P 网络中,文件存储在各个用户计算机上;特殊的软件可以让消费者“看到”这些文件并将它们下载到自己的硬盘驱动器上。]
——达芙妮·埃维亚塔,"唱片业和音乐爱好者不协调",The Recorder,2003 年 8 月 20 日

美国唱片业协会 (RIAA)(http://www.riaa.com/)是代表美国唱片业的行业协会。RIAA 的资金来自四大音乐集团 EMI、华纳、索尼 BMG 和环球,以及数百个小型独立唱片公司。

美国电影协会 (MPAA)

MPAA 是一个美国贸易协会,代表六家最大的好莱坞工作室。它成立于 1922 年,名为美国电影制作人和发行商协会 (MPPDA)。它的重点是促进其成员的商业利益,并管理 MPAA 电影分级制度。

在 20 世纪 80 年代初,该协会以版权为由反对录像机 (VCR)。在 1982 年的一次国会听证会上,瓦伦蒂谴责了“这台机器的野蛮和破坏”并将它对电影业和美国公众的影响比作波士顿扼杀狂。

MPAA 充当游说团体,为更严格的版权保护、保护延长和制裁立法而努力,并积极追查版权侵权行为,包括通过法律和技术破坏性方式打击通过点对点文件共享网络共享受版权保护的作品的行为。

MPAA 推出了各种宣传活动,旨在提高公众对版权侵权的意识,包括谁制作电影?你可以点击,但你无法隐藏;以及你不会偷车,这是一则 2004 年的广告,出现在许多DVD的节目内容之前。

MPAA 的英国对应机构是反版权盗版联合会 (FACT)


Clipboard

待办事项
华纳兄弟公司尝试在德国进行文件共享
MPAA 起诉新闻组和 P2P 搜索网站 作者:约翰·博兰,发表于 ZDNet News,2006 年 2 月 23 日


加拿大

加拿大对空白录音介质征收税款,该税款于 1998 年 3 月 19 日通过新的联邦版权法实施。加拿大引入了该税款来处理私人复制录音的行为,其他拥有类似版权制度的国家包括大多数 G7 国家和欧盟成员国。有关该税款的详细信息可以在加拿大空白录音介质版权税款常见问题解答中找到 ( http://neil.eton.ca/copylevy.shtml )。

由于与邻国接壤并与之紧密联系,加拿大历来不太倾向于为公司利益服务,其社会政策与美洲大陆其他国家形成鲜明对比。现实情况是,加拿大一直受到其最强大的邻国美国的高度影响甚至施压(经济和政治),被迫遵从其法律、社会和经济演变。近年来(2007 年 11 月),加拿大政府试图推动通过一项类似 DMCA 的版权法,以遵守该国 1997 年签署的 WIPO 条约,类似于美国的做法,这引发了公众对该法案的强烈反对,并可能导致其修改。这次尝试的可见性要归功于渥太华大学法学教授迈克尔·盖斯特博士 ( Michael Geist ) 的努力,他被认为是版权和互联网方面的专家,担心该法案会复制美国数字千年版权法中最糟糕的方面。

暗网与明网

由于拒绝根据公众需求和意愿进行立法。通过延长版权期限(美国、英国)并积极推动其他国家颁布类似 DMCA 的法律,创造了一种单一文化,其中文化产品实际上形成了垄断,产生了某种文化帝国主义。

这种现实促使人们将支持从透明的分发系统(明网)转向更封闭的系统(暗网),而这些系统将越来越依赖于社交关系才能进入,就像禁酒令期间出现的秘密酒吧一样,再次针对人民立法将被证明是一场失败。

只有在围绕无所有权媒体/系统构建或像旧的集中式系统一样受到高度控制、拥有媒体/系统的条件下,用于内容分发的 P2P 明网才能实现,在这种情况下,没有人违反法律,因此没有人需要躲在黑暗中。这可能围绕着一个中心实体,该实体应保证控制和管理内容,甚至可能需要使用某种 DRM 方案,这是一个整体上失败的系统。

这类网络已经过测试并失败了,因为内容也是信息,开放系统中对隐私的需要或缺乏始终会创建生成更分层的系统,该系统最终会退化为暗网以逃避法律诉讼。

暗中操纵

在任何开放的社会中,秘密、故意隐瞒事实以及篡夺或压制权利不仅应该被视为负面行为,而且通常被视为文明倒退。这类活动通常是非法的或受到严格限制,不仅可能由国家进行,而且还可能由大型公司积极追求,这些公司在某些国家(或标准制定组织)中能够对政策施加前所未有的控制。

在一个最终用户希望控制自己的硬件和软件的世界里,某些行为并不打算公开。本节旨在阐明一些主题/行为,以帮助读者充分了解一些鲜为人知的关于 P2P 演变的信息。

一些组织(或拥有既得利益的团体)仍然认为,他们有权替大众思考,而不是仅仅尝试将信息推出去,赋予公众做出自己明智决定的能力。总的来说,有一种明显的组织化的企图,即向公众隐瞒事实。信息就是力量。

试图控制信息获取和流动是一项徒劳无功的事情。人们一直反抗由行业强制执行的黑盒解决方案及其人为的限制,这些限制除了满足试图控制信息的人的经济利益外没有其他目的。

操作系统

自从 P2P(和与 P2P 相关的技术)开始出现并获得动力以来,用户在操作系统上的安全性开始受到重视,并被置于用户自由之上,通过强加一些选择,这些选择无视对用户进行适当教育的必要性,削弱了他们做出自己选择的能力。这种理念让人们处于技术落后和害怕改变的状态。看到人们为保持这些“安全增强功能”的隐蔽程度付出的努力,甚至让人觉得好笑。

好吧,并非一切都已失去,有些人似乎无法遵守这种情况,并且可以找到一些信息并逆转一些行为。

关于 Microsoft Windows

ISP

互联网服务提供商(ISP)最重要的方面之一是能够快速适应客户的需求和需求变化以及使用方式的变化。这种适应可以从两个方面进行,通过修改网络服务并创建新的服务来适应,或者通过压制和降低新的消费趋势来适应。如果 ISP 是更大的媒体机构的一部分,后者就很容易实现,因为它不仅可以影响公众舆论,还可以塑造立法。

ISP 对 P2P 技术并不十分满意,因为 P2P 技术给他们的网络带来了负载,尽管他们以无限使用的方式出售互联网连接,但如果人们真正接受了他们的报价,ISP 最终将无法以相同的价格/利润水平满足需求。更简单的解决方案是将他们的报价与使用情况相匹配,通过增加他们的容量并至少履行合同义务,但有些人决定简单地限制(即降低)点对点流量,甚至故意干扰点对点流量。这使得客户越来越担心一些 ISP 的行为,从流量整形(协议/数据包优先级)到流量篡改。

总部位于旧金山的电子前沿基金会(EFF)的一个数字权利团体,成功地证实了互联网服务提供商进行的这种破坏其服务某些用途的努力,并且证据似乎表明这是一个日益增长的趋势,因为 EFF 收到了其他报告,并由美联社进行了调查。

EFF 发布了关于康卡斯特干扰互联网流量的报告 ( http://www.eff.org/wp/packet-forgery-isps-report-comcast-affair ),EFF 网站上还提供了有关该主题的其他信息。

指标

强制流量整形

一些 ISP 现在使用更复杂的方法(例如模式/计时分析或根据侧信道数据对端口进行分类)来检测 P2P 流量。这意味着即使是加密流量也可以被限制。然而,对于那些继续使用更简单、成本更低的方法来识别和限制 P2P 网络的 ISP 来说,目前添加到 P2P 解决方案中的对策仍然非常有效。

流量篡改

流量篡改比流量整形更令人担忧,更难以被发现或验证。它也可以被定义为欺骗攻击,它包括通过操纵给定协议将掺假/虚假信息注入通信中。就像邮局冒充你的一个朋友的身份,用它的名义给你寄信一样。

Pcapdiff ( http://www.eff.org/testyourisp/pcapdiff/ ) 是 EFF 开发的一个免费 Python 工具,用于比较两个数据包捕获并识别可能被伪造、丢失或损坏的数据包。

当有需求时,满足需求的供应就会迅速跟进。一个例子是Sandvine Incorporated 应用程序,该应用程序能够拦截 p2p 通信并颠覆协议。这类应用程序有两个目的(从所有者的角度来看),例如 Sandvine 应用程序最初设计用于改变 Gnutella 网络流量作为一种“优化”路径。但如今,BitTorrent 的采用似乎占据主导地位,Sandvine 应用程序的最新版本能够拦截 BitTorrent 点对点跟踪器通信,以根据跟踪器返回的点对点列表中的 IP 地址和端口号识别点对点。当 Sandvine 后来发现与被拦截的点对点列表中的点对点建立连接时,它可能会(根据策略)通过发送伪造的 TCP 重置来断开这些连接。即使 BitTorrent 协议继续实施对策,它们也会产生成本,并将问题变成一场“军备竞赛”,问题本质上是道德或法律上的,并具有安全隐患。

争取网络中立的斗争

网络中立旨在防止 ISP 对客户支付的宽带连接费用和网站/组织也要支付的费用进行双重收费,以根据流量的来源、目的地或使用的协议对流量进行优先级排序。

秘密的反假冒贸易协定

反假冒贸易协定》(ACTA)是一项拟议中的多边协议,旨在制定有关知识产权权利执法的国际标准。

ACTA 的目的是建立一个新的国际法律框架,各国可以自愿加入,并将在现有的国际机构(如世界贸易组织 (WTO)、世界知识产权组织 (WIPO) 或联合国)之外建立自己的管理机构。

建立关于假冒伪造的《多边协定》的想法是由日本美国在 2006 年提出的。加拿大、欧盟瑞士在 2006 年和 2007 年期间加入了初步谈判。正式谈判于 2008 年 6 月开始,澳大利亚墨西哥摩洛哥新西兰大韩民国新加坡加入了谈判。计划在 2010 年 9 月完成谈判。

谈判国将其描述为对“全球假冒商品和盗版版权作品交易增加的回应”。

《反假冒贸易协定》(ACTA) 的范围很广,包括假冒商品、仿制药品和版权侵权,包括在互联网上的侵权。《反假冒贸易协定》(ACTA) 实际上是一项条约,它将克服许多界定消费者“合理使用”权利的法院先例,并将改变或取消对知识产权法应用的限制。

在 2008 年、2009 年和 2010 年的一系列草案文本泄露之后,谈判各方在 2010 年 4 月 20 日公布了当前草案的正式版本

美国

奥巴马政府和布什政府都拒绝了将《反假冒贸易协定》(ACTA) 文本公开的要求,白宫表示披露将“损害国家安全”。

2009 年,知识生态国际组织在美国提交了一份《信息自由法案》(FOIA) 请求,但其全部请求都被拒绝。美国贸易代表办公室的信息自由办公室表示,该请求因涉及“为国家安全目的适当归类的材料”而被拒绝。

美国参议员伯尼·桑德斯 (I-VT)谢罗德·布朗 (D-OH)于 2009 年 11 月 23 日联名写信给美国贸易代表,要求公开《反假冒贸易协定》(ACTA) 的文本。

秘密谈判

电子前沿基金会(EFF) 反对《反假冒贸易协定》(ACTA),在其论文“阳光照进《反假冒贸易协定》(ACTA)”中呼吁对拟议中的条约进行更多公开关注 (http://www.eff.org/action/sunlight-acta)

自 2008 年 5 月以来,与《反假冒贸易协定》(ACTA) 谈判相关的讨论文件和其他文件已上传至维基解密,随后报纸报道了有关秘密谈判的消息。

2008 年 6 月,加拿大学者迈克尔·盖斯特为《版权新闻》撰文,认为“政府应该揭开《反假冒贸易协定》(ACTA) 的神秘面纱”,指出在互联网上泄露文件之前,《反假冒贸易协定》(ACTA) 笼罩在 secrecy 之中。《多伦多星报》对这些文件的报道“引发了广泛的反对,因为加拿大人担心一项可能导致对个人电脑进行侵入式搜索和加强对网上活动的监控的贸易协定”。盖斯特认为,公开《反假冒贸易协定》(ACTA) 条约草案“可能会消除人们对在边境检查站搜索 iPod 的担忧”,并且它“可能会将注意力集中在其他关键问题上,包括加强互联网服务提供商对内容的过滤,提高对链接到涉嫌侵权内容网站的责任,以及减少互联网用户的隐私”。盖斯特还认为,更大的透明度将导致更具包容性的进程,强调《反假冒贸易协定》(ACTA) 谈判排除了民间社会团体和发展中国家。盖斯特报道称,“报道显示,贸易谈判人员被要求签署保密协议,以防条约条款泄露给公众”。他认为,需要“所有利益相关者的合作来解决假冒问题”,并且“有效的策略需要更广泛的参与和定期反馈机制”。

2008 年 11 月,欧盟委员会对这些指控做出了如下回应:

有人指称,谈判是在 secrecy 的掩盖下进行的。这是不正确的。出于效率的考虑,政府间谈判涉及经济影响的议题,自然不会公开进行,谈判人员也受到一定程度的谨慎约束。然而,我们从未打算隐藏谈判的事实,或隐瞒谈判的最终目标、欧盟委员会贸易 5/6 谈判中所持立场,甚至谈判时间和地点的详细信息。欧盟和其他合作伙伴(美国、日本、加拿大等)于 2007 年 10 月 23 日在公开发布的新闻稿中宣布了启动《反假冒贸易协定》(ACTA) 谈判的意愿。从那时起,我们在许多场合谈论了《反假冒贸易协定》(ACTA),包括在欧洲议会(INTA 委员会会议)和许多参与人数众多的研讨会上。委员会于 6 月 23 日在布鲁塞尔组织了一次利益攸关方协商会议,对所有人开放 - 包括行业和公民,参加者超过 100 人。美国、澳大利亚、加拿大、新西兰和其他《反假冒贸易协定》(ACTA) 合作伙伴也做了同样的事情。

这一立场在 2010 年 3 月 10 日发生了变化,当时欧洲议会通过了一项直接针对《反假冒贸易协定》(ACTA) 的决议,批评了该协定、程序以及对基本人权的侵犯。

对自由和基本人权的威胁

许多组织签署了一封公开信,包括消费者国际EDRi(27 个欧洲民权和隐私非政府组织)、自由软件基金会 (FSF)、电子前沿基金会(EFF)、ASIC(法国 Web 2.0 公司贸易协会)和自由知识研究院 (FKI),信中指出,“《反假冒贸易协定》(ACTA) 的当前草案将严重限制欧洲公民的基本权利和自由,尤其是言论自由和通信隐私权”。

自由软件基金会认为,《反假冒贸易协定》(ACTA) 将创造一种监视和怀疑的文化。(参见http://www.fsf.org/campaigns/acta“反对《反假冒贸易协定》(ACTA)”。

哈佛大学伯克曼互联网与社会中心研究员艾伦·肖认为,“《反假冒贸易协定》(ACTA) 将制定过高的法律标准,这些标准不符合当代民主政府、自由市场交易或公民自由的原则。尽管《反假冒贸易协定》(ACTA) 的具体条款尚未确定,但谈判人员的初步文件揭示了拟议协议的许多令人担忧的方面”,例如消除“保护互联网服务提供商免受其用户行为责任的法律保障”,实际上使互联网服务提供商别无选择,只能屈服于隐私侵犯。肖还表示,《反假冒贸易协定》(ACTA) 还将促进商标和版权持有人在没有任何法律程序的情况下,对涉嫌侵权的个人进行隐私侵犯。

自由软件基金会(FSF) 发布了“反对《反假冒贸易协定》(ACTA)”,指出《反假冒贸易协定》(ACTA) 威胁到自由软件,因为它创造了一种“将生产自由软件所需的自由视为危险和威胁,而不是创造性、创新和令人兴奋”的文化。

《反假冒贸易协定》(ACTA) 还要求现有的互联网服务提供商不再托管能够访问受版权保护的媒体的自由软件;这将严重影响许多提供自由软件或托管软件项目的网站,例如SourceForge。具体来说,自由软件基金会认为,《反假冒贸易协定》(ACTA) 将使通过文件共享P2P 技术(如BitTorrent)分发自由软件变得更加困难和昂贵,而这些技术目前用于分发大量的自由软件。自由软件基金会还认为,《反假冒贸易协定》(ACTA) 将使自由操作系统用户更难播放非自由媒体,因为DRM 保护的媒体在自由软件下无法合法播放。

2010 年 3 月 10 日,欧洲议会通过了一项批评《反假冒贸易协定》(ACTA) 的决议,663 票赞成,13 票反对,认为“为了尊重基本权利,如言论自由权和隐私权”,应该对《反假冒贸易协定》(ACTA) 的内容和程序进行一些修改。

Ars Technica 的内特·安德森在其文章中指出 (http://arstechnica.com/news.ars/post/20080602-the-real-acta-threat-its-not-ipod-scanning-border-guards.html),《反假冒贸易协定》(ACTA) 鼓励服务提供商通过给予他们“免受某些法律威胁的避风港”来提供有关涉嫌侵权者的信息。同样,它规定了对版权侵权的刑事化,赋予执法部门进行刑事调查、逮捕并对可能侵犯版权的嫌疑人进行刑事传票或起诉的权力。它还允许对没有可能原因的个人进行刑事调查和侵入式搜查,在这方面削弱了无罪推定,并允许过去被视为非法搜查的行为。

由于《反假冒贸易协定》(ACTA) 是一项国际条约,因此它是一个政策洗白的例子,用于建立和实施法律变更。政策洗白允许法律条款 - 通常通过公共立法实施并受司法监督 - 通过签署方行政部门成员之间的闭门谈判来推动。一旦批准,非成员公司的企业可能被迫遵守《反假冒贸易协定》(ACTA) 的要求,因为它们将失去避风港保护。此外,使用贸易激励措施等手段说服其他国家签署条约是国际关系中的标准做法。额外的签署方必须接受《反假冒贸易协定》(ACTA) 的条款,而没有太多谈判空间。

2010 年 6 月 16 日至 18 日,华盛顿法学院举行了一次会议,来自六大洲的“90 多位学者、从业人员和公益组织”参加了会议。他们的结论于 2010 年 6 月 23 日在美国大学华盛顿法学院网站上发布。他们发现,“《反假冒贸易协定》(ACTA) 公开发布草案中的条款威胁到许多公众利益,包括谈判人员明确否认的每一个担忧”。

公开要求

2008 年 9 月,许多利益相关团体敦促 ACTA 谈判各方公开正在制定协议的文本内容。这些团体在一封公开信中指出:“由于条约文本和相关讨论文件仍然保密,公众无法评估这些以及相关担忧是否以及在多大程度上是合理的。” 这些利益相关团体包括:消费者联盟、电子前沿基金会、必备行动、知识产权正义、知识生态国际、公共知识、全球贸易观察、美国公共利益研究小组、IP Left(韩国)、加拿大图书馆协会、日本消费者联盟、国家消费者委员会(英国)和无国界医生组织的必需药物运动。


P2P 网络和协议

本章将试图概述什么是点对点,它的历史演变,技术和用途。

P2P 和互联网:一段“比特”的历史

P2P 并不是一项新技术,它几乎与互联网一样古老,它始于电子邮件协议,下一代被称为“元计算”或归类为“中间件”。P2P 协议的普遍分散化使它席卷了互联网,不仅赋予了普通用户权力,而且还节省了信息分发资源,这与旧的集中化概念截然不同。

这对于共享信息的安全性或控制可能会造成问题,或者换句话说,是对信息进行“民主化”(P2P 用于从文件共享网络下载 MP3、程序甚至电影的众所周知用途)。由于其分散的特性,流量模式难以预测,因此为其提供支持基础设施是大多数 ISP 目前面临的主要问题。

P2P 也被誉为索引深层网络的解决方案,因为大多数 P2P 技术的植入都是基于和面向运行 TCP/IP 的有线网络。有些甚至正在转移到无线应用(传感器、电话和机器人应用),你可能已经听说过一些智能地雷或机器人昆虫群的军事应用。

最终使 P2P 流行起来的是,它创造了一个公平竞争的平台,因为今天在世界大部分地区,人们很容易获得计算机和网络基础设施。我们可以轻松地成为生产者,取代旧的集中化模式,在这种模式下,大多数人口仍然是消费者,依赖于单一实体(垄断、品牌、可见度)来分发或创建服务或数字商品。这种转变无疑将降低生产和分发成本,因为可以进行数字传输的服务和产品的价格,成本现在也变得显而易见,质量也会下降,直到出现新的分类系统,这在互联网冲击后与书面媒体有关的今天可以看到。

FidoNet

FidoNet 今天仍然是一个全球性的计算机网络,用于公告板系统 (BBS) 之间的通信。它使用存储和转发系统在网络中的 BBS 之间交换私人(电子邮件)和公共(论坛)消息,以及在某些情况下交换其他文件和协议。


Clipboard

待办事项
它很好地促进了节点的自组织和准独立性,以及支持它的独裁和单一层次结构,以及它是如何主要分散和自组织的。


FidoNet 系统是基于许多小型协同交互程序开始的。这些“对等节点”与 BBS 系统一起运行,并通过脚本或某种形式的低级进程间通信与它们进行交互。它们的功能是从一个系统的某个位置自动打包/解包和导入/导出内容到另一个位置。独立性极大地简化了移植,而 FidoNet 是少数几个几乎所有 BBS 软件以及许多非 BBS 在线服务都广泛支持的网络之一。这种模块化结构还使 FidoNet 能够轻松升级到新的数据压缩系统,这在使用调制解调器通过电话线路进行通信的时代非常重要,当时长途电话费很高。

20 世纪 90 年代初,调制解调器速度的快速提高,再加上计算机系统和存储价格的快速下降,使得 BBS 越来越受欢迎。到 20 世纪 90 年代中期,FidoNet 系统已达到近 40,000 个,并且可以与世界各地的数百万用户进行通信。在广度或数量方面,只有 UUCP 接近;FidoNet 的用户群远远超过 BITNET 等其他网络。

从 20 世纪 90 年代中期开始,低成本互联网连接的广泛可用性降低了对 FidoNet 存储和转发系统的需求,因为可以以同等的成本访问世界上任何系统。直接拨号到本地 BBS 系统迅速减少。互联网连接的可用性并非普遍,尽管 FidoNet 自 20 世纪 90 年代初以来已经大幅缩减,但它仍然在世界各地使用。

电子邮件

电子邮件(通常缩写为电子邮件或电子邮件),最初是一种集中式服务,用于创建、传输或存储主要基于文本的人类通信,使用数字通信系统,最初的标准化工作导致采用简单邮件传输协议 (SMTP),该协议于 1982 年首次作为互联网标准 10 (RFC 821) 发布。

现代电子邮件系统基于存储和转发模型,在这种模型中,电子邮件计算机服务器系统代表用户接受、转发或存储消息,用户仅在消息传输或检索期间与其指定服务器连接他们的个人电脑或其他支持网络的设备。

最初,电子邮件只包含用 ASCII 字符集编写的文本消息,如今,几乎可以发送任何媒体格式,包括音频和视频剪辑的附件。


Clipboard

待办事项
完成


Peer2Mail

Peer to Mail (http://www.peer2mail.com/) 是一款适用于 Windows 的免费软件应用程序,可让您在任何网络邮件帐户上存储和共享文件,您可以使用 Gmail(Google Mail)、Walla!、Yahoo 等网络邮件提供商,它会将共享文件拆分为段,这些段将被压缩和加密,然后逐个发送到您具有管理权限的帐户。要下载文件,该过程相反。

安全

Peer2Mail v1.4 中的加密已被破解(先前版本也受到影响) - Peer2Mail 加密密码转储漏洞

Usenet

Usenet 是最初的点对点文件共享应用程序。它最初是为了利用 UUCP(Unix 到 Unix 复制)来同步两台计算机的消息队列而开发的。Usenet 将每篇文章存储在一个单独的文件中,并将每个新闻组存储在它自己的目录中。同步两个对等节点就像同步两个不同文件系统中的选定目录一样简单。

Usenet 的创建基于每个人都会接收、存储和转发相同新闻的假设。这个假设极大地简化了开发,以至于一个对等节点能够连接到任何其他对等节点以获取新闻。Usenet 碎片化为无数个新闻组,使其能够在保持基本架构的同时扩展。“每个节点存储所有新闻”变为“每个节点存储其订阅的新闻组中的所有新闻”。

在所有其他点对点协议中,Usenet 最接近 Freenet,因为所有节点都是绝对平等的,并且网络的全局映射不会由任何节点子集保留。与 Freenet 通过沿着对等节点线性链递归拉取请求的对象不同,Usenet 通过递归推送所有新闻到它们在树中的直接邻居来工作。


FTP

文件传输协议 (FTP) 可以看作是原始的 P2P 协议。即使它依赖于客户端/服务器结构,限制只在于运行的应用程序类型(客户端/服务器),因为角色是灵活的。

文件交换协议 (FXP)

Clipboard

待办事项
添加缺失信息


零配置网络

零配置网络(zeroconf)是一组技术,可以自动创建可用的互联网协议 (IP) 网络 P2P 方式,无需人工干预或特殊配置服务器。

Bonjour

Bonjour,以前称为Rendezvous。一种由苹果公司开发的服务发现协议。Bonjour 以 P2P 方式定位,例如打印机等设备,以及其他计算机和这些设备在本地网络上提供的服务,使用多播来维护域名系统记录。该软件内置于苹果的Mac OS X操作系统中,从 10.2 版开始,可以安装到使用Microsoft Windows操作系统的计算机上。Bonjour 还支持包含其他软件的组件,例如iTunes

Bonjour for Windowshttp://support.apple.com/downloads/Bonjour_for_Windows
Bonjour for Windows 包含一个插件,用于使用 Internet Explorer 发现已发布的 HTTP 服务器。如果您在本地网络上拥有具有嵌入式 HTTP(Web)服务器的 Bonjour 设备,它们将显示在列表中。

互联网中继聊天 (IRC)

互联网中继聊天,通常缩写为IRC,是一个实时基于文本的多用户通信协议规范和实现;它在网络上的用户之间中继消息。IRC 出生于 1988 年,出自Jarkko Oikarinen之手。根据 IRChelp.org(http://www.irchelp.org/irchelp/rfc/),IRC 的官方规范是在 1993 年以RFC 格式编写的。该协议在“RFC 1459:互联网中继聊天协议”中定义,这是一个非常优秀的资源,既是 IRC 协议的入门介绍,也提供了有关 IRC 协议的详细信息。

IRC 最大的体系结构单元是IRC 网络。世界上可能有数百个 IRC 网络,每个网络都并行运行,彼此独立。登录到一个网络的客户端只能与同一网络上的其他客户端通信,而不能与其他网络上的客户端通信。每个网络都由一个或多个IRC 服务器组成。IRC 客户端是一个程序,它连接到给定的 IRC 服务器,以便服务器将通信中继到同一网络上的其他客户端,但不一定是同一服务器上的其他客户端。

IRC 上的消息以块的形式发送。也就是说,其他 IRC 客户端将不会看到一个人像那样打字和编辑。一个人创建一个消息块(通常只是一句话)并立即传输该块,该块由服务器接收,并根据地址将其传递给相应的客户端,或将其中继到其他服务器,以便再次传递或中继,等等。为了了解 IRC 网络上交换的消息,您可以查看(http://www.alien.net.au/irc/irc2numerics.html),它清楚地标识了多种实现和功能。

连接到服务器后,其他客户端的寻址是通过IRC 昵称实现的。昵称只是一个唯一的 ASCII 字符串,用于标识特定客户端。尽管实现方式各不相同,但对昵称的限制通常规定它们只包含字符 a-z、A-Z、0-9、下划线和连字符。

IRC 上的另一种寻址方式,也是其最显著的特征之一,是IRC 频道。IRC 频道通常与 CB 无线电 (公民频段无线电) 频道相比。在 CB 中,据说人们在“收听”一个频道,而在 IRC 中,据说人们的客户端“加入”了该频道。发送到该频道的所有通信都会被客户端“听到”或看到。另一方面,同一网络上的其他客户端,甚至同一服务器上的其他客户端,但不在同一频道上的客户端将不会看到发送到该频道的任何消息。

有关 IRC 的最新信息可以在IRC.org 上获得,支持 IPv6 的迁移以及新的技术论文,IETF(互联网工程任务组)批准了最新的技术草案(2000 年 4 月 - 作者为 C Kalt)

     RFC 2810 : IRC Architecture
     RFC 2811 : IRC Channel-Management
     RFC 2812 : IRC Client-Protocol
     RFC 2813 : IRC Server-Protocol

这些文档已在 IRC.org 的官方 FTP 服务器上提供,可以通过ftp://ftp.irc.org/irc/server 访问。

虽然 IRC 本身不是P2P 协议,但 IRC 确实有一些扩展,这些扩展支持直接从客户端到客户端传输文本和文件,而无需任何中继。这些扩展被称为DCC(直接客户端到客户端)和CTCP(客户端到客户端协议)。

标识协议

RFC 1413 中指定的标识协议是一种互联网协议,它有助于识别特定 TCP 连接的用户,并将他们与共享同一连接的其他用户区分开来。服务器。

标识协议被设计为在用户计算机上以服务器守护进程形式工作,它接收对指定端口(通常为 113)的请求。然后,服务器将发送专门设计的响应,以标识当前用户的用户名。

大多数独立的 Windows 机器默认情况下没有运行或存在标识服务,在这种情况下,您可能需要在自己的机器上运行自己的标识服务器(有几个独立的服务器可用),另一方面,如果您在 Unix/Linux 机器上,该服务默认情况下存在。一些 Windows IRC 客户端也内置了标识服务器。

运行标识服务器的原因是,IRC 服务器出于安全原因使用该信息(不是特别有效的方法),有些服务器甚至会阻止没有标识响应的客户端,主要原因是它使通过“开放代理”或您已以某种形式入侵单个帐户但没有root权限的系统连接变得更加困难。

DCC(直接客户端连接)协议

Clipboard

待办事项
添加缺失信息


CTCP(客户端到客户端协议)协议

使用 CTCP,客户端可以实现诸如“ctcp 昵称 版本”或“ctcp 昵称 ping”之类的命令,以获取有关其他用户的有趣信息(就像mIRC 一样)。


Clipboard

待办事项
添加更多信息


机器人

IRC 系统也支持(ro)机器人,在这种情况下,它们不是真正的用户,而是从脚本(文本)文件加载到 IRC 客户端的命令集合,甚至是一个连接到 IRC 频道的独立程序。它们的作用是简化人机交互,提供某种自动化,甚至测试或实现一些 AI。

基本命令

以下是一些 IRC 的基本命令

命令 功能 示例
/attach

/server

登录到服务器 /attach irc.freenode.net

/server irc.freenode.net

/nick 设置您的昵称 /nick YourName
/join 加入频道 /join #wikibooks
/msg 发送消息(可以是私人消息,也可以是发送给整个频道的消息) 向频道发送消息:/msg #wikibooks hello world!

发送私人消息:/msg JohnDoe Hi john.

/whois 显示有关服务器上用户的信息 /whois JohnDoe
/clear

/clearall

清除频道的文本。

清除所有打开的频道的文本。

/clear

/clearall

/away 设置离开信息。注意:再次输入 /away 可从离开状态返回。 /away I'm away because...
/me 向频道发送操作。请参阅示例。 以下

/me loves pie.

将在 JohnDoe 的情况下输出到聊天中

JohnDoe loves pie.

特权用户命令

适用于半操作员、频道操作员、频道所有者和管理员的命令

命令 功能 示例
/kick 踢出或将用户从频道中踢出。您必须是半操作员或更高才能执行此操作。 将用户从频道中踢出并说明原因:/kick JohnDoe I kicked you because...
/ban

/unban

禁止用户访问频道。您必须是频道操作员或更高才能执行此操作。

解除对用户的频道禁令。您必须是频道操作员或更高才能执行此操作。

/ban JohnDoe

/unban JohnDoe

IRC 网络

安全风险

Clipboard

待办事项
添加缺失信息


软件实现

  • KVIrchttp://www.kvirc.net/)是一个基于 Qt GUI 工具包并用 C++ 编写的开源(GPL)便携式 IRC 客户端。
  • Bersirchttp://bersirc.free2code.net/index.php/home/)是一个开源 IRC 客户端(LGPL),用 C 编写,运行在 Windows 上(Linux 和 Mac OS X 端口正在开发中),它利用 Claro GUI 工具包。
  • XChathttp://www.xchat.org/)是适用于 Windows 和 UNIX(Linux/BSD)操作系统的 IRC(聊天)程序。I.R.C. 是互联网中继聊天。XChat 在大多数 BSD 和 POSIX 兼容操作系统上运行。开源(GPL),用 C 编写。
  • Irssihttp://irssi.org/)是一个 IRC 客户端程序,最初由 Timo Sirainen 编写,并在 GNU 通用公共许可证的条款下发布。它用 C 编程语言编写,在正常操作中使用文本模式用户界面。
  • mIRChttp://www.mirc.co.uk/)是适用于 Windows 的共享软件互联网中继聊天客户端,由 Khaled Mardam-Bey 于 1995 年创建并开发。最初,它只用于此目的,但由于其集成的脚本语言,它已发展成为一个可高度配置的工具,可用于多种目的。

您也可以查看维基百科 IRC 客户端列表互联网中继聊天客户端比较(未更新)...

隐形 IRC 项目

这是相对于普通 IRC 网络的一项技术进步,由 invisibleNET 创建,invisibleNET 是一家以研发为主导的组织,其主要关注点是智能网络技术的创新。其目标是在广泛使用但臭名昭著的不安全互联网上提供最高的安全和隐私标准。

隐形 IRC 项目 (http://invisibleip.sourceforge.net/iip/) 是一个三层、对等分布式网络,旨在为高速、低容量、动态内容提供安全和私密的传输介质。特点

  • 使用迪菲-赫尔曼密钥交换协议的完美前向保密
  • 持续的会话密钥轮换
  • 128 位 Blowfish 节点到节点加密
  • 160 位 Blowfish 端到端加密
  • 填充流量以阻止流量分析
  • 使用加密签名命名空间进行节点识别的安全动态路由
  • 节点级泛洪控制
  • 无缝使用标准 IRC 客户端
  • GUI 界面
  • 对等分布式拓扑结构,用于保护用户身份
  • 完全模块化设计,所有协议都支持插件

IIP 软件在 GPL 许可下发布,适用于 Windows 98/ME/NT/2000/XP、*nix/BSD 和 Mac OSX,用 C 语言编写。

即时消息

即时消息可以被认为是 P2P 的一种子类型,简单来说,它包括在网络(LAN 或 WAN)上以文本为主进行两人或多人之间即时交流的行为。这需要使用客户端程序,以便在发送消息时,在目标应用程序上显示通知,并在短时间后显示通知,使该应用程序的用户能够回复原始消息。IM 协议可以是集中式、分布式或两者兼而有之。

即时消息允许用户几乎实时地向其他用户发送简短的笔记或提醒。IM 可以,但也可能不包括任何 P2P 实现或支持额外的 P2P 服务,例如文件共享、VoIP 或视频会议,广义上说,IM 是几乎即时的消息交换,无论采取何种形式。

由于任何 P2P 网络都依赖于参与,因此支持某种 IM 实现非常重要,因为它可以作为创建社区和维持网络的一种方式。


Clipboard

待办事项
描述什么是它、未来以及它与 P2P 的关系...


安全风险

Clipboard

待办事项
对等 (P2P) 的世界


IM 软件实现

  • Gaim/Pidgin (http://pidgin.im/pidgin/home/) 开源(GPL)即时消息客户端,支持 Windows、GNU、BSD 和许多 Unix 派生产品,并与 AIM、ICQ、MSN、Yahoo!、IRC、Jabber、Gadu-Gadu、SILC、GroupWise Messenger 和 Zephyr 网络兼容。
  • Trillain (http://www.ceruleanstudios.com/) 可自定义外观的聊天客户端,支持 AIM、ICQ、MSN、Yahoo! 和 IRC,它还包含许多这些聊天程序中没有的功能。
  • BitWise IM (http://www.bitwiseim.com),加密的跨平台(Windows、Mac OS X 和 Linux)即时消息,免费但闭源,使用 wxWidgets。还支持白板、语音聊天。
  • digsby (http://www.digsby.com),一个闭源、仅限 Windows 的多协议 IM 客户端,可让您使用一个简单的、易于管理的联系人列表与 AIM、MSN、Yahoo、ICQ、Google Talk 和 Jabber 上的所有朋友聊天。
  • Google Talk (http://www.google.com/talk/),仅限 Windows XP+,闭源,支持 IM 并与 Gmail(谷歌 WEB 邮件)平台交互。


Clipboard

待办事项
AIM、ICQ、MSN、Yahoo!、IRC、Jabber、Gadu-Gadu、SILC、GroupWise Messenger 和 Zephyr

VoIP

语音 over IP 也可以被看作是 IM 的扩展,其中文本被实时音频或视频取代,技术挑战非常相似,如果不是考虑到需要传输的数据类型以及由于时间原因而需要进行的具体考虑的话。IM 应用程序也支持 VoIP 或视频会议并不罕见。

VoIP 上的安全性面临着与其他 P2P 协议和应用程序相同的漏洞和安全威胁,包括模糊测试、泛洪、欺骗、隐形攻击和 VoIP 垃圾邮件。

Napster

Napster 网络是在应用程序层使用客户端-服务器协议通过点对点 TCP 创建的。在这种情况下,服务器是一个集中式目录,它将保存所有提供文件(MP3/WMA)的索引。客户端将连接到服务器,向服务器标识自己(用户在服务器上有帐户),并将他们正在共享的 MP3/WMA 文件列表发送给服务器,使其他客户端能够搜索该中央存储库中的网络上的任何文件,然后从任何可用来源请求该文件。

Napster 协议规范

软件实现

  • OpenNap (http://opennap.sourceforge.net),一个基于 Napster 的对等网络,创建为开源(GPL),用 C 语言编写,适用于 Windows。旨在将 Napster 协议扩展到允许共享任何媒体类型,并添加将服务器链接在一起的功能。已停产。
  • audioGnome (http://www.audiognome.com),闭源但作为 Windows 的免费软件。
  • JNerve (http://jnerve.sourceforge.net),一个开源(GPL)Java Napster 服务器协议实现,其目标是跨平台兼容性。
  • Napsack (http://napsack.sourceforge.net) 是一个专门的多线程客户端,用于将 Napster 查询广播到多个服务器;目标服务器列表从 www.napigator.com 获取,并且用户可过滤(根据索引的用户、文件或吉字节数)。使用 Java 开源(GPL)。

Gnutella

Gnutella 是一个开放的 文件共享网络,最初由 Nullsoft 的 Justin Frankel 创建。这意味着,与大多数其他网络不同,任何人都可以编写一个能够访问 GNet 的客户端,只要它符合公开可用的规范。

规范由 GDF(Gnutella 开发论坛)讨论和创建,GDF 是一个面向开发人员的开放邮件列表,迄今为止已有 1000 多名成员。之后,它们记录在 rfc-gnutella 中。这样,所有程序都共享一个共同的基础,而该协议也允许客户端特定的选项。开发人员谨慎地确保尽可能大的向后兼容性。


Clipboard

待办事项
[http://rfc-gnutella.sourceforge.net/developer/testing/index.html RFC-Gnutella 0.6]


尽管有这个名字,Gnutella 并不是 GNU 软件,尽管一些 Gnutella 客户端是 GPL 许可的。它是一个开放网络,它的名字的起源更容易在吃太多 Nutella 时找到,而不是在 GNU 中。(这意味着:Gnutella 不是 FSF 的项目,也不与 GNU 软件工具相关)。虽然 Gnutella 最初被宣布为一个完全分布式的信息共享技术,但该协议的后期版本是集中式和分布式网络的混合体,包括“服务器”(超级对等体或超级对等体)和“客户端”(叶节点或节点)。

Gnutella 客户端软件本质上是一个小型搜索引擎(提供 Web 搜索引擎的替代方案)和文件服务系统。新实现的 Gnutella 还支持 Tiger 树散列 (TTH) 用于文件传输。

Gnutella 的一个兄弟值得特别关注,即使目前客户端的一些开发人员会否认这一点。它被称为 MP(Mike 的协议)或大多数 Gnutella 开发人员的 Shareaza 协议,而它的开发人员称之为 Gnutella2,这个名字让他的程序(Shareaza)获得了大量媒体报道,并在 _gdf 中造成了和正在造成很多争议和反感。

Gnutella2(Mike 的协议,G2)

由于开发人员社区未能就协议的演变达成共识,导致 Gnutella 协议 分叉 的结果。

Gnutella2 也被称为 Mike 的协议,因为第一次更改和实现来自单个开发人员 Michael Stokes。2002 年 11 月,Michael Stokes 正式且单方面地向 Gnutella 开发人员论坛 宣布创建 Gnutella2 协议,这导致开发人员之间出现分歧,并导致修改不被一些 Gnutella 应用程序支持,因为原始提案与其他供应商的概念存在冲突(特别是 LimeWire 和 Bearshare)。

现在产生的实现放弃了所有旧的 Gnutella 协议,除了连接握手,并采用了一个全新的搜索 算法。Gnutella2 通常缩写为 G2


Clipboard

待办事项
完整信息


网络模型

最初:FoF

你可以把 Gnutella 网络的原始模型想象成朋友之间互相打电话获取信息。一个人问另外五个人,每个人再问另外五个人,以此类推。在第一步之后,被联系到的人数是 5 个,第二步是 25 个,第五步是 3125 个,第七步是 78,125 个,第 14 步大约是 61 亿个。这足以联系到地球上的每一个人。原始的 Gnutella 使用了 7 步(称为 HTL:Hops To Live)。

这个模型最大的问题(除此之外还有其他问题)是你必须先成为这个圈子的一部分才能使用它。

朋友的朋友模型的问题

朋友的朋友模型有一些缺点,这些缺点源于搜索执行的方式。如果搜索结果过多,你所连接的节点(你最近的 5 个朋友)可能会超负荷,因为每个答案都必须通过它们才能到达你,因为它们不会提供你的“电话号码”,而是提供它们自己的号码,并将答案传递给你。如果你问校园里大学领导的名字,你实际上会得到数百个答案,而在网上会得到数千甚至数百万个答案。另外,如果每个问题都要传递给 75,000 到 600,000 台计算机网络中的每一个人,而每台计算机每小时只询问一次,那么它们中的每一台每秒钟都要回答大约 130 到 1600 个问题。而且它们必须将这些问题传递下去。虽然计算机很快,而且现在的互联网连接与几年前相比可以处理相当多的数据,但这对它们来说仍然太多了。想象一下,你的电话整天不停地响,全是各种各样的问题。

加入网络

为了解决连接问题,人们提出了几个解决方法。

第一种方式:Pong 缓存

Pong 缓存是指节点(即你)询问它的朋友他们的朋友是谁。这意味着你的朋友把你介绍给他们的朋友,特别是他们非常看重的朋友,你把你所有的新地址都记在你的电话簿里,这样你就知道你的朋友不在家的时候该给谁打电话(有点像一直在参加鸡尾酒会)。这很简单,并且有给你提供非常可靠的联系人的优点,但如果没有知道至少一个已经在网络中的人,就无法加入网络。这意味着你可以随时回到网络中,但如果你以前从未连接过,就无法连接。

第二种方式:记住谁回答了

第二种方式非常简单。当你 5 个朋友中的一位回电话说 Smith(你以前不认识他)知道一些事情时,你记下她的电话号码。当你下次把他加入你的 5 个直接联系人之一时,你更可能很快获得你的信息,因为他很可能有一些与你兴趣相似的朋友(他从哪里得到的信息呢?),而这些人比随机挑选的人更有可能拥有你的信息(至少当你询问与你上次问题相似的问题时)。缺点是这些联系人可能并不经常在家,所以你可能会找到一个知识渊博的联系人,但你可能再也不能联系到他了。第一次仍然无法加入网络。现在我们来看看 Gnutella 的最新发展之一:GWebCaches。我会在下文中讨论它们。

第三种方式:GWebCaches

为了便于理解,GWebCache 是一个将她的电话号码放到报纸上,并记录下打电话者的联系人。当你离开一段时间,不再确定你的联系人是否还有相同的手机号码时,你可以拨打公开的联系人。在提供号码之前,他/她会问你:“你认识其他公开的联系人吗?如果认识,请告诉我他们的号码。”之所以这样做,是因为他们无法阅读所有的报纸,而你一直都在做这件事,而且不需要花太多力气。这样,他们就可以互相跟踪。然后联系人会给你一些电话号码,并记下你的号码(以便提供给其他人)以及他/她知道的其他公共联系人的地址(GWebCaches)。

这大致就是 GWebCaches 的工作原理。GwebCaches 只有在第一次连接时才是必需的。当你的本地地址簿为空时,你可以使用它们。它们不能优先于你的本地地址簿。正如我所说,它们是 Gnutella 的一项新发展,因此我现在将讨论 Gnutella 中的一些最新变化和未来计划。

超节点和叶子节点

改变谁给谁打电话

你一定有一些朋友认识很多其他人,你可以问他们,并确定他们会知道能给你答案的人。在 Gnutella 中,这些节点被称为超节点。超节点本身不需要知道很多东西,它只需要知道谁知道它。在 Gnutella 中,这意味着一个好的超节点不需要拥有很多文件就能使网络受益。如果你害怕分享很多东西,你应该在 Gnutella 中成为一个超节点。

更详细的说明

在计算机世界中,就像在现实世界中一样,有一些联系人可以处理更多的电话,而另一些联系人则无法经常打电话(或者负担不起账单)。在现实世界中,这是因为他们有更多空闲时间。而在计算机世界中,这是因为他们拥有更快的连接(如 DSL、电缆、T1、T3 或类似的宽带)。开发者意识到这一点后,决定改变网络拓扑结构,这意味着当你在外面绘制网络时,网络看起来是什么样的。现在,你不再只是给任何朋友打电话,而是只给那些你认为有时间接听你的电话并将其传递给其他人的朋友打电话。为了避免你接到太多电话,他们会问你拥有哪些类型的信息,或者用更人性化的话来说,你的专业领域是什么。在计算机世界中,这意味着你的计算机将所有文件的列表发送给超节点,这就是我们对这类联系人的称呼。该列表包含你所有共享文件(你决定让其他人下载的文件)的摘要(哈希字符串),下载者可以根据这些摘要验证这些文件确实是他们想要的。每当一个电话到达超节点时,它会检查你是否可能知道答案,只有在那种情况下才会给你打电话。

这些超节点与其他节点有许多连接,这意味着它们拥有一个非常大的地址簿。通常,它们会与地址簿中其他 16 个超节点保持联系,并将问题发送给它们,这些超节点会将问题发送给另外 16 个超节点。此外,它们还拥有大约 16 个叶子节点,这些叶子节点不能或不想打很多电话,超节点会接受来自它们的电话,并且知道它们的专长或文件。对于人类世界来说,专长就是指它们所拥有的信息。

这可能看起来对超节点来说是一个不公平的交易,因为它们为保持网络完整而投入的资源远远多于叶子节点,但事实并非如此。虽然超节点(UP)将大部分时间用于维护网络运行,但叶子节点专门负责收集和传递信息。因此,当任何一个超节点或叶子节点想要知道某件事时,它只需发起一个电话,一个叶子节点专家就可以向它们解释。这样,人们就会专门从事某个领域,从而使所有人都能获得更多好处。

超节点间查询路由协议

虽然有了超节点,并非每个人都需要参与向其他人发送问题,人们可以专门负责共享他们的信息,但超节点仍然会将每个问题发送给每个人,而不会考虑该超节点是否拥有包含这些文件的叶子节点。这听起来很正常,因为超节点如何知道其他超节点拥有哪些文件呢?答案再次来自现实生活。一个普通人认识她的朋友,并且知道他们中哪些人可能知道某个特定问题的答案,哪些人肯定不知道。在现实生活中,这通常是通过友好的聊天来完成的。

现在,计算机通常不会闲聊,因此它们不会通过这种方式交换这些信息。因此,开发了查询路由协议。在这个协议中,每个叶子节点都会告诉它的超节点它拥有哪些文件,但它不会使用文件名(因为文件名会占用太多空间),而是将文件名中的每个单词都保存为数字(毕竟这些是计算机)。你可以想象这个过程就像玩战舰游戏一样(这些数字形成了一个带有两个坐标的棋盘)。超节点不会将所有问题都发送给叶子节点,而只发送那些它可能能够回答的问题(击中了一艘战舰),这样叶子节点就会收到更少的无用电话。

既然这会减轻叶子节点的压力,为什么不扩展它呢?正是这样做的。现在,所有超节点都将其棋盘发送给其直接邻居。它们只将那些还有一步就能完成的搜索发送给那些棋盘上击中了一艘战舰的超节点。这意味着,搜索的最后两步将只在有可能产生结果的情况下才会进行。你可以很容易地理解为什么这会大幅减少带宽使用:想象一棵树,一棵普通的树,而不是那些数学构造的树。如果你试图数树叶,你几乎不可能数清。但如果你把树叶拿走,只数树枝,你的工作量会少很多。如果你现在拿走所有这些小树枝,你就可以真正开始数它们了。QRP 并没有把所有的树叶和小树枝都拿走,而是去掉了那些无法给你答案的树叶和小树枝。由于每个问题必须经过的部分都会消耗带宽,而且叶子节点比树枝多得多,在许多情况下,去掉最后两步中的很多步骤(意味着去掉很多叶子节点和小树枝),就会减少计算机需要发送的问题数量(叶子节点比树枝多得多)。这个例子并不适用于整个 Gnutella 网络,但在这里它很适合。

搜索:动态查询

现在,虽然 Ultrapeer 模型和 QRP 部分解决了您没有时间向他人正确解释某事,或得到解释的问题,因为电话不断响起,询问您不知道答案的问题(或者用技术语言来说:因为网络流量超过了您的连接速度),但仍然存在另一个问题,如果您仔细观察,可能通常甚至不会被发现。在现实世界中,Ultrapeer 会寻找一位能够为您提供信息的专家,直到他/她找到一位为止,然后停止。在计算机世界中,问题会不断传递下去,传递给尽可能多的联系人,而不会查看是否已经有答案。

动态查询改变了这一点。现在 Ultrapeers 一次询问另一个 Ultrapeer,等待一段时间,看看他们是否得到答案。当他们得到足够多的答案感到满意时,他们就会停止询问更多。这听起来很自然,但对于 Gnutella 来说却是一个很大的进步,因为它节省了浪费在非常流行的问题上的资源。我将再次以大学领导为例:现在,如果您询问大学领导,您的 Ultrapeers 会首先查看他们是否直接认识能够回答您问题的人。然后,他们会简单地提供一些他们认识的住在校园里的人的号码。您仍然会收到不止一个答案,因为他们会给您不止一个号码,因为他们不能确定您是否能联系到他们给您的所有号码。但是您不会收到成千上万的电话号码(来自校园中每个学生的号码),首先是因为 Ultrapeers 在一些没有给您额外好处的事件上浪费时间,其次,因为您永远无法打给所有那些人,第三,因为那样您可能无法再联系到您的 Ultrapeers,因为他们会忙于接听来自其他告诉他们号码的人的回电,并将您的问题发送给其他 Ultrapeers。

无需搜索即可查找资源,即下载网格

现在您可能会说,“但我无法从这三个人那里下载,因为其他人已经下载了。我想获取所有我可以下载的地址。”(您并不是唯一有这种想法的人。我也是这样想的。)通过观察现实世界,我们也可以找到解决这个问题的方法,而无需浪费太多资源。在那里(在现实世界中),如果您要求一位专家向您解释某事,而这位专家很忙,他或她会认识一些其他专家(因为他们彼此认识),他们可能现在有更多时间。

将此应用于 Gnutella 并不像 Ultrapeer-Leaf 模型或动态查询模型那样容易。但程序员找到了解决方法。正如我在动态查询模型中所述,您将获得不止一个可以询问的号码。现在,当您致电应该知道答案的人时,您也会向他或她提供您知道的其他号码。这样,专家们就会相互认识(与我之前提到的 GWebCaches 一样,它们会了解彼此)。由于所有询问者都会带来自己的号码集,专家们会了解越来越多的其他地址,当您要求他们解释,而他们现在没有时间时,他们会将这些地址提供给您(即使他们有时间,他们也会这样做,以防万一他们会被打断,因为在 Gnutella 中,您可以从多个来源同时下载,就像您可以在 overnet 网络中一样(该网络将此方法发挥到极致,但实际上仅对大型文件有效)。此外,专家们也会在您知道足够多的知识可以教导他人后,将您添加到他们备用联系人的号码中。

这就是为什么很多人从您那里下载您刚刚下载的文件的原因。

下载

群集和部分文件共享

群集的解释很快(但在朋友的朋友模型中很难实现,所以我只在此部分省略了它)。它的工作原理是简单地同时从不止一个人那里获取一个文件。该文件被简单地分成几个部分,就好像您想从一些朋友那里得到一本书,他们每个人只复制了几页一样。当您要求每个人复制书的不同部分时,您将获得完整的书,而他们每个人只需要做很少的工作(如果一个人没有时间去做,另一个人可以做)。

群集与下载网格和部分文件共享 (PFS) 配合使用效果最佳,PFS 允许人们共享他们正在下载的文件,因为他们可以共享他们已经拥有的部分,而他们仍然从其他人那里下载。您可以复制您拥有的那些页,而无需拥有整本书,因为您的页都是编号的,朋友可以向您询问特定页码。

通过防火墙下载

想象一下,有些人无法接听电话,但只能打电话给其他人(可能是因为他们只使用公用电话,或者他们的号码没有显示在您的电话上,他们不喜欢给出自己的号码,因为他们不喜欢接到推销电话,或者接到恐吓他们的电话)。在 Gnutella 中,这些是位于防火墙后面的计算机。它们可以打电话给其他人并从他们那里获取信息,但没有人可以打电话给他们。

解决方案是让防火墙后的用户定期打电话给他们的 Ultrapeers,当有人想打电话给他们时,他或她只需打电话给 Ultrapeers,然后 Ultrapeers 同时接听两部电话,一部是防火墙后的用户(无法接听电话的用户)接听的电话,另一部是您拨打的电话。这样您就可以与防火墙后的用户通话,但这需要同时进行两通电话,这意味着在计算机世界中,它需要两倍的带宽。防火墙后的用户始终保持与 Ultrapeers 的连接,Ultrapeers 仅转发信息或数据。

有一些计划可以帮助 Ultrapeers 节省这种额外的带宽使用,方法是让其他人来连接电话。然后,当有人想从防火墙后的专家那里获取信息时,Ultrapeer 会告诉防火墙后的用户和询问者打电话给第三个人。然后,这个人会同时接听两部电话。在 Gnutella 中,大多数人拥有三到五部电话,所以这不是什么大问题。这些电话连接器很可能被称为路由节点。

文件磁力链接

文件磁力链接偏离了朋友的朋友模型。它们是网页上的链接,您只需点击它们,它们就会告诉您的文件共享程序搜索 Gnutella(实际上还包括其他网络)以查找特定文件,并下载该文件。

您可以想象它就像报纸上的一篇文章,它告诉您一些信息,这些信息会让您的 Ultrapeers 获得您要从他们那里学习的专家的确切信息。在现实世界中,您很可能会找到一位专家,以及从他或她那里学习的人。

使用磁力链接,您可以避免获取不良文件,因为它们使用哈希字符串,这就像专家会告诉您的信息的摘要一样。如果他或她开始告诉您废话,您会立即发现它不符合摘要。在 Gnutella 中,程序会请求那些拥有这些文件的人已分配了相同摘要(即哈希字符串)的文件。下载后,程序会进行自己的摘要并检查它们是否确实匹配。如果不匹配,它会告诉您文件已损坏。来自相同文件的摘要始终完全相同,因为它们是通过特定的数学方法完成的,这些方法在给出相同数据(即信息)时总是得到相同的结果。

与磁力链接不同,KaZaA 链接和 eDonkey 链接并不安全,因为它们使用的方法很容易被伪造文件欺骗(例如,KaZaA 链接会请求一种类型的摘要,该摘要只检查信息的开头和第一部分,而忽略所有其他内容,以便更快地创建摘要。当然,很容易给您提供虚假信息,因为他们只需要在开头说真话,然后就可以随意撒谎或虚构。有关磁力链接的更多信息,请访问 Magnet-UriMagnetLink.org

现在有一个新的磁力链接版本:KaZaA 磁力链接。遗憾的是,这些链接并不安全,因为它们使用的是 KaZaA 哈希系统(不完整的摘要),并进行了一些更改(它们现在添加了另一个更小的摘要,该摘要可能会告诉您有关缺失部分的信息,但它们没有公布如何创建它)。如果 KaZaA 磁力链接提供有关搜索词的信息,它们可能与 Gnutella 配合使用,但不能保证您能获得他们提供的內容。如果您在链接中发现“kzhash”一词,它可能不安全(除了名称放置得有点不对之外)。

Lime Wire LLC

LimeWire 是一个用于跨平台 Java 平台点对点文件共享 客户端,开源(GPL),它使用 Gnutella 网络查找和传输文件。它还鼓励用户支付费用,然后用户就可以使用 LimeWire Pro。它还通过使用 C++、Boost 许可的 libtorrent 库支持 BitTorrent 协议。

软件实现

要加入 Gnutella 网络,您可以使用下面列出的客户端之一

  • Deepnet Explorerhttp://www.deepnetexplorer.com/)是一个带有 RSS 新闻阅读器、P2P 客户端集成(Gnutella)和钓鱼警报的浏览器,闭源,仅限 Windows,免费软件。
  • Phex 是一个跨平台 Java 客户端。
  • XoloX
  • Gnucleus - Gnutella、Gnutella2 (G2) 使用 C++ 和 Microsoft MFC 库编写。核心是 LGPL,并使用 Windows COM-base 与 GPL 前端通信。
  • Gtk-Gnutella,GPL,适用于 GNU/Linux。
  • Hydranode(多协议,在 eDonkey2000/eMule 部分中引用)
  • ezpeer 是一个中国客户端。
  • pp365 是一个中国客户端。
  • POCO 是一个中国客户端,使用 GnucDNA。
  • Bearshare 是一个针对 Window 的免费闭源软件。
  • CocoGnut 适用于 RISC OS。
  • Swapper 是一个针对 Windows 的免费闭源软件,使用 .NET。
  • TrustyFiles 适用于 Windows,支持 FatTrack (KaZaA)、Gnutella 和 G2。
  • Shareazahttp://shareaza.sourceforge.net/)是一个开源(GPL)软件,用 C++、MFC 和 ATL 编写。多网络点对点文件共享客户端,支持 Gnutella2 (G2)、Gnutella、eDonkey2000/eMule、BitTorrent、FTP 和 HTTP 协议。
  • FrostWirehttp://sourceforge.net/projects/frostwire/)是 Gnutella 网络的点对点 (P2P) 信息共享客户端。该项目与 LimeWire LLC 无关。它是 Limewire Java 实现的一个分支,承诺永远不包含内容过滤器。FrostWires 的源代码(Java)根据 GNU GPL 开源许可证授权。更新版本已迁移到使用 BitTorrent 协议。
    • Acquisition 是一个基于 Limewire 核心的 Mac OS X 客户端,用 Cocoa 编写,共享软件。
    • XNap 是一个使用 Limewire Core 用于 Gnutella 的 Java 多网络程序。

Ares Network

Ares(软件实现)开发于2002年中期,最初使用Gnutella网络。运行六个月后,它切换到自己的网络,该网络包含叶子节点和超级节点的P2P架构。由于协议难以识别,Ares有时是唯一可以在受限网络(例如某些大学校园)上运行的P2P客户端。

软件实现

  • Areshttp://aresgalaxy.sourceforge.net/)是一个用Delphi/Kylix实现的聊天/文件共享P2P软件。它基于一个组织成叶子节点和超级节点的网络,形成了一种具有广播式搜索的拓扑结构。Ares可以通过DHT技术提供更广阔的搜索范围,使用MIME过滤器与DHT引擎交互。Ares用户还可以加入聊天室或创建频道。它适用于32位MS Windows操作系统(NT/2000/XP),并根据GPL许可证(GNU通用公共许可证)发布开源代码。从1.9.0版本开始,允许防火墙后的两个对等节点之间进行数据共享。从1.9.4版本开始,Ares包含了对BitTorrent协议的支持。从1.9.9版本开始,Ares Galaxy支持SHOUTcast网络广播电台。
已停止的实现
  • Warez P2P是一个专有的P2P文件共享服务,它使用Ares网络,并提供类似于Kazaa的服务。在1.6版本之前,Warez P2P是Ares Galaxy的克隆,由意大利开发人员Alberto Trevisan创建,但从那时起,它一直由Neoteric Ltd独立开发,直到最近才被停用。

直接连接

直接连接是一种点对点文件共享协议/网络,但它使用中心服务器,这种对中心点的依赖也体现在旧的Napster网络中,每个服务器都构建了一个独立的网络(不像eMule那样是混合型)。需要注意的是,一些客户端现在也正在实现DHT,这将导致使用的网络统一。直接连接协议最初由Jonathan Hess开发,用于在Neo-Modus直接连接(NMDC)v1上使用,该协议于2001年9月发布,并在2003年7月发布的NMDC v2中部分使用。

直接连接将服务器定义为HUB。客户端连接到中心HUB,该HUB包含连接到它的客户端或用户列表。然后,用户可以搜索要下载的文件,或者与其他在场(在该服务器上)的用户聊天。

直接连接还为文件传输实现了Tiger树哈希(TTH)。

NMDC协议

由Jon Hess在Neo-modus协议镜像(http://www.teamfair.info/wiki/index.php)上创建

ADC协议

ADC协议(http://dcplusplus.sourceforge.net/ADC.html)类似于Neo-Modus直接连接(NMDC)协议。它包含一个用于客户端-服务器网络的文本协议,创建的目的是简单但可扩展。

Jon Hess通过Neo-Modus直接连接客户端/HUB贡献了最初的直接连接想法,为该协议的创建做出了贡献。其他主要贡献来源是Jan Vidar Krey的DCTNG草案,该草案导致了Dustin Brody、Walter Doekes、Timmo Stange、Fredrik Ullner、Fredrik Stenberg等人的后续工作。

HUB软件实现

  • DConnect Daemonhttp://www.dc.ds.pg.gda.pl/)是一个用C语言编写的开源直接连接HUB(作为守护进程运行)。目前可以在GNU Linux和FreeBSD下运行,但计划使其能够在所有Unix和Windows系统上运行。作为守护进程,它在后台运行,不需要任何Xwindow系统。支持telnet管理控制台。

客户端软件实现

eDonkey

eDonkey是eDonkey网络(也称为eDonkey2000网络或eD2k)的原始客户端,由MetaMachines(Sam Yagan和Jed McCaleh)创建和管理,总部位于纽约市。它拥有一个稳定的P2P社区,该协议比BitTorrent更早,诞生于2002年,就在Napster关闭后不久,并与FastTrack网络竞争。2005年6月,娱乐行业在美国最高法院取得了胜利,最高法院裁定,如果文件共享开发人员诱导了这种行为,他们可以被起诉侵犯版权。2005年9月,美国唱片业协会(RIAA)向包括MetaMachines在内的多家商业P2P开发商发送了多封停止和终止信函,由于没有资金来应对最高法院裁决的解释,Sam Yagan承认失败,因为他向美国参议院司法委员会作证。

2006年9月11日,用户无法获得eDonkey2000客户端软件,2006年9月12日,MetaMachines以3000万美元(美元)达成和解,该协议结束了MetaMachines在未来处理任何P2P技术的任何途径...

eDonkey网络是中心化的(因为它依赖于服务器)以提供内容的去中心化共享(未存储在服务器上),仍然有许多软件实现支持该网络,最流行的是eMule。

协议

"eMule协议规范"(http://sourceforge.net/project/showfiles.php?group_id=53489&package_id=145950)由Yoram Kulbak和Danny Bickson编写,DANSS(分布式算法、网络和安全系统)实验室 - 希伯来大学计算机科学与工程学院 - 以色列 - 2005年1月20日,由Emule项目提供的PDF文档。

Kademlia

由eDonkey2000的创建者Jed McCaleb启动,作为Overnet项目,以克服对服务器的需求。Overnet实现了Kademlia算法。2006年末,Overnet及其所有Overnet拥有的资源被关闭,这是因为来自RIAA和其他机构的法律诉讼。然而,由于Overnet的核心是去中心化的,Overnet客户端仍然能够以有限的功能运行。

KadC库(http://kadc.sourceforge.net/)提供了一个开源C库,用于在基于Kademlia的分布式哈希表中发布和检索记录。

一篇名为Kademlia:一种基于XOR度量的点对点信息系统的较旧论文,也是关于该协议的信息来源。

该网络现在被称为Kademlia,并得到许多旧eDonkey/Overnet客户端实现的支持,尤其是eMule项目。Kademlia是一个研究工作,旨在基于XOR度量路由实现一个功能齐全的点对点系统。特别令人感兴趣的是,对高效数据存储和查询的目标;匿名性;网络、内容和用户安全以及身份验证。

eMule内容数据库

eMule mascot.
eMule吉祥物。


http://content.emule-project.net/)由eMule项目团队为eDonkey2000和Kad网络用户提供的一项服务,使免费内容可供下载,并易于查找。内容数据库已于2004年新年左右上线。

软件实现

  • eMulehttp://www.emule-project.net/)是一个基于eDonkey2000网络的文件共享软件实现,但它提供了比标准客户端更多的功能,开源C++/MFC,仅限Windows,根据GPL授权(http://sourceforge.net/projects/emule/
  • Xmodhttp://savannah.nongnu.org/projects/x-mod/)Xmod项目基于eMule客户端,在GPL下发布开源代码。
  • xMulehttp://www.xmule.ws/)即X11 Mule,旨在将eMule的克隆带到几乎所有主要的Unix平台,特别侧重于Linux。使用wxWidgets进行GUI的C++,在GPL下发布开源代码。
  • MLdonkey ( http://mldonkey.sourceforge.net ) 是一款跨平台、多网络的 P2P 实现。它支持多个大型网络,例如 eDonkey、Overnet、Kademlia、Bittorrent、Gnutella (Bearshare、Limewire 等)、Gnutella2 (Shareaza) 或 Fasttrack (Kazaa、Imesh、Grobster)。网络可以启用或禁用。搜索在所有启用的网络上并行执行。对于某些网络,每个文件可以从多个客户端同时下载。
  • AMule ( http://www.amule.org/wiki/ ) 该项目基于 eMule 客户端,也使用 C++,但也使用 wxWidgets 和 crypto++。在 GPL 下开源,目前支持 Linux、FreeBSD、OpenBSD、Windows、MacOS X 和 X-Box,无论是在 32 位还是 64 位计算机上。
  • eMule Bowlfish ( http://pwp.netcabo.pt/DeepSea/ ),另一个基于 eMule 的项目,旨在提供一个受限的网络解决方案。
  • Hydranode ( http://hydranode.com/ ) 一个模块化、插件驱动的点对点客户端框架,其设计理念是真正的多网络下载(支持 eDonkey2000 和 Bittorrent 网络)。在 GPL 下开源,支持 Linux 和 Windows。
  • Shareaza ( 多协议,在 Gnutella 部分提及 )

BitTorrent

BitTorrent 是一种协议 ( BitTorrent 协议规范 v1.0 ) 由 Bram Cohen 创建,源于 Gnutella 的概念,但主要设计用于通过互联网分发大型计算机文件并允许 WEB 集成,事实上,它旨在替代旧的集中式 HTTP 下载,而不是一个完整的 P2P 网络。因此,它最初避免了通过网络传输搜索请求的限制,最近随着类似于 eDonkey 解决方案的 DHT 的采用,这种情况已经得到改善,该解决方案允许在整个网络中进行搜索。使 BitTorrent 成为一个两层 P2P。

BitTorrent 用于分发合法内容,但本身并没有对共享材料的版权状态进行任何区分,与任何其他分散式网络一样,这允许大规模侵权。Bram Cohen 和 Ashwin Navin 于 2004 年 9 月 22 日创立了 BitTorrent, Inc.,总部位于 旧金山加利福尼亚州,是一家私营的 美国 公司,开发变革性的技术和产品,继续推动更有效和开放的互联网的发展,也通过研发和开放规范促进 BitTorrent 协议的开发。

BitTorrent ( http://www.bittorrent.com ) 也是该协议原始实现的名称。它最初是一个 Python ( 源代码和旧版本 ) 应用程序,现在被称为 BitTorrent 主线,它导致了一个功能齐全的商业企业。BitTorrent.com 是 BitTorrent Inc. 的一部分,现在已成为使用 BitTorrent 协议下载娱乐内容的目的地。该网站提供快速、按需访问最全面的授权目录,其中包含数千部电影、电视剧、音乐和游戏,但它也为内容创作者提供了一个发布平台,让他们可以在最具代表性的主要电影工作室、电视台和唱片公司的作品中列出自己的作品。

BitTorrent Inc. 还通过更广泛的标准机构(如互联网工程任务组 (IETF) 的 LEDBAT 工作组 ( http://www.ietf.org/html.charters/ledbat-charter.html ))做出贡献。BitTorrent, Inc. 拥有 BitTorrent 主线和 µTorrent 客户端,以及 BitTorrent DNA (Delivery Network Accelerator),这是一种基于 BitTorrent 协议的免费内容交付服务,它将用户贡献的带宽的力量带给了传统的内容发布者,同时让发布者完全控制他们的文件。

BitTorrent 协议本质上是点对点的,它最初的创新方法在于不以创建真正的分布式网络为中心,而是以特定的共享资源为中心,在这种情况下是文件,最好是大型文件,因为用户直接相互连接以从其他对等方(也已下载文件或文件的一部分)发送和接收大型文件的片段。然后将这些片段重新组装成完整的文件。由于用户相互下载,而不是从一个中央服务器下载,因此下载大型文件的带宽负载在用户下载的许多来源之间分配。这降低了托管大型文件的用户的带宽成本,并提高了下载大型文件的用户的下载速度,因为该协议利用了每个下载者的上行带宽来提高整体分发的效率,并在下载者方面获得优势。但是,有一个中央服务器(称为跟踪器)协调所有此类对等方的操作。跟踪器只管理连接,它对正在分发的文件内容一无所知,因此可以使用相对有限的跟踪器带宽支持大量用户。

BitTorrent 的主要理念是用户应该在下载(接收入站)的同时上传(传输出站)。通过这种方式,网络带宽可以得到最有效地利用。与其他文件传输协议相比,BitTorrent 的设计在对特定文件感兴趣的人数增加时效果更好。

BitTorrent 正在重新定义人们分享和搜索内容的方式,并且正在变得越来越流行,用于下载电影、电视剧、完整的音乐专辑和应用程序(它在性能方面优于其他替代方案),因为它非常特定于文件,并且在 P2P 内容的“新”因素方面获得了优势,更多用户意味着更快的速度,但它不是罕见文件或分发不被高度追捧的内容的最佳解决方案。

要下载使用 BitTorrent 托管的文件,用户必须有一个 BitTorrent 客户端,而要发布文件,用户必须运行一个跟踪器。

2004 年 11 月,BitTorrent 占互联网所有流量的惊人 35%,2006 年,根据英国网络分析公司 CacheLogic 的数据,BitTorrent 协议已上升到互联网所有流量的 60% 以上。因此,一些 ISP 正在进行流量整形,也称为带宽限制,这意味着他们在其网络中降低了协议优先级,并降低了其整体性能,这导致了两种类型的响应,一些 ISP 正在投资升级其网络并为该协议提供本地缓存,而该协议的实施者开始通过加密和随机化来对抗拒绝适应的 ISP,这种适应的必要性以及由于偏离其创建者的愿景而导致的越来越高的流行度,正在将协议的演变越来越多地交到独立开发人员手中。

BitTorrent 系统高度依赖于对等方的积极参与,因为它的唯一目标是共享文件。罕见和“旧”内容在系统中不容易找到,只有高度追捧的内容才能从这种 P2P 实现中获益。小文件也无法完全从中受益,因为复制所需的时间太短,在某些极端情况下甚至会降低体验。

内容索引器

有许多不同的 BitTorrent 网站索引内容,每个网站都提供有关通过 BitTorrent 协议分发的文件的相关信息。它们通常包含多个种子文件和这些文件的索引。在典型情况下,用户会进入这样的网站,并根据其他用户在网站上发布的种子文件描述,浏览或搜索他们想要的内容。如果找到包含所需内容的种子文件,用户就可以下载该种子文件。

合法种子 ( http://www.legaltorrents.com ),一个包含 Creative Commons 许可的、合法下载的、可自由分发的创作者认可文件的集合,从电子/独立音乐到电影和书籍,这些文件已通过 BitTorrent 提供。每个获取 BitTorrent 客户端并下载的人都有助于贡献更多的带宽。

还有 OpenBitTorrent ( http://openbittorrent.com )、OpenBitTorrent.kg ( http://www.openbittorrent.kg )、myTorrentTracker ( http://www.mytorrenttracker.com ) 和 trackhub ( http://trackhub.appspot.com ),它们都是 BitTorrent 跟踪器,任何人都可以免费使用它们来共享文件。您不需要在任何地方注册、上传或索引种子文件,您只需在种子文件中包含跟踪器 URL 即可。

其他

这些网站各有特色,方便用户搜索。请参见维基百科的 BitTorrent 网站比较 页面。一些大型 BitTorrent 跟踪器网站被关闭,原因是担心版权持有者(主要是大型商业利益代表)的问题。虽然从短期来看,这确实可以防止大规模侵犯版权,但它也给合法使用带来了困难,而且还存在虚假通知的问题,即声称侵犯了他们并不拥有的作品的权利。从长远来看,这无助于解决问题,并迫使该协议以避免这种类型的破坏的方式发展。人们适应这种压力的一种方法是创建仅通过邀请才能访问的私人跟踪器。

协议

如前所述,BitTorrent 是一种用于分发文件的协议。它通过 URL 识别内容,旨在与 Web 无缝集成。与普通 HTTP 相比,它的优势在于,当多个下载者同时下载同一文件时,每个下载者都可以互相上传,这使得文件源能够以较小的负载支持大量下载者。( http://www.bittorrent.com/protocol.html )。BitTorrent 借鉴了其他 P2P 协议的一些术语,但也创建了一些新的术语(参见维基百科页面 BitTorrent 词汇表 了解更完整的列表)。

种子文件
“种子文件”可以指 .torrent 元数据 文件,也可以指它描述的所有文件,具体取决于上下文。种子文件,正如 BitTorrent 规范中定义的那样,包含多个 跟踪器 的 URL,这些跟踪器协调蜂群中对等节点之间的通信,并提供有关所有可下载文件的完整性元数据,包括其名称、大小和 校验和。它还可以包含在 BitTorrent 规范的扩展中定义的附加元数据,这些扩展被称为BitTorrent 增强提案。例如,这些提案中的元数据可以用于说明种子文件的创建者和创建时间。
索引
索引 是一个 .torrent 文件列表(通常包括描述和其他信息),由一个 网站 管理并可供搜索。索引 网站有时也被称为跟踪器,但它跟踪的是“种子文件”,而不是 BitTorrent 跟踪器)。

该协议部分依赖于集中式跟踪器,因为需要跟踪器。

客户端
该程序可以通过 BitTorrent 协议实现 P2P 文件共享。它仍然表明该协议的半集中化性质,在协议定义中,该术语有时会被“对等节点”(例如:peer_id)代替,例如 Gnutella 将参与者始终称为对等节点或节点,并将实现者称为供应商。
跟踪器
跟踪器 是一台服务器,负责跟踪蜂群中哪些是种子节点,哪些是对等节点。客户端会定期向跟踪器报告信息,并交换接收有关其他客户端的信息,以便它们可以连接。跟踪器不直接参与数据传输,也不拥有文件的副本。
抓取
当客户端向跟踪服务器发送请求以获取有关种子文件统计信息的请求时,例如与谁共享文件以及其他用户共享的程度。

随着 DHT(分布式哈希表)的采用,BitTorrent 协议开始变得不再仅仅是围绕单个资源的半集中式分发网络,它变得更加分散,并消除了静态控制点(跟踪器),这是通过依赖 DHT 和使用 PEX 扩展实现的。允许易变的对等节点也充当跟踪器,但即使这解决了对静态跟踪器服务器的需求,网络仍然围绕内容集中。对等节点没有默认能力在该上下文中之外相互联系。

种子节点
种子节点 是一个拥有种子文件完整副本的客户端,并且仍然提供上传。种子节点 越多,获得更高下载速度的机会就越大。如果种子节点播种下载的完整副本,它们应该能够获得更快的下载速度。

播种规则,就像我们在超级播种的特殊情况下看到的那样,是客户端在一般配置中本地实现的变量和算法,通常以某种形式开放供用户控制。这些规则控制并可能用于优化选择要播种的可用种子文件,而不是仅仅启动列表中的下一个种子文件,并根据播种等级对种子文件进行排序。

播种等级
是一个优先级评级,它是根据客户端的活动播种规则进行计算得出的,用于根据种子文件的稀缺程度对它们进行优先级排序。它生成一个优先级队列,其中可用的种子文件被分配到可用的开放传输时隙。几个因素可以影响播种等级
  • 种子比例。比例越低,种子文件越稀缺,播种等级应该越高,优先级应该更高,优先播种罕见的种子文件。
  • 种子数量。与种子比例类似,但不仅考虑完整的种子,还考虑对种子文件感兴趣的任何客户端的数量,效果相反,优先考虑更大的蜂群和需求量高的种子文件。
  • 定时轮换。种子文件将轮流进入和退出播种模式。每个种子文件都会被赋予一段播种时间。
  • 默认。每个种子文件将根据它们添加到播种列表的顺序进行播种。
宣布
与“抓取”类似,但意味着客户端还宣布它希望加入蜂群,并且服务器应该将其添加到该蜂群的对等节点列表中。
可用性(也称为分布式副本)
这是一个在分布式系统中常用的术语,在本例中,它指的是客户端可用的完整文件副本数量。每个种子节点都将此数字增加 1.0,因为它们拥有一个完整的文件副本。连接的对等节点如果拥有文件的一部分,则会将其分数添加到可用性中,如果其他对等节点没有拥有文件的这部分,则会这样做。
示例:一个拥有 65.3% 下载文件的对等节点会将可用性增加 0.653。但是,如果两个对等节点都拥有相同的下载文件部分 - 比如 50% - 并且只有一个种子节点,那么可用性就是 1.5。
感兴趣
描述一个希望获取客户端拥有的文件部分的下载者。例如,如果下载者不拥有上传者拥有的某个部分,并且希望获得该部分,那么上传者将标记下载者为“感兴趣”。
下载者
下载者 是任何没有拥有整个文件并正在下载文件的对等节点。这个术语,在 布拉姆·科恩Python 实现中使用,没有吸血鬼所具有的负面含义。布拉姆选择下载者 而不是吸血鬼,因为 BitTorrent 的等价交换确保下载者也会上传,因此不会不公平地被归类为吸血鬼
阻塞
描述一个被拒绝文件部分的客户端。客户端在以下几种情况下会阻塞另一个客户端。
  • 第二个客户端是种子节点,在这种情况下,它不希望任何部分(即,它完全不感兴趣)。
  • 客户端已经以其最大容量上传(它已达到 max_uploads 的值)。
  • 第二个客户端已被 列入黑名单,因为它具有攻击性或使用了列入黑名单的 BitTorrent 客户端。
冷落
如果下载客户端在超过 60 秒的时间内没有收到上传客户端的任何数据,则上传客户端会被标记为冷落


Clipboard

待办事项
一种新的协议可以提高 BitTorrent 速度,称为“缓存发现协议”或 CDP,据说它将充当对等网络的 DHCP。


BitTorrent 扩展协议

由阿维德·诺贝格和路德维希·斯特里格斯创建(描述参见 http://www.rasterbar.com/products/libtorrent/extension_protocol.html),它是协议的扩展,旨在为 BitTorrent 协议的未来扩展提供一个简单且轻薄的传输层。该协议使得轻松添加新的扩展成为可能,而不会干扰标准 bittorrent 协议或不支持此扩展的客户端。

扩展消息 ID 在握手过程中定义,以避免拥有全局消息 ID 注册表。相反,扩展消息的名称需要唯一名称,这在没有全局注册表的情况下更容易实现。

似乎 Vuze 也有一个并行的实现或变体(http://wiki.vuze.com/w/Azureus_messaging_protocol),它被 Vuze 和 Transmission 都使用。

对等节点交换

对等节点交换PEX 是一种 通信协议,它扩展了 BitTorrent 文件共享协议。它允许一组用户(或 对等节点)以更快、更有效的方式协作共享给定文件。PEX 使用两种常见的扩展协议之一实现。

在 BitTorrent 文件共享协议的原始设计中,文件共享组(称为“蜂群”)中的用户(对等节点)依赖于称为 跟踪器 的中央计算机服务器来相互查找并维护蜂群。PEX 通过允许每个对等节点直接更新蜂群中的其他对等节点来了解哪些对等节点当前在蜂群中,从而极大地减少了对等节点对跟踪器的依赖。通过减少对集中式跟踪器的依赖,PEX 提高了 BitTorrent 协议的速度、效率和健壮性,使其更加分散。

如前所述,希望获取文件副本的用户通常会先下载一个 .torrent 文件,该文件描述了要共享的文件,以及一个或多个称为 URL 的中央计算机,称为 跟踪器,它们维护着当前共享 .torrent 文件中描述的文件的节点列表。在最初的 BitTorrent 设计中,节点依赖于这个中央跟踪器来互相查找并维持蜂群。后来 分布式哈希表 (DHT) 的开发意味着部分节点列表可以由蜂群中的其他计算机保存,从而减轻中央跟踪器计算机的负载。PEX 允许蜂群中的节点直接交换有关蜂群的信息,而无需 (轮询) 跟踪器计算机或 DHT。通过这样做,PEX 利用用户连接到的节点的知识,询问他们连接到的节点的地址。这比仅仅依赖跟踪器更快、更高效,并且减少了跟踪器的处理负载。它还可以在跟踪器宕机时将蜂群保持在一起。实际上,一旦节点保留了文件共享的完整副本,就消除了对分布的任何控制。

节点交换本身不能用于将新的节点引入蜂群。要与蜂群建立初始连接,每个节点必须通过“.torrent”文件连接到跟踪器,或者使用称为 引导节点 的路由器计算机来查找描述蜂群节点列表的分布式哈希表 (DHT)。对于大多数 BitTorrent 用户来说,DHT 和 PEX 会在用户启动 BitTorrent 客户端并打开 .torrent 文件后自动开始工作。一个明显的例外是“私有种子”,它们不是公开可用的;这些种子将禁用 DHT。

Azureus 和 µTorrent 开发人员之间达成协议,任何实现上述两种机制的客户端在发送 PEX 消息时都会尝试遵守以下限制

  • 在任何给定的 PEX 消息中,添加的节点不应超过 50 个,移除的节点不应超过 50 个。
  • 节点交换消息的发送频率不应超过每分钟一次。

某些客户端可能会选择强制执行这些限制,并断开忽略这些限制的客户端的连接。

永久 DHT 跟踪

随着 PEX 的实施和对分布式哈希表 (DHT) 的依赖,向创建真正的无服务器 P2P 覆盖网络的演变成为下一步的逻辑步骤,就像我们所见到的 eDonkey 网络一样。DHT 的工作方式基本相同,它不仅会从旧的跟踪器获取信息,还会从 PEX 的实施获取信息,从而创建类似于共享种子的分布式数据库,作为备份跟踪器,当所有其他跟踪器都宕机或无法提供足够的节点时,以及启用无跟踪器种子。如果客户端启用了该选项,DHT 充当并添加到种子作为伪跟踪器,并且可以像普通跟踪器一样为每个种子启用和禁用 DHT 跟踪器。使用这种永久 DHT 跟踪的客户端现在是一个完全连接的去中心化 P2P 网络,它们作为新节点进入 DHT,这当然使得私有跟踪器(或非公共分发)必须排除自己。

引导 DHT

由于 DHT 独立于任何单个跟踪器(和故障点),因此必须解决首次使用 DHT 时如何引导 DHT 路由表的问题。这是通过几种方式完成的

  1. 手动输入 DHT 节点的主机名和端口号。
  2. 连接到具有包含 DHT 节点列表的 .torrent 文件的跟踪器。
  3. 下载任何具有广告支持 DHT 的节点的种子。并非所有客户端都完全支持,因为它要求客户端在 BitTorrent 握手 DHT 支持中进行广告。
磁力链接

传统上,.torrent 文件是从种子网站下载的。但是,几个客户端也支持 Magnet URI 方案。磁力链接不仅可以提供在 DHT 中查找共享文件的所需节点所需的种子哈希,还可以包含文件的跟踪器。

BitTorrent 增强提案 (BEP)

BitTorrent 增强提案流程 (BEP) 是由 John Hoffman 启动的流程。该流程在公共领域文档 ( http://www.bittorrent.org/beps/bep_0001.html ) 中定义。

BitTorrent 增强提案列表 ( http://www.bittorrent.org/beps/bep_0000.html ) 可用。

BEP 是一种设计文档,它向 BitTorrent 社区提供信息,或者描述 BitTorrent 协议的新功能。BEP 应提供该功能的简洁技术规范和理由,旨在成为提出新功能、收集社区对问题的意见以及记录 BitTorrent 设计决策的主要机制。

BEP 作者负责在社区内达成共识并记录异议。由于 BEP 保持为版本控制的存储库中的重构文本文件,因此它们的修订历史是功能提案的历史记录。

超级种子

超级种子 在 BEP 16 ( http://www.bittorrent.org/beps/bep_0016.html ) 中指定,是对 BitTorrent 协议 的扩展(在不更改协议的情况下实现),旨在仅当存在一个 种子 时使用,它允许管理资源的稀缺性。

在种子检测到它是文件唯一来源的情况下,它将尝试将上传的数据量降至最低,以保证外部共享并优化对稀缺资源的访问,直到它检测到其他完整种子存在。该功能由 John Hoffman 构思,并于 2003 年首次在 BitTornado 客户端中实现。

uTP

uTPµTP(有时也称为 微传输协议)是一个 开源 跨平台 协议,旨在构建在 UDP 协议之上,是 LEDBAT(一种 TCP 拥塞避免算法)的类似 TCP 的实现。

µTP 是在 BitTorrent, Inc. 内部开发的,没有来自网络或 BitTorrent 社区的任何输入,旨在提供可靠、有序的交付,同时保持最小的额外延迟,以便在干扰其他应用程序时自动减慢在 点对点 文件共享 种子 的用户之间传输数据包的速率。例如,该协议应自动允许在 BitTorrent 应用程序和 Web 浏览器之间共享 ADSL 线路。它最初在 µTorrent 1.8.x 测试版分支中引入,并在 µTorrent 1.9 的 alpha 版本中公布。现在是 uTorrent 点对点连接的主要传输协议。

uTP 在 BEP 29 ( http://bittorrent.org/beps/bep_0029.html ) 中作为 BitTorrent 扩展进行记录。BitTorrent, Inc. 已在 MIT 许可下提供了一个 C++ 实现 ( http://github.com/bittorrent/libutp ),但外部接口严格为 C(ANSI C89)。

BitTorrent 协议加密

截至 2005 年 1 月,BitTorrent 流量占住宅互联网总流量的三分之一以上。一些 ISP 决定采取不同的措施来控制甚至破坏 P2P 流量,如本书中关于 影子游戏 部分所述。

这就需要提供 BitTorrent 协议加密。混淆和加密使流量更难检测和监控,因此也更难节流。BitTorrent 协议加密并非旨在提供 匿名性机密性,即使某些解决方案会通过混淆内容来提高机密性。

BitTorrent 的发明者 Bram Cohen 反对在 BitTorrent 协议中添加加密。Cohen 表示他担心加密会导致客户端之间出现不兼容,强调了大多数 ISP 并没有阻止种子协议这一点。Cohen 写道:“我怀疑某些开发人员的 ISP 限制了他们的速率,并且他们更感兴趣的是尝试绕过 ISP 的限制,而不是整个互联网的性能。”在受到一些关于这一立场的批评后,Cohen 后来在他的 主线客户端 上添加了接收但不能发起加密连接的功能。值得注意的是,当 µTorrent 被 BitTorrent, Inc. 收购后,随后成为下一个主线版本时,发起加密连接的功能保留了下来,但默认情况下处于关闭状态。

加密不会阻止配置为普遍减慢所有加密的、不可识别的或未知协议的流量整形系统,使用的方法很简单,例如丢包。加密跟踪器通信可以防止窃听节点列表,并且不需要升级点对点连接的两端,但它需要给跟踪器施加计算开销。

协议头加密 (PHE)
由 RnySmile 创建,并于 2005 年 9 月 8 日在 BitComet 0.60 版本中首次实现。规范既未发布,也与 MSE/PE 不兼容,而且有说法称它已经被反向工程,降低了其实用性。
消息流加密 (MSE)/协议加密 (PE)
由 Azureus(现为 Vuze)于 2006 年 1 月底开发,后来经过多次修改,以便更广泛地为其他 BitTorrent 客户端的创建者所接受。
根据规范 ( http://wiki.vuze.com/w/Message_Stream_Encryption ),MSE/PE 使用 密钥交换 与种子的 infohash 相结合来建立 RC4 加密密钥。密钥交换有助于最大程度地降低被动监听的风险,而 infohash 有助于避免 中间人攻击。选择 RC4 是因为它速度快。丢弃 RC4 输出的第一个千字节以防止 特定攻击
该规范允许用户选择仅加密报头或加密整个连接。加密整个连接提供了更多混淆,但会使用更多 CPU 时间。为了确保与不支持该规范的其他客户端的兼容性,用户还可以选择是否仍然允许未加密的传入或传出连接。支持的客户端通过 PEXDHT 传播他们启用了 MSE/PE 的事实。
对该方法的分析表明,对 TCP 会话中前 100 个数据包的数据包大小和数据包方向进行统计测量可以用于识别混淆协议,准确率超过 96%,这使得该解决方案仅对不采用最先进的流量分析的 ISP 有效,主要是较小的 ISP。

存在各种解决方案来保护 BitTorrent 网络免受攻击,包括加密对等-跟踪器和对等-对等通信,使用 Microsoft 的 Teredo 使 TCP 连接在 UDP 数据包内进行隧道传输,在攻击到达终端主机中的 TCP 层之前过滤 TCP 重置,或完全从基于 TCP 的传输切换到基于 UDP 的传输。每种解决方案都有其权衡。过滤掉攻击 TCP 重置通常需要内核访问权限,并且需要远程对等体的参与,因为攻击者必须将重置数据包发送到本地和远程对等体。Teredo 并非所有 BitTorrent 客户端都可用。在新的 UDP 协议中重写 TCP 可靠性、按顺序交付和拥塞控制代表了大量的工程工作,并且需要升级任何对等-对等连接的两端。

软件实现

维基百科在 BitTorrent 软件比较BitTorrent 客户端使用份额 等文章中提供了一些相关信息。以下列表旨在提供有关与其他 P2P 协议相关的实现细节的一般想法和比较。
(这不应被视为 BitTorrent 客户端的完整列表,没有使用特殊顺序。所有链接都已验证,特别注意了软件的编程语言和许可证。上次更新时间为 2010 年 9 月 11 日)

  • BitTorrent 队列管理器 ( http://btqueue.sourceforge.net ),一个基于控制台的 BitTorrent 客户端,具有内置调度程序以处理多个会话。它旨在轻松管理队列中的会话,而无需重量级的 GUI。外部模块可以搜索跟踪器中的新种子并自动提交。开源 (Python 软件基金会许可证) 项目,使用 Python。
  • Vuze 以前称为 Azureus ( http://azureus.sourceforge.nethttp://www.vuze.com/ ),一个用 Java 编写的开源 BitTorrent 客户端,可能是网络中更高级的对等体 (多个种子下载、排队/优先级系统、启动/停止种子选项、嵌入式跟踪器、Mainline DHT 等等),但它是一种已知的资源消耗大户,会消耗大量的内存和 CPU 能力。
  • µTorrent ( http://utorrent.com ),一个用 C++ 编写的闭源免费软件 BitTorrent 客户端,一个非常完整对等体 (包括带宽优先级、调度、RSS 自动下载和 Mainline DHT 等等),具有非常低的系统占用空间。
  • BitTornado ( http://bittornado.com ),一个基于原始 BitTorrent 客户端的用 Python 编写的开源 BitTorrent 客户端。
  • BitComet ( http://www.bitcomet.com ),(最初从版本 0.11 到 0.37 被称为 SimpleBT 客户端) 是一个闭源但免费的 BitTorrent 客户端,仅适用于 MS Windows 操作系统,它还支持 HTTP/FTP 下载管理。
  • ABC (另一个 BitTorrent 客户端) ( http://pingpong-abc.sourceforge.net ),一个基于 BitTornado 的开源 BitTorrent 客户端。
  • Transmission ( http://transmission.m0k.org/ ),一个具有简单图形用户界面的轻量级开源 BitTorrent 客户端,位于跨平台后端之上。Transmission 在 Mac OS X 上运行,具有 Cocoa 界面,在 Linux/NetBSD/FreeBSD/OpenBSD 上运行,具有 GTK+ 界面,在 BeOS 上运行,具有原生界面。在 MIT/X Consortium 许可证下发布。
  • Warez ( http://www.warezclient.com ),一个来自 Neoteric Ltd. 的闭源、仅适用于 MS Windows 的 BitTorrent 客户端 (以前支持 Ares Network Warez P2P 客户端)。
  • Bits on Wheels ( http://bitsonwheels.com ),一个免费但闭源的实现,用 Objective-C 和 Cocoa 为 Macintosh 编写。
  • Vidora ( http://www.videora.com/ ),一个闭源、免费软件实现,也支持 Really Simple Syndication (RSS) 提要。
  • sharktorrent ( http://sharktorrent.sourceforge.net/ ),一个用 C++ 编写的开源 (GNU GPL)。这是一个跨平台 BitTorrent 客户端,使用 QT、libtorrent 和 boost 库。
  • ted [种子剧集下载器] ( http://www.ted.nu/ ),一个用 Java 编写的开源 (GNU GPL) BitTorrent 客户端,它也支持种子 RSS 提要。
  • rTorrent| ( http://libtorrent.rakshasa.no ) 是一个基于文本的 ncurses BitTorrent 客户端,用 C++ 编写,基于 libTorrent 库,适用于 Unix (不要与 Arvid Norberg/Rasterbar 的 libtorrent 混淆),其作者的目标是“专注于高性能和良好的代码。客户端和库都在 GNU GPL 下可用。”
  • libtorrent ( http://www.rasterbar.com/products/libtorrent/ ) 来自 Rasterbar Software,一个开源 C++ 库,实现了 BitTorrent 协议和应用程序的核心必要条件,使用 zlib 和 Boost 库,特别是 Boost.Asio,并共享 Boost 许可证。该库也通常用于 嵌入式设备。该库还提供对 UPnP 配置的支持。libtorrent 被以下实现使用
    • Halite ( http://www.binarynotions.com/halite-bittorrent-client ),一个开源的,在 Boost 软件许可证下的 BitTorrent 客户端,使用 libtorrent 库。用 C++ 编码,使用 Boost 库和 WTL (仅限 Windows)。
    • FireTorrent ( https://addons.mozilla.org/en-US/firefox/addon/10931 ) 由 Pete Collins、Radical Software Ltd、Jan Varga、Matthew Gertner 共同开发,使用 libtorrent 库的开源 JavaScript,Mozilla 公共许可证 FireFox 扩展/附加组件,用于下载种子。
    • Folx ( http://www.mac-downloader.com/ ),闭源,使用 libtorrent 库 (仅限 Mac)。
    • qBittorrent ( http://www.qbittorrent.org/ ),开源 GNU GPL,由一位博士生 (Christophe Dumez) 开发,一个使用 C++ / libtorrent 和 Qt4 图形用户界面的 Bittorrent 客户端。
    • Deluge ( http://deluge-torrent.org ),一个开源的,使用 Python 和 libtorrent 的轻量级、跨平台 BitTorrent 客户端,用 Python 编写,在 GNU GPL 许可证下发布。
    • Limewire,作为著名的 Gnutella 实现,也通过使用 libtorrent 库支持 BitTorrent 协议。
    • BTG ( http://btg.berlios.de ),用 C++ 实现并使用 Rasterbar Libtorrent 库的 Bittorrent 客户端,在 GNU GPL 下发布。提供 Ncurses、SDL、Gtkmm 和 WWW GUI,它们与运行实际 BitTorrent 操作的公共后端进行通信,仅适用于 OSX、BSD 和 Linux。
    • 免费下载管理器 (FDM),( http://www.freedownloadmanager.org ),用 C++ 编写的开源软件,在 GNU GPL 下发布,使用 libtorrent 库 (仅限 Windows)。
    • torrent2exe.com,一个网络工具,据称将 .种子转换为可执行文件 (Windows) 以进行分发,闭源,使用 libtorrent 库。
    • Flush ( http://sourceforge.net/projects/flush ) 基于 GTK 的 BitTorrent 客户端,适用于 Linux,开源 C++/GTK+,使用 libtorrent 库。
    • Pump ( http://www.vipeers.com ),一个闭源视频管理器,通过使用 libtorrent 库支持 BitTorrent 协议。
    • Lince ( http://lincetorrent.sourceforge.net ),开源 C++/GTK+/libtorrent BitTorrent 客户端,在 GNU GPL 下发布 (Linux/BSD/UNIX 类操作系统)。
    • Miro,以前称为 Democracy Player 和 DTV ( http://getmiro.com ),旨在自动从基于 RSS 的“频道”下载视频,管理它们并播放它们。用 Python/GTK/libtorrent 编写的开源软件,在 GNU 通用公共许可证条款下发布。
    • tvitty ( http://tvitty.com ) 使用 libtorrent 的闭源 BitTorrent 下载附加组件,适用于 vista 媒体中心 (仅限 Windows)。
    • FatRat ( http://fatrat.dolezel.info ),是一个用 C++ 编写的适用于 Linux 的开源下载管理器,使用 Qt4 和 libtorrent 库。
    • LeechCraft ( http://leechcraft.org ),开源 BitTorrent 客户端 (也支持 HTTP/FTP 下载),使用 C++、Qt 和 libtorrent 创建。在 GNU 通用公共许可证下发布。
    • MooPolice ( http://www.moopolice.de ),适用于 Windows 的 BitTorrent 客户端,具有非正统的 GUI。开源 (没有特定许可证) C++,使用 MFC 和 libtorrent BitTorrent 客户端库和 MiniUPnP。
    • Linkage ( http://code.google.com/p/linkage ),一个用 C++ 编写的轻量级 BitTorrent 客户端,使用 gtkmm 和 libtorrent,在 GNU 通用公共许可证下开源 (不再维护)。
    • Arctic Torrent ( http://int64.org/projects/arctic-torrent ),一个适用于 Windows 的小型 BitTorrent 客户端 (包括 64 位版本)。开源 C++,在 MIT 许可证下,使用 libtorrent。

特定 BitTorrent 论文

其他软件实现

JXTA

JXTA™ 技术是由 Sun™(http://www.jxta.org)创建的一套开放协议,它允许网络上任何连接的设备,从手机和无线 PDA 到 PC 和服务器,以 P2P 方式进行通信和协作。JXTA 对等体创建一个虚拟网络,其中任何对等体可以直接与其他对等体及其资源进行交互,即使其中一些对等体和资源位于防火墙和 NAT 后面或使用不同的网络传输。该项目的目标是跨不同的点对点系统和社区的互操作性、平台独立性、多种/多种语言、系统和网络,以及普遍性:每个具有数字心跳的设备。该技术使用 Apache 软件许可证(类似于 BSD 许可证)进行许可。

大多数实现是用 Java 完成的(在 C 中有一些小的示例)。

iFolder

iFolderhttp://www.ifolder.com)是一个仍在早期开发中的开源应用程序,由Novell, Inc.开发,旨在允许跨平台文件共享通过计算机网络,使用 Mono/.Net 框架。

iFolder 基于共享文件夹的概念,其中一个文件夹被标记为共享,然后文件夹的内容被同步到网络上的其他计算机,无论是直接在计算机之间进行点对点方式,还是通过服务器进行。这旨在允许单个用户在不同的计算机之间同步其文件(例如,在工作计算机和家庭计算机之间),或与其他用户共享文件(例如,一群正在合作进行项目的人)。

iFolder 的核心实际上是一个名为Simias的项目。正是 Simias 监控文件以进行更改,同步这些更改并控制文件夹的访问权限。实际的 iFolder 客户端(包括图形桌面客户端和 Web 客户端)是作为与 Simias 后端通信的独立程序开发的。

iFolder 客户端以两种运行模式运行:企业共享(使用服务器)和工作组共享(点对点,或不使用服务器)。

Freenet

Freenet 项目(http://freenetproject.org)旨在允许在互联网上自由交换信息,而无需担心审查或报复。为了实现这一点,Freenet 使对手很难发现发布或下载内容者的身份。Freenet 项目始于 1999 年,于 2000 年 3 月发布了 Freenet 0.1,并且一直在积极开发中。

Freenet 的独特之处在于它处理内容的存储,这意味着如果需要,用户可以将内容上传到 Freenet,然后断开连接。我们发现,这对许多 Freenet 用户来说是一个关键需求。上传后,内容会在 Freenet 网络中镜像和移动,使其难以追踪或销毁。只要有人检索内容,内容就会保留在 Freenet 中,尽管 Freenet 不保证内容会无限期地存储。

通往 Freenet 0.7 的旅程始于 2005 年,当时人们意识到,一些最脆弱的 Freenet 用户需要隐藏他们正在使用 Freenet 的事实,而不仅仅是他们在用它做什么。这一认识的结果是,对 Freenet 进行彻底的重新设计和重写,添加了“暗网”功能,允许用户限制其 Freenet 软件可以与哪些受信任的朋友通信。这将使第三方更难确定谁在使用 Freenet。

Freenet 0.7 还体现了对 Freenet 几乎所有其他方面的重大改进,包括效率、安全性以及可用性。Freenet 可用于 Windows、Linux 和 OSX。可以从以下位置下载:

软件实现

所有软件均可在 Freenet 项目页面上获得。

Frost 是 Freenet 的一个应用程序,它为我们提供了类似 usenet 的消息板以及文件上传/下载/共享功能。如果您使用标准的 Freenet 安装程序,它应该会与 Freenet 0.7 一起自动安装。

jSite 是一个图形应用程序,您可以使用它来创建、插入和管理您自己的 Freenet 网站。它是由 Bombe 用 Java 编写的。

Thaw 是一个文件共享工具和上传/下载管理器。它用作 Freenet 文件共享的图形界面。

KaZaa

KaZaahttp://www.kazaa.com


Clipboard

待办事项
添加缺少的信息


软件(FastTrack)实现

  • Kazaa
  • Kazaa Lite
  • Diet Kaza
  • giFT
  • Grokster
  • iMesh

GNUnet

GNUnet(http://gnunet.org/)始于 2001 年后期,作为一个安全的点对点网络框架,不使用任何集中式或可信服务。该框架提供了一个传输抽象层,目前可以将网络流量封装在 UDP(IPv4 和 IPv6)、TCP(IPv4 和 IPv6)、HTTP 或 SMTP 消息中。网络中的所有点对点消息都是机密的,并且经过身份验证。

建立在该框架之上的主要服务是匿名文件共享,该服务是在网络层之上实现的,它允许匿名且防审查的文件共享。GNUnet 使用一个简单的、基于盈余的经济模型来分配资源。GNUnet 中的对等体监控彼此在资源使用方面的行为;对网络做出贡献的对等体将获得更好的服务奖励。

GNUnet 是 GNU 项目的一部分。我们的官方 GNU 网站可以在(http://www.gnu.org/software/gnunet/)上找到,目前只有现有的客户端,OpenSource,GPL,用 C 编写,与网络同名。可以从该网站或 GNU 镜像下载 GNUnet。

MANOLITO(MP2P)

MANOLITOMP2P 是由Pablo Soto开发的专有点对点文件共享网络的内部协议名称。MANOLITO 使用 UDP 连接在端口 41170 上进行搜索路由,并基于 Gnutella。此外,文件传输使用基于 TCP 的专有协议。

MANOLITO 主机通过联系 HTTP 网络网关来获取网络条目,网关返回大约一百个 MANOLITO 主机的列表。也可以手动连接到主机。Servents 保持与固定数量的对等体(取决于 Internet 连接)的联系,这些对等体被发送搜索查询和结果。

软件实现

Mute 文件共享

MUTE 文件共享(http://mute-net.sourceforge.net)是一个匿名、分散的搜索和下载文件共享系统。MUTE 使用受蚂蚁行为启发的算法来路由所有消息(包括文件传输),通过邻居连接的网状网络。
作者 Jason Rohrer - jcr13 (at) cornell (dot) edu 使用 C++ 和 Crypto++ 库创建,支持多个操作系统,有一个使用 MFC 为 Windows 创建的前端,Mute 是开源的,并在 GPL 许可下发布。

iMesh

iMeshhttp://www.imesh.com)是一个免费但闭源的 P2P 网络 (IM2Net),在端口 80、443 和 1863 上运行,适用于 Widows。iMesh 归美国公司 iMesh, Inc. 所有,并在以色列设有开发中心。也已与 MPAA 达成协议。大小超过 50 兆字节、时长超过 15 分钟的视频文件将不再允许在 iMesh 网络上共享,保证了完整长度的版本无法通过网络传输。

BitCoop

BitCoop(http://bitcoop.sourceforge.net/)由 Philippe Marchesseault 创建,是一个控制台(基于文本)的点对点备份系统,它允许在远程计算机上存储文件,并提供加密和压缩支持。文件大小取决于您想与其他对等体共享的数量。它适用于希望彼此之间备份数据的服务器场。支持多种操作系统,包括 Windows、Linux 和 Mac OS X,它是用 Java 实现的(在 GPL 下开源)。

CSpace

CSpace(http://cspace.in/)提供了一个平台,用于通过互联网进行安全的、分散的、用户对用户的通信。CSpace 平台背后的驱动力是提供一个 connect(user,service) 原语,类似于 sockets API connect(ip,port)。建立在 CSpace 之上的应用程序可以简单地调用 connect(user,service) 来建立连接。CSpace 平台将负责定位用户并创建安全的、nat/防火墙友好的连接。因此,应用程序开发人员无需承担连接建立的负担,而可以专注于应用程序级逻辑!CSpace 使用 Python 开发。它使用 OpenSSL 进行加密,并使用 Qt 进行 GUI。CSpace 在 GPL 许可下发布。

I2P

I2P 是一个通用的匿名且安全的点对点通信层。它是一个建立在另一个网络之上的网络(在本例中,它建立在互联网之上)。它负责匿名且安全地将消息传递到另一个位置。

p300

p300(http://p300.eu/)是一个用 Java 创建的 P2P 应用程序,旨在为多种操作系统提供即用型单一下载解决方案,而无需处理用户帐户或特定协议和安全配置(例如,samba)。另一个方面是,p300 主要用于 LAN 或 VPN。该应用程序是开源的,在 GNU GPL v3 许可下发布。

Netsukuku

Netsukuku (http://netsukuku.freaknet.org/) 是一种点对点(网状)网络系统,最初由 FreakNet MediaLab 开发,可以自主生成并维持自身。它旨在处理无限数量的节点,而无需大量的 CPU 和内存资源。它似乎可以轻松用于构建一个全球分布式、匿名的去中心化网络,该网络位于互联网之上,无需任何服务器、ISP 或权威控制的支持。Netsukuku 用另一个路由协议替换了OSI 模型的网络层 3。一个开源的 Python 实现于 2007 年 10 月完成。

Netsukuku 基于一个非常简单的想法:将Wi-Fi网状网络的概念扩展到全球范围,虽然不一定要使用该介质。通过使用专门的路由协议和算法,可以利用现有的 Wi-Fi 技术来形成一个全球性的 P2P 无线网络,其中每个对等体(节点)都连接到其邻居。

其他媒体同样可以用来互连节点,因为交互作用独立于它所传递的介质,但人们认为 Wi-Fi 将是最方便普通用户利用的。一旦实现更大的普及,可能会看到一些节点在彼此之间建立高速陆线连接,以提高网络带宽,以便通过网络连接和降低延迟。

Adobe 的 RTMFP(实时媒体流协议)组

RTMFP 是一种基于创建Amicima 的封闭协议/实现,Amicima 是一家成立于 2004 年的初创公司,专注于开发针对客户端-服务器和点对点网络以及衍生应用的改进型互联网协议(p2p-hackers - amicima's MFP - preannouncement, Jul 2005MFP - The Secure Media Flow Protocol - version 1),被Adobe 收购,并纳入 Flash 平台,使开发人员能够在不通过中央服务器(Flash Media Server)的情况下将数据流式传输到端点。这一对 Flash Player v10.1+ 功能的补充使大多数 P2P 网络需求能够在 Flash 上执行。关于该实现的信息还不多。该演示文稿以 Flash 视频形式提供(http://tv.adobe.com/watch/max-2009-develop/p2p-on-the-flash-platform-with-rtmfp)。

其他

  • Thunderbolt(又名 Thunder) (http://www.xunlei.com/) 由迅雷 网络科技有限公司创建。Thunderbolt 专有的 P2P 网络支持多协议 P2P 资源(支持 BitTorrent、eDonkey、Kad 和 FTP),以及 HTTP 下载(下载加速器),因为它会进行网页缓存,以帮助加速下载。它主要用于中国大陆,最近发布了英文版。特别值得注意的是,2007 年 1 月 5 日,谷歌收购了该公司 4% 的股份。
  • Cassandra (http://code.google.com/p/the-cassandra-project/) 是一个在 P2P 网络上构建的结构化存储系统,用于管理结构化数据,同时在大规模范围内提供可靠性。使用 Java 在 Apache 许可证 2.0 下制作。
  • XNap ( http://xnap.sourceforge.net/ ) 开源(GPL),用 Java 编写。客户端具有基于现代 Swing 的用户界面和控制台支持。能够在多个 P2P 网络 OpenNap、Gnutella、Overnet 和 OpenFT(以及 giFT 支持的其他网络)中工作。它还支持 ICQ 和 IRC,MP3 标签查看器、图像、PDF、ZIP 文件和文字转语音功能。
  • Filetopia ( http://www.filetopia.com ),针对 Windows 的免费但闭源服务器/客户端 P2P 应用程序。它包括即时消息、聊天和文件共享系统,并提供搜索引擎、在线好友列表和留言板。它还支持使用跳板(开源,Java)作为匿名层,以实现间接连接。
  • Napster 网络
    • WinMX
    • Napigator
    • FileNavigator
  • WPNP 网络
    • WinMX
  • 其他网络
    • 星际文件系统 - 旨在创建一个内容可寻址的点对点方法,用于在分布式文件系统中存储和共享超媒体的协议和网络。最初由 Juan Benet 设计,现已开源。
    • MojoNation
    • Carracho
    • Hotwire
    • Chord 点对点查找服务|Chord
    • Dexter
    • Swarmcast
    • Alpine 程序|Alpine
    • Scribe
    • Groove
    • Squid_Soft|Squid
    • Akamai
    • Evernet
    • Overnet 网络
    • Audiogalaxy 网络
    • SongSpy 网络
    • The Circle
    • OpenFT
  • Acquisition
  • Cabos
  • Swapper
  • SoulSeek

构建 P2P 系统

开发者

有许多理由让人们应该投入时间和精力来创建 P2P 应用程序。正如我们在第一章中已经提到的那样,P2P 技术涉及并开始对人类活动的许多领域产生影响。除了任何类型的编程任务背后的正常原因(金钱、名声和乐趣)之外,它还可以是政治立场的体现,或者是一种实现网络甚至经济学中新概念的工具。最重要的是,P2P 本身就意味着人与人之间的合作,人们为了特定目标而共同努力。由您,程序员来创建必要的基础设施,使这一切成为可能。

任何 P2P 项目的目标都是成为一个广泛使用、值得信赖和可靠的项目。很少有项目是开放的、安全的、免费的、无歧视的、平等的、不受限制的和防审查的。

选择编程语言

Programming Languages
编程语言
Clipboard

待办事项
RAD(原型)与资源使用优化


选择许可证

为任何用于公开发布的软件选择合适的许可证是最重要的一步。它将决定项目的完成方式,甚至限制为实现解决方案而选择的编程语言、获得最终产品所需的时间,以及对用户关系的重要性与日俱增。

有一个永远不会结束的许可证列表,您可以直接使用这些许可证,作为实施者,您甚至可以创建自己的许可证。在最后一步,如果对所有含义没有掌握,请务必谨慎,不要冒不必要的风险。

开源计划 (OSI) 提供了一个很棒的关于开源的注释定义,请查看这里(http://www.opensource.org/docs/osd)。

开源与闭源

P2P 如何产生收入


Clipboard

待办事项

推动内容
营销(广告等)
监控和控制(了解客户搜索的内容,控制他们看到的内容)
高级用户列表


共享软件/付费

由于这种设置会让您陷入法律纠纷,而且您需要遵守相关的形式和义务,因此这是最成问题的设置。

此外,限制网络上的参与度将有意识地降低其有用性,这就是为什么大多数 P2P 服务是免费的,或者至少支持一定程度的免费访问。

变体

有几种模型是简单捐赠/付费模型的变体,它们针对用户或项目与收集到的价值相关的特定目标。

赎金
将应用程序的功能或代码作为赎金支付,如果人们确实做出贡献并达到了目标,您同意遵守您的提议(例如:公开源代码、修复或实现一项功能)。
赎金已被证明在实践中有效,它被用于几个开源项目中,甚至作家也尝试过这种方案,后者的一个例子是作家劳伦斯·瓦特·埃文斯对几个标题进行的测试,它们都成功地达到了他的资金和生产目标。
付费功能
在赎金模型的变体中,在这种特定情况下,您应该特别注意告知用户他们为哪些内容付费,以及您为该付款提供的服务合法性。额外的功能可能是更好的服务,甚至可以提高现有功能的质量。
付费支持
付费支持包括为用户提供付费优先服务,以获得技术支持,这在开源项目中非常常见。您应该避免过于复杂地设计软件,以从中获利,因为用户将构成网络。一个解决方案是为公众消费提供一个默认的简化版本,并使软件、协议或网络能够进行高度调整,然后尝试从中获利。

许可新技术

如果您想出了新的技术,或者找到了互连现有技术的新方法,这些方法也可以转化为收入来源。


Clipboard

待办事项
完整版和示例


风险投资

Clipboard

待办事项
添加支持 P2P 开发的 VC 公司清单


控制级别
Clipboard

待办事项
完成

对等体

对等体以及运行它的用户是所有 P2P 系统的基石,没有对等体,就无法创建网络,这看似显而易见,但往往会忽视用户的需求,而专注于最终目标,即网络本身,这就好比看着一片森林,却看不到树木。


Clipboard

待办事项
...个人电脑...


构建社区

将社交元素融入软件中具有益处。它可以让用户不仅仅是分享内容或服务,还可以围绕共同目标进行合作,而最终目标应该是为优化状态而合作。

P2P 应用程序是一种社交软件。

社交软件被定义为任何促进和支持社会协作的软件。这当然也是现代 P2P 系统的定义的一部分,其中不再有守门人,参与者可以自由地以自己的方式互动。P2P 应用程序在这个现实中成为了一种赋能工具。

世界可以越来越多地被定义为网络的网络,所有事物在某种程度上都是相互关联的。随着互联网的普及成为现实,它不仅使通信速度加快,而且来源数量的增加也带来了质量保证问题。

围绕功能性点对点网络的共同目标构建的在线协作将不仅有助于改善系统,而且有助于建立信任关系,从而导致声誉阶梯的出现。在参与者、网络和软件本身中,这种个性化最终将使信任和声誉扩展到点对点网络中可能存在的众多关系。


Clipboard

待办事项
与安全性和寄生行为相关联


社交网络(人对人)

随着社区的出现和聚集,它们不仅提高了以前内容的可寻址性,而且提高了生产者和消费者之间的可寻址性,这些生产者和消费者将根据个人偏好进行自我组织,建立超级和子组(多对多)。

实现信息的有意义交流和促进协作的增加,也提高了稀有或晦涩内容的可获得性,以及微内容的重要性,因为消除了无关信息,因为内容可以始终定向到合适的受众(拉取,而不是推送)。

使用社交软件或任何类型的集中式社交网络可以轻松提取用户行为的指标,这已被公司高度探索,这些公司已经进行了一段时间的战争,不仅是为了获得这些互动所产生的数据的份额,而且是为了控制这些信息(例如:谷歌和微软)。微软有一个专门针对此主题的研究项目(企业社会计算)。


Clipboard

待办事项
带有公共 API 的示例



打开封闭花园


Clipboard

待办事项
扩展


面向用户的 GUI

当您开始设计 P2P 应用程序时,用户将使用 GUI 与您的作品进行交互,您应该尝试定义不仅要支持的 OS,还要定义可以在哪个框架中设计该应用程序以便从 Web 浏览器使用,或者选择一个可移植框架,以便您可以将其移植到其他系统。

成为用户

用过多的选项来淹没用户总是一个糟糕的解决方案,只会吸引经验丰富的用户,即使它是基于你自己的喜好,你也要记住,你并不是为你自己创建它。


Clipboard

待办事项
完成


简单就是终极的复杂性

除了技术决策之外,您提供的功能也应考虑在内,最好的方法是一致性,并为现有实现、其他应用程序甚至您正在使用的环境/操作系统上的正常操作提供类似的选项。例如,您可以选择遵循一些指南,苹果为 OSX 提供了指南(http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/)。


Clipboard

待办事项
完成


内容为王
Clipboard

待办事项
完成


区别在于细微之处
Clipboard

待办事项
完成


引导用户
Clipboard

待办事项
完成


P2P 网络拓扑

P2P 网络的拓扑结构可以非常多样化,它取决于运行它的介质(硬件)、网络的大小(LAN、WAN)甚至软件/协议,这些软件/协议可以强加或使特定的网络组织出现。

下面我们可以看到最常用的拓扑结构(可以混合拓扑结构,甚至可以叠加在同一个网络上),大多数如果不是所有点对点网络都被归类为 覆盖网络,因为它们是在已经存在的具有自身拓扑结构的网络之上创建的。

环形拓扑结构 - 网状 拓扑结构 - 星形拓扑结构 - 全网状完全 网状 - 线形拓扑结构 - 树形拓扑结构 - 总线拓扑结构 - 混合 拓扑结构

当有大量对等节点参与时,全连接的 P2P 网络是不可行的。

  • 在有数千或数百万参与者(n = 参与者)的网络中
  • 每个对等节点将不得不处理 O(n2) 个总连接,它将无法扩展。

由于大多数 P2P 网络也是一种覆盖网络,因此 P2P 系统的最终拓扑结构还取决于协议、基础设施(介质/基本网络)或对等节点之间的交互。这些“变量”为正常网络的复杂性增加了更多层,其中基本特征是带宽、延迟和鲁棒性,使大多数 P2P 网络成为自组织的覆盖网络。

在执行 P2P 网络研究时,最终拓扑结构(结构属性)至关重要,有许多关于 P2P 网络优化或特征的论文。

Gonzalo Travieso 和 Luciano da Fontoura Costa 的论文《用于实时分布式处理的有效网络》(http://arxiv.org/abs/physics/0612134)似乎表明,均匀随机互连方案是特定 Erdős-Rényi(ER)随机网络模型,具有固定数量的边,比无标度对应模型 Barabási-Albert(BA) 无标度模型效率更高。

测试/调试系统

Clipboard

待办事项
添加缺少的信息


虚拟机

Clipboard

待办事项
添加缺少的信息


软件工具

Clipboard

待办事项
添加缺少的信息


自组织系统 (SOS)

P2P 系统默认情况下属于此类别,考虑到大多数系统试图消除大多数集中式系统/网络中存在的集中化或控制和命令 (C&C) 结构。

自组织系统的研究相对较新,它适用于从组织到自然发生的事件的各种系统或结构。主要使用数学,并依赖于模型和模拟,其准确性取决于结构的复杂性、干预因素的数量和初始选项。

本书不会详细介绍 P2P 系统的这一方面,但一些参考文献和结构特征确实与 SOS 概念并行运行。有关 SOS 的更多信息,请查看 USENET 新闻组 comp.theory.self-org-sys 的自组织系统 (SOS) 常见问题解答(http://www.calresco.org/sos/sosfaq.htm)。

协同效应
SOS 的一个新兴特征是协同效应,其中成员围绕共同目标聚集在一起,每个人都为所有人的利益而努力。这也存在于大多数 P2P 系统中,对等节点协同工作以优化资源共享和改善网络。

群体
SOS 中的参与者产生的效应,聚合在一起并进行互补工作,以便以一种提高协调的方式共享知识和行为。这在鸟群或社会昆虫的自然界中是可以观察到的。我们将在后面介绍 P2P 的这一方面,但请记住,它与 SOS 相关。

引导

大多数 P2P 系统没有(也不需要)中央服务器,但需要了解进入网络的入口点。这就是所谓的引导 P2P 应用程序。它处理对等节点的连接,以便能够找到并连接其他 P2P 对等节点(网络),即使没有具体了解谁在哪里以及是什么。

这不是一个新问题;它在几种网络技术中共享,这些技术避免了要求中央服务器索引所有参与者的中心故障点——一个守门人。

一个解决方案,零配置网络 (zeroconf)(见 http://www.zeroconf.org/),包含一系列技术,这些技术可以自动(无需人工干预或特殊的配置服务器)创建一个可用的互联网协议 (IP) 网络。这些技术通常用于帮助引导、配置或跨路由器和防火墙打开路径。


Clipboard

待办事项
完成… Avahihttp://avahi.org/


混合型与真正对等型系统

P2P 系统的主要目标之一是确保它没有任何一个部分对集体目标至关重要。通过在点对点网络中引入任何类型的集中化,人们正在创建故障点,因为一些对等节点将比其他对等节点更多,这甚至会导致安全或稳定性问题,就像旧的服务器-客户端模型一样,其中单个用户可能会使服务器崩溃并拒绝网络中的其他人使用它。


Clipboard

待办事项
完成


可用性

由于 P2P 网络的不稳定性,节点总是加入和离开,因此必须付出一些努力来保证不仅网络可用,并使新对等节点能够加入,而且共享的资源在暂时不可用时仍然可以被识别或至少被索引。


Clipboard

待办事项
完成


完整性

Clipboard

待办事项
完成


由于点对点网络的开放性,大多数网络都受到具有各种动机的人们的不断攻击。大多数攻击可以通过精心设计点对点网络以及使用加密来击败或控制。实际上,P2P 网络防御与“拜占庭将军问题”密切相关。然而,当大多数对等节点试图破坏它时,几乎任何网络都会失败,而许多协议可能被更少数量的对等节点变得无能为力。

聚类

计算机科学通常将计算机集群定义为一组紧密耦合的计算机,它们紧密地协同工作,因此在许多方面,它们可以被视为一台计算机。

集群的组件通常通过快速网络相互连接,并且通常用于提高与单个计算机相比提供的性能和/或可用性,同时通常比具有可比速度或可用性的单个计算机更具成本效益。

正如我们之前所见,如果将此概念应用于分布式网络或 WAN(代替 LAN),将生成分布式计算、网格和其他系统。所有这些应用程序都是 P2P 概念的一部分。

我们宽泛地将集群定义为物理的、社会的甚至经济的/统计的事件。也就是说,它是由实体由于共享共同属性而聚集在一起定义的,该属性可能是共享的目的或特征,或任何其他共性。

当我们观察点对点网络生成的拓扑结构时,可以发现大多数协议会在网络结构、资源周围形成某种形式的集群,甚至可能会由于网络状况而出现集群。因此,集群是一个无监督学习问题,是一个自动出现的事件,导致创建了对未标记对象的临时集合(数据/项目或事件)。有关集群的更多信息,您可以查看集群算法教程http://home.dei.polimi.it//matteucc/Clustering/tutorial_html/)。

因此,集群是对象集合,它们彼此之间是“相似”的,并且使用相同的特征集与属于其他集群的对象是“不相似”的。

这个概念不仅对点对点网络的形式非常重要,而且对基于点对点应用程序的使用可以建立的社会结构/关系也有影响。


Clipboard

待办事项
用于 K 均值聚类的有效算法 Tapas Kanungo、David M. Mount、Nathan S. Netanyahu、Christine D. Piatko、Ruth Silverman 和 Angela Y. Wu


突发式人群

突发式人群是一种行为模型,参与者倾向于聚集/拥挤在一个事件周围,在点对点术语中,这可能是一个稀缺资源,例如我们将在后面看到 BitTorrent 促进大型文件而不是小型文件,以及新文件而不是旧文件,这是由于连接到基于单个项目的网络的结果,BitTorrent 的速度主要取决于在文件周围生成突发式人群(更多对等节点,更多速度,这将在更多种子中形成滚雪球)。

这也可能导致拒绝服务 (DoS) 或洪泛攻击。例如,如果点对点系统设计不当,尝试将大量对等节点连接到网络可能会扰乱使用的引导方法。

您应该教育用户,更多连接并不等于更多速度,充其量会导致更多对查询的响应,但这可能取决于协议的结构方式,但启用它们将消耗带宽。另一方面,更多对等节点将导致更多资源被共享,这也将导致共享重叠,从而提高速度,随着点对点网络的扩大,它可以更好地为用户提供服务。

优化

在任何点对点协议中都应该进行一些简单的优化,这些优化可以使对等节点和网络整体受益。这些优化基于系统指标或配置文件,例如 IP(ISP 或范围)、内容、物理位置、共享历史记录、比率、搜索以及许多其他变量。

大多数点对点网络和拓扑结构的逻辑/特征(在广域网环境中)将导致对等节点的聚合,因此这些集群将共享分布式行为模型的相同属性,例如群体、羊群和鱼群,这导致更容易研究的环境并建立对等节点关系的相关性并推断出提高效率的方法。

  • 对齐
从本地系统/环境中获取信息/特征,以便通过选择和优化分离和凝聚函数来优化网络上的对等节点“位置”,从而改善本地邻域。
  • 分离
实现一种方法来避免与其他对等节点因不希望的对齐而拥挤。
  • 凝聚
根据对等节点自身的对齐选择对等节点。

点对点网络流量

由于协议和拓扑结构的性质,在互联网上检测到的点对点流量有时只能通过基于感知使用(在线用户、给定实现的下载次数)的估计来完成,或者通过对网络本身进行点检查来完成。如果协议或应用程序的实现以该目标为目标,甚至可以访问信息,例如,Gnutella 的几种实现具有该选项,Bearshare 甚至报告了一些用户的系统参数,例如防火墙类型等。

例如,提供这种点对点网络流量信息的服务的示例包括 Cachelogic(http://www.cachelogic.com/research/2005_slide16.php#)。

通信

您最重要的考虑因素之一是如何预测对等节点的通信方式,即使我们放弃使用中心服务器(如超级节点)以及作为对等节点/节点的多个分布式客户端,也需要考虑几个问题

  • 通信是否需要跨越防火墙和代理服务器?
  • 网络传输速度是否重要?用户可以配置它吗?
  • 通信是同步的还是异步的?
  • 它是否只需要/使用单个端口?我们应该使用哪个端口?
  • 您需要支持哪些资源?是否有大小限制?是否应该使用压缩?
  • 数据是否必须加密?
  • 等等…

必须仔细考虑项目的具体目标和要求,这将有助于您评估使用工具包和框架。如果您不能想出更好的解决方案,或者没有时间、能力或意愿,请尽量不要重新发明轮子。您也可以使用开放标准(即:使用 HTTP 协议)来实现,但也可以自由探索其他方法。

如今,即使是小型局域网也将至少拥有一个防火墙,可能还会拥有一个路由器,即使所有组件都在用户的控制之下,一些用户只是缺乏如何正确设置它们的知识。另一个考虑因素是应用程序的简单配置要求,大多数用户在处理技术术语和依赖项时都会遇到问题,即使是 Windows 操作系统的最新版本也将默认启用防火墙,这些防火墙可能会成为用户的不可逾越的障碍,值得庆幸的是,有一些工具可以使所有人的生活变得更轻松。

UPnP

通用即插即用 (UPnP) 架构由UPnP 论坛http://www.upnp.org/)颁布的一组开放标准和技术组成,旨在扩展即插即用概念以支持网络和对等节点发现(在网络上自动发现。有线或无线)、配置和控制,从而使设备、PC 和服务能够透明地连接。允许任何 UPnP 设备动态加入网络,获取其 IP 地址并同步功能(从其他设备学习和通知其他设备)。从一般意义上讲,它也可以被视为类似于分布式简单网络管理协议 (SNMP)

由于 UPnP 在大多数现代路由器和网络设备中提供,并且自 Windows XP 以来一直受到微软的支持。虽然据说是为了解决网络程序用户在接受来自互联网的传入连接方面的难题(“端口转发”或“NAT 穿越”),因为它将消除配置路由器以接受传入连接,然后将其路由到路由器后面的 LAN 本地机器所需的步骤,而这是很难解释的,对于普通用户来说难以理解。

所有这一切都使其成为 Windows 点对点应用程序必须通过编程支持这种架构的必要条件,因此避免了用户在启用 UPnP 时处理必要更改的要求(默认情况下应该禁用,因为存在安全风险)。另外还有一个必要条件,如果本地机器上存在不符合 UPnP 的防火墙,则必须更改其配置,以便为 UPnP 启用必要的 TCP(端口 2859)和 UDP(端口 1900)通信。

微软提供 UPnP 控制点 API。它在 Windows Me、CE .Net、XP 及更高版本中可用,位于系统服务“SSDP 发现服务”(ssdpsrv)和“通用即插即用设备主机”(upnphost)中,或者通过 COM 库。它可以在 C++ 或 Visual Basic 应用程序中使用,或者在嵌入 HTML 页面中的脚本中使用。

有关 Windows 上 UPnP 技术的更多信息,可以从以下来源收集

免费可用的实现
  • CyberLink(http://sourceforge.net/projects/clinkcc)是针对 C++ 的 UPnP 程序员开发包。使用该软件包,您可以轻松创建 UPnP 设备和控制点。在 BSD 许可下发布。
  • MiniUPnP 项目(https://miniupnp.tuxfamily.org)是根据 BSD 兼容许可发布的开源 C 实现。
  • GUPnP(http://www.gupnp.org)是一个用于创建 UPnP 设备和控制点的面向对象的开源框架,使用 GObject 和 libsoup 以 C 语言编写。它提供与 libupnp 相同的功能集,但可以保护开发人员免受大多数 UPnP 内部机制的影响。在 GNU LGPL 下发布。
  • UPNPLib(http://www.sbbi.net/site/upnp)是在 Apache 软件许可下发布的开源 Java 实现。

安全注意事项

通过使用点对点系统,用户将向其他人广播其存在,这与他们可能与其他人交互但其匿名性可以得到保护的集中式服务形成对比。

违反网络安全可能构成犯罪,例如2008 年科罗拉多大学和华盛顿大学的研究项目案例,研究人员参与了跨越 Tor 匿名代理网络的用户运动,他们可能会因为窥探而面临法律风险。

分布式通信的这种漏洞会导致身份攻击(例如,跟踪网络用户并骚扰或法律攻击他们)、DoS、垃圾邮件、窃听和其他威胁或滥用。所有这些行为通常针对单个用户,有些甚至可能是自动化的,创建者可以采取一些措施来使其更难,但最终它们无法阻止,应该预料到并处理,第一步是向用户提供信息,以便他们可以本地实施硬件或软件操作,甚至可以实施社会行为来抵消这种滥用。

DoS(拒绝服务)、垃圾邮件

由于每个用户都是一个“服务器”,因此他们也容易受到拒绝服务攻击(如果优化得当,这些攻击可能会使网络运行速度非常慢或完全崩溃),结果可能取决于攻击者的资源以及点对点协议的去中心化程度。另一方面,成为垃圾邮件(例如,在网络上传送未经请求的信息 - 不一定作为拒绝服务攻击)的目标,仅取决于您的可见性和可联系程度,例如,其他用户是否可以向您发送消息。大多数点对点应用程序都支持某种聊天系统,这种类型的滥用在这样的系统中非常常见,它们可以解决问题,但不会完全解决问题,这可能会导致社会工程学攻击,用户可能会被诱使执行会损害他们或其系统的操作。在这一点上,仅向用户提供使他们能够了解风险的信息将有效。

ARP 攻击

Clipboard

待办事项
完成本节


窃听

硬件流量控制

Clipboard

待办事项
ISP 和网络中立性、过滤(网络运营商可能会尝试阻止点对点网络数据被传输)


软件流量控制

由于大多数网络应用程序,尤其是点对点工具容易成为安全问题的来源(它们将绕过内部的一些默认安全措施),因此在使用或创建此类工具时,必须注意赋予可能性或配置系统以尽可能安全。

安全工具

为了实现这种效果,可以使用多种工具和选项,例如配置防火墙、添加 IP 拦截器,或者在部署应用程序时确保默认情况下开启一些限制。

  • PeerGuardian 2 (http://phoenixlabs.org/pg2/ ) 是由 Phoenix Labs 开发的开源工具,它是一个针对 Windows 操作系统的 IP 拦截器,支持多个列表、列表编辑、自动更新以及屏蔽所有 IPv4(TCP、UDP、ICMP 等)。
  • PeerGuardian Lite (http://phoenixlabs.org/pglite/ ) 是 PeerGuardian 2 的一个版本,旨在降低系统占用。
屏蔽列表

屏蔽列表是包含反对并积极打击文件共享(如 RIAA)的组织的 IP 地址的文本文件,以及任何在网络中挖矿或试图使用资源而不参与实际文件共享的企业。它本质上类似于电子邮件系统中存在的垃圾邮件过滤器。


Clipboard

待办事项
添加示例和资源


防火墙

为了提高用户的安全性,今天的操作系统默认情况下会提供某种形式的外部通信限制,允许用户定义不同的信任级别,这被称为防火墙。防火墙可以采用硬件软件实现,并被配置为允许、拒绝或代理数据通过计算机网络。由于连接互联网已成为普遍现象,而缺乏或默认配置的防火墙可能会给 P2P 应用程序的使用带来一些困难,因此大多数最新的操作系统都会附带运行的软件实现。


Clipboard

待办事项
完成


在 Windows 上

在最近的操作系统版本中,为了用户的安全,微软默认情况下会包含并启用一个简单的防火墙解决方案,从 Windows XP SP2 开始。这会屏蔽任何传入连接(HTTP 端口 80 或邮件端口 110 或 25),将“未经请求的消息”归类为有点过于强调,因为这些消息可能是 P2P(或任何其他类型的分布式)网络的一部分。这也会影响屏蔽本地机器上的 UPnP 功能。

组播

Clipboard

待办事项
添加缺少的内容(协议和应用程序级别实现)


路由器

Clipboard

待办事项
添加缺少的内容


路由

Clipboard

待办事项
添加缺少的内容(协议和应用程序级别实现)


NAT

NAT (网络地址转换)


Clipboard

待办事项
ICS(Internet 连接共享) 在 Windows 2000+


NAT 穿越

NAT 后面的用户应该能够互相连接,有一些解决方案可以实现这一点。

STUN

STUN通过 NAT 的 UDP 简单穿越)是一个网络协议,它可以帮助许多类型的软件和硬件通过使用NAT的家用宽带路由器正确接收UDP数据。

引自其标准文档,RFC 3489

“通过网络地址转换器 (NAT) 的用户数据报协议 (UDP) 简单穿越 (STUN) 是一种轻量级协议,允许应用程序发现它们与公共互联网之间存在的 NAT 和防火墙。”
它还允许应用程序确定NAT分配给它们的公共IP 地址
“STUN 与许多现有的 NAT 兼容,并且不需要它们有任何特殊的行为。因此,它允许各种应用程序通过现有的 NAT 基础设施工作。”

正如STUN RFC 所述,该协议并不是解决与NAT相关问题的万能药,但它对于使语音 over IP 通过家用路由器工作特别有用。VoIP信令协议(如SIP)使用 UDP 数据包通过互联网传输音频数据,但这些 UDP 数据包在通过家用路由器中的NAT时通常会遇到问题。

STUN是一个客户端-服务器协议。VoIP 电话或软件包可能包含STUN客户端,它会向 STUN 服务器发送请求。然后,服务器会向 STUN 客户端报告NAT路由器的公共 IP 地址以及NAT打开哪个端口以允许传入流量返回网络。

响应还允许STUN客户端确定正在使用的NAT类型,因为不同类型的NAT对传入 UDP 数据包的处理方式不同。它将与四种主要类型中的三种类型兼容:全锥 NAT受限锥 NAT端口受限锥 NAT。它不会与对称 NAT(也称为双向NAT)兼容,这种 NAT 通常存在于大型公司的网络中。

Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs)) algorithm.
通过网络地址转换器 (NAT) 的用户数据报协议 (UDP) 简单穿越 (STUN) 算法。

端口转发

如果对等体位于路由器或防火墙后面(使用 NAT),则可能需要手动配置它,以允许 P2P 程序正常运行,这对技术水平较低的人来说可能是一项艰巨的任务,甚至会影响 P2P 应用程序的采用。这可以通过使用 UPnP 等一些解决方案自动解决。


端口转发或端口映射(有时称为端口映射)是指将网络端口从一个网络节点转发到另一个网络节点的行为,实际上是在网络上创建了一条路径,在本例中,是从连接到路由器或防火墙的互联网侧到局域网内部的计算机,允许外部用户从外部访问局域网内部的私有 IP 地址上的端口。否则,局域网内部的计算机将无法访问,P2P 无法完全工作(它可以联系外部机器,但无法完全被外部看到)。

由于最终实现相同功能的 GUI 实现种类繁多,因此进行必要的更改并非易事,而且一个解决方案并不适用于所有情况。

首先要意识到的是,连接到互联网的路由器或计算机将具有不同的 IP 地址,一个由您的 ISP 提供,可以在互联网上看到,另一个只能在局域网内部看到,这个地址可以由用户分配,或者默认为出厂设置或操作系统出厂设置。

要对路由器的配置进行任何更改,您需要知道可以访问其配置页面的 IP 地址并登录到它,如果使用计算机,则可以在软件允许的情况下本地或远程执行此操作。用户需要具备一些关于如何使用 IP 地址和端口,甚至协议(一些配置允许区分 TCP 和 UDP 数据包)的最低限度的知识才能执行这些任务,因此对于普通用户来说,这可能会变得很复杂。

注意
出于安全原因,不要将默认密码保持不变,因为这将允许外部人员控制您的财产或窃取您的带宽。


Clipboard

待办事项
完成


唯一 ID

数字控制着你的生活。随着时间的推移,每个人都被各种数字标识。例如电话号码、信用卡号码、驾照号码、社会保险号码,甚至邮政编码或汽车牌照。这些唯一号码的创建、分配和验证方式非常引人入胜。Alan De Smet 的唯一 ID 网站 (http://www.highprogrammer.com/alan/numbers/) 提供了有关该主题的总体信息。对于我们特定的主题,重要的是它背后的算法。如何为用户和资源建立唯一的标识符。

通用唯一标识符 (UUID) / 全局唯一标识符 (GUID)

对于 P2P 协议/应用程序来说,要能够管理用户身份验证、身份验证、构建路由协议、识别资源等,就需要(一组)唯一标识符。虽然真正的点对点协议不打算建立集中式服务,但它经常可以利用已经建立的这种服务。因此,例如,Usenet 利用域名为文章创建全局唯一标识符。如果该协议甚至避免使用这种服务,那么唯一性只能基于随机数和数学概率。

生成唯一 ID 的问题可以分解为空间上的唯一性和时间上的唯一性,当它们结合在一起时,旨在生成一个全局唯一序列。这导致了在使用开放协议/多个供应商实现的某些 P2P 网络上检测到的一个问题,由于在生成GUID时使用了不同的算法,导致空间上的唯一性被破坏,从而导致零星的冲突。

UUID 正式且明确地定义为 ISO-11578 标准的一部分,其他规范也存在,如RFC 4122ITU-T Rec. X.667

使用示例

  1. Usenet 文章 ID。
  2. 在微软的组件对象模型 (COM) 泥潭中,这是一个包含 MFC(微软基础类)、OLE(对象链接与嵌入)、ActiveX、ActiveMovie 以及微软最近正在推广的所有其他内容的面向对象编程模型,GUID 是一个 16 字节或 128 位数字,用于唯一地标识对象、数据格式,以及所有内容。
  3. Windows 注册表中的标识符。
  4. RPC(远程过程调用)中使用的标识符。
  5. 在 ActiveMovie 中,存在用于视频格式的 GUID,对应于 Video for Windows 中使用的 FOURCC 或四个字符代码。这些在 Active Movie 软件开发工具包 (SDK) 中的 uuids.h 文件中指定。ActiveMovie 需要传递与 AVI 文件中视频的 FOURCC 对应的 GUID。

安全 存在一个已知的版本 1 UUID(基于时间和节点)的脆弱性,因为它们会广播节点的 ID。

软件实现

需要实现 UUID 的程序员可以参考这些示例

  • OSSP uuid ( http://www.ossp.org/pkg/lib/uuid/ ) 是一个用于 ISO C、ISO C++、Perl 和 PHP 的 API,以及一个相应的 CLI,用于生成符合 DCE 1.1、ISO/IEC 11578:1996 和 RFC4122 标准的通用唯一标识符 (UUID)。它支持 DCE 1.1 变体的 UUID,版本 1(基于时间和节点)、版本 3(基于名称,MD5)、版本 4(基于随机数)和版本 5(基于名称,SHA-1)。UUID 是 128 位的数字,旨在具有很高的在空间和时间上的唯一性概率,并且在计算上很难猜测。它们是全局唯一的标识符,可以在本地生成,无需联系全局注册机构。它是在 MIT/X Consortium 许可证下开源的。

哈希、加密和压缩

大多数 P2P 系统必须至少实现一种用于哈希、加/解密和解/压缩的算法,本节将尝试提供一些关于这些操作与 P2P 主题相关的一些想法,因为我们将在其他章节中讨论这些问题。

有关该主题的详细信息,请参阅 Cryptography Wikibook ( https://wikibooks.cn/wiki/Cryptography )。

创建结构化 P2P 网络的一种方法是维护一个分布式哈希表 (DHT),它将充当网络上资源的分布式索引。

加密的另一个需求是保护分布式资源本身的完整性,使其能够在大多数 P2P 实现中抵御攻击,某种类型的哈希函数 (MD5、SHA1),甚至可能实现一个哈希树,旨在检测资源内容作为整体或用户获取的部分的损坏(例如使用 Tiger Tree Hash)。

哈希函数

一个 哈希函数 是一种可重复的方法,用于将某种 数据 转换成一个(相对)较小的数字,该数字可以作为数据的数字“指纹”。该 算法 会替换或转置数据以创建这些指纹。这些指纹被称为 哈希总和哈希值哈希码或简称为 哈希。当您谈论哈希或哈希时,需要注意,因为它也可以指哈希函数。

一组哈希(将哈希函数应用于数据的结果)有时被称为 或更准确地说是哈希桶。大多数哈希桶,如果由非冲突哈希函数生成,将为给定的数据输入生成不同的哈希,在选择哈希函数时还应考虑其他特性,但这超出了本书的范围,请记住检查您正在实现的哈希函数/算法是否满足您的要求。Wikibooks 有几本书以某种方式涵盖了哈希,您可以在 Algorithm implementationCryptography 中了解更多关于该主题的信息。

A typical hash function at work
一个典型的哈希函数在工作中

哈希总和通常用作 哈希表哈希文件 的索引。 加密哈希函数 用于 信息安全 应用中的各种目的。

选择一个好的哈希函数

一个好的哈希函数对于哈希表性能至关重要。选择一个不好的哈希函数可能会导致聚集,在这种情况下,键映射到同一个哈希桶的概率(即冲突)远远大于随机函数的预期。在任何哈希实现中,非零冲突概率都是不可避免的,但通常,解决冲突所需的运算次数与映射到同一个桶的键的数量成线性比例,因此过多的冲突会严重降低性能。此外,一些哈希函数在计算上代价高昂,因此计算哈希所需的时间(以及在某些情况下,内存)可能很繁重。

用于验证 p2p 系统中文件完整性的第一个哈希算法之一(以及一般文件传输)是 1992 年创建的 MD5(见 rfc1321 The MD5 Message-Digest Algorithm)。但正如所有哈希一样,大多数算法在一段时间后都会发现一些弱点,这个过程在 SHA1 算法中重复出现,并且很可能还会出现其他算法。选择合适的工具还不够,程序员必须持续检查所选择的工具的安全性能是否符合对所选哈希算法的要求。

简单性和速度很容易客观地衡量(例如,通过代码行数和 CPU 基准测试),但强度是一个更难以捉摸的概念。显然,像 加密哈希函数 这样的 SHA-1(见 Secure Hash Standard FIPS 180-1)将满足哈希表所需的相对宽松的强度要求,但它们的速度慢和复杂性使其不具有吸引力。但是,使用加密哈希函数可以防止冲突攻击,前提是哈希表模数及其因子对攻击者保密,或者通过应用一个秘密的 。但是,对于这些特殊情况,可以使用 通用哈希函数 来代替一个静态哈希。

在没有哈希函数强度标准衡量的情况下,目前的技术是采用一系列 统计 测试来衡量哈希函数是否可以很容易地与随机函数区分开来。可以说最重要的测试是确定哈希函数是否显示出 雪崩效应,该效应本质上说明输入密钥中的任何一位变化平均都会影响输出中的一半位。Bret Mulvey 主张特别测试 严格雪崩条件,该条件说明,对于任何一位变化,每个输出位应该以二分之一的概率改变,与密钥中的其他位无关。纯粹的加法哈希函数,如 CRC,惨败于这个更强的条件。

注意
CRC 通常用于表示该函数或该函数的输出。CRC 可以像 校验和 一样,用于检测数据在传输或存储过程中发生的意外更改。CRC 很受欢迎,因为它们在二进制 硬件 中易于实现,易于进行数学分析,并且特别擅长检测由传输通道噪声引起的常见错误。从历史上看,CRC 在电信中被广泛用作错误检测/校正。

有关哈希的更多信息

冲突避免

Clipboard

待办事项
完成


实现哈希算法

大多数 哈希算法 具有高度的复杂性,并且专为特定目标(哈希函数)而设计,这些目标可能不适用于其他任务,并且不能在其他任务中提供相同的保证级别。这些算法(或它们的原始描述)可以免费获取,您可以实现自己的版本,也可以选择使用现有的经过测试的实现(并注意安全问题)。一些公开可用的实现示例可在 Cryptography Wikibook 中找到。

注意
请记住,某些哈希函数可能受出口限制。

需要一致的结果和可重复性,在您选择和实现哈希算法时,请记住对其运行一批测试向量。如果您使用的是 测试框架,则应将其添加到您的测试中。

哈希树 (Merkle 树)

密码学 中,哈希树(也称为 Merkle 树,由 Ralph Merkle 于 1979 年发明)是对更简单的 哈希列表 概念的扩展,而哈希列表又是对旧的 哈希 概念的扩展。它是一种哈希结构,它在验证文件的完整性和文件的子范围方面表现出令人满意的属性,这些属性以增量或乱序的方式完成。

底层哈希函数是 Tigerhttp://www.cs.technion.ac.il/~biham/Reports/Tiger/)的哈希树通常被称为 Tiger 树Tiger 树哈希

哈希树的主要用途是确保从对等网络中的其他对等方接收的数据块未被损坏和更改,甚至可以检查其他对等方是否发送了伪造的数据块。这将优化网络的使用,并允许快速排除伪造的内容,而不是等待整个文件下载完成以进行单次哈希检查,可以下载部分或完整的哈希树,并且可以立即检查每个分支的完整性(因为它们由“哈希”的块或哈希树的叶子组成),即使整个树/内容尚未可用,这也使得下载对等方可以上传未完成文件的块。

通常,使用诸如 SHA-1、Whirlpool 或 Tiger 之类的加密哈希函数进行哈希。如果哈希树只需要防止意外损坏,可以使用安全性低得多的校验和,例如 CRC。

在哈希树的顶部有一个顶级哈希(或根哈希主哈希)。在对等网络上下载文件之前,在大多数情况下,顶级哈希是从可信来源(对等方或具有较高信任比率的中央服务器)获得的。当顶级哈希可用时,哈希树就可以从任何来源接收。然后,将接收到的哈希树与可信的顶级哈希进行比较,如果哈希树损坏或已损坏,将尝试来自其他来源的另一个哈希树,直到程序找到一个与顶级哈希匹配的哈希树。

这需要考虑几个因素

  1. 根哈希的可信来源是什么。
  2. 哈希算法的一致实现(例如,要传输的块的大小必须在每次文件传输中都是已知且恒定的)。
Tiger Tree Hash (TTH)

Tiger 树哈希是对等网络中最有用的哈希树形式之一。它基于 1995 年由 Eli Biham 和 Ross Anderson 创建的加密哈希 Tiger(有关创建者的信息和 C 源代码示例,请参阅 http://www.cs.technion.ac.il/~biham/Reports/Tiger/)。哈希算法的设计考虑了现代 CPU,特别是在处理 64 位时,它是 32 位机器上最快和最安全的哈希之一。

TTH 使用一种二进制哈希树形式,通常具有 1024 字节的数据块大小,并使用加密安全的 Tiger 哈希。

使用 Tiger 哈希是因为它速度快(并且树需要计算大量哈希),在最近的实现和体系结构中,TTH 与 SHA1 一样快,并且通过更多优化和使用 64 位处理器,它将变得更快,即使它会生成更大的哈希值(192 位对比 SHA1 的 160 位)。

Tiger 树哈希用于 Gnutella、Gnutella2 和 Direct Connect 以及许多其他 P2P 文件共享协议以及一般文件共享中。

作为 Tree Hash Exchange (THEX) 格式的一部分,提供了关于 TTH 用途的分步介绍(请参阅 WEB Archive 上的页面)。

哈希表

在计算机科学中,哈希表哈希映射是一种将相关联的数据结构。它支持的有效主要操作是查找:给定一个键,找到相应的 value。它的工作原理是使用哈希函数将键转换为哈希,即一个用于索引数组以定位所需位置(“桶”)的数字,值应该在那里。

A small phone book as a hash table.
一个小电话簿作为哈希表。


哈希表支持有效地添加新条目,并且查找所需数据所花费的时间与存储的项目数量无关(即 O(1))。

在 P2P 系统中,哈希表在每个客户端/服务器应用程序中本地使用以执行数据路由或文件的本地索引,当我们尝试以分布式方式使用相同的系统时,这种概念会进一步发展,在这种情况下,分布式哈希表用于解决这个问题。

分布式哈希表 (DHT)

分布式哈希表 (DHT) 概念在 2001 年公开,但很少有人公开发布健壮的实现。

协议
  • 内容可寻址网络 (CAN)
  • Chordhttp://pdos.csail.mit.edu/chord/) - 旨在使用对等思想构建可扩展、健壮的分布式系统。它完全去中心化和对称,并且可以使用 log(N) 个消息找到数据,其中 N 是系统中节点的数量。Chord 的查找机制在频繁的节点故障和重新加入的情况下得到证明是健壮的。一个单一的 C 语言研究实现可用,但还有其他 C++、Java 和 Python 实现。
  • Tulip
  • Tapestry
  • Pastry
    • Bamboohttp://bamboo-dht.org/) - 基于 Pastry,一种用 Java 编写的 Pastry 协议的重新设计,并根据 BSD 许可证授权。


Clipboard

待办事项
Tulip 似乎有一个 C++ 实现,找不到关于它的信息...


加密

作为任何 P2P 网络安全的一部分,需要加密以确保只有“允许”的各方才能访问敏感数据。示例包括服务器/客户端设置(即使在 P2P 上)上的数据加密,客户端可以在不担心数据在服务器上被访问的情况下共享数据(这其中一部分是如果网络本身能够启用用于传输的分布式缓存机制,无服务器),传输加密,以防止中间人攻击,或数据监控(参见 FreeNet)以及许多其他旨在保护隐私并为网络提供扩展安全级别的应用程序。

有几种算法可用于实现加密,P2P 项目最常使用的是:BlowFish。


Clipboard

待办事项
扩展并提供具体示例


压缩

Clipboard

待办事项
完成


资源(内容、其他)

P2P 应用程序可用于以可唯一标识的打包信息形式共享任何类型的数字资产。P2P 应用程序以共享文件而闻名,这引发了几个问题和可能性。

元数据

元数据(元数据,或有时称为元信息)是“关于数据的数据”。元数据项可以描述单个数据项或内容项,或描述包含多个内容项和层次结构级别的数据集合,例如数据库模式。

数据是知识的最低抽象级别,信息是下一个级别,最后,知识是三者中最高的级别。元数据包含帮助定义目标项目知识的直接和间接数据。

元数据描述的层次结构可以无限地继续下去,但通常上下文或语义理解使过于详细的解释变得不必要。

任何特定数据项所起的作用取决于上下文。例如,当考虑伦敦的地理位置时,“E83BJ”将是一个数据,而“邮政编码”将是一个元数据。但是,当考虑管理地理数据的自动化系统的數據管理时,“邮政编码”可能是一个数据,然后“数据项名称”和“以 A-Z 开头的 5 个字符”将是元数据。

在任何特定上下文中,元数据表征它所描述的数据,而不是由该数据描述的实体。因此,与“E83BJ”相关,数据“位于伦敦”是对具有邮政编码“E83BJ”的现实世界中地点的进一步描述,而不是对编码本身的描述。因此,虽然它提供了与“E83BJ”相关的信息(告诉我们这是伦敦某地的邮政编码),但这通常不被认为是元数据,因为它描述的是现实世界中的qua地点,而不是qua数据。

数据和元数据的区别

通常无法区分(普通)数据和元数据,因为

  • 有些东西可以同时是数据和元数据。文章的标题既是标题(元数据),也是文本的一部分(数据)。
  • 数据和元数据可以改变它们的角色。一首诗本身会被视为数据,但如果有一首歌使用它作为歌词,那么整首诗可以作为元数据附加到歌曲的音频文件。因此,标签取决于观点。

这些考虑因素适用于上述任何定义,除非使用显式标记来表示什么是数据,什么是元数据。

元数据层次结构

当以层次结构排列时,元数据更恰当地被称为本体模式。这两个术语都描述了为了某种目的或为了使某些操作成为可能而“存在的东西”。例如,图书馆目录中主题词的排列不仅用作在书架上查找特定主题书籍的指南,而且还用作指南,以了解图书馆本体中“存在”的主题以及更专业的主题是如何与更一般的主题词相关或派生自更一般的主题词的。

元数据通常存储在中心位置,并用于帮助组织标准化其数据。此信息通常存储在元数据注册表中。

模式示例

关于元数据工作以及如何使其可访问和有用的一个很好的例子可以在W3C的旧页面元数据活动声明 (http://www.w3.org/Metadata/Activity.html) 和资源描述框架 (RDF) 中看到,通过使用声明性语言,它提供了一种使用 XML 以语句的形式表示元数据的标准方式,这些语句描述了 Web 上项目的属性和关系。RDF 拥有自己的更新数据页面,位于 http://www.w3.org/RDF/

元数据注册表

免费服务
  • MusicBrainz ( http://musicbrainz.org/ ) 是一个社区音乐元数据库(非营利性服务),它试图创建一个全面的音乐信息网站。您可以通过浏览此网站使用 MusicBrainz 数据,也可以从客户端程序访问数据 - 例如,CD 播放器程序可以使用 MusicBrainz 识别 CD 并提供有关 CD、艺术家或相关信息的的信息。MusicBrainz 还支持 MusicIP 的 Open FingerprintTM 架构,该架构识别音频文件中的声音,无论数字文件细节如何变化。该社区提供了一个基于 XML 的 REST 风格 Web 服务。

数据库和索引

Clipboard

待办事项
...类型... ...位置... ...路线... ...跟踪... ...可扩展的... ...灵活的...


文件

P2P 应用程序的用户可以选择文件作为要在网络上共享的资源。最简单、最安全的方法是仅以不可变的方式共享文件的内容,大多数 P2P 应用程序都满足此需求,在任何情况下,其他同步模型都可以围绕文件资源和这些文件的可能状态构建,最复杂的是分布式文件系统的实现。

共享文件

在 P2P 网络上共享文件包括管理(索引、启用搜索和传输)两种不同的资源,即本地文件和远程文件。

本地文件

如果 P2P 应用程序支持文件共享。共享文件的最常用方法是允许用户选择本地文件系统卷中的一个或多个目录。这包括在应用程序首选项中提供选择要共享的文件路径以及将下载的文件放在哪里。

通常的做法是自动将下载目录添加到共享路径列表或下载文件列表中,以便对等点立即开始复制下载的资源。

注意
实施者应该关注的是向用户强调有关在网络上共享文件的安全性以及法律问题的的重要性。

监控更改

在用户确定了资源后,应用程序需要在运行时验证任何删除、重命名或写入操作,这些操作通常针对任何共享文件,因为这可能构成文件状态的更改(内容更改)或任何添加文件或对共享资源的更改。这会导致先前生成的哈希或索引无效。可以通过为文件内容生成哈希值并使用操作系统对文件系统的控制来监控发生的更改来解决此问题(例如,在 Windows 上可以使用 Win32 API ReadDirectoryChangesW)。

根据实现的要求,使用多个内容哈希可能会有益,一个更强的哈希用于整个网络,而一个更快、质量较低的哈希仅用于监控本地更改。

检测到的共享文件及其更改

由于应用程序预计不会一直运行,并且能够持续监控对资源进行的任何更改,因此必须采取措施来维护进一步的完整性。因为如果应用程序关闭,它将无法继续监控更改,并且操作系统将负责允许某种 API 来检测文件更改,例如上次写入访问时间戳。因此,每次运行应用程序以保证完整性所需的步骤是

  1. 验证资源(已知文件和共享路径)是否仍然有效(它们仍然存在且未被修改)。
  2. 更新本地索引以反映上述步骤中发现的内容(从共享列表中删除任何无效目录或卷)。甚至可以提示用户采取纠正措施,因为有些可能是可移动介质(DVD 等)。
  3. 开始监控新更改。
  4. 检查自应用程序上次退出以来所有资源内容的更改,这可能意味着必须单独检查每个文件的上次写入日期(大多数现代操作系统允许这样做)。根据实现方式,可以包括以下步骤以减少重复工作。
  5. 验证所有先前索引的文件是否仍然存在。
  6. 验证新文件是否存在。
重要的本地路径

对于 P2P 应用程序,至少有两个路径具有较高的实用价值。应用程序所在的路径,因为可能需要更新或进行任何必要的安全检查,甚至可能用作查找应用程序首选项的基础(如果未使用其他设置,例如 Windows 操作系统上的系统注册表)和/或下载目录,一个启用写入的目录,所有下载都将放在这里。

注意
应监控下载目录的可用空间,如果内容是自动共享的,那么它应该是一个安全问题,因为它将成为攻击的主要媒介,比任何其他共享路径更能受到外部来源的篡改,因为外部来源不仅可以使外部无法访问的内容可用,还可以使外部实体能够将危险内容上传到本地计算机。

外部文件

这些文件不在本地用户的直接控制之下。


Clipboard

待办事项
扩展...


文件过滤

大多数 P2P 应用程序不允许多选文件共享,而是通过允许选择特定目录来批量进行共享,需要提供一种机制来排除特定文件被共享,这取决于用户的意愿、网络的具体情况,甚至为了减少文件共享系统负担,在处理不需要的文件方面,无论是大小、扩展名,甚至是文件的固有内容,都有能力剔除它们,这都是有用的。

索引

索引是索引资源(如共享文件)的任务,其目的是使应用程序能够知道哪些资源可供网络共享。

每次运行应用程序时都会进行索引,因为只能在应用程序运行时监控资源的更改,并且在对共享资源首选项进行更改时进行索引。这也使得在应用程序运行时必须有一个监控资源更改的功能。

大多数 P2P 应用程序还支持排除或过滤共享资源,例如,如果选择了一个目录进行共享,但需要排除某些内容。

搜索

Clipboard

待办事项
提及 Boyer-Moore 算法


使用 DHT

Clipboard

待办事项
完成


Clipboard

待办事项
完成


服务

Clipboard

待办事项
...跟踪...


种子

吸血鬼

在自然界中,合作很普遍,但吸血鬼(骗子、变种人)也很多。从进化的角度来看,骗子确实应该繁荣昌盛,因为他们不为集体利益做出贡献,只是享受着他人合作努力带来的好处,但他们并没有。两者都以不同的策略竞争同一个目标,合作是所有人的成本最低的途径(即使从长远来看,对于吸血鬼来说也是如此),合作提供了稳定性和可预见性,另一方面,如果骗子没有保持某种平衡,他们会使系统退化,从而导致系统整体失败。

在计算机科学中,尤其是在互联网上,吸血鬼或吸血鬼是指从他人信息或努力中受益的行为,通常是有意为之,但没有提供任何回报,或者只是象征性地提供一些回报,试图避免被称为吸血鬼。他们普遍受到谴责。

这个名字来源于水蛭,这种动物会吸食血液,然后试图偷偷溜走。还会使用其他术语,例如白吃白喝,但吸血鬼是最常用的。

示例

  • 在对等网络中,吸血鬼不会分享任何东西(或分享很少的东西,而且价值很低)以供上传。许多应用程序都有处理吸血鬼的选项,例如以较低的速率上传给那些不分享任何东西的人,或者根本不允许上传给他们。一些文件共享论坛有一个反吸血鬼政策来保护下载内容,在那里,用户将需要付出比大多数吸血鬼愿意付出的更多精力或耐心才能访问“下载区”。
  • 大多数 BitTorrent 网站将吸血鬼称为正在下载文件的客户端,但由于他们没有完整的文件副本,因此无法播种它。默认情况下,它们被配置为允许特定客户端在上传更多数据时下载更多数据。
  • 在共享网络(例如学校或办公室局域网)上,任何故意过度使用带宽(以至于明显降低网络的正常使用)都可以称为吸血鬼行为。
  • 在在线电脑游戏中(尤其是角色扮演游戏中),吸血鬼是指玩家加入某个队伍的目的是为了获得奖励,而没有为获得这些奖励所做的努力做出任何贡献。有时,为了提升玩家等级,允许这样做。通常来说,在没有征得小组成员同意的情况下这样做,被认为是不好的行为。在第一人称射击游戏中,这个术语指的是一个人,他通过让队友将他带到胜利而获益。
  • 直接链接是一种带宽吸血鬼行为,当在属于第二个网站(吸血鬼)的网页中放置一个未经授权的链接对象(通常是图像)时,该对象通常来自第一个网站。这构成了未经授权使用主机网站的带宽和内容。

在某些情况下,吸血鬼与白吃白喝同义,而不是局限于计算机环境。

可能的解决方案

Clipboard

待办事项
完成


信任和声誉

由于点对点网络的波动性和模块化特性,点对点信任(在构建社区的参考中提到)和用户参与是为最终归属于创建者的服务或资源的在线交易提供的少数动机或润滑剂之一。在参与者中拥有良好的平均信誉也将增强对网络和构建在其上的系统的信任。


Clipboard

待办事项
完成


文件共享

Sharing.
共享。

传统上,文件传输涉及两台计算机,通常被指定为客户端和服务器,大多数操作是将文件从一台机器复制到另一台机器。

大多数 WEB 和 FTP 服务器因流行而受到惩罚。由于所有上传都从一个中心位置进行,因此热门网站需要更多资源(CPU 和带宽)才能应对。使用 P2P,客户端会自动镜像他们下载的文件,减轻发布者的负担。

大多数 P2P 协议的一个限制是它们不提供复杂的 文件系统模拟或用户权限系统,因此像 NFS 或 FTP 协议提供的复杂文件操作非常少见,这也是有原因的,因为网络是去中心化的,因此用户身份验证系统很难实现,而且大多数系统很容易被破解。

关于 P2P 传输的另一个概念是带宽的使用,事情不会是线性的,传输将取决于资源的可用性、种子节点的负载、网络大小以及本地用户连接及其带宽的负载。

如前所述,下载具有限制性版权、许可或受特定国家法律保护的文件,可能会增加被起诉的风险。这些网络上提供的一些文件可能受版权保护或受法律保护。您必须意识到存在风险。

接收

Clipboard

待办事项
...身份验证... ...数字签名...


来自多个来源(分段下载,群组下载)

多源下载(分段下载、群组下载)可能是更有效的方式下载文件从多个对等节点。单个文件从多个不同的来源或上传者并行下载。这可以帮助一群用户使用非对称连接,例如ADSL为一个下载者提供高总带宽,并处理下载需求峰值。所有群组传输都依赖于至少存在一个完整的文件的完整副本(可能的演变可能包括添加某种里德-所罗门 (RS) 算法)并且它主要对大型文件有用(大小取决于可用带宽,因为权衡包括更高的 CPU 成本和额外的数据传输以使系统正常工作)。

这种技术不能神奇地解决问题,在一组上传带宽不足的用户中,需求高于供应。但是,它可以很好地处理峰值,并且它也可以在一定程度上让上传者“更频繁”地上传,以更好地利用他们的连接。但是,简单的实现通常会导致文件损坏,因为无法知道所有来源是否都实际上传了同一文件的片段。这导致大多数程序使用分段下载使用某种校验和哈希算法来确保文件完整性。

恢复

Clipboard

待办事项
完成


下载时预览

这可能有助于让用户在下载过程完成之前尽快预览文件,这将提高网络上共享的质量,增强用户的信心,减少时间和带宽的浪费。

安全

Clipboard

待办事项
完成


中毒和污染

示例包括

  • 中毒攻击(例如,提供内容与描述不同的文件)
  • 污染攻击(例如,将“不良”块/数据包插入网络上的有效文件)
  • 插入
    • 病毒到携带的数据(例如,下载或携带的文件可能感染了病毒或其他恶意软件)
    • 恶意软件在点对点网络软件本身(例如,分发的软件可能包含间谍软件)
权利保护

保护内容的版权不应该强加于公众,即使今天大多数版权政策已经取消了声明作品保留权利的必要性,也不应该有任何期望公众必须不遗余力地保护少数人的利益,即使他们没有明确说明。预计公共领域的作品今天将超过拥有有效版权的作品。

鉴于实际情况,任何 p2p 应用程序都有道德义务告知用户因这种非常混乱的情况而产生的问题。随着时间的推移,一些解决方案出现以缓解问题并帮助版权持有者保护他们的作品,但那些应该关心这个问题的人似乎没有表现出任何兴趣。本节将尝试展示可用的可能性。

解决此问题的简单方法是明确将识别版权作品的责任归于权利所有者,为了实施此解决方案,需要有一个数据库可供 p2p 应用程序免费使用,以便可以声明内容为版权作品,或者需要创建一个标准来明确识别这些作品。为了解决这个问题,人们讨论并提出了几种解决方案,但在 2003 年 7 月,Kokopelli Network Inc.(由 Alex Sauriol 共同创立)提出了一个名为 BluFilter 的解决方案,它可以通过比较存储在 mp3 中的波形来识别版权状态(请参阅kokopellinetworks.com @ web.archive.org),这种方法似乎可行,但没有采用类似的技术似乎公开用于告知用户,但有传言称类似的方法已被用作合法诉讼的基础。


Clipboard

待办事项
完成


分布式代理

Clipboard

待办事项
完整(Tor、Squid)


VoIP

Clipboard

待办事项
完成


分布式流媒体

Clipboard

待办事项
完整(Freecast)


优先级设置

在传输上启用动态优先级集不仅可以使用户满意,而且提供了一种简单的方法来促进对高度病态内容的传输,从而提高网络上同一内容复制的速度。

人们甚至可以更进一步,允许按资源配置,启用对每个资源的删除或配置访问权限,例如在文件系统上,甚至启用一种方法来允许数据自由交易的市场,让用户为该资源设置特定的比率。

带宽调度器

管理本地资源不仅对本地用户很重要,而且对全局网络也很重要。管理和启用对应用程序带宽使用的控制将激励用户改进他们管理该资源的方式(使用什么以及如何使用),如果应用程序将其视为动态资源并予以考虑,则可以通过减少浪费来对全局网络产生积极影响。

许多实际的 P2P 应用程序允许用户对自己的带宽进行这种控制,但这不仅对 P2P 有益,如今,随着大多数计算机的重要部分连接到互联网,管理这种稀缺资源至关重要。一个例子是微软的后台智能传输服务 (BITS),其目标是在其他应用程序未使用带宽时启用系统更新,甚至启用 MS IM 服务来传输数据,需要注意的是,还可以使用 BITS 技术,因为它通过组件对象模型 (COM) 公开。

"新" 模型

容错网站

许多人推测,点对点文件共享技术可用于改进 wiki 和其他类型的互联网服务。

高质量视频或大型文件分发

互联网基础设施不是为支持广播而设计的。P2P 通过将服务器或内容提供者从单点切换到去中心化基础设施来部分解决这种基础设施瓶颈,这并非取决于特定网络限制,而是取决于优化分发及其流行度的协议。


Clipboard

待办事项
完整,涵盖“多播”


2008 年 2 月,欧盟宣布承诺投入一个为期四年的项目,该项目旨在创建一个开源、类似于 BitTorrent 的点对点客户端,称为 P2P-Next,该客户端基于对代尔夫特理工大学 python 项目 Tribler 的改进。欧盟将为此项目投入 1400 万欧元(1050 万英镑,2200 万美元),另外 21 个合作伙伴将再投入 500 万欧元(370 万英镑,740 万美元),其中包括欧洲广播联盟、兰开斯特大学、英国广播公司、Markenfilm、VTT 技术研究中心和先锋数字设计中心有限公司。

视频分发

即使现有的几个 P2P 应用程序确实支持视频分发,但它们很少拥有持续的基础设施,而且主要目标是允许订阅视频内容。几个应用程序确实提供搜索,但将视频播放器/媒体管理器与分发进行谨慎集成至今仍然非常罕见,是一个不断发展的主张。

考虑到像 YouTube、Google Video 及其同类产品这样的中心化系统在在线视频方面打开的大门,这种对分发的新需求导致了几个 P2P 产品的创建,例如 Joost(来自 Kazaa 和Skype 应用程序的同一团队),Tape it off the Internet 或 Veoh TV。

在新的兴起平台中,值得特别注意的是 Miro(前身为 Democracy Player),这是这类项目中的先驱之一。它可以在 http://www.getmiro.com/ 获取,是一个开源的(支持所有当前版本的 Windows、Mac OS 和多个 Linux 发行版)非营利性视频播放器,支持几乎所有格式。它由参与式文化基金会 (PCF,一个非营利组织) 创建,它自动化订阅视频 RSS 馈送,然后使用 Bittorrent 下载,从而减少了分发所需的带宽费用。此外,还提供了 Miro Video Converter 应用程序,它促进了视频转换为无专利 OGG Theora 编解码器(它提供与非免费 h.264 相同的质量),并且一直支持让维基百科上的视频的活动。

实时视频

使用实际基础设施将实时活动传输给数百万人,会对输出质量施加限制,并对硬件资源提出很高的要求,不仅包括网络资源,还包括传输两端编码和播放功能。

这导致了使用 P2P 网络,试图节省服务器带宽。这种新方法的一个例子是来自微软亚洲研究院的 MSR 亚洲点对点视频广播系统(http://research.microsoft.com/en-us/projects/p2pbroadcast/),该系统在 2008 年北京奥运会上使用,声称使用了超过 200 万个互联网对等节点。

通过半私有的 P2P 网络分发数字内容

近年来,P2P 也被用于帮助减轻一般数字内容分发系统中的负载,该系统具有受限的参与(非公共访问)和专用功能。

BitTorrent DNA 或 **BitTorrent Delivery Network Accelerator** 据报道自 2005 年 1 月起开始运作,以这种方式运作。这种分发技术对于游戏软件公司尤其有趣,这些公司一直在将其业务转移到互联网,并采用订阅服务或内容的商业实践,取代了销售其创建的数字商品副本的所有权,或者采用混合模式。这将需要网络连接来下载通常受 DRM 保护的额外内容,传输次数增加,以至于在更新过程中甚至在安装产品时,用户机器将被用于创建 P2P 网络,有时甚至没有消费者完全知晓,以帮助分发该付费内容。

暴雪 例如,使用 BitTorrent 并告知用户,在下载某些内容时,用户还将在 P2P 网络中共享该内容。

Solid State Networks 已经提供了一种基于 P2P 的交付解决方案,就像 Akamai 一样,它向游戏发行商出售 Netsession 接口。还有一些其他工具用于实现相同的效果(不限于游戏),但作为帮助分发大型文件的工具,Pando Media Booster 就是一个例子。

但是,关于利用客户资源的透明度存在问题。Solid State Networks 最近,在多位客户报告了有关这种新方法的问题后,这种方法通常会降低用户系统的安全性、稳定性和性能,已经开始了一项运动来建立行业“最佳实践”,否则这些解决方案中的大多数将属于恶意软件的定义,http://www.solidstatenetworks.com/index.php/about-us/p2p-best-practices/ (PDF).

P2P 也用于数字艺术,例如 电子羊 项目(http://community.electricsheep.org),一个基于 libtorrent BitTorrent 实现的 C++ 开源项目,是一个 分布式计算 项目,用于为 分形火焰 制作动画并使其进化,这些火焰反过来又分发到联网的计算机上,这些计算机将其显示为 屏幕保护程序。对于偶尔的用户来说,这个过程是透明的,他们可以简单地安装软件作为屏幕保护程序。或者,用户可以更多地参与项目,手动创建羊(动画分形火焰的视频文件)以上传到服务器。

硬件

随着 P2P 协议变得更加成熟,并声称已获得良好的公众采用程度,我们将看到更多嵌入式设备支持 P2P 解决方案。这种情况已经开始出现。

  • TonidoPlug(http://www.tonidoplug.com)是一款小型、低功耗、低成本的个人家用服务器和 NAS 设备。Tonido Torrent 是一款基于 Boost 许可的 libtorrent 库中 BitTorrent 实现的基于网络的 Torrent 客户端。
  • Excito(http://excito.com)也提供一系列服务器,名为“Buba”,这些服务器通过使用 Boost 许可的 libtorrent 库来支持 BitTorrent 协议。
流量整形器
机顶盒

P2P 技术还可以用于提供一种以低成本自动方式分发内容的方法。

使用直接连接到宽带线路的点对点架构,一个机顶盒(一种简化的 PC),带有操作系统和一些存储空间,可以例如提供类似于视频点播的服务。

VUDU

VUDU(http://www.vudulabs.com/),数千部电影直接送达您的电视,无需电脑,并且独立于您的有线或卫星电视服务。


Clipboard

待办事项
TiVo、WebTV、Openwave、2Wire、Slim Devices、OpenTV 和 Danger


分布式文件系统

分布式文件系统并不新鲜,但前 P2P 系统依赖于服务器(或从已知机器池中选举服务器),并且主要侧重于提供网络稳定性的局域网。新的系统更可靠地面对网络的波动性,并实施了 P2P 依赖的新技术。大多数 P2P 分布式文件系统的实现将在一定程度上基于 FreeNet 模型演变。

Tahoe-LAFS (http://allmydata.org/trac/tahoe/wiki) 是一个安全的远程(分布式)文件系统,根据 GNU 通用公共许可证 (GPL) 发布,它与 P2P 共享底层网络架构和最少权限原则,但它不是完全去中心化的。它需要一个中心节点,称为引入者,用于连接新节点。

其目标是在多个对等节点(云存储)中创建容错存储池,其中每个人都为彼此提供存储空间。文件使用 AES 加密在多个节点之间分布。Reed-Solomon 纠错的变体用于允许对等节点断开连接而不会影响内容的完整性。

Tahoe 是免费软件:所有源代码都根据开源许可证提供。主页在 http://allmydata.org。Tahoe 由 allmydata.com 赞助,该网站使用它作为商业个人数据备份服务的后台。

Omemo (http://www.omemo.com/) 是一个根据 GPL 发布的免费开源 (Visual Basic) P2P 应用程序,由 Pablo Soto 创建,他是 MANOLITO 协议和 Blubster 的创造者。Omemo 采用不同的方法,使用基于 Chord 的环形 DHT。它旨在支持基于密钥的路由,同时由于随机化而保持查询源模糊。适用于 Windows。

移动点对点计算

PEPERS 项目

PEPERS 项目 (http://www.pepers.org/) 的重点是设计、实现和验证一个可靠的平台,该平台为未来环境智能 (AmI) 环境中安全移动点对点应用程序的设计、开发和运营部署提供高级支持。该平台将极大地帮助工作,并使移动应用程序和服务提供商以及服务用户受益。该项目将通过提出一个相关的框架架构来解决与移动点对点 (p2p) 系统中的安全性、隐私、信任和访问控制相关的问题。该框架将包括对基于策略的移动系统安全管理的支持。该项目的特定主题重点(也反映在将实施的试点场景的选择中)是在地理区域分散的团队之间的协作。该财团合作伙伴来自 4 个欧盟成员国(希腊、英国、意大利和塞浦路斯),包括关键技术提供商和行业参与者,以及领先的学术机构,以及来自不同商业领域(媒体和新闻、安全服务)的用户合作伙伴,他们对通过先进技术解决方案进行安全协作的需求不断增加,这些解决方案带来了重要的专业知识和知识,涉及 PEPERS 相关技术以及底层的运营商业模式。

从技术角度来看,该项目将重点关注

  • 为通过合适协议的移动点对点应用程序定义适当的安全服务
  • 分析和设计移动设备中可能的平台和接口,这些平台和接口可以提供安全服务来支持点对点应用程序
  • 基于开放标准的接口定义,这些接口将允许安全地访问应用程序服务器

基于项目技术的移动点对点应用程序的安全使用将在支持两个运营领域的实际试点应用程序中得到验证

  • 媒体和新闻:出差的记者需要能够以保护和监控知识产权以及雇用他们的组织利益的方式记录、编辑和交换信息。这特别相关,因为它涵盖了移动工作力的总体问题以及与媒体应用领域更具体的问题。
  • 物理安全:警卫和移动巡逻人员需要能够在动态环境中接收和传输敏感的客户信息,以便他们在出现临时突发事件时做出响应和合作。

数字货币

比特币

**比特币**(http://www.bitcoin.org)是一个基于点对点的数字货币系统,没有中央服务器或可信方,没有中央机构来发行新货币或跟踪交易。网络节点拥有自己货币的加密密钥,并借助网络直接相互交易,以检查双重支出。

比特币系统货币供应的有限通货膨胀是通过整个网络(按 CPU 算力)平均分配的。

  • 通过互联网进行资金转账,无需中介。
  • 没有第三方控制交易。
  • 交易实际上是免费的。
  • 没有由部分准备金银行或央行政策造成的固有波动。

外部链接

华夏公益教科书