文章虽然有点老,但原理差不多。

继上一篇文章(http://www.cnblogs.com/EasonJim/p/6601146.html)介绍了BT的原理,现在来看下BT服务端搭建的原理。

一、BT原理介绍

前言:

传统的文件下载服务都是基于客户机/服务器模型,被下载的文件放在服务器上,用户登录服务器,将该文件下载到本地。在文件下载的过程中,被传输文件的来源和目的端并不对等,服务器只是单向地将文件传送给客户端。

这种传统软件下载模式的缺点是显而易见的,整个系统的瓶颈位于服务器。由于受到服务器处理能力、互联网接入链路带宽等多种环境的制约,当下载量非常大时,服务器往往不堪重负。而用户下载完毕后就和服务器没有任何联系,其它用户也无法从以前用户下载的版本得到任何帮助。

随着互联网技术的不断发展,P2P(Peer To Peer,点到点)技术逐渐成为文件交换和下载的成熟技术。P2P技术将互联网“自由、平等、互助、共享”的精神发扬光大。

最早的P2P技术是音乐交换软件Napster,目前最流行的P2P文件交换技术则是BT(BitTorrent,比特流)。越来越多的人使用BT共享和 下载软件,互联网上提供“种子”的网站及BT客户端软件随处可见,但是互联网上有关架设BT服务器的文章大多针对Windows平台,而且往往没有涉及 BT原理,这使得希望使用Unix/Linux平台架设BT服务器,并提供“种子”下载的管理员们无从下手。本文从应用者角度讨论BT原理,并详细说明如 何在Unix/Linux平台下架设一台BT服务器,并提供“种子”下载服务。

BT原理:

BT是BitTorrent(比特流)的简称,BT的特点是用户下载的同时,也在为其它用户提供上传,所以不会像FTP服务器那样随着用户数的增加而导致下载速度降低。恰恰相反,对于BT下载而言,下载的人越多速度越快。

传统的文件共享服务,如FTP、HTTP等工作原理如图1所示。这种方式随着用户数的增多,对带宽的要求也随之增多,用户过多就会造成瓶颈,所以很多下载网站都有并发用户数的限制及下载速度的限制等。

而BT下载采用一种共享的方式来传输文件,其工作原理如图2所示。

BT下载首先在第一个共享端(或称为Downloader)把一个文件分成N个部分,A用户可以从Downloader上随机下载第M个部分,B用户可以 在Downloader服务器随机下载第K个部分。而A用户的BT客户端下载程序会根据情况从B用户下载第K个部分,同样的,B用户也可以从A用户下载第 M个部分,通过这种方式减轻服务器端负荷,加快用户的下载速度。例如,C用户直接从服务器下载,速度可能只有几Kbps,而从A、B用户处下载,速度将快很多。用户在下载的同时,也在上传文件,在享受别人提供下载服务 的同时,每个用户也同时在上载并贡献自己的带宽,所以造成使用BT下载服务的人越多,大家的速度就越快。BT下载的优越性就在这里体现。

原理的通俗版本解释,参考:http://www.cnblogs.com/EasonJim/p/6601146.html

BT组成:

从构建BT服务器的角度来看,整个BT系统由四个部分组成。

1.BT客户端

BT客户端是安装在用户PC机上的客户端软件,目前有很多BT客户端可用,这里推荐BitComet(http://www.bitcomet.com/index-zh.htm)。它是一个类似FlashGet界面的BT下载客户端软件,简洁易用。

BitComet在下载的同时,还负责将下载的内容共享给其它用户,这个过程完全不需要用户参与。如果不知道如何使用BT客户端下载,那么安装BitComet后去访问BT中国网站,试一试就知道如何使用了。

2.BT“种子”文件

BT“种子”文件是一个名为.torrent的文件,它是由第一个发布共享文件者根据源文件制作出来的源文件的指纹信息。“种子”文件很小,一般在几十 KB到几百KB之间,其中包含文件所在的BT端地址信息及目标文件的校验码。当BT用户获得“种子”后,直接在BT客户端软件中运行“种子”文件,BT软 件将根据“种子”文件包含的信息,自动查找到该文件所有可用的下载源,并进行下载。

详细结构分析,参考:http://www.cnblogs.com/EasonJim/p/6601047.html

3.Tracker

使用BT服务不需要指定服务器,虽然在BT服务里面仍然有服务器的概念,但使用BT服务的人并不需要关心服务器在哪里。BT服务器称为Tracker,准确地说,Tracker是指运行于服务器上的一个程序,这个程序能够追踪到底有多少人同时在下载同一个文件。BT客户端连接上Tracker服务器,就会 获得一个下载人员的名单,根据这个名单,BT客户端会自动连接网络中其它节点进行下载。

4.种子

BT服务把提供完整文件的用户节点称为“种子”(Seed),正在下载的用户称为客户(Client)。某一个文件现在有多少“种子”、多少“客户”是可以看到的。只要有一个“种子”就可以放心地下载。当然,种子越多、客户越多的文件下载的速度会越快。

如果发现“种子”数为0,那么就不需要去尝试了。当某个用户下载完成后,如没有选择关闭,其它人就可以从该用户处继续下载文件。所以当下载的人多起来,通常做“种子”的人也会随之增加,下载速度也会加快。

二、配置安装

安装前先确定我们已经安装了能够解析html的中间件。如apache,nginx都可以

1.下载BT

BitTorrent是一个开源免费软件,它使用Python语言编写。Python是一种脚本语言,这意味着BitTorrent具有出色的跨平台特 性。用户不仅可以在Windows中使用BT,也可以方便地在Linux/Unix平台下使用。BitTorrent的官方网站地址为http://sourceforge.NET/projects/bittorrent/,当前最新版本为3.4.2。

2.安装BT

在安装BitTorrent以前,首先要确保系统已经安装有Python版本:

# rpm -qa|grep python
python-2.2.2-26

若系统没有安装Python,则需要从rpmfind.Net下载Python,并加以安装。下载得到BitTorrent-3.4.2.tar.gz以后,将其解压缩:

# tar xvfz BitTorrent-3.4.2.tar.gz

然后安装BitTorrent:

# python setup.py install

安装完毕以后,BitTorrent软件包的命令工具均安装在/usr/loca/bin目录下。

3.配置、启动BT

前面提到,BT系统的核心是Tracker,因此架设一台BT服务器的第一步就是要启动一个Tracker:

# /usr/local/bin/ bttrack.py --port 6969 --dfile dstate >/dev/null 2>&1 &

这样便在后台启动了一个Tracker供自己使用。

第二步,需要对希望提供下载的文件制作“种子”,这里假设对文件/btdata/dahuaxiyou.avi制作“种子”:

# btmakemetafile.py /btdata/dahuaxiyou.avi http://www.mydomain.com:6969/announce

该命令对/btdata/dahuaxiyou.avi文件制作“种子”,“种子”名为 dahuaxiyou.avi.torrent,其中www.mydomain.com是Linux服务器的域名。而btmakemetafile.py 也可以对目录制作“种子”,命令与对文件制作“种子”完全一样。

第三步,需要配置Web服务器,将.torrent文件和application/x-bittorrent相关联。编辑Apache的配置文件httpd.conf,添加如下内容:

AddType application/x-bittorrent .torrent

然后重新启动Web服务器,并将刚刚制作的“种子”放置在Web服务器的文档目录中,让用户可以访问。

最后一步,启动一个Downloader(最原始的共享源),使以后的用户可以获得最初的拷贝:

# btdownloadheadless.py --url http://
www.mydomain.com/dahuaxiyou.avi.torrent --saveas dahuaxiyou.avi

其中http: //www.mydomain.com/dahuaxiyou.avi.torrent为制作“种子”的URL地址。这样,用户通过Web访问 dahuaxiyou.avi.torrent就能实现Web下载文件。但需要注意,提供用户访问的“种子” dahuaxiyou.avi.torrent应该跟原始文件存放在同一个目录下,也就是http: //www.mydomain.com/dahuaxiyou.avi.torrent所在目录应该存有原始文件或到原始文件的链接,否则 Downloader会自动拷贝一份源文件到“种子”所在目录下。

注意:以上的搭建资料可以很老了,现在如果要制作种子,可以有两种思路:

1、找可用的第三方Tracker服务器,比如:http://www.wdssmq.com/post/20130323295.html

2、自己搭建,比如可以域名映射,自己购买服务器等。可以参考以下资料:

自己搭建搜索关键字:BitCometTracker,搭建BT服务器,bittorrent-tracker,bittorrent服务器,BT Tracker Server,bittorrent server linux

同时也可以下载以前的版本进行搭建。

http://www.cnblogs.com/rupeng/archive/2010/06/19/1761070.html

https://www.bitcomet.com/cn/tools/tracker

还有需要注意的是,从2007年开始bittorrent不再提供源码,且这家公司现在已经融资成功,做网络下载和直播的项目去了,所以这方面的资料很少,如果要找这方面的源码,可以参考以下网站:

http://stackoverflow.com/questions/4318969/where-to-find-bittorrent-source-code

http://bittorrent.cvs.sourceforge.net/viewvc/bittorrent/

https://github.com/kenorb-contrib/BitTorrent

https://github.com/santazhang/BitTorrent-5.3-GPL

https://github.com/feross/bittorrent-tracker(这个是node.js实现的,据说可行)

还有,bittorrent是一种p2p协议

原文:http://blog.csdn.net/mail_cm/article/details/7886660

转载于:https://www.cnblogs.com/EasonJim/p/6601330.html

BT服务器的搭建(tracker-P2P服务器架设)(转)相关推荐

  1. 在Windows服务器上搭建Nuget私人服务器(超~详细)

    在Windows服务器上搭建Nuget私人服务器 一.使用VS2017/VS2019新建空白解决方案,操作如图: 步骤一:这里以VS2019为例,打开VS2019,选择[创建新项目]选项: 步骤二:选 ...

  2. 公司服务器架设邮箱服务器,如何搭建企业邮箱服务器

    在当今企业信息化时代,无论是初创的企业还是中大型的企业,企业邮箱都已经成为企业日常运作不可或缺的应用.企业邮箱不仅有助于企业建立高效的内部沟通渠道,而且还是企业对外联络的重要沟通工具之一.那么,如何搭 ...

  3. 【图片服务器】搭建Nginx图片服务器

    一.安装Nginx 二.安装vsftpd 三.开始搭建Nginx图片服务器 1.效果 例如:图片通过ftp服务上传到/home/ftpuser/www/images目录下,我想通过访问Nginx服务器 ...

  4. windows时间服务器状态,搭建window时间服务器:

    搭建window时间服务器:服务端配置 适用于Windows Server 2003以及Windows Sever 20081) 开放防火墙123 UDP端口:2) 运行中输入"gpedit ...

  5. windows系统下的kms服务器_搭建 Windows KMS服务器

    搭建 Windows 的服务器 Windows 版本支持 XP, Win7, Win8, Win8.1, 但是不支持 Win10 . x64 = 64 位版本, x86 = 32 位版本. 为简化命令 ...

  6. 华为服务器虚拟化搭建,一台服务器搭建虚拟化

    一台服务器搭建虚拟化 内容精选 换一换 云手机(Cloud Phone,简称CPH),是基于华为云裸金属服务器虚拟出的带有原生安卓操作系统,同时具有虚拟手机功能的云服务器.简单来说,云手机=云服务器+ ...

  7. 服务器怎搭建Linux,linux服务器怎么搭建

    是不是还有很多同学们都不知道linux服务器怎么搭建,那么应该怎样快速有效处理这个问题呢?就让小编来告诉大家搭建linux服务器教程,感兴趣的同学们不要错过哦. 方法/步骤分享: 一.准备Nginx ...

  8. 地图怎么显示服务器,怎么搭建局域网地图服务器

    BIGEMAP一键离线地图发布服务器主要帮助企业内部局域网环境搭建私有地图服务.搭建局域网地图服务器的方法其实很简单,下面由学习啦小编告诉你! 搭建局域网地图服务器的方法 双击运行安装程序,开始安装一 ...

  9. p2p显示服务器未连接,监控 p2p服务器未连接服务器

    监控 p2p服务器未连接服务器 内容精选 换一换 本章节指导您使用MongoDB客户端,通过内网连接单节点实例.通过MongoDB客户端连接实例的方式有普通连接和SSL连接两种,其中SSL连接通过了加 ...

  10. nodejs 本地php服务器,Nodejs搭建本地http服务器

    由于不做php相关的东西,懒得装apache,干脆利用nodejs搭建一个本地的服务器用于测试. nodejs这玩意儿吧,对做前端的介入后端简直就是一把利器.而且目前,nodejs也越来越有商用价值. ...

