P2P/BT种子下载原理
2021-04-01 18:16:25 1 举报
AI智能生成
P2P/BT种子下载原理
作者其他创作
大纲/内容
概念
现在的BT下载可以说是继局域网、ftp、http之后最广泛使用的文件分享和传播途径
BT,全称BitTorrent,是一种P2P下载方式。常见的P2P除了bt就是emule
BT,全称BitTorrent,是一种P2P下载方式。常见的P2P除了bt就是emule
对等网络(Peer to Peer)
1. 组网环境中, 彼此连接的多台计算机之间是身份对等的, 无主从之分
2. 一台计算机既可以充当服务提供者, 也能充当服务消费者
3. 把一次下载动作划分为N个下载动作, 分发给组网内的其他对等节点协助实现(C1->C0, C2->C0, C3->C0 ..... CN->C0)
对比传统下载(http/ftp)
1. Server提供下载服务, 多台Client进行资源下载
2. 瓶颈: 服务器带宽会被多个客户端分享, 越多人下载则越慢
3. 随着用户的增多,对带宽的要求也随之增多,所以很多的服务器会都有用户人数的限制,下载速度的限制,这样就给用户造成了诸多的不便
4. 一次下载动作只有1个下载动作(Server->C0)
实现
大概原理
1. 传统的http下载是从服务器(sever)上直接复制数据给客户端(PC)
2. P2P下载时,服务器(sever)不再担任以前的http下载中服务器的角色,他只负责将文件的基本信息在客户端之间中转,本身并未存放任何文件
3. P2P软件将文件被分成若干块,这里假设为A~Z块,客户端可以先下载K段再下载别的,没有固定的顺序,只要等最后文件被“填满”就完成了
专业用词
种子
1. 所谓的“种子”,就是指那些已经将文件下载完成的人,他们拥有全部的区块。
2. 发布资源的人自己就是一个最原始的种子,最先连接的客户端得到的块都是从他这边来的,直到新的种子出现。
求种
“求种”一词常见于影视类论坛或者成人网站, 这里的“种”是指种子文件,也就是Torrent文件。
Hash(哈希算法)
搞开发的都懂, 没啥好说的
Tracker
1. 是指运行于服务器上的一个程序,这个程序能够追踪到底有多少人同时在下载同一个文件
2. 客户端连上tracker服务器,就会获得一个下载人员的名单,根据这个,BT客户端会自动连上别人的机器进行下载。
3. BT客户端在下载开始以及下载进行的过程中,要不停的与tracker服务器进行通信,以报告自己的信息,并获取其它下载client的信息
Torrent文件
Tracker信息和文件信息组成
Tracker信息: Tracker服务器的地址和针对Tracker服务器的设置
文件信息: 根据目标文件的计算生成的,计算结果根据BitTorrent协议内的B编码规则进行编码
(把提供下载的文件虚拟分成大小相等的块,块大小必须为2k的整数次方(由于是虚拟分块,硬盘上并不产生各个块文件),并把每个块的索引信息和Hash验证码写入)
(把提供下载的文件虚拟分成大小相等的块,块大小必须为2k的整数次方(由于是虚拟分块,硬盘上并不产生各个块文件),并把每个块的索引信息和Hash验证码写入)
算法策略
文件分片
分片机制
1. BT会对文件进行分片(Piece)
2. 分片下载完成后, 会进行完整性校验, 完整性校验成功后通知其他节点自己拥有这部分数据。
3. 为了加快文件传输的并行性,每个分片还会分成更小的分块(Block), Block是最小的文件传输单位,数据请求者每次向数据提供者请求一个Block的数据。
片选择机制
为了保证共享网络的健壮性,延长一个共享网络的生命周期, BitTorrent通过局部最少块优先(Rarest-First)策略在节点间交换数据。下载节点根据自己周围的邻居节点拥有的数据块信息,选择拥有节点最少的分块优先下载,从而维护局部的数据块相对平衡。
节点选择机制
BT系统采用了基于Tit-for-Tat(以牙还牙)的激励机制来抵御Free-riding(白嫖)行为,其中Choking/Unchoking算法最为关键。
1. 服务提供节点在收到上传请求后会通过Choking/Unchoking机制决定是否对文件请求节点提供上传服务,可以拒绝服务(Choking)或者允许服务(Unchoking),该机制决定了两个相连的节点是否共享彼此的资源。
2. Choking/Unchoking算法优先选择曾经为自己提供过上传数据并拥有高下载速率的节点
3. 此外, Choking/Unchoking算法每隔30s将不考虑过去的贡献随机选择一个节点进行上传,一方面有利于发现可能存在更高下载速率的节点,另一方面可以避免新节点因从未进行过上传而无法获得有效的下载连接。
分片选择算法
严格的优先级
一旦请求了某个分片的子片段,然后该分片余下的子片段会优先被请求,这样,可以尽可能获得一个完整的分片
随机的第一个片段
最少优先的一个例外是下载开始时,此时,下载者没有任何分片可供上传,所以需尽快获得一个完整的分片,所以,第一个分片是随机选择的,直到第一个分片下载完成,才切换回最少优先的策略
最少优先
对一个下载者来说,选择下一个被下载分片时,通常选择它的节点们所拥有的最少的那个分片,即最少优先,这种技术,确保了每个peer都拥有其他peer们最希望得到的那些片段,从而一旦有需要,上传就可以开始
最后阶段模式
有时候,peer可能从一个速率很慢的peer那里请求一个分片,为了防止这种情况,在最后阶段,peer向所有的peer都发送某分片的子片段请求,一旦某些子片段到了,就向其他的peers发送取消消息,取消对这些子片段的请求,以避免带宽浪费
问题
Tracker与Client交互过程?
1. client向tracker发一个HTTP的GET请求,并把它自己的信息放在GET的参数中;
这个请求的大致意思是:我是xxx(一个唯一的id),我想下载yyy文件,我的ip是aaa,我用的端口是bbb
这个请求的大致意思是:我是xxx(一个唯一的id),我想下载yyy文件,我的ip是aaa,我用的端口是bbb
2. tracker对所有下载者的信息进行维护,当它收到一个请求后,首先把对方的信息记录下来,然后将一部分参与下载同一个文件(一个tracker服务器可能同时维护多个文件的下载)的下载者的信息返回给对方。
3. Client在收到tracker的响应后,就能获取其它下载者的信息,那么它就可以根据这些信息,与其它下载者建立连接,从它们那里下载文件片断。
BT下载相对于传统HTTP下载, 有什么缺点?
BT下载速度不够稳定,当断种时则无法完整下载
0 条评论
下一页