bt原理分析(转)

Jim Jim     2022-08-25     503

关键词:

BT种子文件结构分析,参考:http://www.cnblogs.com/EasonJim/p/6601047.html

BT下载,参考:http://baike.baidu.com/item/BT下载

BitTorrent协议

BT全名为BitTorrent,是一个p2p软件,你在下载download的同时,也在为其他用户提供上传upload,因为大家是“互相帮助”,所以不会随着用户数的增加而降低下载速度。

下面是一般用ftp,http等分享流程:

下面是用BitTorrent分享的流程:

其实跟ED也十分相似,ED跟BT不同的地方有:

ED--要连上一个固定server BT--没有固定server,只要分享者制作出该分享档案的.torrent档公布出来便可

ED--分享的人越多速度越快? BT--种子seed越多速度越快

ED--世界性的分享 BT--团体性的分享(可做到速度保证)

ED--知道在分享者的user name &速度 BT--没显示使用者/分享者名字

比起其它的P2P软件,BT有个独特的地方,它存在一个中间的WEB服务器,就是我们在发布的时所填写的announce。 该服务器提供了发布的统一管理,不像其它P2P软件那样到处去找哪些非常不稳定的个人服务器,相对起来让人安心的多。

该WEB服务器更大的作用是内网用户可以做 Send(下面会说明原理),这是其它软件无法做到的,但不好的地方是announce当机的时候就无法下载了。要知道P2P下载关键是要人气要高,announce停一下就搞到人气全没有了。

.torrent 的作用

大家都知道我们要用BT下载 ,就要先下载一个.torrent文件,这个文件到底有甚么呢:

首先是 announce 纪录了发布服务器的位置,让BT知道是那个WEB服务器发布的,然后是一些文件信息,文件名,目录名,长度等等,最后是片段长度,和片段的 Sha1 校验码,(BT为了事现续传和文件校验,就把文件分成若干个片段),大家可以用写字板打看torrent文件看看,就是知道个大概,后面的乱码是片段 Sha1 校验码。

开始-续传的实现 sha校验

BT 打开一个 torrent文件后,先要你选择文件保存那里。然后判断文件不存在的话就建立新文件,存在的话就用 Sha1 校验码去校验文件---错误的就是还没下载的,这样就可以实现续传了,但128位校验,想不慢都不行

得到 peer

现在知道要下载甚么了,到那里下载呢?这就要寻找有谁提供上传了,这里BT是通过WEB服务器来实现的,首先BT会通过分析 torrent 来得到下面一串网址

http://btfans.3322.org:6969/announce?info_hash=%CDg%D4%19%AD%96%9D%93%03%DB%E4%FFXA%C6%5D%043%17O&peer_id=%00%00%00%00%00%00%00%00%00%00%00%00%A3E%E0%9BeB%90d&port=6882&uploadED=0&downloadED=0&left=19171922&event=startED

http://BTfans.3322.org:6969/announce 是发布服务器的地址

info_hash 是torrent文件中的 info 部分的Sha校验码,WEB通过它在发布列表找到对应的纪录

peer_id 是自身的标识,它是12个0和当前时间+全球的唯一标识码(GUID)的Sha校验的前八位,共20位

port 你提供上传的 port

IP 你的ip地址,没有的话服务器会自己找到

uploadED downloadED 你上传和下载了多少,服务器可以用它来做流量分析

left 你还要下载多少个字节

event 状态,告诉服务器你是准备开始下载,还是停止,还是下载完成了

以上这个操作默认 5 分钟做一次,或由服务器设定

服务器会做什么

服务器中有个一个 track 程序来管理这些请求,得到这一串代码后就会用 info_hash 来查找列表,找到你就可以下载,找不到就对不起啦。接着它会反连(NatCheck)你的 IP 和 Port这样就可以知道你是内网用户还是共网用户(如果你是内网用户,它是连不通的,因为它会连到你的服务器上,你的服务器当然没有这个端口啦),然后服务器返回现在正在下载这个文件的所有公网用户的IP和port,就像是:d8:intervali1800e5eersld2:ip14:xxx.xxx.xx.xxx7eerid20:00180531904b7e3abdd74orti6881eeee

