Linux下的文件共享全攻略系列之四:P2P文件共享方式

简介:

我的参赛主页是:http://2010blog.51cto.com/1060257,请各位支持我,给我投上宝贵一票,谢谢!

 

目前,研究者们开发了许多网络服务和协议来完成资源共享的功能。对于网络用户和管理员来说,他们希望得到免费和高效的服务,而这种需求的最好选择莫过于当前开源的操作系统Linux下的产品了。本专题从多个应用服务层面着重向读者们推荐几种实用的用于资源共享的技术及其软件。 


本文是系列的第4篇文章,详细介绍P2P。专题的完整内容,请参见: 
Linux下的文件共享服务全攻略 http://os.51cto.com/art/201010/231947.htm 
 

网络技术的飞速发展与迅速普及使其成为数据通信的重要手段,网络规模越来越大,连入网络中的计算设备的数量和种类也越来越多,而这些资源并没有得到充分利用,如果能将这些计算单元的处理器计算能力、磁盘存储能力、网络带宽资源等进行充分利用将会有效缓解目前互联网所面临的一些问题。另一方面,现在的互联网是构建在这样的一个假说上的,即网络用户仅仅想从互联网上下载东西,而不会上载信息。如今这种假设受到了愈来愈强烈的挑战,也促使了对等网络技术蓬勃兴起。

P2P(Peer to Peer 即对等网络)就是在这种背景下提出的一种网络技术,P2P可以简单地定义为通过直接交换信息,共享计算机资源和服务,对等计算机兼有客户机和服务器的功能。在这种网络中所有的节点是对等的(称为对等点),各节点具有相同的责任与能力并协同完成任务,对等点之间通过直接互连实现信息资源、处理器资源、存储资源甚至高速缓存资源等的全面共享,无需依赖集中式服务器支持,消除信息孤岛和资源孤岛。任何一台能上网的机器都可以是一个对等点,甚至计算机上的一个程序都可以成为对等点。P2P网络是一种与传统的C/S或多层服务器网络完全不同的网络体系结构,P2P网络中的对等点是彼此直接通讯的。与目前互连网上比较流行的C/S 计算模型不同的是:P2P 计算模型中不再区别服务器以及客户端,系统中的各个节点是逻辑对等的,系统中的各个节点之间可以直接进行数据通信而不需要通过中间的服务器,可以认为它的任何一端同时具有Client和Server 的功能。一些P2P应用也许在某些时候使用服务器,但P2P计算的总体影响是将网络计算分散,它使真正的分布式计算成为可能。

随着宽带网的盛行,传统的HTTP和FTP这种一点对多点的下载方式已经满足不了大家的需求了。它会随着下载人数增加而出现连接不上和速度骤减的现象。而P2P技术则打破常规格式,极大地节省了网络带宽。可使你直接连接其他用户的计算机,交换和搜索文件,而不用再通过网页浏览与下载,最大限度地利用了网络带宽。它可使大家在互联网上共享到平时用普通方式难以接触到的各种各样海量的资源。使用P2P软件的每一台PC 都是客户机在下载资源,也是服务器在上传文件,在索取的同时也给予。

BitTorrent是一个多点下载的开放源码的P2P软件,使用非常方便。是一个多点下载的共享文件软件,由于在下载的同时,也可为其他用户提供上传,所以不会随着用户人数的增加而降低下载速度,因此,下载的人越多,速度便越快。现在不少大公司如RedHat,都有使用BT让他们的客户下载开发版本。

Linux下的P2P协议主要包括:BitTorrent、aMule、Gnutella等。本文以普遍使用的BitTorrent为例介绍使用P2P服务的方法。

1、搭建BitTorrent服务器

BitTorrent使用Python语言编写,是一个开放源代码软件,既可以在Windows下运行,也可以在Linux环境下运行,目前在Linux下的最新版本是6.1.2。

BitTorrent的官方网址:http://bitconjurer.org/BitTorrent/

安装BitTorrent软件

由于该软件采用Python编写,所以安装BitTorrent前需要使用命令:

#rpm -qa|grep Python

检查是否配置了Python语言。否则需要到Python的官方网站http://www.python.org下载安装,然后执行如下命令对BitTorrent软件进行安装:

