天天看點

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      

4、需要注意的問題

  1. 保護主機和網絡資源,控制上傳和下載下傳速率:實踐證明,合理地設定P2P軟體的上傳和下載下傳速率,可以有效地提高資源共享率,同時最重要的是能夠使得自己的主機和網絡資源不緻于因為P2P的使用而受到影響甚至阻塞;
  2. 合理配置設定使用時間:對于企業使用者來說,合理地配置設定時間是非常必要的。使用者應當選擇在上班之間之外的時間進行下載下傳和共享,以防止由于衆多使用者而導緻的網路速度變慢影響正常的工作,這個是非常重要的。
  3. 注意資源的安全性:目前,發現有很多共享資源中存在病毒,尤其對于P2P這種傳播速度極快的應用來說,病毒的傳播速度是非常快的,是以建議各位使用者在檔案下載下傳後首先通過病毒掃描軟體進行安全掃描後方能進行正常使用,以避免由于病毒影響而帶來的損失。

繼續閱讀