- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
常见下载方式之BT下载实现过程详解
常见下载方式之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 (各种浏览器)来完成文件的下载。
对以上两种下载方式做一个简单总结:
HTTP 下载1
如果用户想要更快的下载速度呢?
一种选择是,Client 使用多线程下载,抢占更多的服务器资源(早期的网际快车
FlashGet 就是这种方式)。
如果用户量很大,这样无疑对 Server 造成很大的压力。然后呢,Server 提供商(网站
方)需要提供更多的服务器和更高的带宽,但是这需要花很多钱。
那么,有没有更低成本的解决方案呢?接下来就出现了 BT 下载。
BT 是 BitTorrent 的缩写,Torrent 是激流、洪流的意思,Bit 洪流,看名字就很牛的样
子。和以上两种下载方式最大的区别就是用户不再直接从服务器下载文件,而是用户
之间相互下载,这种方式叫做 P2P (Peer to Peer 点对点)。从下图我们可以看出参
与的人越多,下载速度越快
P2P 下载1
二、BitTorrent 的P2P 下载是怎么做到的?
要做到 P2P 下载首先需要解决如下两个问题:
1、 如何知道哪些 Client 在下载同一个文件?
2、 对某一个文件,如何做到同时从多个来源进行下载?
对于第一个问题的解决方案:
设计一个TrackerServer (跟踪服务器),每一个Client 需要去这里上报自己正在下载
的文件以及自己的 ip 地址和监听的端口。新来的 Client 先要连接到 TrackerServer ,根
据要下载的文件查询当前正在下载这个文件的 Clients (Peers)。
对于第二个问题的解决方法:
Client 从 TrackerServer 获取 Peers 后,分别向他们发起连接并询问当前的下载进度,
然后,同时连接多个 Peers 分别下载他们已完成的文件片段,最后拼接出完整的文件。
那么对于下载进度应该如何表达呢?
因为文件不是被顺序下载的(因为需要从Peers 同时下载不同的片段) ,所以不可以通
过当前已完成的字节数来表示进度。那么,最简单有效的方式就是把文件分割成相同
大小的片段(Piece) ,片段的大小一般是2^n ,比如2^18=256K ,通过已完成Pieces
的序号列表来表示当前的下载进度。
另外,因为 Pieces 序号是连续的,可以通过 BitMap 的方式表示每个 Piece Index 是否
已完成。Piece Index 所在的 bit 位为 1 ,表示该Piece 已经下载完成。
如果下载任务是一个文件夹(包含很多文件) ,可以把这些文件按照固定的顺序连接起
来(逻辑上)进行 Pieces 切分。
当Client 获取到 Peers 的完成列表后,就可以将不同的 Pieces 分配到对应的 Peers 进
行并行下载,同时将自己已完成的 Pieces 提供给其他 Peers 来下载。
互帮互助、互通有无的和谐社会就此开启了。
到目前为止,我们还有几个关键问题没有解决:
1、怎么找到待下载文件的TrackerServer ?
2、Peers 对文件分片的规则是否一致?
3、在TrackerServer 上怎么唯一的标识一个下载任务?
4、下载来的
文档评论(0)