###BitTorrent (协议) 普通的HTTP/FTP下载使用TCP/IP协议,BitTorrent协议是架构于TCP/IP协议之上的一个P2P文件传输通信协议,处于TCP/IP结构的应用层
种子文件 根据BitTorrent协议,文件发布者会根据要发布的文件生成提供一个.torrent文件,即种子文件,也简称为“种子”
扩展名一般为“.torrent”,包含Tracker信息和文件信息两部分。
Tracker信息主要是BT下载中需要用到的Tracker服务器的地址和针对Tracker服务器的设置。 文件信息是根据对目标文件的计算生成的。
下载者要下载文件内容,需要先得到相应的种子文件,然后使用BT客户端软件进行下载。
下载时,BT客户端首先解析种子文件得到Tracker地址,然后连接Tracker服务器。Tracker服务器回应下载者的请求,提供下载者其他下载者(包括发布者)的IP。下载者再连接其他下载者,根据种子文件,两者分别告知对方自己已经有的块,然后交换对方所没有的数据。此时不需要其他服务器参与,分散了单个线路上的数据流量,因此减轻了服务器负担。
下载者每得到一个块,需要算出下载块的Hash验证码与种子文件中的对比,如果一样则说明块正确,不一样则需要重新下载这个块。这种规定是为了解决下载内容准确性的问题。
一般的HTTP/FTP下载,发布文件仅在某个或某几个服务器,下载的人太多,服务器的带宽很易不胜负荷,变得很慢。而BitTorrent协议下载的特点是,下载的人越多,提供的带宽也越多,下载速度就越快。同时,拥有完整文件的用户也会越来越多,使文件的“寿命”不断延长
BitTorrent协议内的Bencode规则进行编码。它的主要原理是需要把提供下载的文件虚拟分成大小相等的块,块大小必须为2k的整数次方(由于是虚拟分块,硬盘上并不产生各个块文件),并把每个块的索引信息和Hash验证码写入种子文件中;所以,种子文件就是被下载文件的“索引”
- announce:Tracker的主服务器
- announce-list:Tracker服务器列表
- comment:种子文件的注释
- comment.utf-8:种子文件注释的utf-8编码
- creation date:种子文件建立的时间,是从1970年1月1日-00:00:00到现在的秒数。
- info - 该条映射到一个字典,该字典的键将取决于共享的一个或多个文件:
- name - 建议保存到的文件和目录名称
- piece length - 每个文件块的字节数。通常为 256KiB = 262144B
- pieces 每个文件块的SHA-1的集成Hash。因为SHA-1会返回160-bit的Hash,所以pieces将会得到1个160-bit的整数倍的字符串。和一个length(相当于只有一个文件正在共享)或files(相当于当多个文件被共享)
- length - 文件的大小(以字节为单位)
- files - 一个字典的列表(每个字典对应一个文件)与以下的键:
- path - 一个对应子目录名的字符串列表,最后一项是实际的文件名称
- length - 文件的大小(以字节为单位)
"announce": "udp://tracker.coppersurfer.tk:6969/announce",
"announce-list": [
[
"udp://tracker.coppersurfer.tk:6969/announce"
],
[
"udp://9.rarbg.com:2710/announce"
],
[
"udp://p4p.arenabg.com:1337"
],
[
"udp://tracker.internetwarriors.net:1337"
],
[
"udp://tracker.opentrackr.org:1337/announce"
]
],
"comment": "Torrent downloaded from https://yts.mx ( former yts.Lt/yts.am/yts.ag )",
"created by": "YTS.AG",
"creation date": 1598278426,
"info": {
"files": [
{
"length": 933321356,
"path": [
"The.Caller.1987.720p.BluRay.x264.AAC-[YTS.MX].mp4"
]
},
{
"length": 53226,(字节)
"path": [
"www.YTS.MX.jpg"
]
}
],
"name": "The Caller (1987) [720p] [BluRay] [YTS.MX]",
"piece length": 524288,
"pieces": "<hex>A3 ...</hex>"
}
}
BT中相关概念
- Tracker:收集下载者信息的服务器,并将此信息提供给其他下载者,使下载者们相互连接起来,传输数据。
- 种子:指一个下载任务中所有文件都被某下载者完整的下载,此时下载者成为一个种子。发布者本身发布的文件就是原始种子。
- 做种:发布者提供下载任务的全部内容的行为;下载者下载完成后继续提供给他人下载的行为