跳转到内容

P2P 世界:BitTorrent 协议和软件

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

BitTorrent

[编辑 | 编辑源代码]

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

BitTorrent 用于分发合法内容,但本身不区分共享材料的版权状态,与任何其他去中心化网络一样,这允许大规模侵权。布拉姆·科恩和 阿什温·纳文 于 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(交付网络加速器),这是一种基于 BitTorrent 协议的免费内容交付服务,它将用户贡献带宽的力量带给传统内容发布商,同时让发布商完全控制他们的文件。

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

BitTorrent 的核心理念是用户应该在下载(接收入站)的同时上传(传输出站)。这样,网络带宽就可以尽可能高效地利用。BitTorrent 被设计为随着对某个文件的兴趣人数增加而更好地工作,这与其他文件传输协议形成对比。

BitTorrent 正在重新定义人们分享和搜索内容的方式,并且由于它非常特定于文件,并且它在 P2P 内容的“新”因素上获得优势,越来越受欢迎,用于下载电影、电视剧、完整音乐专辑和应用程序(它在性能上优于其他替代方案),更多用户意味着更快速度,但对于稀有文件或分发未被广泛搜索的内容来说,它不是最佳解决方案。

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

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

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

内容索引器

[编辑 | 编辑源代码]

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

合法种子文件(http://www.legaltorrents.com),一个由创意共享许可的合法可下载的、自由分发的创作者认可的文件集合,从电子/独立音乐到电影和书籍,这些文件已通过 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 识别内容,并旨在与网络无缝集成。它比普通 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。
感兴趣
描述一个希望获取客户端拥有的文件片段的下载者。例如,如果下载的客户端不拥有上传的客户端拥有的片段,并且希望获取它,那么上传的客户端会将下载的客户端标记为“感兴趣”。
下载者
下载者是任何没有完整文件并且正在下载文件的对等节点。这个术语,在Bram CohenPython实现中使用,缺乏水蛭所具有的负面含义。Bram 选择了下载者而不是水蛭这个词,因为 BitTorrent 的公平交换机制确保了下载者也上传,因此不公平地被归类为水蛭
阻塞
描述一个被拒绝文件片段的客户端。一个客户端在以下几种情况下会阻塞另一个客户端。
  • 第二个客户端是一个种子,在这种情况下,它不需要任何片段(即它完全不感兴趣)。
  • 客户端已经以其全速上传(它已达到max_uploads的值)。
  • 第二个客户端已被列入黑名单,因为它存在滥用行为或正在使用被列入黑名单的 BitTorrent 客户端。
冷落
如果下载的客户端在超过 60 秒的时间内没有从上传的客户端收到任何数据,则上传的客户端会被标记为冷落


Clipboard

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


BitTorrent 的扩展协议

[编辑 | 编辑源代码]

由 Arvid Norberg 和 Ludvig Strigeus 创建,(描述 http://www.rasterbar.com/products/libtorrent/extension_protocol.html),它是该协议的扩展,旨在为 BitTorrent 协议的未来扩展提供简单且精简的传输。该协议使添加新扩展变得容易,而不会干扰标准的 BitTorrent 协议或不支持此扩展的客户端。

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

Vuze(http://wiki.vuze.com/w/Azureus_messaging_protocol)似乎也存在一个并发的实现或变体,它被 Vuse 和 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 跟踪

[edit | edit source]

随着 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 文件是从洪流网站下载的。但是,几个客户端也支持 磁力 URI 方案。磁力链接不仅可以提供在 DHT 中查找共享文件的所需节点所需的洪流哈希,还可以包含该文件的跟踪器。

BitTorrent 增强提案 (BEP)

[edit | edit source]

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 作为版本控制的存储库中的重新结构化文本文件进行维护,因此它们的修订历史记录是功能提案的历史记录。

超级替换

[edit | edit source]

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

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

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

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

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

BitTorrent 协议加密

[edit | edit source]

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

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

BitTorrent 协议的发明者布拉姆·科恩反对在 BitTorrent 协议中添加加密功能。科恩表示,他担心加密会导致客户端之间出现不兼容性,并强调大多数 ISP 并没有阻止 torrent 协议。科恩写道:“我怀疑有些开发者被他们的 ISP 限速了,他们更感兴趣的是绕过 ISP 的限制,而不是整个互联网的性能。”。在遭到一些批评后,科恩后来在自己的 主线客户端 上添加了接收但不能发起加密连接的功能。值得注意的是,当 µ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 使用 密钥交换 与 torrent 的信息哈希相结合,以建立一个 RC4 加密密钥。密钥交换有助于最小化被动监听的风险,信息哈希有助于避免 中间人攻击。选择 RC4 是因为它的速度快。丢弃 RC4 输出的第一个千字节以防止 特定攻击
该规范允许用户选择只加密头还是加密整个连接。加密整个连接可以提供更多混淆,但会使用更多 CPU 时间。为了确保与不支持此规范的其他客户端的兼容性,用户还可以选择是否仍然允许未加密的传入或传出连接。支持的客户端通过 PEXDHT 传播它们已启用 MSE/PE 的事实。
对这种方法的分析表明,对 TCP 会话中前 100 个数据包的数据包大小和数据包方向的统计测量可以用来识别混淆后的协议,准确率超过 96%,这使得该解决方案仅对没有采用最先进的流量分析技术的 ISP(主要是较小的 ISP)有效。

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

软件实现

[edit | edit source]

维基百科在诸如 BitTorrent 软件比较BitTorrent 客户端的使用份额 等文章中提供了一些相关信息。以下列表是为了提供关于与其他 P2P 协议相关的实现细节的总体概念和比较。
(这不能被视为 BitTorrent 客户端的完整列表,没有使用任何特殊顺序。所有链接都已验证,软件的编程语言和许可证得到了特别关注。最后更新时间为 2010 年 9 月 11 日)

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

特定 BitTorrent 论文

[edit | edit source]
  • 2003 年 5 月 22 日 - 激励在 BitTorrent 中建立健壮性 (PDF),布拉姆·科恩
    BitTorrent 文件分发系统使用针锋相对作为寻求帕累托效率的方法。它实现了比任何已知合作技术更高的健壮性和资源利用率。我们将解释 BitTorrent 的工作原理,以及如何使用经济方法来实现该目标。

华夏公益教科书