BitTorrent协议规范(BitTorrent Protocol Specification)系列之B编码(Bencoding)-第一部分

2023-11-10

鉴定

BitTorrent是由布莱姆·科恩设计的一个端对端(peer to peer)文件共享协议,此协议使多个peers通过不可信任的网络的文件传输变得更容易。

目的

此规范的目的是详细介绍 BitTorrent 协议规范 v1.0 。Bram 的协议规范网站 http://www.bittorrent.com/protocol.html 简要地叙述了此协议,在部分范围缺少详细的行为阐述。该文档使用清楚明确的措辞书写,希望它能够成为一个正式的规范,当然也可用于将来实现和讨论的基础。

此文档旨在由 BitTorrent 开发社区维护和使用。欢迎大家为它做贡献,其中的内容仅代表当前协议,但它已经被目前许多存在的客户端实现所采用。

应用范围

本文档适用于 BitTorrent 协议规范的第一版(v1.0)。目前,这份文档应用于 torrent 文件结构规范、peer wire协议规范和Tracker HTTP/HTTPS 协议规范。如果某个协议有了新的修订,请到对应页面查看,而不是在这里。

(译者注:在本文档翻译过程中,如果遇到没有对应标准翻译的术语,一律不予翻译,例如torrent,peer,tracker等)

约定

为了简明和准确地表达信息,在本文档中,使用了许多约定。

  • peer v/s 客户端(client):在本文档中,一个peer可以是任何参与下载的 BitTorrent 客户端。客户端也是一个peer,尽管 BitTorrent 客户端运行在本地机器上。本规范的读者可能会认为自己是连接了许多peer的客户端。
  • 片(piece) v/s 块(block):在本文档中,片是指在元信息文件(metainfo file)中描述的一部分已下载的数据,它可通过 SHA-1 hash 来验证。而块是指客户端向peer请求的一部分数据。两块或更多块组成一个完整的可以被验证的片。
  • 实际标准(defacto standard):粗斜体文本指出一个规则在许多不同的BitTorrent客户端实现中如此通用,以致于该规则被当做是一个实际标准。

(译者注:peer一般翻译成‘端’,所以p2p应该翻译成端对端,但是这并没有一个标准的译法,因此在本文中不作翻译,同时读者应该将peer to peer和数据链路层的点对点协议(也缩写为p2p)区分开)

B编码(Bencoding)

B编码是一种以简洁的格式描述和组织数据的方法。支持下列类型:字节串、整数、lists和dictionaries。

字节串

字节串按如下方式编码:<以十进制ASCII编码的串长度>:<串数据>
注意:字节串编码没有开始和结束分隔符。

例:4:spam表示字节串“spam”

整数

整数按如下方式编码:i<以十进制ASCII编码的整数>e
开始的“i”与结尾的“e”分别是开始和结束分隔符。可以使用如“i-3e”之类的负数。但是你不能把“0”放到数字的前面,如“i04e”。另外,“i0e”是有效的。
例:“i3e”表示整数“3”

注意:对于这个整数的最大位数规范并没有做出规定

lists

lists按如下方式编码:l<B编码值>e
开始的“l”(l是小写的L,而不是大写的i)与结尾的“e”分别是开始和结束分隔符。lists可以包含任何B编码的类型,包括整数、串、dictionaries和其他的lists。
例:l4:spam4:eggse 表示含有两个串的lists:[“spam”、“eggs”]

dictionaries

dictionaries按如下方式编码:d<B编码串><B编码元素>e
开始的“d”与结尾的“e”分别是开始和结束分隔符。 注意键(key)必须被B编码为串。值可以是任何B编码的类型,包括整数、串、lists和其他的dictionaries。键(key)必须是串,并且以排序的顺序出现(以原始串排列,而不是以字母数字顺序)。串采用二进制比较方式,而不是特定于某种文化的自然比较(即既不是按照中文的比较方式,也不是按照英文的排序方式)。
例1:d3:cow3:moo4:spam4:eggse 表示dictionary { "cow" => "moo", "spam" => "eggs" }
例2:d4:spaml1:a1:bee 表示dictionary { "spam" => ["a", "b"] }

例3:d9:publisher3:bob17:publisher-webpage15:www.example.com18:publisher.location4:homee表示dictionary  { "publisher" => "bob", "publisher-webpage" => "www.example.com", "publisher.location" => "home" }

