- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我第一次使用magnet link 。我很好奇它是如何工作的,因此查阅了规范,但没有找到任何答案。 wiki 表示 xt
表示“精确主题”,后跟带有 SHA1 哈希值的格式(在本例中为 btih
)。我看到提到了base32,知道它每个字符5位,32个字符,我发现它正好容纳160位,这正是SHA1的大小。
没有 IP 地址或任何其他内容的空间,它只是一个 SHA1。那么 BitTorrent 客户端如何找到实际的文件呢?我打开 URL Snooper 来查看它是否访问页面(使用 TCP)或进行查找等,但什么也没发生。我不知道客户是如何找到同行的。这是如何工作的?
另外,哈希值是什么?它是所有文件哈希值一起组成的数组的哈希值吗?也许它是所需的实际 torrent 文件的哈希值(剥离某些信息)?
<小时/>在虚拟机中,我尝试了 uTorrent(新安装的)的磁力链接,它成功地找到了对等点。第一个同伴从哪里来?它是新鲜的,没有其他种子。
最佳答案
BitTorrent 磁力链接使用1 SHA-1 或截断的 SHA-256 哈希值(称为“infohash”)来标识 torrent。这与对等点(客户端)在与跟踪器或其他对等点通信时用于识别 torrent 的值相同。传统的 .torrent 文件包含一个带有两个顶级键的数据结构:announce
(标识用于下载的跟踪器)和 info
(包含文件名)以及 torrent 的哈希值。 “infohash”是编码的 info
数据的哈希值。
一些磁力链接包含跟踪器或网络种子,但它们通常不包含。除了其信息哈希之外,您的客户可能对 torrent 一无所知。它需要做的第一件事是找到正在下载 torrent 的其他节点。它使用运行“分布式哈希表”(DHT) 的单独对等网络2来实现此目的。 DHT 是一个大型分布式索引,它将 torrent(由 infohashes 标识)映射到参与该 torrent 群(上传/下载数据或元数据)的对等点列表(由 IP 地址和端口标识)。
客户端第一次加入 DHT 网络时,它会从与 infohashes 相同的空间生成一个随机的 160 位 ID。然后,它使用客户端开发人员控制的客户端硬编码地址或之前在 torrent 群中遇到的支持 DHT 的客户端来引导其与 DHT 网络的连接。当它想要参与给定 torrent 的集群时,它会在 DHT 网络中搜索 ID 与 infohash 尽可能接近3的其他几个客户端。它通知这些客户端它想要加入群,并要求他们提供他们已经知道的参与群的任何对等点的连接信息。
当对等点上传/下载特定 torrent 时,他们会尝试告诉对方他们所知道的正在参与同一 torrent 群的所有其他对等点。这让对等点可以快速了解彼此,而无需让跟踪器或 DHT 受到持续的请求。一旦您从 DHT 中了解了一些对等点,您的客户端将能够向这些对等点询问 torrent 群中更多对等点的连接信息,直到您拥有所需的所有对等点。
最后,我们可以向这些节点询问 torrent 的 info
元数据,其中包含文件名和哈希列表。一旦我们下载了这些信息并使用已知的 infohash
验证其正确性,我们实际上就处于与使用常规 .torrent
文件启动的客户端相同的位置并从包含的跟踪器中获取了对等点列表。
可以开始下载。
1 infohash 通常是十六进制编码,但一些旧客户端使用 Base 32 代替。 v1 (urn:btih:
) 直接使用 SHA-1 摘要,而 v2 (urn:bimh:
) 添加 multihash用于标识哈希算法和摘要长度的前缀。
2 有两种主要的 DHT 网络:更简单的“主线”DHT 和 Azureus 使用的更复杂的协议(protocol)。
3距离通过异或来测量。
关于bittorrent - BitTorrent 磁力链接如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3844502/
我是一名优秀的程序员,十分优秀!