BT杂谈

最近搞bt移植,整理下思路。bt分享的过程可大致分为2个步骤:


1.torrent文件制作  
torrent文件存储的信息结构:

announce - tracker的URL
info - 该条映射到一个字典,该字典的键将取决于共享的一个或多个文件:
    name - 建议保存到的文件和目录名称
    piece length - 每个文件块的字节数。通常为 = 256KB = 262144B
    pieces - 每个文件块的SHA-1的集成Hash。因为SHA-1会返回160-bit的Hash,所以pieces将会得到1个160-bit的整数倍的字符串。和一个length(相当于只有一个文件正在共享)或files(相当于当                多个文件被共享):
    length - 文件的大小(以字节为单位)
    files - 一个字典的列表(每个字典对应一个文件)与以下的键:
    path - 一个对应子目录名的字符串列表,最后一项是实际的文件名称
    length - 文件的大小(以字节为单位
文本工具打开形式如下,是经过bencode编码的:
d8:announce34:http://192.168.21.91:6969/announce10:created by2:BK13:creation datei1361865034e4:infod6:lengthi826555e4:name13:lecture20.pdf12:piece lengthi524288e6:pieces40:澬中禥?羔?:"?贮媕棵n擱]箷ゾ?彥.`Tee
下面是个github上的java写的开源项目ttorrent,用于种子制作和发布的,里面包含一个客户端和tracker服务端
https://github.com/turn/ttorrent


 

2.torrent发布(不过我觉得还是叫"做种"更恰当些
1>seeder 种子要成功发布,首先得激活这个种子,不然直接把这个制作好的种子发给他人,他用bt客户端打开,也下载不到内容。那怎么激活呢?
sharer首先通过客户端解析torrent文件内容与tracker交互,并自己下载一次这个文件,并且注意的是:下载的路径一定要是你之前share的那个文件或目录的路径。
这样tracker就记录下了个信息:{hash(seeder:(ip:xxx;port:xxx;left:0%;complete:100%,...))},这个种子拥有者(即sharer)可称为seeder,此时种子数为1
2>peer peer1和tracker交互得到peers列表,而peers包含的主要是:
{hash(seeder:(ip:xxx;port:xxx;left:0%;complete:100%,...))}
之后peer直接与seeder交互,下载文件,此时这个过程可称为p2p(peer to peer,端对端),并每隔一段时间给tracker上传自己的下载信息
3>peer peer2同peer1类似,不过他可同时与seeder和peer1交互下载。当peer得到了完整的文件片段,sharer可以停止做种了,但为了保证种子的生命周期,还是继续开放做种服务,延长种子生命周期
4>这样,下载的人越多,资源就越多,在带宽允许的情况下,下载越快。这就是网络中“人人为我,我为人人”的相互服务……


下面贴一个简单的过程图:

BT杂谈_第1张图片



上面是最开始的理解,可能不是很准确,有时间根据下面这个文章再总结 下

http://blog.chinaunix.net/uid-26548237-id-3056731.html

下面就按上面分3个步骤来分析bt过程:

1.种子制作




你可能感兴趣的:(android,BT,torrent,种子分析)