(译者注:对于string和integer,目前已经存在官方的翻译,但是list和dictionary并没有存在一个统一的译法,在此以原文示之,相信学过Java和c#的人不会对这两个术语感到陌生)

B编码实现

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BitTorrent协议规范(BitTorrent Protocol Specification)系列之B编码(Bencoding)-第一部分 的相关文章

  • stata--异方差检验

    异方差检验有两种方法 1 残差图 2 white检验 1 残差图 一般不用这个 这个只是粗略 代码 reg y fdi rvfplot yline 0 rvpplot fdi yline 0 1 对y和fdi回归 2 画出残差与拟合值 y
  • llvm 介绍有用的网站

    LLVM笔记 7 指令的side effect LLVM笔记 7 指令的side effect Five100Miles 博客园 LLVM每日谈之十八 GEP Instruction的几点总结 LLVM每日谈之十八 GEP Instruct
  • centOS 安装 elasticsearch 7.0.0和kibana7.0.0_单机版

    cd opt wget wget https artifacts elastic co downloads elasticsearch elasticsearch 7 0 0 linux x86 64 tar gz tar xzvf ela
  • eNSP:ospf相关实验

    一 实验要求 二 实验步骤 1 建设如下图拓扑并划分网段 2 配置R1 R4的接口和回环地址 R1 r1 int g0 0 0 r1 GigabitEthernet0 0 0 ip add 192 168 1 1 27 r1 int l 0
  • 使用七牛云进行文件上传

    目录 一 七牛云入门测试 1 注册七牛云账号 完成后选择对象存储 2 在里面创建空间 一个空间相当于一个文件夹 就是将对象上传到的地方 3 查看个人秘钥 注册完成账号后 会有一个秘钥 上传文件的时候进行授权和认证 4 文件上传测试 二 封装
  • 如何用 Java 生成 .torrent?

    我想用 Java 生成一个 torrent 文件 但我不想要一个大型 API 来执行诸如抓取跟踪器 播种等操作 这仅适用于生成元数据的客户端 存在哪些轻量级解决方案 我只生成单个 zip 文件的 torrent Thanks 我已经将这段独
  • Ruby BitTorrent 库 [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我正在考虑用 ruby 编写定制的 torrent 客户端 我找到了以下库 正如马特下面指出的那样 它们相当古老 不过 我想听听我可能错过的任何图书馆 并且我很想听听社区对以下图书馆的
  • 覆盖非活动选项卡的 setTimeout 行为

    我目前正在使用 WebRTC 在 JavaScript 中开发一个点对点游戏 它将其中一个对等点 即主机 视为服务器 而任何其他加入的对等点则通过 Node js 代理服务器连接到主机 我目前正在尝试解决以下问题 如果主机切换选项卡以使游戏
  • 安卓和iPhone之间的距离

    我正在寻找一种当两部手机靠近时传输数据的方法 这需要跨平台 因此我无法使用 NFC 或 iBeacon 我计划使用 allJoyn 发送信息 我只想将数据发送给距离我几英尺的其他人 有什么方法可以在其他手机上准确读取距离吗 或者我可以通过放
  • P2P应用

    目录 一 P2P的简介 二 P2P的工作方式 1 具有集中目录服务器的P2P工作方式 2 具有全分布式结构的P2P文件共享程序 一 P2P的简介 P2P 对等连接 是指两台主机在通信时 并不区分哪一个是服务请求方和哪一个是服务提供方 只要两
  • NAT 后面的 UDP 打洞

    我正在尝试用 Java 实现 UDP Holepunching 的简单草图来测试它的概念 并稍后在我的 C C 应用程序中使用它 Concept 根据维基百科 我对这个概念的理解是这样的 假设 A 和 B 是未定义网络结构后面的客户端 C
  • Ruby Torrent 库

    Ruby 有什么好的库可以与 BitTorrent 跟踪器一起使用吗 下载或种子文件 rubyforge 上有一个 ruby torrent 库 但它最后一次更新是在 2005 年 似乎不再工作了 参见 lib torrent ruby h
  • 如何通过peerJS 点对点连接接收数据?

    我正在尝试使用peerJS 连接两个对等点 我几乎只是在遵循他们的 入门 但我仍然在挣扎 下面是我到目前为止得到的代码
  • HTML5 Websockets 可以在不使用服务器的情况下直接连接 2 个客户端(浏览器)吗? (P2P)[重复]

    这个问题在这里已经有答案了 使用 HTML5 Websockets 我可以直接在 2 个客户端 浏览器 之间打开套接字 假设我知道它们的 IP 地址并且不存在 NAT 遍历问题 我想将一些数据直接从一个浏览器发送到另一个浏览器 本质上是创建
  • WCF 是否支持点对点实现?

    我正在尝试在 LAN 内实现点对点消息传递和文件共享实用程序 那么 WCF 支持 p2p 吗 有人尝试过通过 WCF 进行文件共享吗 是的 它确实 请参见如何在对等网络中设计状态共享 http msdn microsoft com en u
  • 将下载的 torrent 保存在内存中而不是文件 libtorrent

    使用 Rasterbar libtorrent 我不希望下载的数据放在我的硬盘上 而是放在管道或变量或软的东西上 这样我可以将其重定向到其他地方 Mysql 甚至垃圾 如果它不是我想要的 有没有如果不是使用 Libtorrent 在 C 中
  • 为什么我在使用 WifiP2pManager 时总是显示 BUSY?

    我正在尝试使用 Wi Fi Direct 连接两个 Android 设备 在我的 HTC 手机 One SV 上它似乎可以工作 但在我的第二台设备 LG Optimus 4xhd 上它不起作用 在我的 onResume 函数中 我启动以下线
  • 是否可以通过互联网在两个移动设备 (iPhone) 之间连接套接字?

    是否可以通过互联网在两个移动设备 iPhone 之间连接套接字 我正在尝试发现每个设备的IP并直接连接 我知道可以使用 Bonjour 来完成 但这只适用于本地网络 我需要通过互联网在两个设备之间建立高速连接 Thanks 如果你有两个 I
  • 同步通过 LAN 电缆连接的两台 Windows 7 计算机之间的时间

    我有许多笔记本电脑 它们运行我们的应用程序 同时通过以太网电缆成对连接 但未连接到任何外部网络或互联网 时间 我需要连接对来同步其系统时间 但由于每台计算机都需要能够与任何其他计算机同步 因此我无法将一台计算机定义为时间服务器 而另一台计算
  • P2P网络游戏/应用程序:类似“战网”匹配服务器的不错选择

    我正在制作一个网络游戏 1v1 游戏中是 p2p 不需要游戏服务器 然而 为了让玩家能够 找到彼此 而不需要在另一种媒介中协调并输入IP地址 类似于网络游戏的现代时代 我需要有一个协调 匹配服务器 我无法使用常规网络托管 因为 客户端将使用

随机推荐

  • 通过scrapy命令行工具做网页分析

    前言 Scrapy是由python语言开发的一个快速 高效的web抓取框架 用于抓取web站点并从页面中提取结构化的数据 只需要实现少量的代码 就能够快速的抓取 它最吸引人的地方在于它是一个爬虫框架 任何人都可以根据自己的需求方便的修改 s
  • Windows 下Maven安装配置(本地仓库配置)

    一 下载maven maven官网 http maven apache org 下载下来也就是一个压缩文件 解压 我下载的是3 5 2版本 解压之后如下 路径为 D Program Files apache maven 3 5 2 二 配置
  • idea繁体字-中文输入法变繁体字

    今天提交代码发现 在IDEA中输入法突然变成繁体字 解决方案如下 idea中适用的快捷键和你输入法快捷键冲突 具体是crtl shift f
  • Docker学习

    目录 外部访问容器 映射所有接口地址 映射到指定地址的指定端口 映射到指定地址的任意端口 查看映射端口配置 容器互联 新建网络 连接容器 Docker Compose 配置 DNS 高级网络配置 快速配置指南 容器访问控制 容器之间访问 访
  • 解决iframe重定向让父级页面跳转

    原文 http www jb51 net article 40583 htm 有内嵌iframe的页面 当session过期时 点击连接重定向后的跳转会在iframe中跳转 在登录页面中加入下面的代码 就会在最外层页面跳转 原文 http
  • JVM 默认Xss大小

    abin lee java XX PrintFlagsFinal version grep ThreadStackSize intx CompilerThreadStackSize 0 pd product intx ThreadStack
  • 独步潮流!如何在私有数据集上塑造GPT式大型语言模型的独特风格!

    导读 Fine tune 是一种能够以成本效益的方式调整预训练 LLM 的技巧 本文主要比较了用于最新的开源 LLM Falcon 的不同参数高效微调方法 并为大家介绍如何使用单个 GPU 并在一天内对开源的大语言模型 Falcon 进行微
  • 【色度学】光度学基础

    1 光的本质 1 波长不同的可见光 引起人眼的颜色感觉不同 2 人们观察到的颜色是物体和特有色光相结合的结果 而不是物体产生颜色的结果 2 光度量 ISP 光的能量与颜色 1 mjiansun的博客 CSDN博客 ISP 光的能量与颜色 2
  • 鸿蒙2.0都来了,一起把环境搭建起来!

    自4月底开始 鸿蒙2 0系统便迎来公测 6月2日将举行鸿蒙操作系统以及华为全场景新品发布会 届时会正式推出鸿蒙OS稳定版 针对华为发布的鸿蒙系统 网上评论褒贬不一 有吹捧的 有无脑黑的 在这里一口君就不做评价了 但是有2点 对任何一个新兴事
  • spdk探秘-----vhost 、ISCSI、 NVMe-oF Target

    vhost target 这里我们主要介绍用SPDK vhost target来加速虚拟机中的I O 在介绍这个加速方案之前 我们先看看主流的I O设备虚拟化的方案 纯软件模拟 完全利用软件模拟出一些设备给虚拟机使用 主要的工作可以在Sim
  • http://www.xxx.com/ skipped. Content of size 67099 was truncated to 59363

    如果提示http www xxx com skipped Content of size 67099 was truncated to 59363 在nutch site xml中添加
  • python关系运算符连续使用_Python比较运算符(关系运算符)

    比较运算符 也称关系运算符 用于对常量 变量或表达式的结果进行大小比较 如果这种比较是成立的 则返回 True 真 反之则返回 False 假 True 和 False 都是 bool 类型 它们专门用来表示一件事情的真假 或者一个表达式是
  • Redis配置类

    天行健 君子以自强不息 地势坤 君子以厚德载物 每个人都有惰性 但不断学习是好好生活的根本 共勉 文章均为学习整理笔记 分享记录为主 如有错误请指正 共同学习进步 Redis配置类 Redis配置类1 Redis配置类2 在使用redis时
  • python 生成器

    生成器 对象后续元素按照某种算法推算出来 在python中 这种一边循环一边计算的机制 称为生成器 得到生成器的方法 1 利用列表推导式得到 cat generator py usr bin env python coding utf8 g
  • idea自动生成单元测类

    Navigate between tests and production code Intellj idea 中创建测试 test intellij idea 自动生成test单元测试 IntelliJ IDEA如何创建测试类 在Inll
  • 令人头秃的:你的主机中的软件中止了一个已建立的连接

    此文章来源于项目官方公众号 AirtestProject 版权声明 允许转载 但转载必须保留原链接 请勿用作商业或者非法用途 1 前言 最近在答疑群中 经常看到同学们遇到 你的主机中的软件中止了一个已建立的连接 这样的报错 这个报错可能的原
  • cpp: read and write utf-8 text file using vs 2022

    file geovindu h brief 业务操作方法 author geovindu Geovin Du date 2023 04 22 https learn microsoft com zh cn cpp build referen
  • 1400*C. No Prime Differences(找规律&数学)

    解析 由于 1 不是质数 所以我们令每一行的数都相差 1 对于行间 分为 n m之中有存在偶数和都为奇数两种情况 如果n m存在偶数 假设m为偶数 如果都为奇数 则 include
  • 中科大少年班毕业生撑起AI半壁江山!科技圈天才少年盘点

    中科大少年班毕业生撑起AI半壁江山 科技圈天才少年盘点 原创 刘燕 AI前线 AI前线 微信号ai front 功能介绍面向AI爱好者 开发者和科学家 提供AI领域技术资讯 一线业界实践案例 搜罗整理业界技术分享干货 AI论文解读 每周一节
  • BitTorrent协议规范(BitTorrent Protocol Specification)系列之B编码(Bencoding)-第一部分

    鉴定 BitTorrent是由布莱姆 科恩设计的一个端对端 peer to peer 文件共享协议 此协议使多个peers通过不可信任的网络的文件传输变得更容易 目的 此规范的目的是详细介绍 BitTorrent 协议规范 v1 0 Bra