元信息文件结构(Metainfo File Structure)
元信息文件里面的所有数据都以B编码方式编码,B编码规范请参考本系列文档之B编码。

元信息文件(就是平常咱们经常接触到的以.torrent为后缀的文件)的内容是一个B编码的dictionary,包含下面列出的键(key),其中字符串类型的值均以UTF-8编码。

info:该键(key)对应的值是一个描述torrent文件的dictionary。该dictionary有两种可能的结构:一种对应于没有目录结构的单文件torrent(即种子文件中只包含一个文件),另一种则对应于多文件torrent(详情请看下文)。(dictionary类型)
announce:改键对应的值是tracker的announce URL。(字符串类型)
announce-list:(可选),这是对正式规范的一个扩展,目的是提供向后兼容性。(list of lists of strings类型)
creation date:(可选),该键对应的值是torrent文件的创建时间,时间使用标准的UNIX时间格式。(整数类型,是从1970-01-01 00:00:00开始的秒数) 
comment:(可选),该键对应的值是torrent文件制作者的评论。(字符串类型)
create by:(可选),该键对应的值是制作torrent文件的程序的名称和版本。(字符串类型)
encoding:(可选),由上文可知,.torrent元文件中包含一个info dictionary,当该dictionary过大时,就需要对其分片(piece),该编码就是用来生成分片的。(字符串类型)

Info Dictionary(即键Info对应的值)
这一节主要是讲述两种模式(单文件模式和多文件)所共有的键(key)

piece length: 该键对应的值是每一片(piece)的字节数。(整数类型)
pieces: 该键对应的值由所有的20字节SHA1散列值连接而成的字符串,每一片(piece)均含有一个唯一的SHA1散列值。(字节串类型)
private: (可选),这个键(key)所对应值是整数类型,如果设置为1。客户端必须广播自己的存在,然后通过在元信息文件中显式描述的trackers得到其他的peers,如果设置为0或者不设置,则表明客户端可以通过其他的方式来得到其他的peers,例如:PEX peer exchange技术,DHT技术等。“private”可以解释为没有外部的peer源(如果客户端不提供PEX peer exchange技术、DHT技术等,那么BitTorrent客户端必须通过tracker来得到其他的peers)。(整数类型)

Info in Single File Mode(单文件模式下的Info键)

对应于单文件模式,info dictionary包含如下的结构:

name:文件名. 建议使用。(字符串类型)
length:文件的所占字节数。(整数类型)
md5sum:(可选),相当于文件MD5和的32个字符的16进制串,BitTorrent根本就不使用这个键(key),但是有些程序为了更大的兼容性而包含它。(字符串类型)

Info in Multiple File Mode(多文件模式下的Info键)
对应于多文件模式,info dictionary包含如下的结构:

name:存储所有文件的目录名,建议使用。 (字符串类型)
files:a list of dictionaries,每一个文件对应一个dictionary(其实下面的字段刚好对应单文件模式下键(key),说得通俗点就是多文件模式是多个单文件模式的集合)。list下的每一个dictionary包含如下的结构:
length:参考单文件模式
md5sum:参考单文件模式
path:包含单个或多个元素的list,这些元素合成在一起表示文件路径和文件名。list中的每一个元素对应于一个目录名或者文件名(当是最后一个元素时对应文件名). 例如:文件"dir1/dir2/file.ext"由三个字符串元素组成:"dir1"、"dir2"和"file.ext"。这三个元素会被编码成B编码的字符串list:l4:dir14:dir28:file.exte

注意(Notes)
键(key)piece length指出了片(piece)的正常大小,通常情况下2的n次方。一般根据torrent中文件数据的总大小来选择片(piece)大小,同时片(piece)太大导致低效,片(piece)太小,会使.torrent文件太大这两个因素也会影响片(piece)大小的选择。以前,选择的片(piece)大小,应该使.torrent文件不超过50-75KB(据推测这样能减轻存储.torrent文件的tracker的负载).
目前最好的做法是保持片(piece)大小为512KB或者更少,虽然对于8-10GB的文件,会使.torrent文件过大,但是片数量的增加有利于文件的共享。最常用的片(piece)大小事256 kB,512 kB和1 MB。
除了最后一块,所有的块都具有同样的大小,最后一块的大小是不规则的。这样片(piece)的数量就由( total length / piece size )决定。
对于多文件模式情况下的片边界,可以将文件数据当做是一个长的连续流,这个流由文件列表中的文件串连而成。这样多文件模式下片(piece)数量的决定方式和单文件模式下就一样了。片(piece)有可能跨越文件边界。
每个片(piece)都含有一个对应于该片(piece)数据的SHA1散列值。这些散列值串连起来就形成了上述info dictionary中pieces键所对应的值(key-value)。需要注意的是这个值并不是一个由字符串组成的list,而是一个字符串,字符串的长度是20的倍数。