最新文章

  1. java将从键盘输入的时间格式化_java 时间格式化中的模式字母
  2. php创建类用什么关键字,PHP面向对象开发之类的常用关键字
  3. Java基础01 从HelloWorld到面向对象
  4. Python内置函数功能汇总
  5. Android Canvas 图形绘制
  6. tomcat无法访问MySQL_JSP在tomcat服务器下无法连接MySql问题解决方法
  7. ranger管mysql_添加Kafka的Ranger访问权限策略
  8. 【Linux】Ubuntu输入法不能开机自启的解决方法
  9. 【175】Easy CHM的使用
  10. Matlab如何设置图中坐标以10的次方显示
  11. Python爬虫5-API和爬虫
  12. 转移Package Cache文件夹,转移Windows Installer文件夹
  13. 操作员或系统管理员拒绝了请求(0x800710E0) win10系统任务计划程序执行失败
  14. 福州大学计算机学院奖学金,福州大学奖学金管理规定
  15. 判断分数是否为无限循环小数
  16. AI基础:图解Transformer
  17. 0xE06D7363: Microsoft C++ Exception.
  18. 对电化学极化曲线(LSV/Tafel)的数据进行自动化处理并可视化作图/画图(科研投稿)
  19. 电影动漫视频推荐网站
  20. 浅析人工智能体系建设

热门文章

  1. Python中元组的下标
  2. 【Pigeon源码阅读】高可用之熔断降级实现原理(十四)
  3. C++操作图像、图片
  4. centos win xp双系统 安装手记 9660 grldr U盘安装
  5. asp.net web压力测试
  6. 计算机系挣钱的职业,十大挣钱职业之IT行业
  7. js设置北京时区_JavaScript 实现北京时间转其他时区时间,根据系统对对应时区转换...
  8. 未能从dhcp服务器获得ip地址,当出现无法从DHCP服务器中获得地址的常见处理步骤...
  9. golang 生成二维码名片 海报
  10. php中x22是什么意思,我想问一下:联想s22e和x22区别哪款好用点??真实反馈一下!!...