Bittorrent 如何工作?

Bittorrent 如何工作?

我想了解更多有关 bittorrent 文件共享方式的信息。我是一名技术高级用户(程序员),因此技术高级材料没有问题,但应该简明扼要。我需要一本好的资源书/网站来解释整个 bittorrent 架构。

我对细节不感兴趣,只对整体架构和术语感兴趣,例如种子、对等。

有什么建议么?

答案1

Bittorrent 工作原理概述:

  • 你有同侪和一个追踪器. 任何时候,所有同龄人都在一起一群。通常的情况是一个或几个对等方拥有完整的文件集并希望将其提供给其他对等方。

  • 一个对等方获取一个 .torrent 文件,该文件将包含以下信息:A) 文件集的 SHA-1 哈希值、B) 跟踪器的 URL 和 C) 文件被分割成的片段数,以及每个片段的 SHA-1 哈希值。片段的大小由 torrent 本身决定。

  • 然后,对等端使用 torrent 中指定的 URL 连接到跟踪器。跟踪器会以对等端列表进行响应。跟踪器通过端口 80 或 443 进行 HTTP 通信。

  • 然后,对等点使用来自跟踪器的信息选择另一个对等点,并直接联系它以建立交换会话,尝试获取一个片段。 请注意,交换会话由对等方直接完成,跟踪器不参与传输。跟踪器仅提供信息。

  • 一旦对等端拥有一个片段,它就会根据 SHA-1 哈希对其进行验证,并将其写入文件。然后它可以在选择另一个对等端时提供该片段。后续交换会话涉及“交易”片段。我相信,如果您没有其他片段,对等端通常只会给您第一个片段。

  • 对等端会时不时地重新查询跟踪器以获取更新的对等端列表。如果对等端有多个片段,则无需等待一个交换完成即可开始另一个交换,因此一旦对等端拥有大量片段,传输速度就会真正加快。这就是为什么 torrent 开始时很慢,但随着对等端获取片段,速度会迅速加快的原因。

  • 当对等方拥有所有片段时,将根据文件集 SHA-1 哈希验证整个文件。然后,它变成播种机,现在只是帮助提高文件集的可用性。没有所有部分的对等点吸血鬼

  • 如果一个 torrent 没有种子,它就死了,尽管如果所有对等体所持有的所有片段之间都存在文件的完整副本,他们最终会进行交换以在他们之间获得完整的副本。

  • SHA-1 哈希是跟踪器和对等端“知道”哪个文件应该被群发的方式。torrent 中的文件名不用于识别数据。无法与 .torrent 文件中的哈希相符的片段将被丢弃。持续发送坏片段的对等端将被其他对等端冷落,最终将无法连接到群中的任何人。

  • 片段尺寸越小,意味着 torrent 越稳定,因为对等点可以更快地交换片段,但这也意味着 .torrent 文件中必须列出更多片段的哈希值,因此 .torrent 文件可能很大。

  • 如果您通过 BitTorrent 发布内容,最好在希望文件可用时对其进行播种。其他对等方将帮助您,因为大多数 BitTorrent 软件都实施了算法,这些算法倾向于尝试在尽可能多的对等方之间传播内容,以最大化并发连接。通过这种方式,BitTorrent 可以帮助您发布内容并节省带宽成本。

答案2

这里有关于这个主题的很好的论文

      http://davidhales.name/posters/patarin-hales-delis-poster6.pdf (注释实际上是一个.pdf文件,可以用 Acrobat Reader 查看。)

这是某人制作的其内容的图像文件:

patarin-hales-delis-海报6

答案3

有一个YouTube 上相当不错的视频用纸板剪纸来直观地解释这一点。这不是一个技术性很强的解释,但对于用简单易懂的方式向人们解释 BitTorrent 背后的想法非常有用。

Bittorrent 在 YouTube 上的运作方式

答案4

概述对等消息协议

客户端可以使用两种协议与对等方共享信息,即 TCP 或 uTP(通过 UDP)。以下数据如下bittorrent 协议规范, 部分对等消息

因此,从编程上讲,两个客户端之间必须建立连接。建立连接后(通过 TCP 或 uTP),客户端会发起一次 bittorrent 握手,从 tracker 或通过双氢睾酮. 这次握手包含信息哈希识别此连接所涉及的 torrent。

首先我们来看看 Torrent 数据是如何通过协议截断的。是您通过网络共享的数据的一部分。不要与堵塞,即包裹在小包中的一块碎片。堵塞是共享的粒度通过数据包,以及是通过对等点共享 Torrent 的粒度。

当连接开始时,两个客户端(本地客户端,我将称之为LC和远程客户端,钢筋混凝土) 是窒息不感兴趣窒息意思是“我不会回复你的任何消息,太忙了,但我可能会考虑”。畅通无阻因此意思是“我会回复你的消息”。感兴趣的当然,这意味着我想要一些你有。因此,两个对等体之间的连接状态可以用这四个状态来定义:LC_chocked?、LC_interested?、RC_chocked?、RC_interested? 警告钢筋混凝土(不)堵塞或者(不)感兴趣,我必须送他(不)感兴趣(不)堵塞信息,并相互交流。

互相告知他们可以发送位域握手后立即发送的消息。顾名思义,它是一个位串,其中每个位都设置为1客户端是否具有此特殊0否则。

因此,如果LC窒息感兴趣的钢筋混凝土畅通无阻然后他可以发送要求询问消息堵塞属于一个他知道LC感谢位域信息。

当一个同伴收到整个,他可以发送一个消息来通知所有远程对等体,以便它们更新相关的位域他们正在持有。

这是一个非常基本的概述,当然这里并没有提供所有的细节,比如扼杀算法等等...如果您想了解更多详细信息,请查看我上面在评论部分发布的两个链接(作为新用户,我不能在帖子中发布超过两个链接)。

相关内容