转载于:https://www.cnblogs.com/MaxWoods/archive/2009/07/25/1530849.html

BitTorrent协议规范(BitTorrent Protocol Specification)系列之元信息文件结构(Metainfo File Structure)-第二部分...相关推荐

  1. [转载] BitTorrent协议规范

    BitTorrent 协议规范(BT协议集合)一 BitTorrent 是一种分发文件的协议.它通过URL来识别内容,并且可以无缝的和web进行交互.它基于HTTP协议,它的优势是:如果有多个下载者并 ...

  2. BitTorrent协议规范(二)

    Peer wire protocol (TCP) 概述 peer(端)协议使片(piece)的交换变得容易,片的描述请参考元信息文件. 注意:原来的规范在描述peer协议时,也使用术语piece&qu ...

  3. BitTorrent协议规范之torrent文件

    BitTorrent下载每个资源需要一个元数据信息(meta info)文件,该文件描述资源的相关信息,其后缀名通常为.torrent,所以也叫torrent文件.   torrent文件中内容采用B ...

  4. db2 删除schema中所有表_常用SQL系列之(六):删除方式、数据库、表及索引元信息查询等...

    本系统为@牛旦教育IT课堂在微头条上的内容, 为便于查阅,特辑录于此,都是常用SQL基本用法.. 前两篇连接: (一):SQL点滴(查询篇):数据库基础查询案例实战 (二):SQL点滴(排序篇):数据 ...

  5. dart系列之:元世界pubspec.yaml文件详解

    文章目录 简介 pubspec.yaml支持的字段 一个例子 字段详情 总结 简介 pubspec.yaml是所有dart项目的灵魂,它包含了所有dart项目的依赖信息和其他元信息,所以pubspec ...

  6. **图片元信息Exif**

    什么是Exif? Exif是一种图像文件格式,实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈.快门.白平衡.ISO.焦距.日期时间等各种和拍摄条件以及相机品牌.型号.色 ...

  7. 抗疫先锋 | 普元信息为疫情防控提供领先的应用开发服务及数据管理支持

    2020年,受到新型冠状病毒的影响,无数云计算企业扮演了关键的抗击疫情技术角色,以「云+产业」的模式,在疫情监控.远程医疗.协同办公.在线教育等领域,帮助企业上云.在线提供服务. 普元信息技术股份有限 ...

  8. Django框架(十)--常用字段、参数、元信息、多对多关联关系

    一.ORM字段 # AutoField() int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列# IntegerField() ...

  9. R语言使用fs包的file_info函数查看文件元信息(属性信息)、使用file_chmod函数修改文件的权限、使用file_chown函数修改文件的所有者

    R语言使用fs包的file_info函数查看文件元信息(属性信息).使用file_chmod函数修改文件的权限.使用file_chown函数修改文件的所有者 目录

最新文章

  1. 设置Eclipse智能提示(转)
  2. WAMPSERVER安装之笑话
  3. (0003) iOS 开发之App 适配iOS 10
  4. springboot中controller单例模式多线程安全的简单理解
  5. PIC中实现printf函数出现:Warning [2066] type qualifier mismatch in assignment
  6. STM32开发 -- md5sum命令
  7. Lesson_7 上课笔记_1 ----static关键字和导包
  8. java使用Socket类接收和发送数据
  9. windows简单TCP通信 C++
  10. 如何给网站制作一个favicon.ico图标
  11. 既然Java反射可以访问和修改私有成员变量,那封装成private还有什么意义
  12. php 生成vbs文件路径,vbs下一些取特殊路径的方法总结
  13. 设计模式之模板模式(模板方法)
  14. 门信号表达式_21成电考研干货 | 信号与系统知识点概括
  15. 使用c++filt命令还原C++编译后的函数名
  16. C 里 求 log2 N 的问题
  17. 记升级springboot1.X 到springboot2.3.5踩的坑
  18. 张钹院士:清华大学AI研究院要孵化人工智能界的BAT
  19. 高保真扬声器系统的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  20. 初识JAVA:猜数字小游戏案例---系统产生一个1-100之间的随机数,猜出这个数是多少?

热门文章

  1. 目前最强开源人脸检测算法RetinaFace
  2. 图鸭科技重金揽才-深度学习优化研究员
  3. 用python偷偷给班级群女同学的颜值进行排名,排最后的 说开学要打爆我
  4. android文件管理器项目,浅析Android文件管理器(项目一)
  5. 进行数据清洗_[经验漫谈]使用Python进行数据表格清洗和分析
  6. 新模型!Conformer!Transformer与CNN的超强融合!
  7. 公布 | 中国图象图形学学会首批Fellow名单公布
  8. CVPR2018 目标检测算法总览(最新的目标检测论文)
  9. 用eclipse开发android小程序,【转】Eclipse 开发Android小程序遇到的问题总结
  10. 数学建模之微分方程(符实现例题和MATLAB源码)