BitTorrent的数据块交换协议
BitTorrent是一种内容分发协议,采用P2P技术,帮助用户相互更高效共享大文件,减轻中心化服务器的负载。BitTorrent网络里,每个用户同时需要上传和下载。
1.BitTorrent术语含义
- torrent:服务器接收的元数据文件(.torrent后缀)。记录了下载数据的信息,但不包括文件自身。例如,文件名,文件大小,文件的哈希值,以及Tracker的URL地址。
- tracker:互联网上负责协调BitTorrent客户端行动的服务器。客户端打开一个torrent,机器连接tracker,请求一个可以接触的peers列表。传输过程中,客户端将定期向tracker提交自己的状态。Trcker只帮助Peers相互连接,不参与文件本身的传输。
- peer:可连接并传输数据的节点。通常peer没有完整的文件,Peers之间相互下载、上传。
- seed:一个特定Torrent完整拷贝的节点称为Seed。文件初次发布时,需要一个Seed进行初次分享。
- swarm:连接一个Torrent的所有设备群组。
- Chocking:Chocking阻塞是一种临时的拒绝上传策略,BitTorrent网络下载需要每个Peers相互上传,对于不合作的Peer,会采取临时的阻断策略。
- Pareto效率:帕累托效率,系统中任意一个个体进一步提升效率只会导致其他个体效率下降,此时说明系统已经达到最优化了。
- 针锋相对(Tit-fot-Tat):以合作开局,然后采取以其人之道还治其人之身的策略。强调永远不先背叛对方,除非被背叛。
P2P数据块交换协议
整个数据块发布下载的逻辑是非常简单的,如下:
- 新文件在BitTorrent初次分享,Seed会生成一个xxx.torrent文件,包含如下内容:
- 文件名,大小
- Tracker的URL
- Seed向Tracker注册,tracker保存文件信息和Seeds的连接信息。
- Peers向Tracker访问,获取其他Peers/Seeds的连接信息,例如IP和端口。
- Tracker和Peers简单HTTP协议交互,tracker告诉Peers之间的连接信息,Peers/Seeds沟通并建立连接下载文件。
当然数据并不是一个整体进行交换的,而是需要切割成256K的小片,每一个下载者需要向他的Peers提供它拥有的片,下载好的片通过SHA-1算法验证,通过后,通知其他Peers,自己可以上传这个片段,快来下载。
当然选择片段下载的顺序是一个很大的优化,BitTorrent也提供了一系列片段选择优化的策略:
- 优先完成单一片段:如果请求某一片段的子片段,本片段会最优先请求。尽可能先完成一个完整的片段,避免每一个片段都请求一个子片段,但都没有完成的情况。
- 优先选择稀缺片段:全部Peers中,某个片段拥有者最少,就是优先下载的片段。避免稀缺片段没上传了,所有Peers都不能下载到完整的文件。
- 第一个片段随机选择:刚开始并不知道哪些是稀缺的片段,就随机选择一个开始下载。
- 结束时按照子片段请求:在下载最后阶段,peer向所有的peers发送某片段的子片段的请求,一旦拿到了片段,就再向其他peers发送取消消息,避免宽带的浪费。
3.阻塞策略
BitTorrent鼓励大家合作上传和做种,对于不合作者,临时拒绝对它的上传,让它下载变得很慢,这样一种阻塞策略并不是P2P协议的范畴,但对提高整体效率是必要的。
- (1)BitTorrent的阻塞算法:一般每个Peer连接4个Peers,切换到能提供更快下载速度的Peers是不太能实现的,BitTorrent网络采取每10秒重新计算一次,然后维持连接状态到下一个10秒。
- (2)开放检测:如果只是简单的为提供最好的下载速率的peers们提供上载,那么就没有办法来发现那些空闲的连接是否比当前正使用的连接更好。为了解决这个问题,在任何时候,每个peer都拥有一个称为“optimistic unchoking”的连接,这个连接总是保持疏通状态,而不管它的下载速率是怎样。每隔30秒,重新计算一次哪个连接应该是“optimistic unchoking”。30秒足以让上传能力达到最大,下载能力也相应的达到最大。这种和针锋相对类似的思想非常的伟大。“optimistic unchoking”非常和谐的与“囚徒困境”合作。
- (3)反对歧视:某些情况下,一个peer可能被它所有的peers都阻塞了,这种情况下,它将会保持较低的下载速率直到通过 “optimistic unchoking”找到更好peers。为了减轻这种问题,如果一段时间过后,从某个peer那里一个片断也没有得到,那么这个peer认为自己被对方 “怠慢”了,于是不再为对方提供上传,除非对方是“optimistic unchoking”。这种情况频繁发生,会导致多于一个的并发的“optimistic unchoking”。
- (4)完成后的上传:Peer完成下载后,不再以下载速率决定为哪些Peers提供上传服务,优先选择网络环境更好,连接速度更快的Peers,充分利用上传带宽。
引入DHT的BitTorrent
引入DHT的BitTorrent技术,对一个用户来说,获得一个使用DHT网络的Seed后,运行BitTorrent客户端进行下载,就会在DHT网络中搜索,连入DHT网络的节点之间相互有路由记录,客户端能通过DHT找到更多的节点,从而接入网络。一般Seed上都有默认节点,帮助没有连入网络的用户通过那些节点连入网络,如果下载者连入了DHT网络了,种子里填写的节点就不需要了。DHT网络是分布式存储系统,Tracker中心服务器是不需要的,也不需要向Tracker服务器不断的查询和注册了。
网友评论