bt协议解析
发布时间:2008-01-07 00:01:16 作者:
Bt协议:
实际中,bt网络类似于eMule,也是由两个网络共同构成的。一个是有服务器的网络,另一个是无服务器的网络。
服务器网络:当某个文件要被共享时,共享这个文件的客户首先将文件按照之前协议中的规则制定成一个种子文件。然后它将种子文件的信息发送到服务器上去。之后,需要下载这个文件的其他客户端就会连到这个服务器上,将自己的信息提交给服务器。服务器因此就维护一张所有下载文件的节点的表。并将表中的若干个节点(数目可规定)信息发送给新加入的节点,节点就可以连接其他节点来下载文件了。在我看来,相比其他中心服务器的P2P网络,这种结构的优点是由于大家都是一哄而散的下载方式,因此服务器的存在时间较短,不容易引起版权纠纷等。另外,可以由任何网络服务器作为种子服务器,因此易用性加强。
DHT网络:也就是分布式哈希表网络。实际上和eMule的Kad网络是一样的,只是在配置和哈希编码方面不同。它的作用也是使得客户端可以不连接中心服务器就直接找到网络中在下载同一文件的其他客户端。
Bt 协议由以下几个部分组成:
1. 编码格式: 编码格式规定了在整个bt的应用中,所有消息,报文,通讯等过程所使用信息的格式。根据定义,可以有4种格式的编码,分别是:字符串,整数,链表,字典表。这四种编码格式,构成了整个bt中的信息。
Byte strings: <string length encoded in base ten ASCII>:<string data>
例如:4:spam,就是“ spam”
Integers:i<integer encoded in base ten ASCII>e
例如,i3e表示3,I-3e表示-3。此外,0开头的数字无效。
Lists:l<bencoded values>e
例如:l4:spam4:eggse 表示 [‘spam’, ‘eggs’]
Dictionaries:d<bencoded string><bencoded element>e
例如:d3:cow3:moo4:spam4:eggse,表示{‘cow’:’moo’,’spam’:’eggs’}
而d4:spaml1:al:bee 表示 {‘spam’:[‘a’,’b’]}
2. 源文件内容:
源文件是一个种子文件“.torrent”。它含有文件共享的全部信息。这些信息是通过关键字以及其对应的值来决定的。所有的信息都通过上文所说的编码格式来编码。
关键字包括:info,announce,announce-list,creation date,comment,created by。
其中info是一个字典表,分为单个文件和多个文件,包括的信息是:
Piece length(256), pieces, private;
单文件:name,length,md5sum
多文件:name,length,md5sum,path
3. 服务器网络协议: 这部分定义的是bt中的服务器的应用。在bt网络中,需要有一个服务器来维护所有的客户端的信息。每个客户端都需要注册到这个服务器上,来获得文件,以及其他所有共享客户的信息。服务器通信是基于HTTP协议上的,采用TCP传输数据。客户端和服务器通过GET请求来传送服务,规定的负载包括:需求文件hash,客户id,端口,已上传/下载文件,文件剩余部分,ip地址等。这些负载可以使得客户端与服务器之间交换需要的所有信息,控制等。另外,服务器还有另一套协议,使得它可以直接与网页联系。在网页上显示出某文件的详细信息。比如当前种子数,已完成数,当前下载数等。
Tracker查询:
info_hash,peer_id,port,uploaded,downloaded,left,compact,no_peer_id,event:(started,Stopped,completed),Ip,numwant,key,trackerid。
Tracker相应:
failure reason,warning message,interval,min interval,tracker id,complete,incomplete,peers:(peer id,ip,port),peers(对应与compact)
Tracker网页相应:
files,complete,downloaded,incomplete,name
4. 节点间的TCP连接协议:这部分主要详细说明得到了文件共享客户端的信息后,节点如何与其他节点进行连接,以及进行文件传输的规则。这一部分相对于其他P2P协议要复杂很多,它定义了很多规定,状态,以及两个节点之间的交互过程等来保证文件共享的网络最优化。此外,对于需要下载的文件,bt 协议将其分割为很多小的块。这里还定义了一些下载块的原则,来保证网络的最优化。另外是一些“消息”的定义。节点之间传送的消息都是严格按照上面的“编码格式”来进行编码再传输的。
节点间的两种状态:choked,intersted
相应的4个关键字:am_choking, am_interested, peer_choking, peer_interested
握手消息:handshake: <pstrlen><pstr><reserved><info_hash><peer_id>
消息:
keep-alive: <len=0000>
choke: <len=0001><id=0>
unchoke: <len=0001><id=1>
interested: <len=0001><id=2>
not interested: <len=0001><id=3>
have: <len=0005><id=4><piece index>
bitfield: <len=0001+X><id=5><bitfield>
request: <len=0013><id=6><index><begin><length>
piece: <len=0009+X><id=7><index><begin><block>
cancel: <len=0013><id<=8><index><begin><length>
port: <len=0003><id=9><listen-port>
5. 算法定义: 这些算法定义包括文件片段分割,初始化下载,连接选择,文件结束下载优化等机制。这些算法都是为了应用最优化的原则来考虑的。
文件分片: Bt中的文件分片技术也是有固定规定的。每个文件被分为固定长度大小(现行应用是256k)的块。每个块都有自己对应的SHA1哈希和,作为校验依据。而每个块又被进一步分为大小为16k的子片段。实际传输的就是这些子片段。每个客户端会为每个子片段维护5个请求,来循环发送,直到请求通过,下载这个子片段为止。应用中,客户端会优先请求下载了某个子片段的片段中的其他子片段,这样做是为了优先完成整个片段,从而提供共享。
最少优先: 通过前文说过的一些消息,每个客户端会知道其他客户端完成的片段和未完成的片段。这时,客户端会选择最优先下载在整个网络中存在最少的文件片段。当第一次请求片段的时候则是随机的请求。
最后阶段模式: 有时候,从一个速率很慢的客户端那里请求一个片断,在下载的中间阶段,这不是什么问题,但是却可能潜在的延迟下载的完成。为了防止这种情况,在最后阶段,客户端向它的所有的客户端们都发送某片断的子片断的请求,一旦某些子片断到了,那么就会向其它客户端发送cancel 消息,取消对这些子片断的请求,以避免带宽的浪费。实际上,用这种方法并没有浪费多少带宽,而文件的结束部分也一直下载的非常快。
阻塞算法: 每个客户端会阻塞那些只下载不上传的节点,使得网络保持平等。又包括:最优化非阻塞,反对歧视,仅仅上传等。
总之,这些机制看似很复杂,但是却保证了bt下载的速率和网络的最优化,使得其能够成为众多P2P应用中最主流的一种。
...
0
投票
关键词: bt软件下载 bt电影下载 bt下载工具 集结号bt下载 bt下载器 投名状bt下载 bt种子下载 成人bt下载 爱城bt下载
所属类别:bt
相关链接:原文链接
过滤文章链接
举报删除