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

原创 2015年07月10日 13:44:34

前段时间参考我在上一篇博客里面的内容,将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选地较小。


版权声明:本文为博主原创文章,未经博主允许不得转载。

BT协议分析

 一 BT系统的组成结构  1 普通的Web服务器:   例如Apache或IIS服务器2 一个静态的种子文件:   即.Torrent文件,采用Bencoding编码3  Tracker服务器:  ...

官方的BitTorrent协议详解

文档说明:这个翻译版本由孤波独立完成 原文见http://bitconjurer.org/BitTorrent/protocol.html 作者Bram Cohen 孤波对该翻译版本享有解释权和...

BitTorrent协议规范

转自:http://blog.csdn.net/romandion/article/details/2909589 BitTorrent.org HomeFor UsersFor Deve...

BT DHT协议规范

DHT 协议 摘自 BitTorrentDev BitTorrent 使用一个"分布式sloppy哈希表" (DHT)来为"trackerless"流存储peer联系信息。有效地使每个peer都成...

inux之iptables详解及配置(二)+案例

future_ins的博客 35原创 220转载 0译文 5评论 27165访问 京 ICP 证 070598 号 Copyright © 1999-2016, CS...

BT协议学习笔记4--uTP

这是一个对于uTorrent建立在UDP之上的传输层协议。可以和目的就是为了改善TCP的一些特性,可以和TCP作一些对比学习。 所以我想专门对这个拓展,记录一章。 BEP:uTorrent trans...

ZigBee无线协议学习笔记(3)

9. 四节点网络应用9.1. 连接和绑定每个WPAN均有一个PAN协调器,允许连接所有其他形式的ZigBee器件以形成网络。路由器负责路由数据,并允许终端设备与其他路由器自动接入。网络连接网络绑定9....

IOS6 学习笔记(3)—— 委托协议(接口)

Object c中常常说到的委托其实就类似与java中的接口,java中定义一个接口时使用interface关键字,Object c中此关键字表示的却是类(java中的class关键字),在objec...

JavaMail学习笔记(四)、使用POP3协议接收并解析电子邮件

[java] package org.yangxin.study.jm; import java.io.BufferedInputStream; import java.io.Buffered...

JavaMail学习笔记(四)、使用POP3协议接收并解析电子邮件(全)

package org.yangxin.study.jm; import java.io.BufferedInputStream; import java.io.BufferedOutputStre...
  • xyang81
  • xyang81
  • 2012年06月19日 02:42
  • 16982
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BT协议学习笔记3--协议扩展
举报原因:
原因补充:

(最多只允许输入30个字)