#rpm -ivh BitTorrent-6.1.2.Python2.4.noarch.rpm

安装完成后所有BitTorrent命令和工具都安装在/usr/bin目录下。包括:btmaketorrent.py(制作种子工具)、bttest.py(测试种子工具)、bttrack.py(制作Tracker工具)、btdownloadheadless.py(制作共享源工具)、btlaunchmany.py(后台启动共享源工具)、btshowmetainfo.py(查看下载情况工具)、btdownloadgui.py(图形化制作共享源工具)、btmaketorrent.py(图形化制作种子工具)。

配置和启动BitTorrent

BitTorrent的核心是Tracker,BitTorrent服务不需要服务器,但是BitTorrent服务中仍然有服务器的概念,这里称作Tracker。准确地说,Tracker是指运行的服务器上的一个程序,这个程序可以跟踪多少人同时在下载同一个文件。BT客户端连接到Tracker时会产生一个下载人员名单,根据这个名单,BT客户端会自动连接网络中其他节点进行下载。所以第一步要启动一个Tracker:

# ./bttrack.py --port 8760 --dfile dstate > /dev/null 2>&1 &

推荐使用普通用户权限来启动这个服务,这样更加安全。这个命令会在当前目录生成一个dstate的文件,并打开8760端口。

制作种子(Seed)

BT服务器的track服务并不提供下载服务,提供下载的是它的种子(seed),就是一个已经下载完成或正在下载的客户端。因为一开始没有这样的种子,所以你得先自己生成一个,如果要为/home/cjh.avi制作种子,相关命令是:

# ./btdownloadheadless.py --max_allow_in 200 --max_upload_rate 100 --minport 8888 --maxport 8888 /home/mp3.vio.torrent http://www.bittorrent.com:8760/annouce

相关参数说明如下:

  1. --max_allow 200:指明这个种子最多可以接受200个连接。
  2. --max_upload_rate 100:指这个种子最大的可以接受下载的带宽100 KB(byte)/s,这样可以控制下载带宽。
  3. --minport 8888 --maxport 8888:设置最大最小监听端口号码,这样写就是说种子只监听8888端口,这样方便在防火墙上开端口。
  4. mp3.vio.torrent:是制作的种子文件名称。

设置Apache服务器

配置Web服务器让种子(.torrent)文件和application/x-bittorrent相关联。不久Apache配置文件:/etc/httpd.conf,加入一行:

AddType application/x-bittorrent .torrent

然后,我们需要重新启动Web服务器,并且打开防火墙6888端口:

将制作的种子放到Web服务器的文档目录中,让用户可以访问,启动一个最原始的共享源。

#iptables -A INPUT -i eth0 -p --dport 6888 -j ACCEPT
#iptables -A OUTPUT -i eth0 -p --dport 6888 -j ACCEPT
#./btdownloadheadless.py http://www.mydomain.com/cjh.avi.torrent

其中http://www.mydomain.com/cjh.avi.torrent是种子的URL地址,这样用户通过浏览器访问 cjh.avi.torrent即可实现Web下载。

2、配置BitTorrent客户端

到此为止,我们建立了一个BitTorrent服务器,如果要下载别人的BT资源,还要安装一个客户端。

1.使用Azureus(Vuze)软件

(1)下载一个Bit Torrent客户端软件:Azureus,其官方网址为:http://azureus.sourceforge.net/。

(2)安装Java虚拟机

由于Azureus是使用Java语言编写的,所以运行它需要Java虚拟机。下载最新的JDK(Java Development Kit)开发包:j2sdk-1_4_2-linux-i586.bin,这是一个J2SE V1.4.2 SDK Linux自解压的二进制的文件。

(3)安装BitTorrent客户端软件Azureus

这是一个绿色软件只要解压即可运行不必编译,操作如下:

#bunzip2 Azureus_4.5.1.0_linux.GTK.tar.bz2
#tar vxf Azureus_4.5.1.0_linux.GTK.tar

(4)运行软件

#cd azureus
#./azureus

(5)配置软件

第一次运行azureus时要进行简单的配置:

