BT协议学习笔记3--协议扩展

前段时间参考我在上一篇博客里面的内容,将BT协议的主要内容看了一看。

主要有:

一、Bencode and Metadata File Structure

二、Tracker HTTP Protocol/THP

三、Peer Wire Protocol/PWP

四、Algorithms:Piece Selection & Peer Selection

这些内容有时间我会进行一下总结,主要是最主要的内容以及我理解的一些细节。

今天开始读一些协议的扩展。

暂时不会特别详细的介绍,只是将读到的扩展和对应的内容联系起来。

顺序就按我自己的阅读顺序,而扩展方面一般就只有阅读官方文档了:http://www.bittorrent.org/beps/bep_0000.html

BEP:10 Extension Protocol

这个扩展并不是对于协议的实质性功能进行更新,而是建立了一个专门的消息去封装后面的一些扩展。

比如Extension for Peers to Send Metadata Files 这个扩展就是封装在此扩展之中的。

BEP:9 Extension for Peers to Send Metadata Files

这个扩展的意思是不需要下载metadata文件也就是.torrent文件到硬盘,而直接靠info-hash信息加入swarm下载metadata信息到内存,然后再开始实际想要的文件的下载。

magnet磁力链接就是靠的这个扩展。

BEP:6 Fast Extension

扩展了Message消息里面的关键字,而其中最主要的就是Allowed Fast关键字,其功能就是让新加入的peer能快速获得若干piece然后愉快地下载。

BEP:5 DHT Protocol

非常重要的extension,实现了真正意义上的分布式系统,之前的协议从tracker的意义上来说仍然是集中式的,tracker仍然存在单点故障以及瓶颈链路问题。

DHT从某种意义上来说可以看做是一个分布式的tracker,获得peer信息需要向特定的一部分node请求,但是这特定的点是分布式的并且并不是固定的点。

特定的点体现了tracker的特性,而并不固定并且多个点体现了分布式的特性。

BEP:11 Peer Exchange

PEX目前没有正式的标准,在BEP:1000里面,我这里看的是libtorrent里面的实现,属于UT_PEX。

PEX跟DHT最大的区别就是,不需要向特定的nodes获得peer信息,只需要自己任意的有connection的peer(当然首先都要支持PEX扩展)相互交换就行。

需要指出的是DHT是单独的extension而PEX是建立在之前介绍的Extension Protocol之上的。

BEP:23 Trackers Return Compact Peer Lists

tracker 应答的最重要内容当然就是peer信息了。BEP3中规定的返回格式是 a list of dicts,一个dict就表示一个peer信息,dict{peerid,ip,port}

而通过此扩展,可以返回a string of multi-6bytes, 4 bytes for ip,2 bytes for port。

此扩展的主要目的就是节约带宽。

BEP:7 IPv6 Tracker Extension

IPv6的扩展没有细看,目前没什么用。

BEP:12 Multitracker Metadata Extension

这个支持annoucelist的,作为单tracker的替代,作用有二:backup和loadbalance。

backup是指几个tracker之间信息不能共享的,loadbalance是信息能共享的,加上这两种目的的混合形式,annoucelist有三种形式。

BEP:15 UDP Tracker Protocol for BitTorrent

采用UDP来代替在TCP上的TCP在client和tracker之间的信息传输。目的:1. reduce traffic 50% 2.reduce the complexity of tracker code

本来的HTTP GET Request以及Response变为connect request -- connect response -- announce request -- announce response

BEP: 16 Superseeding

对于上传能力有限的seeder,采用限制leecher得到的piece,使得它能以有限的带宽传输更多的copy。

BEP: 17 HTTP Seeding

使用HTTP作为seed,提高种子最开始存活的几率。

BEP:18 Search Engine Specification

为搜索提供便利。

下面是我google这个功能找到的一个解释,在:http://file.org/extension/btsearch

The .btsearch extension is used by the BitTorrent peer-to-peer file sharing applications. 

The BTSEARCH files control how the BitTorrent client searches for a torrent on a particular P2P search engine.

 This allows the search engines, such as Google, to be added to a user's built-in torrent search bar. 

The BTSEARCH files contain the name, URL and description of the search engine that is being added.

BEP:19 WebSeed - HTTP/FTP Seeding

更详细的web seed,它对于piece selection 的rarest first方案有修改。

key idea 是尽量让p2p来传输小的连续的没有的piece,又叫gap,大的gap就给HTTP/FTP来传输。

所以修改后的piece selection会选gap小的piece,除非稀有程度相当巨大。

BEP:21 Extension for partial seeds

重要的就是什么事partial seed。它指那些没有完整下载torrent里面的文件,但又不需要继续下载的情况。

比如,torrent里面有多个文件而user只想要下载其中的一部分。

更细地区分partial seed与其他的incomplete 可以给与client更为准确的健康度信息。

BEP:22  BitTorrent Local Tracker Discovery Protocol

这是为了方便一些ISP,它们会部署一些Cache在自己的网中,自己的用户向这些Cache变成的peer下载东西的过程中,Cache的upload带宽没有限制,并且Cache可以有很大的storage存放很多东西,这样将流量控制在一定的范围之内,节约了运营商的带宽。

此协议就是帮助找到这些运营商部署的Cache peer的。

BEP:24  Tracker Returns External IP

所有的节点和tracker交换信息,在tracker一端看到的client的IP都是它们的公网IP(当然如果client和tracker在同一个私网的话就还是私网IP)。

client收到的Tracker的Response里面的peer的IP信息都是公网IP,部署这个协议的目的是为了从tracker那里获得自己的公网IP。

BEP:26  Zeroconf Peer Advertising and Discovery

这个扩展就是使用一系列的zeroconf技术实现在局域网中寻找peer,从而最大化BT的效用。

BEP:27  Private Torrents

这个扩展目的是是某一些torrent分享局限在一定的用户群体之中,对于断开再连接以及PEX是否支持都有特别要求,以防止非指定的用户对于private torrent的访问。

BEP:28  Tracker exchange extension

这个明显是和PEX相对的交换tracker信息的扩展,可以简称TEX,交换那些自身verify了的tracker给peer。

BEP:29  uTorrent transport protocol

正常的peer之间实际的file share采用的是TCP协议。由于TCP建立大量的连接会造成其他高优先级的网络服务(比如email、phone call、browe WEB)延迟。

采用了一种架设在UDP之上的新的传输层协议,采用了基于延迟的拥塞控制,可以在没有其他要求的时候充分利用带宽,在有上述服务的时候让出带宽。

BEP: 30  Merkle hash torrent extension 

随着BT要传输的文件越来越大,为了使torrent文件保持一定的大小,piece便越来越大(我看了一下17G的星际穿越每个piece已经达到了8MB),但是太大的piece

又会给peer之间的piece交换带来不利影响,一个方面是最开始要等很久才能得到一个完整的piece以开始和peer的正常交换。

此扩展采用了一种hash tree的结构,将每一个piece的hash作为树叶,每一个父节点又是子节点的hash,这样总会得到一个root 的hash。

验证的时候,通过下载的piece计算hash再与传输的其父节点的hash再计算hash这样会计算出一个root hash对比以验证piece完整性。

这样在torrent文件之中只需要存放root hash可以保持torrent文件很小,但是也可以将每个piece选地较小。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值