interval 1800 是告诉 BT 隔多少秒来查询一次这里是 30 分钟 (有点过分了),最后如果你是公网用户它会把你提交的 IP 和 Port 放到info_hash 对应的列表中,这样其它人就可以找到你

下载

得到这些 peer IP后,BT就可以找到对应的IP下载了,BT会到所有的peer去寻找自己要下载的东西,不是一定要到seed下载。BT每找到一个peer就和建立一个Socket来下载,所以下载的人越多,速度就越快。

内网用户可以做Send的原理

上面说到服务器只会返回公网的ip的,那内网用户怎么可以做Send呢,这是因为BT是一个主动连接的软件(即使你已经下载完了,也不也会主动连接他人)下面是一个仿真流程:

1 内网用户开始做 seed,

2 服务器收到请求,由于是第一个所以也没有peer返回

3 公网用户提交请求,由于seed是内网用户所以也没有peer返回,等待下载,但服务器会把它的IP放到列表中

4 内网经过 interval 时间间隔后,再向服务器放出请求,得到上面得公网IP

5 得到公网IP后,内网马上进行连接

6 公网用户建立连接,数据开始传输 (注意现在是公网用户做服务器,内网用户做客户端,是不是有点怪)

7 其它内网用户去上面公网用户下载数据

所以,内网用户做 seed 一定要有公网用户得参与,否则其它内网用户无法下载。如果全部是内网用户,那个所有连接都不会成立,当然这是比较极端的情况。

以上可见,内网用户不能和内网用户连接,其它用户无法从服务器查到你,所以无法主动连接你,你只能每隔30分钟从服务器找到公网用户一个个进行连接。

由于中国很多用户的是内网用户(我从服务器上查回来的peer还没试过超过10个的),所以内网用户用BT的确要比公网用户要慢很多

 

迅雷的下载原理:

