您的位置:首页 > 其它

bt 协议及分析

2008-03-14 11:45 316 查看
BT系统的组成结构
1普通的Web服务器:例如Apache或IIS服务器
2一个静态的种子文件:即.Torrent文件,采用Bencoding编码
3Tracker服务器:追踪下载同一文件的用户
4终端用户的Web浏览器:用于下载种子文件
5BT客户端:例如BitCommet,BitSpirit

种子文件
1格式介绍
种子文件采用bencoding编码,整个文件包含以下关键字:
announce:Tracke服务器的UR以字符串)。
announce-list(可选):备用Tracker服务器列表(列表)。
creationdate(可选):种子创建的时I司。
comment(可选):备注(字符串)。
createdby(可选):创建人或创建程序的信息(字符串)。
Info:一个字典结构,包含文件的主要信息,分二种情况:单文件结构或多文件结构
单文件结构如下:
length:文件长度,单位字节(整数)。
md5sum(可选):长32个字符的文件的MD5校验和,BT不使用这个值,只是为了兼容一些程序所保留!(字符串)。
Name:文件名(字符串)。
Piecelength:每个块的大小,单位字节(整数)。
Pieces:每个块的20个字节的SHATHash的值(二进制格式)。
多文件结构如下:
files:一个字典结构。
Length:文件长度,单位字节(整数)。
md5sum(可选):同单文件结构中相同。
Path:文件的路径和名字,是一个列表结构,如test/test.txt列表为14:test8test.txte
Name:最上层的目录名字(字符串))o
Piecelength:同单文件结构中相同。
Pieces:同单文件结构中相同。

2Bencoding编码规则:
(1)字符串编码:<字符串长度>:<字符串>
例如字符串spam被编码为4:spam
(2)整数编码:i<整数>e
例如数字23表示为i23e,-23表示为i-23e,0为i0e
(3)列表编码:1<Bencoding编码类型>e
例如
l4:spam4:eggse
表示两个字符串“spam”,“eggs”

(4)字典编码:d<Bencoding字符串><Bencoding编码类型>e
例如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:creationdatei1175422660e8:encoding3:GBK4:infod6:lengthi7080818e4:name18:gettingoveryou.mp310:name.utf-818:gettingoveryou.mp312:piecelengthi1048576e6: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(SecureHashAlgorithm1),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如果响应中有关键字failurereason,则表示查询失败,其值为一个字符串,解释失败原因。不再有其它关键字。
2否则有两个关键字:
Interval:两次发送请求的时间间隔
Peers:一个字典的列表,每个字典包括一下关键字PeerId,IP,Port,分别对应Peer所选择的ID,IP地址。

BT对等协议
是基于TCP的应用层协议,用于Peer之间交换信息。连接后两个Peer之间是对称的,数据可以双向传送。当一个Peer下载完一个片段后,就会向所有Peer宣布它拥有了这个片段。包括一下几个消息:
1Handshake消息
2Bitfield消息
3Have消息
4Request消息
5Cancel消息
6Choke消息
7Interested消息
8keep-alive消息

注:在没有采用DHT(DistributedHashTable或DynamicHashTable)技术时,对等体之间的互相发现需要通过Tracker服务器,因此如果没有Tracker服务器,BT客户端就不会获得新加入的用户的信息,速度会受很大影响甚至根本无法下载。现在很多BT软件采用DHT技术的Kad算法,可以不通过服务器实现对等体之间的相互定位与发现,例如电驴就采用了kad网络。
参考网站:http://www.bittorrent.org/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: