Skip to content

深入理解P2P网络与BitTorrent协议:去中心化文件共享的技术原理

BX

p2p&BT种子

创建时间: 2025年9月9日 14:41

image.png

重点就是学习这四个核心流程

前置概念了解

DHT网络

DHT 全称 Distributed Hash Table(分布式哈希表),DHT = BT 网络能完全去中心化的关键

较为官方的解释

在 BT 网络里,它是一种 去中心化的“找人协议”。

工作原理看这个解释:

Tracker

就是追踪服务器,官方解释: 它是一个运行在互联网上的服务器,专门负责帮助 BT 网络里的 Peer(节点)发现彼此

我们需要关注的是Tracker不储存文件,只储存谁有这个文件哪个部分

这个解释也十分贴切

当你加载 .torrent 或磁力链接时,客户端会:

  1. 从种子文件 / 磁力链接中拿到 Tracker 地址。

  2. 向 Tracker 发送请求:

    我有 info_hash=xxxx 的资源,告诉我还有哪些人也在分享?
  3. Tracker 回复:

    有这几个 IP:Port 节点 → 去找他们下载吧

就算没有Tracker,理论上也是能下的,通过DHT网络查询

最大作用就是,提速!,帮助我们更快地找到更多节点

PT

PT = Private Tracker(私有追踪器)

总结一句话:PT就是一种“会员制的 BT 网络”,靠规则维持资源高质量和长期活跃

较为官方的解释:

PT = Private Tracker(私有追踪器)

它是 BitTorrent 的一种“半封闭生态”,区别于公用 BT 网络(Public Tracker + DHT)。

在 PT 网络里:

NAT以及穿透

我们需要先了解和学习什么是NAT,计算机网络中

NAT 是 Network Address Translation 的缩句,中文意思是网络地址转换

一个类比想象成一个公司或者公寓

可以从这里看出来,NAT主要的作用就是帮助我们节省了很多IP地址,这样就构造出来内网,外网这两个隔离环境和概念

关于NAT穿透我的理解

了解NAT之后我们会发现一个问题,就是NAT后的设备,我们内部设备访问公网没有什么问题,很方便和便捷,但是一个问题是,我们尝试去让访问公网访问我们就是比较难了,这时候就需要NAT穿透了

“打洞”难易程度,也就是穿透的难易程度取决于这个NAT的“严格程度”,有很多NAT类型,这里举几个

收集于网络

认识NAT后就需要了解穿透的方法

(1) UPnP / NAT-PMP

(2) TCP/UDP Hole Punching(打洞)

(3) Relay(中继)

这里我想到内网渗透的时候,进行这个代理转发

它俩解决的问题都是——解决了“外部无法直接访问内网”的问题

感觉更接近这个中继的思想

实验搭建

种一个种子

.torrent 文件

这里做一个实验,我为我以前一个图片做一个种子

具体使用软件Torrent是Transmission Qt Client

image.png

这里Tracker添加了

udp://tracker.opentrackr.org:1337/announce
udp://tracker.opentrackr.com:1337/announce
udp://tracker.dler.com:6969/announce
udp://tracker.internetwarriors.net:1337/announce
udp://tracker.moeking.me:6969/announce

还有一些属性

说明 (M):
可选,可以写一些备注

来源 (S):
一般不用填。它用于绑定 WebSeed(HTTP 下载源),下载客户端会额外从 HTTP 服务器补数据。

私有 Torrent (P):
默认不要勾。
这个是 PT(Private Tracker)站点用的,勾上就禁止 DHT/PEX,只能通过指定 Tracker 找人

最后生成一个image.torrent

这里还是使用迅雷,虽然说风评不好

因为这个资源只有我自己有.所以比较慢

image.png

但是还是下载成功了

image.png

种子文件

BT 种子文件(.torrent)本质上是一个 bencode 编码 的字典结构 可以看一下这个例子

d
  8:announce
     42:udp://tracker.opentrackr.org:1337/announce
  13:announce-list
     ll42:udp://tracker.opentrackr.org:1337/announcee
     l42:udp://tracker.dler.com:6969/announcee
  7:comment
     11:Example file
  10:created by
     12:uTorrent 3.5.5
  13:creation date
     i1694275200e
  4:info
     d
       6:lengthi12345e
       4:name12:example.txt
       12:piece lengthi16384e
       6:pieces<hash1><hash2>...
     e
e

可以看到这个格式还是比较清晰的,具体规则如下,

BT 协议自己定义的一种简单编码方式,用于存储和传输数据:

磁力链接

磁力链接基本格式如下


magnet:?xt=urn:btih:<info_hash>&dn=<name>&tr=<tracker_url>&...

这个磁力链接跟BT种子的区别

对比点种子文件(.torrent)磁力链接(Magnet)
保存内容文件元数据(完整)仅包含文件哈希等关键标识
获取方式需要先下载 .torrent 文件直接用一串链接
启动速度较快(信息已在文件中)稍慢(需从网络获取元信息)
分享方式文件形式,不方便直接传播文本链接,传播非常方便
依赖Tracker 或 DHT主要依赖 DHT(也可带 tracker 参数)

我以前一直疑惑的一个事情,其实一些冷门的磁力是下载是十分慢的,为什么我使用pikpak,迅雷这些软件能下载那么快

具体是如下

网上回答如下:

pikpak什么服务器快

总归来说技术逻辑就是

大概就这些吧,后续补充

编辑这篇文章

评论区

使用 GitHub Discussions 驱动,欢迎留言交流。

上一篇
Dify&Coze工作流搭建
下一篇
NTLM协议&攻击手法