BitTorrent的协议及.torrent文件格式

BT下载要改版,在网上找到一些有关BT种子的信息:
BitTorrent作为一种流行的P2P下载软件而被广泛使用.比起其他的P2P软件来,BitTorrent的优点有几点:
  • 下载速度特别快.这是因为BitTorrent的协议设计精妙.
  • 下载内容不会被篡改.BitTorrent使用了RSA SHA1算法来保证文件块的正确性.上传被篡改内容的伙伴会被踢下线.

Bencode编码

Bencode编码是一种简洁的表示数据的方法.它被BitTorrent协议广泛应用.它支持字符串,整数,列表和字典.

字符串:

字符串被如此编码:<字符串长度>:字符串正文.这种表示法没有任何的分界符.
例子:如"8:announce"指"announce".

整数:
整数被如此编码:<i>整数值<e>.可以为负数,如'i-3e'
例子:'i3e' 指 3.

列表:
列表是如此被表示的:<l>Bencode Value<e>,
列表可以用来表示多个对象.
列表内容可以包括字符串,整数,字典,甚至列表本身.
例子:'l4:spam4:eggs e' 指 [ "spam", eggs" ]

字典:
字典是一个一对一的映射.它表示了一个主键(必须为字符串)和一个数据项(可以为任何Bencode值)的关系.字典可以用来表示一个对象的多种属性.
字典是如此被编码:<d><bencoded string> <bencoded element> <e>
注意:字典必须根据主键预排序.

Metainfo

BitTorrent下载时,用户必须下载一个.torrent文件.它就是所谓"Metainfo file",里面存储有关于下载内容的announce地址,长度,大小,SHA1杂凑项等内容.它由Bencode编码组成.而且 字符串是用UTF-8编码的.
不过在中国,常常使用GBK编码。它由如下几项组成:
  • Info :描述下载内容的信息,是一个字典.有两种可能,一种是"单文件"模式:当BitTorrent只下载一个文件的时候使用.另一种是"多文件"模式,是在下载多个内容的时候使用.两种情况下Info各有不同.
          单文件模式:
  • length :整数,指文件的大小.
  • md5sum :(可选),字符串,含有32字节md5校验码.BitTorrent没有使用MD5而是使用了SHA1作为自已的签名算法.这是为其他P2P软件兼容而设置的可选内容.
  • name :字符串,这是下载文件的名字,纯粹是建议.
  • piece length :整数,是BitTorrent文件块的大小.
  • pieces :字符串,连续的存放着所有块的SHA1杂凑值,每一个文件块的杂凑值为20字节.
          多文件模式:
  • files: 一个由字典组成的列表,每个字典表示一个文件,字典的键值有如下内容:
    • length :整数,指当前文件的大小.
    • md5sum :(可选),字符串,同单文件模式,指当前文件.
    • path :由字符串组成的列表,每个列表元素指一个路径名中的一个目录或文件名.比如说:"l3:abc3:abc:6abc.txte",指文件路径"abc/abc/abc.txt".
  • name :字符串,BitTorrent下载路径中最上层的目录名
  • piece length :整数,是BitTorrent文件块的大小.
  • pieces :字符串,连续的存放着所有块的SHA1杂凑值,每一个文件块的杂凑值为20字节.
  • announce :字符串,指向tracker的URL.
  • announce-list :(可选),字典,这是一个对官方协议的扩展,支持"多Tracker".
  • creation date :(可选),整数,创建日期(UNIX创世纪格式:1970-1-1日00:00UTC到当时的秒数)
  • comment :(可选),字符串,注释
  • created by :可选,字符串,创建此.torrent文件的BT下载端程序名和版本号
  • encoding :BitComet对Metafile的扩展,一般用来指出不使用utf-8而使用gbk.

举一个例子,星球大战:
d8:announce34:http://tracker.ydy.com:86/announce10:createdby13:BitComet/0.5813:creationdatei1117953113e8:encoding3:GBK4:infod6:lengthi474499162e4:name51:05.262005.StarWars Episode IV A New Hope-Rv9.rmvb10:name.utf-851:05.26.2005.Star WasEpisode IV A New Hope-Rv9.rmvb12:piecelengthi262144e6:pieces36220:XXXXXXXXXXXXXXX(SHA1杂凑 值)
表示了如下信息:
Tracker地址 : http://tracker.ydy.com:86/announce
被BitComet/0.58创建
创建时间:1970-1-1 00:00秒后1117953113秒.即Sun Jun 5 14:31:53 2005.
encoding是BitComet的扩展,实际上用了UTF-8就不需要GBK.
  • info: (这是单文件模式的代表)
  • 大小:474499162(452Mb)
  • 文件名:05.262005.Star Wars Episode IV A New Hope-Rv9.rmvb
  • name.utf-8:也是BitComet的扩展,指出文件名编码不是GBK而是UTF-8.
  • 文件块大小:262144字节(256KB)
  • pieces:长度为366220的SHA1杂凑值内容,由于每一个文件块20字节SHA1杂凑值,可见文件块有36620 / 20 = 1831个

你可能感兴趣的:(算法,unix,扩展,p2p,BT,encoding)