引言:P2P即點(diǎn)對點(diǎn)傳輸之意,可以將不同的用戶聯(lián)系起來,通過網(wǎng)絡(luò)直接交換數(shù)據(jù)。在Linux中可以架設(shè)多種P2P服務(wù)器,本文介紹在Linux中使用BitTorren,快速搭建P2P服務(wù)器的方法。
P2P即點(diǎn)對點(diǎn)傳輸之意,可以將不同的用戶聯(lián)系起來,通過網(wǎng)絡(luò)直接交換數(shù)據(jù)。這樣就消除了中間環(huán)節(jié),可以讓人們在網(wǎng)上更容易更直接地共享和交換數(shù)據(jù)。
P2P協(xié)議是對等式的網(wǎng)絡(luò)連接協(xié)議,利用該協(xié)議,客戶機(jī)無需通過服務(wù)器就可以彼此之間相互訪問,交互文件數(shù)據(jù)等操作。在Linux中,支持 BitTorrent、amule、Gnutella等P2P協(xié)議,其中的BitTorrent是網(wǎng)絡(luò)文件傳輸協(xié)議,能夠?qū)崿F(xiàn)點(diǎn)對點(diǎn)文件共享技術(shù)。BitTorrent支持多點(diǎn)對多點(diǎn)等特征,即下載的用戶越多,下載的速度就越快。而一般的HTTP或者FTP等協(xié)議,下載的文件只是存放在少數(shù)服務(wù)器上,下載的用戶越多,服務(wù)器因帶寬過度消耗而降低下載速度。BitTorrent協(xié)議是讓HTTP或者FTP下載服務(wù)使用TCP/IP協(xié)議,BItTorrent是架構(gòu)在TCP/IP協(xié)議之上的一個(gè)P2P文件傳輸協(xié)議,處于TCP/IP結(jié)構(gòu)的應(yīng)用層。
當(dāng)下載文件時(shí),客戶端的BitTorrnet程序?qū)τ脩暨x擇的“.torrent”文件進(jìn)行解釋分析,從中得到Tracker信息,進(jìn)而連接到目標(biāo)Tracker服務(wù)器,該服務(wù)器對下載者的請求作出回應(yīng),并提供文件發(fā)布者和其他下載者的IP地址信息,使用者通過這些IP地址進(jìn)行連接,用戶們之間根據(jù)“.torrent”文件分別提供給對方已有的區(qū)塊,然后交換沒有的數(shù)據(jù)。整個(gè)下載過程沒有服務(wù)器的參與,對單個(gè)網(wǎng)絡(luò)線路上數(shù)據(jù)流進(jìn)行了分散處理,減輕了服務(wù)器的壓力。
要想利用P2P傳輸文件,用戶必須安裝BitTorrent客戶端軟件。上面提到的“.torrent”文件包含第一個(gè)下載資源發(fā)布者根據(jù)原文件制作出來的指紋信息,“.torrent”文件體積極小,其中主要包含下載文件所在BitTorrent端地址信息以及對象文件的校驗(yàn)碼。當(dāng)使用者獲得該“.torrent”文件后,運(yùn)行BitTorrent客戶端程序打開該文件,就會據(jù)此文件中包含的信息,自動找到目標(biāo)文件可用的下載源進(jìn)行下載操作。
P2P文件傳輸中雖然不需要指定服務(wù)器,但是仍然離不開特定的服務(wù)器支持。BitTorrent服務(wù)器稱之為Tracker。Tracker其實(shí)是運(yùn)行在服務(wù)器上的一個(gè)程序,該程序可以自動跟蹤參與某文件下載的所有用戶信息,BitTorrent客戶端只要連上Tracker服務(wù)器,就會獲得所有參與下載的用戶信息列表,并據(jù)此自動連接到網(wǎng)絡(luò)中的對應(yīng)節(jié)點(diǎn)進(jìn)行下載。對于使用者,無需了解Tracker服務(wù)器的任何信息。
在P2P傳輸服務(wù)中,將提供完整文件的用戶節(jié)點(diǎn)成為Seed(種子),正在下載的用戶成為客戶端,Seed數(shù)量越多,參與的客戶越多,文件下載的速度就越快。
amule是一個(gè)開源的P2P文件共享協(xié)議,支持多種操作系統(tǒng),代碼完全公開。amule的每個(gè)用戶在下載的同時(shí)還上傳數(shù)據(jù),即將自己已經(jīng)下載的數(shù)據(jù)共享給其他用戶。amule客戶端可以從多個(gè)文件上傳者處得到所需的下載數(shù)據(jù),之后將其拼接成完整的文件。amule一個(gè)特點(diǎn)是可以設(shè)定一個(gè)共享目錄,允許其他用戶訪問其中的共享文件。
Gnutella協(xié)議不僅支持點(diǎn)對點(diǎn)文件傳輸,而且支持傳統(tǒng)的客戶端/服務(wù)器檢索規(guī)則。在該協(xié)議中所有的客戶端也同時(shí)是一個(gè)服務(wù)器端,所有的服務(wù)器端同時(shí)也是一個(gè)客戶端。Gnutella可以執(zhí)行聯(lián)系客戶端和服務(wù)器的任務(wù),為其他用戶發(fā)出查詢請求并查看搜索結(jié)果,檢查自己的數(shù)據(jù)中匹配的部分并返回可用的結(jié)果。使用了該協(xié)議的網(wǎng)絡(luò)具有良好的容錯(cuò)能力,當(dāng)部分客戶機(jī)離線后,網(wǎng)絡(luò)服務(wù)不會中斷。
在Linux中可以架設(shè)多種P2P服務(wù)器,這里使用BitTorren為例進(jìn)行說明,該軟件也可以在Windows平臺中運(yùn)行。在RedHat、Fedora系統(tǒng)中,可以在命令行中執(zhí)行“yum install bittorrent”命令,表示使用YUM方式安裝該軟件, YUM安裝方式可以根據(jù)預(yù)設(shè)的YUM源,來自動分析安裝某軟件所需的全部RPM包,之后根據(jù)不同RPM包之間的依賴關(guān)系,自動下載所有相關(guān)的RPM包,來完成所需軟件的安裝。
所謂YUM源,指的是存放所有RPM包以及相關(guān)分析文件的路徑,包括指定的本地目錄、FTP或者HTTP服務(wù)器等。
執(zhí)行該命令后,系統(tǒng)執(zhí)行載入插件,分析安裝參數(shù)語法,解決依賴性檢測等操作,當(dāng)完畢后會在“確定是這樣嗎?”欄中輸入“y”,執(zhí)行下載軟件包,運(yùn)行事務(wù)處理等操作,當(dāng)出現(xiàn)“恭喜您!成功完成!”字樣后,執(zhí)行“yum installBittorrent-gui”命令,執(zhí)行圖形界面的bittorrent安裝操作??梢钥吹较到y(tǒng)的具體處理信息,在“確定是這樣嗎?”欄中輸入“y”,就完成了所需的安裝操作。
如果在Ubuntu,Debian等系統(tǒng)下,可以執(zhí)行“aptget install bittorrent”命令,完成安裝操作。對于Gentoo系統(tǒng)來說,可以執(zhí)行“emerge bittorrent”命令,執(zhí)行軟件的下載與編譯操作,來完成所需的安裝動作。
當(dāng)安裝完畢后,所有的BitTorrent命令和工具都保存在“/usr/bin”目錄中,配置文件為“etc/sysconfig/bittorrent”。前面談到BitTorrent雖然不需要服務(wù)器,不過依然需要Tracker服務(wù)器的參與。Tracker是BitTorrent的內(nèi)核部分,BitTorrent客戶端程序會根據(jù)連接到Tracker服務(wù)器時(shí)獲得的參與者名單來自動連接網(wǎng)絡(luò)中的對應(yīng)節(jié)點(diǎn)。因此,必須先啟動Tracker服務(wù),執(zhí)行“/etc/init.d/bttrack start”命令,完成BitTorrent Tracker的啟動操作。之 后,在別的主機(jī)上打開瀏覽器,訪 問“http://192.168.10.100:6969”,在打開的網(wǎng)頁中顯示“BitTorrent download info” 字樣,在其下的“tracker version”欄中顯示版本信息,在“server time”欄中顯示服務(wù)器信息,這說明Tracker服務(wù)啟動成功,這里的“192.168.10.100”表示服務(wù)器地址。
Tracker服務(wù)只提供下載的種子并不提供下載服務(wù),即僅提供一個(gè)已經(jīng)下載完成或者正在下載的客戶端,而種子文件必須有文件上傳者制作。在Linux中啟動BitTorrent File Transfer程 序, 這是圖形化的操作界面。在該程序窗口中點(diǎn)擊菜單“File→Make new torrent”項(xiàng),在彈出窗口中點(diǎn)擊“choose”按鈕,選擇需要發(fā)布的文件,例如壓縮包,ISO文件等。選擇“Use tracker”項(xiàng),在右側(cè)輸入Tracker信息,例 如“http://192.168.10.100:6969/xxx”點(diǎn) 擊“make”按鈕,在彈出窗口中點(diǎn)擊“start seeding”按鈕,就可以生成所需的種子“.torrent”文件了。其他用戶利用該種子文件,就可以利用不同的BitTorrent客戶端程序來下載預(yù)設(shè)的資源了。
P2P文件傳輸模式雖然具有一些獨(dú)特的優(yōu)點(diǎn),但是并非完美無缺。例如,P2P服務(wù)可以開啟多個(gè)端口同時(shí)傳輸數(shù)據(jù),會消耗很大的帶寬,需要管理員指定合理的策略對其進(jìn)行管理。