Linux BT下载(1)-基础入门
来源:互联网 发布:纯js 的时间控件 编辑:程序博客网 时间:2024/05/18 03:39
什么是BT软件
很多人用过比特彗星、迅雷下载,PPLive等软件它们都采用了BT协议,故可以称为BT软件。
什么是BT协议
2003年,软件工程师Bram Cohen发明了BitTorrent协议,即BT协议。BT是一种互联网上新兴的P2P传输协议,全名叫"BitTorrent",中文全称:"比特流" 。BT下载通过一个P2P下载软件(点对点下载软件)来实现,克服了传统下载方式的局限性,具有下载的人越多,文件下载速度就越快的特点。
此图描述的普通下载方式
此图描述的P2P下载
BitTorrent协议
概念
BT是一种文件分发协议,属于P2P协议。它通过URL识别文件内容并和网路结合。其优势是,同时在一个文件的下载者在下载的同时也在不断的互相上传数据,使文件源可以在很有限的负载增加的情况下支持大量下载者同时下载。其特定是下载的人越多下载的速度越快,其原因就是每个下载者将自己已下载的数据提供给其他下载者下载,它充分利用用户的上载带宽。
工作原理
BT由如下几个部分组成:.torrent文件、种子提供站点、目录服务器和内容分发者/下载者。更为确切的说有:一个Web服务器,一个种子文件,一个Tracker服务器,一个原始文件提供者,一个网路浏览器,一个或多个下载者。
Web服务器保存种子文件以供下载者下载,下载者可以通过浏览器从此处下载种子文件。
.torrent文件(种子)是一种文本文件,包含了tracker信息和文件信息两部分。种子文件一般非常小,一般大小为1GB的共享文件,其种子文件不足100KB。
Tracker服务器保存当前下载某共享文件的所有下载者的IP地址和端口。
提供者提供完整的共享文件以供其他下载者下载。我们把某个下载者本身称为客户端,把其他下载者称为peer。
BT的主要原理是把提供下载的文件虚拟分成大小相等的块,块大小必须为2Kbyte的整数次方,并把每个块的索引信息和Hash验证码写入种子文件中,so,.torrent文件就是被下载文件的“索引”。种子提供站点也是.torrent文件提供站点,为下载者提供下载.torrent文件的下载服务。
我们称BT下载软件(即客户端)为下载者。BT客户端下载一个共享文件的过程是:客户端首先解析种子文件,获取待下载的共享文件的一些信息,其中包括Tracker服务器的地址。然后客户端连接Tracker获取当前下载该文件的所有下载者的IP和端口。之后客户端根据IP和端口连接其他下载者,从它们那里下载文件,同时把自己下载的部分给其他下载者下载。
共享文件的虚拟分成的块一般大小为256KB。对于共享文件文件第1字节到256字节为第一个piece,之后是第2个piece。BT协议规定使用Shal算法对每个piece生成20字节的hash值,作为每个piece的指针。每当客户端下载完一个piece时,即对该piece使用Shal算法计算其hash值,并与种子文件保存的该piece的hash值进行比较。在实际的上传和下载中,每个piece又被划分为大小相同的slice,每个slice的大小固定为16KB。peer之间传输以slice为单位。
0 0
- Linux BT下载(1)-基础入门
- BT下载从入门到精通
- linux下bt下载存在的问题
- linux c 编程开发BT下载软件
- Linux下下载BT资源的方法
- Linux BT下载(3)-与Tracker交互
- Linux BT下载(5)-系统结构设计
- Linux BT下载(12)-消息处理模块
- 在Linux终端下进行BT下载
- cTorrent-linux命令行BT下载工具 cTorrent下载
- BT下载
- Linux BT下载(6)-BT下载实现的关键算法和策略
- Linux BT下载(7)-种子解析模块设计与实现1
- linux c编程.做一个BT下载软件
- 基于Linux下Iptables限制BT下载的研究
- Linux BT下载(2)-B编码和种子文件
- Linux BT下载(4)-peer之间的通信协议
- Linux BT下载(13)-缓存管理模块设计与实现
- linux socket各种函数
- 区块链开发(八)以太坊不同语言客户端地址
- Linux下查看系统版本号信息的方法
- angular原理及模块简介
- struts2工作原理简介
- Linux BT下载(1)-基础入门
- Iterator
- 详解高斯牛顿迭代法原理和代码
- PyCharm的技巧(参数和conslole)
- Spring Boot中使用@Async实现异步调用
- 深入理解乐观锁与悲观锁
- Python学习天二天
- Java反射机制总结三
- gcc -Wall