迅雷下载原理分析(BitComet、迅雷是P2SP

迅雷的工作原理据称为”多资源超线程技术基于网格原理,能够将网络上存在的服务器和计算机资源进行有效的整合”。实际上还是传统的下载技术,只不过这种下载技术综合应用HTTP、FTP传输协议将文件的文件进行分块、分片下载;而且还可以将文件等分,然后去不同地址下载;并且在这些传统下载的过程中穿插P2P技术,也就是一种新的盗链技术。总体来说,迅雷的下载呈现以下特点:

1、多点下载。收集网上的所有下载地址以便多点下载。其他软件如网际快车不会收集在下载地址里包含了用户名和密码的下载地址,但迅雷一样收集,然后供其他人使用。这就就是“盗链”,即盗用别人的链接。

2、使用类似BT的P2P下载技术。迅雷启动后,会在系统背后启动两个线程Thunder.exe和Issue.exe,在线程里可以看得到。这两个线程,就是要像BT那样,共享本地硬盘上的文件,让其它迅雷用户下载。

3、收集用户提供的资源。例如:当有一个用户在一个电影网站上,得到一个下载地址(A),然后用迅雷下载,这个下载地址就会被发到迅雷的服务器上;另一个地方又有一个用户在另一个网站上下载同一部电影,迅雷的服务器又得到另一个下载地址(B)。迅雷服务器就会把相同文件的下载地址(A,B)集合在一起,形成一个资源,而那两个用迅雷下载这两个电影的用户也算上,就会有四个下载点。当又有用户在别的地方准备下载相同的电影的时候,迅雷就会在数据库里比较,找出相同的资源(其它下载点也就是原先收集到的),提供给那个准备下载的用户下载,这个用户就会同时有多个下载点来下载而达到速度的飞升。

例:当有一个用户在一个电影网站上,得到一个下载地址(A),然后用迅雷下载,这个下载地址就会收集到迅雷的服务器上。

在地球的另一个地方又有一个用户在另一个网站上下载同一部电影,而得到另一个下载地址(B),就又会给迅雷服务器收集。然后迅雷服务器就会把相同文件的下载地址(A,B)集合在一起,形成一个资源。那两个用迅雷下载这两个电影的用户也算上。就会有四个下载点了。而又有用户在别的地方准备下载相同的电影的时候,迅雷就会在数据库里比较,找出相同的资源(其它下载点,也就是上面收集到的),提供给那个准备下载的用户下载,那这个用户就会同时有多个下载点来下载,而达到速度的提升。而这个用户当然也不可能只是享受高速的下载,他同时也会上传了他下载的那部份数据(BT原理)。

所以,当一个用户用迅雷下载时,就会连上迅雷服务器,查找资源,如果是热门的文件,迅雷就能返回大量的下载点,供这个用户下载。从而达到下载速度的提升。

BT下载原理分析(P2P)

BT是目前最热门的下载方式之一,它的全称为“BitTorrent”简称“BT”,中文全称“比特流”,但很多朋友将它戏称为“变态下载”,这又是什么原因呢?

就HTTP、FTP、PUB等下载方式而言,一般都是首先将文件放到服务器上,然后再由服务器传送到每位用户的机器上,它的工作原理如图1所示。因此如果同一时刻下载的用户数量太多,势必影响到所有用户的下载速度,如果某些用户使用了多线程下载,那对带宽的影响就更严重了,因此几乎所有的下载服务器都有用户数量和最高下载速度等方面的限制。

很明显,由于上述的原因,即使你使用的是宽带网,通常也很难达到运营商许诺的最高下载速度,这里面固然有网络的原因,但与服务器的限制也不无关系。正因如此,BT下载方式出现之后,很快就成为了下载迷们的最爱。

BT服务器是通过一种传销的方式来实现文件共享的,它的工作原理如图2所示。举个例子来说吧,例如BT服务器将一个文件分成了N个部分,有甲、乙、丙、丁四位用户同时下载,那么BT并不会完全从服务器下载这个文件的所有部分,而是根据实际情况有选择地从其他用户的机器中下载已下载完成的部分。例如甲已经下载了第1部分,乙已经下载了第2部分,那么丙就会从甲的机器中下载第1部分,从乙的机器中下载第2部分,当然甲、乙、丁三位用户也在同时从丙的机器中下载相应的部分,这就大大减轻了BT服务器的负荷,也同时加快了丙的下载速度,也就是说每台参加下载的计算机既从其他用户的计算机上下载文件,同时自身也向其他用户提供下载,因此参与下载的用户数量越多,下载速度也越高。

 

原文:http://blog.csdn.net/it_man/article/details/6602771

bt下载原理分析

版权声明:本文为博主原创文章,未经博主允许不得转载。BitTorrent协议。BT全名为BitTorrent,是一个p2p软件,你在下载download的同时,也在为其他用户提供上传upload,因为大家是“互相帮助”,所以不会随着用户数的增加而降... 查看详情

bt种子文件文件结构分析(转)

估计80%以上接触互联网的人都知道bt是什么东西,任何一个用bt下载的人都知道这样一个概念,种子。bt种子就是记录了p2p对等网络中tracker,nodes,files等信息,也就是说,这个种子告诉你,你要下载什么,到哪里下载。bt种子文件有... 查看详情

p6词法分析nfa转dfa编译原理

词法分析NFA转DFA前言子集构造法含有ε的NFA转DFA 查看详情

[转]易语言消息机制分析(消息拦截原理)

标题: 【原创】易语言消息机制分析(消息拦截原理)作者: 红绡枫叶时间: 2014-12-17,12:41:44链接: http://bbs.pediy.com/showthread.php?t=195626  我自己做了个易语言的sig签名,方便分析的时候用.易语言例子是静态编译的.版... 查看详情

quic协议原理分析(转)

之前深入了解了一下HTTP1.1、2.0、SPDY等协议,发现HTTP层怎么优化,始终要面对TCP本身的问题。于是了解到了QUIC,这里分享一篇之前找到的有意义的文章。原创地址:https://mp.weixin.qq.com/s/vpz6bp3PT1IDzZervyOfqw作者介绍:lancelot,腾讯... 查看详情

pca原理(转)

...,但是大多数只描述了PCA的分析过程,而没有讲述其中的原理。这篇文章的目的是介绍PCA的基本数学原理,帮助读者了解PCA的工作机制是什么。当然我并不打算把文章写成纯数学文章, 查看详情

转hashmap比较透彻的分析

HashMap的实现原理 原文: HashMap的实现原理众所周知,HashMap是用来存储Key-Value键值对的一种集合,这个键值对也叫做Entry,而每个Entry都是存储在数组当中,因此这个数组就是HashMap的主干。HashMap数组中的每一个元素的初始... 查看详情

bt协议分析—1.0协议

...性2.资源的实效性(没有上传者则BT也将失效)3.版权协议分析对BT协议(1.0)的分析主要包含4个部分:1.种子文件的分析2.同Tracker服务器的通讯(采用HTTP协议)3.同其他peer(配合/协同者)的通讯(采用TCP协议)4.总结分析 查看详情

磁力链接与bt种子互转工具怎么用?使用方法

参考技术A  1、如果需要将BT种子文件转换成磁力链接,准备好种子文件    2、打开互转工具,可以点击打开种子或是直接拖拽导入    3、导入之后,就会自动将bt种子文件转换成磁力链接    4、如果需要将磁力... 查看详情

转:hashmap实现原理分析(面试问题:两个hashcode相同的对象怎么存入hashmap的)(代码片段)

原文地址:https://www.cnblogs.com/faunjoe88/p/7992319.html主要内容:1)put 疑问:如果两个key通过hash%Entry[].length得到的index相同,会不会有覆盖的危险?  这里HashMap里面用到链式数据结构的一个概念。上面我们提到过Entry类里面有... 查看详情

理解杀进程的实现原理(转)

基于Android6.0的源码剖析,分析kill进程的实现原理,以及讲讲系统调用(syscall)过程,涉及源码:/framework/base/core/java/android/os/Process.java/framework/base/core/jni/android_util_Process.cpp/system/core/libprocessgroup/processgroup.cpp 查看详情

torrent文件是啥

...结果根据BitTorrent协议内的B编码规则进行编码。它的主要原理是需要把提供下载的文件虚拟分成大小相等的块,块大小必须为2k的整数次方,并把每个块的索引信息和Hash验证码写入.torrent文件中。所以,.torrent文件就是被下载文件... 查看详情

视频tonemapping(hdr转sdr)中的颜色空间转换问题(bt2020转bt709,ycbcryuv和rgb)(代码片段)

...查之后发现是拿到的HDR视频的颜色空间是BT2020的,但转换后的SDR视频是BT709的,需要先对颜色空间进行降级才可以进行处理。这里记录一下处理过程。首先贴两个地址[1]​​​​​​RECOMMENDATIONITU-RBT.2087-0-ColourconversionfromRe... 查看详情

多线程原理分析

转(http://www.cnblogs.com/guguli/p/5198894.html)   Java对象实例的锁一共有四种状态:无锁,偏向锁,轻量锁和重量锁。原始脱离框架的并发应用大部分都需要手动完成加锁释放,最直接的就是使用synchronized和volatile关键字对某个对... 查看详情

ck1949-springboot实战与原理分析视频课程

CK1949-SpringBoot实战与原理分析视频课程随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到程序开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程... 查看详情

[转]-xargs分析

...都只是简单的介绍了它的几个用法,却没有介绍它工作的原理,man也只有简单的介绍,并没有说各个选项之间配合时的情况。所以我只能自己探索了,探索的路上确实充满了荆棘,不断的总结却不断的被实验推翻,每当以为 查看详情

网站数据统计分析之一:日志收集原理及其实现(代码片段)

...本都是基于javascript的。本文将简要分析这种数据收集的原理,并一步一步实际搭建一个实际 查看详情

rpc原理及rpc实例分析(转)(代码片段)

出处:https://my.oschina.net/hosee/blog/711632在学校期间大家都写过不少程序,比如写个helloworld服务类,然后本地调用下,如下所示。这些程序的特点是服务消费方和服务提供方是本地调用关系。publicclassTestpublicstaticvoidmain(String[]args)Hel... 查看详情