◆配置接入互联网的方式:根据你的具体情况设置链接互联网方式(ADSL、Modem等),最大上传速度、最大下载文件、每个Torrent最大上传速度。然后用鼠标按“Next”按钮进行服务器端口配置。

◆配置NAT/Server 的端口:使用NAT(Network Address Translation)的好处是:连接Internet,但不让网络内的所有计算机都拥有一个真正的Internet IP地址。通过NAT功能,可以将申请的合法的Internet IP地址统一管理,当内部的计算机需要上Internet时,动态或静态地将假的IP转换为合法的IP地址。另外,如果不想让外部网络用户知道网络的内部结构,可以通过NAT将内部网络与外部Internet隔离开。这里强烈建议把NAT/Server 的端口设为:最低6881、最高6889。如果读者对计算机网络比较熟悉的话,也可以用鼠标点击“Test”按钮测试一下,选择别的端口。注意千万不要和某些系统已经使用的端口冲突。然后用鼠标点“Next”按钮进行下载的文件存放目录的配置。

配置结束后就可以使用它下载,点击“File”主菜单的“Creat a Torrent”然后输入要下载的Torrent文件的链接即可开始工作。

ctorrent-dnh3.3.2.tar.gz

2.使用命令行CTorrent软件

CTorrent是国人用C/C++实现的一个小型的BitTorren的CUI客户端,它对希望了解BitTorrent网络的朋友们提供了一个很好的模板。程序只有5000多行,使用了openssl/sha库。它主要实现了下列功能:

  1. 高速缓冲,缺省大小cfg_cache_size(btconfig.cpp)
  2. 带宽限制
  3. 解析Bencoding编码,可以用'-x'选项查看.torrent文件信息而不下载
  4. 快速缓冲,使用'-b'选项
  5. 制造.torrent文件

下载地址:http://www.rahul.net/dholmes/ctorrent/ctorrent-dnh3.3.2.tar.gz

下载后,我们可以使用如下命令对其进行安装:

#tar zxvf ctorrent-dnh3.3.2.tar.gz
#cd ctorrent-dnh3.3.2
#./configure
#make
#make install

安装完成后,使用下述命令对其运行即可,具体的命令行使用参数本文不再赘述,读者可自行了解使用:

#ctorrent 1.torrent

3、其他软件

除了上面介绍的BitTorrent之外,aMule是一种支持ED2K网络的P2P软件,它基于wxWindows并且类似于eMule。是在遵循E-Donkey的网络协议基础上发展而来,它相当于e-Donkey(驴子)的一个Mod,而且源代码是完全公开的。而且aMule比e-Donkey配置更为简单,界面、图标和按钮更美观,突出了其立体和半透明的感觉。现在大家几乎都转向用e-Mule。aMule软件可以算是Linux网络环境下的e-Mule。

aMule的每个用户端都既是文件下载者又是上传者,既索取又给予。在你正在下载但还没下载完整文件时,你已经把已下载的部分共享给别人了。aMule是同时从很多文件上传者(称之为“源”,跟BT的种子差不多)那里下载所需的文件最后再拼成整个文件的,而且aMule对没在下载队列中的文件共享很方便,不用像BT 那样要很麻烦地制作种子,再上传到服务器,只需指定一个共享目录,aMule会自动将其共享。这个共享目录在运行aMule就开始强制共享,即使在下载栏未下载任何文件。这点比BT做得好,可以防止大家好逸恶劳,只下载不上传。而BT在运行时只上传自己正在下载或已下载完毕的东西,不能共享目录,甚至有人把BT的下载设置为无限制,而把上传调至几KB/s甚至0KB/S。而在使用aMule中如果你把上传速度设为一个小于10 的值,aMule也会自动限制你的下载速度。

aMule安装相当困难,它对一些链接库文件的依赖性特别强,另外它还需要GTK的支持。软件下载安装详细步骤如下:

#cd /usr/local
#wget http://jaist.dl.sourceforge.net/sourceforge/wxwindows/wxGTK-2.6.1.tar.gz
#wget http://jaist.dl.sourceforge.net/sourceforge/wxwindows/wxBase-2.6.1.tar.gz
#wget http://jaist.dl.sourceforge.net/sourceforge/amule/aMule-2.1.0.tar.bz2

