有人能说说种子下载的原理吗,尤其是国内这种好几千个用户共用一个公网 ip 的情况,用户都处于私有网络,互相不能直接连通这种复杂网络背景下

2023-10-10 11:40:07 +08:00
 bler

我有一个想法,udp 不是无需建立连接就能发送数据包吗,有如下一个场景

1 、有一个 tracker 服务器

2 、用户 a

3 、用户 b

1 、用户 a 向 tracker 服务器发送 udp 数据包

2 、tracker 服务器接收到 udp 数据包后通知用户 b (由于 b 处于内网环境,用户 b 向 tracker 服务器主动获取通知)

3 、然后用户 b 获取从 tracker 服务器获取用户 a 的 ip 信息, 然后用户 b 向 a 发送数据包,这样数据就不用通过 tracker 服务器中转,节省 tracker 服务器带宽

有没有计算机网络的大佬能不能说一下这个方案的可行性怎么样

4295 次点击
所在节点    宽带症候群
33 条回复
titanium98118
2023-10-10 11:47:09 +08:00
我印象中 BT tracker 只交换 peer 信息,不做数据中转?
smilekung
2023-10-10 11:48:01 +08:00
这不就是 udp 打洞么,如果双方都没有公网是很难成功的,因为 tracker 拿到的是 nat 地址,直连是不一定能打通的
AoEiuV020JP
2023-10-10 12:12:09 +08:00
思而不学则殆
NoOneNoBody
2023-10-10 12:17:43 +08:00
tracker 只是个“临时通讯录”
tracker 的压力是请求数量巨大,不是传送数量
luny
2023-10-10 12:22:53 +08:00
1. 内网用户可以通过 trakcer 获取 peer 节点信息,主动连接,外网用户可以被动连接,速度会更好
2. 有个 DHT 的技术,现在客户端都支持,可以不需要 tracker 服务器,实现 peer 获取
nothingistrue
2023-10-10 12:30:25 +08:00
首先纠正一点,UDP 是不需要回复确认,不是不需要建立连接,可以认为它是单向连接。UDP 因为是单向连接,如果双方要相互沟通数据那么双方都得在公网上,这点反而不如 TCP 。

补上 2 点,就是 BT 下载的方式。
1 ,a 、b 跟 tracker 之间,只会沟通用户 a 、用户 b 的信息,不会传递真正的数据文件。跟 traker 之间的沟通,UDP 、TCP 皆可,不过如果是正常网络那么 TCP 就很浪费。
2 ,a 、b 各自从 traker 获取到对方的信息之后,a 、b 之间就抛开 tracker 直接建立 TCP 连接,然后相互传递文件数据了。a 、b 之间,最少有一个要有公网端口( NAT 出来的端口也行),否则是无法建立 TCP 连接的。
Maboroshii
2023-10-10 12:50:06 +08:00
复制于 google, 可以了解下就知道了。

NAT 转换类型一般有 4 种:

NAT1:Full Cone NAT (完全圆锥型,一对一)
NAT2:Restricted Cone NAT (地址限制圆锥型)
NAT3:Port Restricted Cone NAT (端口限制圆锥型)
NAT4:Symmetric NAT (对称型)
iOCZ
2023-10-10 12:57:51 +08:00
存在无法连上其他 peer 的可能性的
bler
2023-10-10 13:10:06 +08:00
@nothingistrue 我知道 udp 不需要回复确认,但是 a,b 都处于内网之中,b 向 a 无法直接发送数据啊。还有 a,b 用户通过公网建立 tcp 连接,b 向 a 发送数据不一样要占公网服务器的带宽吗。
bler
2023-10-10 13:13:59 +08:00
@titanium98118 那我们下载的数据从哪来的,总得要有一个公网做 a 和 b 数据转发吧, 那同样要占用这个公网服务器的带宽了,这个公网服务器是由谁提供的呢
bler
2023-10-10 13:25:59 +08:00
能哪位大佬能出个 a,b 两个内网用户交互种子资源的网络拓扑图吗,主要是数据的流向,怎样流动的,我想知道各方的带宽占用情况,这个 p2p 到底是怎么个数据流向,尤其是国内这种都处于内网的情况下
xiaozecn
2023-10-10 13:27:49 +08:00
一个被封杀的账号几年前做的科普视频,<amp-youtube data-videoid="jp0bF9Qu2Jw" layout="responsive" width="480" height="270"></amp-youtube>?si=7hmgM0WEhavAwVr9
titanium98118
2023-10-10 13:33:37 +08:00
@bler #10 那我们下载的数据从哪来的:1 、由下载完成的用户上传,即种子。2 、正在下载中的用户上传已有的部分
expy
2023-10-10 13:37:33 +08:00
两个内网用户基本连不上,不过现在 ipv6 基本普及了,大家都是公网。
bler
2023-10-10 13:39:17 +08:00
@xiaozecn 谢谢,我的主要目的还是想知道,在 a,b 两个用户处于内网( nat )网络环境下,有没有方案实现不依托于公网服务器交换数据,公网服务器只交换两者的地址,然后两者自己进行数据交互,这样能不占用公网的带宽流量。所以我才有上面的一个设想场景,a 内网发送请求,tracker(或者是其他中转服务器)完成对 b 的网络交互通知,然后 b 发送数据给 a ,而不是 b 把数据给 tracker(或者是其他中转服务器),然后再发送给 a
wy315700
2023-10-10 13:39:58 +08:00
a,b 两个内网用户基本上是连不上的

这个时候就需要一个公网用户 c ,a 和 b 从 c 下载东西。


OP 以前没玩过电驴吧,电驴会根据其他用户能否连上你的端口给你分 high ID 还是 low ID 的。
asdgsdg98
2023-10-10 13:44:35 +08:00
你是全锥形,就可以随意下载和上传,理论上能访问任何资源
你是对称型的话,基本告别 bt 了
TNOK
2023-10-10 13:45:30 +08:00
@bler BT 现在就是这么实现的呀,没有中转的,tracker 就是为了让 a 和 b 建立连接不干别的,就算是内网,如果打洞成功也是可以将 a 和 b 连接起来的,你说的那种纯大内网右下角会显示不通并且没有速度的
bler
2023-10-10 13:50:03 +08:00
找个一个讲的比较好的文章,感兴趣的可以看看: https://www.h3c.com/cn/d_201206/922130_30005_0.htm
MeteorVIP
2023-10-10 14:09:02 +08:00
tracker 服务器是通讯录.存有 A 和 B 的 ip,上传和下载不通过 tracker 服务器.是 A 和 B 之间相互传文件.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/980561

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX