【P2P网络】BitTorrent协议中文版3
Tracker是一个响应HTTP GET请求的HTTP/HTTPS服务。这个请求包含来自客户端的度量信息,这些信息能够帮助Tracker全面地统计torrent。Tracker的响应包含一个peers列表,这个列表能够帮助客户端加入到torrent中。Base URL由元数据文件(即以.torrent为后缀的文件)中定义的announce URL组成,然后使用标准的CGI方式将这些请求参数追加到这个URL后面(CGI方式即在announce URL后面紧跟一个’?’,然后是一个以’&’分隔的’param=value’序列)。
对于一个20字节的散列值 “\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\
x12\x34\x56\x78\x9a”,其正确的编码形式是“%124Vx%9A%BC%DE%F1%23Eg%89%AB%CD%EF
l info_hash:URL编码的20字节SHA1散列,这个散列是元信息文件中info键所对应的值的SHA1散列。注意info键所对应的值是一个B编码的dictionary,关于info键的定义请参考我的上一篇博文。
l port:客户端正在监听的端口号。为BitTorrent协议保留的端口号是6881-6889。如果不能使用该区间的数字建立端口号,客户端有可能拒绝建立连接。
l uploaded:客户端已经上传的总量(从客户端发送’started’事件到Tracker算起),以十进制ASCII表示。尽管官方规范没有显式指定,大部分情况下是指已经下载的字节总数。
l downloaded:已下载的字节总量(从客户端发送’started’事件到Tracker算起),以十进制ASCII表示。尽管官方规范没有显式指定,大部分情况下是指已经下载的字节总数。
l left:客户端还没有下载的字节数,以十进制ASCII表示。
l no_peer_id:表示Tracker将省略peers dictionary中的id字段。如果启用compact,那么就会忽略这个选项。
l event:如果指定的话,必须是started, completed, stopped和空(和不指定的意义一样)中的一个。如果一个请求不指定event,表明它只是每隔一定间隔发送的请求。
n started:第一个发送到Tracker的请求其event值必须是该值。
n stopped:如果正常关闭客户端,必须发送改事件到Tracker。
n completed:如果下载完毕,必须发送改事件到Tracker。如果客户端启动之前,已经下载完成的话,则没有必要发送该事件。Tracker仅仅基于该事件增加已经完成的下载数。
l numwant:(可选),客户端希望从Tracker接受到的peers数,如果省略,则默认是50个。
l key:(可选),不和其他用户共享的附加标识。当客户端IP地址改变时,可以使用该标识来证明自己的身份。
l trackerid:(可选),如果之前的announce包含一个tracker id,那么当前的请求必须设置该参数。
Tracker以”text/plain”文本响应客户端的请求,这个响应文本由B编码的dictionary组成,而这个dictionary则包含如下的键(key):
l warning message:(新加入,可选) 类似于failure reason,但是即使存在这个键,这个响应还会正常地处理下去。warning message显示为一个错误。(字符串类型)
l interval:客户端每隔一定间隔就会向Tracker发送一个请求,这个键(key)以秒为单位指出这个间隔的大小。(整数类型)
l min interval:(可选),最小的请求间隔,它表示客户端不能在这个时间间隔之内向Tracker重发请求。 (整数类型)
l tracker id:客户端发送其下一个请求时必须返回给Tracker的一个字符串。如果缺失,但是上一个请求发送了tracker id,那么不要丢弃旧值,重复利用即可。
l complete:完成整个文件下载的peers数,即做种者的数量。 (整数类型)
l incomplete:非做种的peers数(还没有完成该文件下载的peers数),即“占他人便宜者”数。(整数类型)
l peers:(dictionary model) 该键(key)对应的值是一个dictionary list(列表),该list中的每一个dictionary都包含如下的键(key):
n peer id:peer自己选择的用来标识自己的ID,上文在描述Tracker请求时已经说明。 (字符串类型)
n ip:peer的IP地址,可以是Ipv6/Ipv4/DNS name。(字符串类型)
例:(announce URL -> scrape URL)
~http://example.com/announce -> ~http://example.com/scrape
~http://example.com/x/announce -> ~http://example.com/x/scrape
~http://example.com/announce.php -> ~http://example.com/scrape.php
~http://example.com/a -> (scrape not supported)
~http://example.com/announce?x2%0644 -> ~http://example.com/scrape?x2%0644
~http://example.com/announce?x=2/4 -> (scrape not supported)
~http://example.com/x%064announce -> (scrape not supported)
你也可以指定多个info_hash参数给Tracker (得支持多个info_hash参数)。这不是官方规范的一部分,但是已经成为了实际标准,例如:
这个HTTP GET方法的响应是一个’text/plain’或者有时候是用gzip压缩的文本,这个文本由一个B编码的dictionary组成,这个dictionary包含如下的键(key):
n complete:完成文件下载的peer数,即做种者的数量。(整数类型)
n downloaded:已向tracker注册的下载完成的总次数("event=complete",即一个客户端完成了下载) 。(整数类型)
n incomplete:非做种的peers数(还没有完成该文件下载的peers数),即“占他人便宜者”。 (整数类型)
n name:(可选的),torrent的内部名,由.torrent文件中info键所对应值中的name指定。
d5:filesd20:....................d8:completei5e10:downloadedi50e10:incompletei10eeee
表示....................是一个20字节的info_hash,有5个做种者,5个正在下载者以及50个已经完成的下载。
Unofficial extensions to scrape(scrape的非正式扩展)
下面的响应键是非官方的。因为它们都是非官方的,因此都是可选的。
l failure reason:可读的错误信息,这个信息告诉客户端请求失败的原因(字符串类型)。使用该键的知名客户端:Azureus。
l flags:这是一个B编码的dictionary,它包含多个标志。flags键对应的值是另一个嵌套的dictionary,可能包含如下键(key):
【P2P网络】BitTorrent协议中文版3相关推荐
- 区块链P2P网络协议演进过程
区块链是以加密机制.储存机制.共识机制等多种技术组成的分布式系统,可以在无中心服务器的情况下实现相互信任的点对点交易功能.区块链最大的特点是去中心化和分布式,区块链共识机制使得参与节点共同为系统提供服 ...
- p2p服务器的协议,P2P文件传输协议之BitTorrent协议
BitTorrent协议是支持网络当中数据的上下传输的一个P2P文件传输协议.那么基于这个协议的BT软件大家肯定更不会陌生.但是它却有着更为广泛的使用,尤其是在一些大型网络数据交换平台中,也常常会使用 ...
- IPFS网络是如何运行的(p2p网络)
图片来自wiki IPFS是一个p2p网络,先来看看BitTorrent的p2p网络是如何工作的? 想要bt下载一个文件,首先你需要一个种子文件torrent,种子文件包含至少一个 Tracker(一 ...
- 第10讲 | 深入区块链技术(二):P2P网络
在上一篇文章中,我大致讲解了一下区块链技术的几个核心要素.P2P网络协议.分布式一致性算法(共识机制).加密签名算法.账户与存储模型.今天我们就来看看区块链技术的第一个核心要素:P2P网络. 如果我们 ...
- BitTorrent协议与MagNet协议原理
BitTorrent协议 1.简介 BitTorrent(简称BT)是一个文件分发协议,每个下载者在下载的同时不断向其他下载者上传已下载的数据.而在FTP,HTTP协议中,每个下载者在下载自己所需文件 ...
- P2P网络——网络模型概述
P2P网络模型 一.常见网络模型 1.随机网络:随机网络的研究是基于随机图理论的. 2.规则网络:常见的规则网络有最近邻耦合网络和星形耦合网络. 3.小世界网络 二. ...
- kademlia算法学习(区块链P2P网络设计)
如今很多P2P网络的实现都采用DHT的方式实现查找,其中Kademlia(简称Kad)算法由于其简单性.灵活性.安全性成为主流的实现方式.下面我们就来详细分析这个应用于比特币和以太坊P2P网络中的Ka ...
- 谈BitTorrent协议中的DHT方法
背景:P2P.BT协议 1.P2P方法的思想和产生原因 P2P全称Peer to Peer.要想理解p2p首先要了解另一种更原始的结构:C/S结构. C/S结构中,C指client,S指server. ...
- BitTorrent (协议)
BitTorrent (协议) http://zh.wikipedia.org/wiki/BitTorrent_(%E5%8D%8F%E8%AE%AE) BitTorrent协议(简称BT,俗称比特洪 ...
最新文章
- C语言网络编程:多路IO select实现多客户端
- 2018世界人工智能蓝皮书:看中国到底有多强!【附下载】| 智东西内参
- 河套酒业集团远程应用K/3系统案例解析
- python获取耗时的shell_python获取耗时的shell_关于Linux:在shell中获取程序执行时间...
- Text模式和PDU模式短信的区别
- linux下安装nginx的采坑记录
- php 的点代表什么意思,linux .(点)是什么意思
- Java数据结构:数组模拟的队列(Queue)和环形队列(Circle Queue)
- MATLAB使用cic滤波器,基于Matlab的CIC滤波器设计
- Linux进程中有xorg,linux – Xorg如何工作?
- 【微信授权登录】uniapp开发小程序,实现获取微信授权登录功能
- 阿里云OSS定时备份文件并定时删除过时文件
- 【项目分享~写给应届生的一篇文章】基于Web电影院购票系统 ~~ 选座模块
- 【id:179】【20分】C. DS二叉树--赫夫曼树的构建与编码(不含代码框架)
- 知音微服务平台网上订烟_新商盟网上订烟登录工具
- java 监控 m_Java接口响应超时监控
- Kaggle实战:随机森林预测泰坦尼克生存率
- 小区挤不挤?来看用ArcGIS计算小区的容积率(附练习数据下载)
- PS——矢量形状与路径
- 流量分析题目(流量检索,数据提取,数据重组,伪加密,图片提取)
热门文章
- Python+Flask实现全国、全球疫情大数据可视化(二):网页页面布局+echarts可视化中国地图、世界地图、柱状图和折线图
- SOUL音乐(安卓)
- 计算机2级考试分几种,全国计算机2级考试的种类有哪几种啊?
- xcvxcvxcvc
- JavaWeb---Tomcat---Servlet
- 东方财富自选批量导入
- 电力网络计算机监控系统前景,电气火灾监控系统技术发展现状及前景分析
- python和matlab计算速度对比_【转载】Fortran与Matlab的计算速度对比(Code by myself)...
- AI4DB:人工智能之慢SQL根因分析
- 实现单片机控制流水灯代码