java解析bt协议详解_【转】bt协议的详细分析

news/2024/11/30 1:30:51/

一 BT系统的组成结构

1 普通的Web服务器:        例如Apache或IIS服务器

2 一个静态的种子文件:     即.Torrent文件,采用Bencoding编码

3  Tracker服务器:            追踪下载同一文件的用户

4 终端用户的Web浏览器:  用于下载种子文件

5  BT客户端:                   例如BitCommet,BitSpirit

二 种子文件

1 格式介绍

种子文件采用bencoding编码,整个文件包含以下关键字:

announce:             Tracke服务器的UR以字符串)。

announce-list(可选):  备用Tracker服务器列表(列表)。

creation date(可选):  种子创建的时I司。

comment(可选):       备注(字符串)。

created by(可选):     创建人或创建程序的信息(字符串)。

Info:                       一个字典结构,包含文件的主要信息,分二种情况:单文件结构或多文件结构

单文件结构如下:

length:                 文件长度,单位字节(整数)。

md5sum(可选):  长32个字符的文件的MD5校验和,BT不使用这个值,只是为了兼容一些程序所保留!(字符串)。

Name:                 文件名(字符串)。

Piece length:        每个块的大小,单位字节(整数)。

Pieces:                每个块的20个字节的SHAT Hash的值(二进制格式)。

多文件结构如下:

files:                    一个字典结构。

Length:                文件长度,单位字节(整数)。

md5sum(可选):   同单文件结构中相同。

Path:                   文件的路径和名字,是一个列表结构,如test\test.txt列表 为 14:test8test.txte

Name:                 最上层的目录名字(字符串))o

Piece length:        同单文件结构中相同。

Pieces:                同单文件结构中相同。

2 Bencoding编码规则:

(1)字符串编码::

例如字符串spam被编码为4:spam

(2)整数编码:  ie

例如数字23表示为i23e,-23表示为i-23e,0为i0e

(3)列表编码:  1e

例如l4:spam4:eggse表示两个字符串“spam”,“eggs”

(4)字典编码: de

例如d3:cow3:moo4:spam4:eggse表示{“cow“=“moo“, “spam“=“eggs“}

d4:path3:C:\8:filename8:test.txte表示{“path”=”C:\”,”filename”=”test.txt”}

3 文件举例(以下是用记事本打开.torrent文件)

d8:announce40:udp://tracker.bitcomet.net:8080/announce13:creation datei1175422660e8:encoding3:GBK4:infod6:lengthi7080818e4:name18:gettingoveryou.mp310:name.utf-818:gettingoveryou.mp312:piece lengthi1048576e6:pieces140:琚瀲⒂!堯??M挷咲i?屩轩@鏋EU轒50-?鷰靀F?@憸%l?Iy~ ??R?襉軦d[1]f岤\>@陗罏?樯燐#o?翟木懣槾”霡­瓼W?棈Dk鰛殴鴞?チY庖}0!$苶 7:privatei1ee13:publisher-url7:http://19:publisher-url.utf-87:http://e

三 BT系统的通信过程(没有采用DHT时)

BT客户端通过种子文件获得相关信息,在下载过程中定期与Tracker服务器交互(通过http协议或者https协议)。Tracker定期从下载者处接受信息,并返回一个Peers列表。

下载者周期性的向Tracker登记,Tracker根据各个下载者的登记信息不断更新Peers列表。因此BT客户端定时的向Tracker发出获取Peers列表的请求,以便客户端能获得更快、更多的Peers,使得它的下载速度更快。

BT客户端之间根据Peers列表的信息,向相应的BT客户端发起连接,下载需要的部分,从而实现了各个客户端之间的相互通信。这种连接是基于TCP的BT对等协议。

四 Tracker查询

Tracker通过HTTP的GET命令的参数来接收信息BT客户单发送给Tracker服务器GET请求,包含一下关键字:

Info_ hash:     种子文件中info部分的SHA-1 (Secure Hash Algorithm 1) ,  20字节长。每一个片断都采用SHA-I,当BT客户端每下载完一个片断,都需要验证数据的正确性。

PeerId:         下载者的ID,一个20字节长的字符串。每个下载者在开始一次新的下载之前,随机创建一个ID 。

IP(可选):     给出了peer的IP地址。

Port:             peer所监听的端口。下载者通常在在6881端口上监听,如果该端口被占用,就会尝试6882,如果还被占用,那么会一直尝试到6889,如果都被占用,那么就放弃监听。

Uploaded:     已经上载的数据大小。

Downloaded: 已经下载的数据大小。