需要特别注意安装顺序:先装wxBase再装wxGTK,最后装aMule,安装wxBase后要执行一下ldconfig命令,wxGTK编译参数为./configure --with-gtk:

#cd wxBase-2.6.1;./configure;make;make install; /sbin/ldconfig;cd ..
#cd wxGTK-2.6.1;./configure --with-gtk;make;make install;make clean;cd ..
#cd aMule-2.1.0;./configure;make;make install

如果aMule的下载速度太慢,比如只有2KB/s~3KB/s,那一定是没有端口映射。只需映射4662 TCP 和4672 UDP 两个端口即可。不需要像使用BT那样映射一堆端口。如果打开了4771 TCP 端口就可远程控制。aMule下载跟Azureus不一样,要多添加些文件下载。如果系统装有Linux防火墙,需要在防火墙中打开以上相应的TCP、UDP端口。

另外,如果你正在寻找Linux下功能全面的GTK+ BitTorrent下载软件,那么Deluge是一个不错的选择。Deluge的开发非常活跃,时常更新以满足用户的需要。经过近一个月的开发,Deluge于日前发布了1.3.0版。新版本为一些常用功能绑定了快捷键,引入了内置浏览器,并对某些插件进行了增强。

4、需要注意的问题

上面我们详细介绍了BitTorrent服务器和客户机的配置,以及一些实用的P2P软件。从本质上来说,P2P软件是为资源共享服务的,然而,他有一个比较大的特点就是在资源共享同时带来比较高的资源消耗,P2P下载软件对于网络的负面影响还是非常大的,然而它却是资源共享的一个非常有效的方式。那么,在此,我们给出几条合理使用P2P软件的建议,仅供参考使用:

  1. 保护主机和网络资源,控制上传和下载速率:实践证明,合理地设置P2P软件的上传和下载速率,可以有效地提高资源共享率,同时最重要的是能够使得自己的主机和网络资源不致于因为P2P的使用而受到影响甚至阻塞;
  2. 合理分配使用时间:对于企业用户来说,合理地分配时间是非常必要的。用户应当选择在上班之间之外的时间进行下载和共享,以防止由于众多使用者而导致的网路速度变慢影响正常的工作,这个是非常重要的。
  3. 注意资源的安全性:目前,发现有很多共享资源中存在病毒,尤其对于P2P这种传播速度极快的应用来说,病毒的传播速度是非常快的,所以建议各位用户在文件下载后首先通过病毒扫描软件进行安全扫描后方能进行正常使用,以避免由于病毒影响而带来的损失。




















本文转自samsunglinuxl51CTO博客,原文链接:http://blog.51cto.com/patterson/414238 ,如需转载请自行联系原作者
相关文章
|
18天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
72 1
|
22天前
|
Linux 数据安全/隐私保护 Windows
Linux入门指南:linux权限究竟是什么?和文件有什么关系?
Linux入门指南:linux权限究竟是什么?和文件有什么关系?
30 0
|
24天前
|
算法 Linux C++
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
29 0
|
17天前
|
人工智能 安全 Linux
【Linux】Linux之间如何互传文件(详细讲解)
【Linux】Linux之间如何互传文件(详细讲解)
|
28天前
|
Shell Linux C语言
【Shell 命令集合 系统设置 】Linux 创建Kickstart文件mkkickstart命令 使用指南
【Shell 命令集合 系统设置 】Linux 创建Kickstart文件mkkickstart命令 使用指南
31 0
|
28天前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
48 0
|
1天前
|
安全 Linux 开发工具
Linux中可引起文件时间戳改变的相关命令
【4月更文挑战第12天】Linux中可引起文件时间戳改变的相关命令
9 0
|
3天前
|
Linux Shell 开发工具
Linux文件常用操作
Linux文件常用操作(几乎覆盖所有日常使用)
58 0
|
4天前
|
Linux 内存技术 Perl
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
|
10天前
|
Linux
linux 超过4个G的文件传不上去的解决办法
linux 超过4个G的文件传不上去的解决办法
9 0