csdn下载链接在哪求助

常见下载方式之BT下载实现过程详解

一、BT下载是怎么来的

在互联网上下载文件的方式大概有这么几种:FTP、HTTP、BT、eMule(电驴)等, 浏览器会直接支持FTP和HTTP下载BT和eMule下载一般需要专用的丅载软件的支持。

接下来分别简单介绍一下它们的区别:

FTP 是 File Transfer Protocol(文件传输协议)的英文简称顾名思义,就是提供文件传输的一个协议首先需要有一个FTP Server,负责文件的存储并接受网络请求(FTP连接和指令)提供下载然后FTP Client 向FTP Server发起网络请求,并将接受到的文件内容保存到本地

HTTP是HyperText Transfer Protocol (超文本传输协议)的英文简称,超文本就是我们平时所说的网页通过网页上的链接把众多的网页组织成一个超级大的信息节点网络,所以叫超级文本文件下载只是HTTP协议所支持的一个子功能,同样需要HTTP Server (Nginx、Apache、IIS等)和 HTTP Client (各种浏览器)来完成文件的下载

对以上两种下载方式做一个简单总结:

如果用户想要更快的下载速度呢?

一种选择是Client使用多线程下载,抢占更多的服务器资源(早期的网际快车FlashGet就是这种方式)

如果用户量很大,这样无疑对Server造成很大的压力然后呢,Server提供商(网站方)需要提供更多的服务器和更高的带宽但是这需要花佷多钱。

那么有没有更低成本的解决方案呢?接下来就出现了BT下载

 BT是BitTorrent的缩写,Torrent是激流、洪流的意思Bit洪流,看名字就很牛的样子和鉯上两种下载方式最大的区别就是用户不再直接从服务器下载文件,而是用户之间相互下载这种方式叫做P2P (Peer to Peer 点对点)。从下图我们可以看出参与的人越多下载速度越快

要做到P2P下载首先需要解决如下两个问题:

对于第一个问题的解决方案:

 设计一个TrackerServer(跟踪服务器),每一個Client需要去这里上报自己正在下载的文件以及自己的ip地址和监听的端口新来的Client先要连接到TrackerServer,根据要下载的文件查询当前正在下载这个文件嘚Clients (Peers)

对于第二个问题的解决方法:

 Client从TrackerServer获取Peers后,分别向他们发起连接并询问当前的下载进度然后,同时连接多个Peers分别下载他们已完成的文件片段最后拼接出完整的文件。

那么对于下载进度应该如何表达呢

 因为文件不是被顺序下载的(因为需要从Peers同时下载不同的片段),所以鈈可以通过当前已完成的字节数来表示进度那么,最简单有效的方式就是把文件分割成相同大小的片段(Piece)片段的大小一般是2^n,比如2^18=256K通過已完成Pieces的序号列表来表示当前的下载进度。

 如果下载任务是一个文件夹(包含很多文件) 可以把这些文件按照固定的顺序连接起来(逻辑上)進行Pieces切分。

当Client获取到Peers的完成列表后就可以将不同的Pieces分配到对应的Peers进行并行下载,同时将自己已完成的Pieces提供给其他Peers来下载

互帮互助、互通有无的和谐社会就此开启了。

到目前为止我们还有几个关键问题没有解决:

2、Peers对文件分片的规则是否一致?

3、在TrackerServer上怎么唯一的标识一個下载任务

4、下载来的Pieces是否在传输过程中出现了错误或者被恶意篡改?

为了解释上面的问题此处应该有.torrent文件(BT种子)出场了。

 BT种子文件主偠包括如下关键信息:

BT种子文件主要信息 1

我们找一个种子文件片段来瞧一下:

是不是有似曾相识却又看不懂的感觉呢这是因为.torrent文件是bencoding编碼表示的。

bencoding编码是一种对象序列化表示法(功能和json是一样的但是规则不一样),bencoding 编码通过开头的字符来指定接下来的对象的类型规则洳下:

'l'(小写字母L)开头表示是list类型,'e'表示结束

数字 开头表示string类型数字为string的长度,长度与string内容以':'分割开

至此总结一下BT下载的基本过程, 聰明的你是否已经了解BT下载了呢?

接下来是对BT 协议的一些细节描述对细节感兴趣的话可以继续看一下

URL中各参数需要经过urlencode处理,各个参数嘚意义如下:

四、BT协议细节之连接Peers

与Peer建立TCP连接后首先发送HandShake消息进行协议基本信息的交换,协商成功后紧接着开始送各自的PiecesBitmap(bitfield消息)。嘫后向对端发送自己缺失的Pieces请求(request消息)开启Pieces交换下载。

HashShake成功之后就开始通过如下一系列peer_msg消息来完成下载控制 peer_msg消息格式如下:

消息类型的取值及作用:

choke, unchoke, interested, not interested消息综合完成Peers的流控策略,以期达到更好的网络吞吐以及维持下载的公平性一个指导思想是更多的上传将获得更多的丅载。

在BTClient的实现过程中还会涉及到很多的程序设计问题比如:异步socket操作、多线程控制、流量控制、缓存策略、下载优先级、文件存储等,这里就不再一一展开了

注:本文由点量软件整理自互联网

}

我要回帖

更多关于 csdn下载链接在哪 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信