Left:             该Peer还有多少数据没有下载完。

Event(可选):值可以为started, completed或stopped之一

五 Tracker响应

BT客户端向Tracker查询后,Track会发出响应。响应是用Bencoding编码的字典。

1 如果响应中有关键字failure reason,则表示查询失败,其值为一个字符串,解释失败原因。不再有其它关键字。

2 否则有两个关键字:

Interval:   两次发送请求的时间间隔

Peers:      一个字典的列表,每个字典包括一下关键字Peer Id , IP ,  Port,分别对应Peer所选择的ID, IP地址。

六 BT对等协议

是基于TCP的应用层协议,用于Peer之间交换信息。连接后两个Peer之间是对称的,数据可以双向传送。当一个Peer下载完一个片段后,就会向所有Peer宣布它拥有了这个片段。包括一下几个消息:

1 Handshake消息

2 Bitfield消息

3 Have消息

4 Request消息

5 Cancel消息

6 Choke消息

7 Interested消息

8 keep-alive消息

注:在没有采用DHT(Distributed Hash Table或Dynamic Hash Table)技术时,对等体之间的互相发现需要通过Tracker服务器,因此如果没有Tracker服务器,BT客户端就不会获得新加入的用户的信息, 速度会受很大影响甚至根本无法下载。现在很多BT软件采用DHT技术的Kad算法,可以不通过服务器实现对等体之间的相互定位与发现,例如电驴就采用了 kad网络。


http://www.ppmy.cn/news/882772.html

相关文章

linux bt下载没速度慢,linux bt速度之王

1. Rtorrent的特点 •BT下载 - 高速占内存少而且功能强大,绝不是mldonkey比得上的,mldonkey下电驴还可以考虑,bt的话还是闪一边去吧 速度比拼, 2M/512kbps ADSL enhanced ctorrent: 80 KB/s mldonkey: 40 KB/s …

linux bt速度快,linux bt速度之王—— rtorrent

1. Rtorrent的特点 •BT下载 - 高速占内存少而且功能强大,绝不是mldonkey比得上的,mldonkey下电驴还可以考虑,bt的话还是闪一边去吧 速度比拼, 2M/512kbps ADSL enhanced ctorrent: 80 KB/s mldonkey: 40 KB/s …

拦截BT与电驴

大 家在做项目的时候可能经常会碰到用户反映BT占用了大量的出口带宽,让你想办法帮助解决吧,现在BT软件太变态,通常的封端口已经搞不定他了。试试用CISCO的NBAR来封,效果一流,呵呵。 NBAR是一种动态能在四到七层协议特征…

百度云盘BT服务器,百度网盘磁链、BT离线停用,官方称服务器优化,非永久下线...

拼 命 加 载 中 ... 前段时间迅雷发布了迅雷X下载软件,但它已经不是单纯的下载软件了,这几年来下载软件走下坡路的原因很多,其中一个因素就是各种网盘的兴起,网盘的离线下载比很多下载软件更好用。目前还能存活的、支持磁力、种子…

BT文件分享服务器,bt是什么意思服务(bt资源库)

“知其然知其所以然”。我们经常在下载资料的时候能看到BT、磁力链等词语,这些词语到底是什么意思呢? 下载都会用,但是你了解吗? BT下载 传统的下载模式是每个客户端从服务器拷贝文件,跟校园内常用的FTP一样。因为服务器宽带是一定的,所以下载的人越多下载速度会越慢。而…

echarts_柱状图+漏斗图

目录 柱状图(bar)需求[1] 复制案例[2] 修改类目轴方向[3] 修改数据渲染方向[4] 修改坐标轴文本样式 漏斗图(funnel)漏斗图的形状 柱状图(bar) 需求 如上图,做一个横向柱状图,后端返回的数据是从小向大排列的数据,希望能够按照顺序进行展示。…

打造linux下bt、电驴、ftp一体服务器

打造个人专用bt、电驴、ftp一体服务器操作系统选择了Debian 4.0(etch),当服务器当然要用linux了,稳定嘛~ 下载地址: [urlhttp://debian.cn99.com/debian-cd/etch/debian-40r1-i386-netinst.iso]http://debian.cn99.com/debian-cd/etch/debi…

口语化讲某些软件如BT,电驴,向日葵等穿透内网原理

一般如果要访问或远程控制内网的电脑,都需要在路由器或网关服务器上做端口映射处理,但某些软件如BT,电驴,向日葵,teamviewer等无需做端口映射即可穿透内网远程通讯。一般宽带路由器对出站通讯(主动连接&…