P2P網(wǎng)絡(luò)
點(diǎn)對(duì)點(diǎn)(P2P)計(jì)算或網(wǎng)絡(luò)是分布式應(yīng)用程序體系結(jié)構(gòu)谊惭,用于在對(duì)等體之間分割任務(wù)或工作負(fù)載。
其中互聯(lián)節(jié)點(diǎn)(“對(duì)等”)彼此共享資源而不使用集中式管理系統(tǒng).
P2P網(wǎng)絡(luò)的分散性提高了魯棒性沛厨,因?yàn)樗嘶诳蛻舳?- 服務(wù)器系統(tǒng)固有的單點(diǎn)故障。[36]作為節(jié)點(diǎn)到達(dá)和對(duì)系統(tǒng)的需求的增加璧函,系統(tǒng)的總?cè)萘恳苍黾悠兀l(fā)生故障的可能性減小。如果網(wǎng)絡(luò)上的一個(gè)對(duì)等設(shè)備無(wú)法正常工作散罕,則整個(gè)網(wǎng)絡(luò)不會(huì)受到影響或損壞分歇。相比之下,在典型的客戶端 - 服務(wù)器體系結(jié)構(gòu)中笨使,客戶端只與系統(tǒng)共享需求卿樱,而不是他們的資源。在這種情況下硫椰,隨著更多客戶端加入系統(tǒng)繁调,為每個(gè)客戶端服務(wù)的資源越來(lái)越少,并且如果中央服務(wù)器發(fā)生故障靶草,整個(gè)網(wǎng)絡(luò)就會(huì)被關(guān)閉蹄胰。
在P2P網(wǎng)絡(luò)中,客戶端都提供和使用資源奕翔。這意味著裕寨,不像客戶端-服務(wù)器系統(tǒng),對(duì)等網(wǎng)絡(luò)的網(wǎng)絡(luò)服務(wù)內(nèi)容的容量實(shí)際上可以增加更多的用戶開(kāi)始訪問(wèn)內(nèi)容派继。該屬性是使用P2P網(wǎng)絡(luò)的主要優(yōu)勢(shì)之一宾袜,因?yàn)樗乖純?nèi)容分發(fā)者的設(shè)置和運(yùn)行成本非常小
非結(jié)構(gòu)化網(wǎng)絡(luò)
覆蓋非結(jié)構(gòu)化P2P網(wǎng)絡(luò)的網(wǎng)絡(luò)圖,說(shuō)明節(jié)點(diǎn)之間連接的臨時(shí)特性
非結(jié)構(gòu)化的對(duì)等網(wǎng)絡(luò)不會(huì)通過(guò)設(shè)計(jì)在覆蓋網(wǎng)絡(luò)上施加特定的結(jié)構(gòu)驾窟,而是由隨機(jī)形成彼此連接的節(jié)點(diǎn)形成庆猫。
非結(jié)構(gòu)化網(wǎng)絡(luò)的主要局限性也是由于缺乏結(jié)構(gòu)。特別是绅络,當(dāng)對(duì)等方想要在網(wǎng)絡(luò)中找到所需的數(shù)據(jù)段時(shí)月培,搜索查詢必須通過(guò)網(wǎng)絡(luò)進(jìn)行泛洪以找到盡可能多的共享數(shù)據(jù)的對(duì)等點(diǎn)嘁字。泛濫造成網(wǎng)絡(luò)中信令流量非常高,使用更多的CPU /內(nèi)存(通過(guò)要求每個(gè)對(duì)等方處理所有搜索查詢)杉畜,并且不能確保搜索查詢將始終得到解決纪蜒。
結(jié)構(gòu)化網(wǎng)絡(luò)
在結(jié)構(gòu)化的對(duì)等網(wǎng)絡(luò)中,疊加層被組織成一個(gè)特定的拓?fù)浣Y(jié)構(gòu)此叠,并且該協(xié)議可以確保任何節(jié)點(diǎn)都可以有效地在網(wǎng)絡(luò)中搜索文件/資源??纯续,即使資源極其稀少。
最常見(jiàn)的結(jié)構(gòu)化P2P網(wǎng)絡(luò)類型實(shí)現(xiàn)了分布式散列表(DHT)灭袁,其中使用一致散列的變體來(lái)將每個(gè)文件的所有權(quán)分配給特定對(duì)等體杆烁。這使同伴能夠使用哈希表在網(wǎng)絡(luò)上搜索資源:即(密鑰,值)對(duì)存儲(chǔ)在DHT中简卧,并且任何參與節(jié)點(diǎn)可以有效地檢索與給定密鑰相關(guān)聯(lián)的值兔魂。
為了有效地通過(guò)網(wǎng)絡(luò)路由流量,結(jié)構(gòu)化覆蓋圖中的節(jié)點(diǎn)必須維護(hù)滿足特定條件的鄰居列表举娩。這使得它們?cè)诟吡魇实木W(wǎng)絡(luò)(即大量節(jié)點(diǎn)頻繁地加入和離開(kāi)網(wǎng)絡(luò))中不夠健壯析校。
BitTorrent 使用"分布式哈希表"(DHT)來(lái)為無(wú) tracker 的種子(torrents)存儲(chǔ) peer 之間的聯(lián)系信息。這樣每個(gè) peer 都成了 tracker铜涉。這個(gè)協(xié)議基于 Kademila 網(wǎng)絡(luò)并且在 UDP 上實(shí)現(xiàn)智玻。
在使用DHT分發(fā)Peer之前,Tracker是找到Peer的唯一方法芙代。
2005年5月2日吊奢,Azureus 2.3.0.0(現(xiàn)在稱為Vuze)發(fā)布,通過(guò)稱為“分布式數(shù)據(jù)庫(kù)”的系統(tǒng)引入了對(duì)“無(wú)tracker”種子的支持纹烹。該系統(tǒng)是一個(gè)分布式散列表DHT實(shí)現(xiàn)页滚,它允許客戶端使用沒(méi)有BitTorrent tracker的種子。接下來(lái)的一個(gè)月铺呵,BitTorrent公司發(fā)布了Mainline BitTorrent客戶端的4.2.0版本裹驰,該客戶端支持與Azureus不兼容的另一種DHT實(shí)現(xiàn)(俗稱“ Mainline DHT ”,在其網(wǎng)站上的草稿中概述)片挂。最近的測(cè)量顯示幻林,Mainline DHT的用戶從1000萬(wàn)到2500萬(wàn),每日活躍至少1000萬(wàn)音念。 主線DHT可以說(shuō)是世界上最大的DHT沪饺。
官方BitTorrent客戶端的當(dāng)前版本,μTorrent闷愤,BitComet整葡,Transmission和BitSpirit都與Mainline DHT共享兼容性。這兩個(gè)DHT實(shí)現(xiàn)都基于Kademlia肝谭。作為3.0.5.0版本掘宪,Azureus的也支持干線DHT除了其自己的分布式數(shù)據(jù)庫(kù)通過(guò)使用一種可選的應(yīng)用插件。這可能讓Azureus / Vuze客戶端達(dá)到更大的群體攘烛。
在Vuze中出現(xiàn)的另一個(gè)想法就是虛擬種子魏滚。這個(gè)想法是基于分布式跟蹤器的方法,并用于描述一些網(wǎng)絡(luò)資源坟漱。目前鼠次,它用于即時(shí)消息。它使用特殊的消息協(xié)議實(shí)現(xiàn)芋齿,并需要一個(gè)適當(dāng)?shù)牟寮瓤堋natomic P2P是另一種方法,它使用分散的節(jié)點(diǎn)網(wǎng)絡(luò)將流量路由到動(dòng)態(tài)tracker觅捆。除了tracker和DHT之外赦役,大多數(shù)BitTorrent客戶端還使用對(duì)等交換(PEX)來(lái)收集對(duì)等點(diǎn)peer。Peer交換檢查與已知的peers栅炒,看看他們是否知道任何其他peers掂摔。在Vuze的3.0.5.0版本中,所有主要的BitTorrent客戶端現(xiàn)在都具有兼容的對(duì)等交換赢赊。
混合模型
混合模型是對(duì)等和客戶 - 服務(wù)器模型的組合乙漓。一個(gè)普通的混合模式是有一個(gè)中央服務(wù)器,可以幫助同伴找到對(duì)方释移。
在結(jié)構(gòu)化服務(wù)器/客戶端網(wǎng)絡(luò)提供的集中功能與純對(duì)等非結(jié)構(gòu)化網(wǎng)絡(luò)提供的節(jié)點(diǎn)相等之間進(jìn)行權(quán)衡叭披。目前,混合模型比單純的非結(jié)構(gòu)化網(wǎng)絡(luò)或純粹的結(jié)構(gòu)化網(wǎng)絡(luò)具有更好的性能玩讳,因?yàn)槟承┕δ埽ㄈ缢阉鳎┐_實(shí)需要集中功能涩蜘,但受益于非結(jié)構(gòu)化網(wǎng)絡(luò)提供的節(jié)點(diǎn)的分散聚合。
P2P帶寬與網(wǎng)絡(luò)
點(diǎn)對(duì)點(diǎn)應(yīng)用程序是網(wǎng)絡(luò)中立性爭(zhēng)議的核心問(wèn)題之一熏纯。已知因特網(wǎng)服務(wù)提供商(ISP)由于其高帶寬使用而限制P2P文件共享業(yè)務(wù)量皱坛。相比于網(wǎng)絡(luò)瀏覽,電子郵件或互聯(lián)網(wǎng)豆巨,這樣的數(shù)據(jù)僅在短的時(shí)間間隔和相對(duì)少量的轉(zhuǎn)移的許多其他用途剩辟,P2P文件共享通常包括相對(duì)重的帶寬使用的,由于持續(xù)的文件傳輸和群/網(wǎng)絡(luò)協(xié)調(diào)包往扔。2007年10月贩猎,美國(guó)最大的寬帶互聯(lián)網(wǎng)提供商之一Comcast開(kāi)始阻止P2P應(yīng)用,如BitTorrent萍膛。他們的理由是吭服,P2P主要用于共享非法內(nèi)容,而且他們的基礎(chǔ)設(shè)施并非針對(duì)連續(xù)的高帶寬流量而設(shè)計(jì)的蝗罗。批評(píng)者指出艇棕,P2P網(wǎng)絡(luò)具有合法的合法用途蝌戒,這是大型提供商試圖控制互聯(lián)網(wǎng)上的使用和內(nèi)容的另一種方式,并將人們引向基于客戶機(jī) - 服務(wù)器的應(yīng)用程序架構(gòu)沼琉”惫叮客戶端 - 服務(wù)器模型為小型發(fā)布者和個(gè)人提供了財(cái)務(wù)障礙,并且可能不太有效地共享大型文件打瘪。作為對(duì)這種帶寬限制的反應(yīng)友鼻,一些P2P應(yīng)用程序開(kāi)始實(shí)施協(xié)議混淆,如BitTorrent協(xié)議加密闺骚。實(shí)現(xiàn)“協(xié)議混淆”的技術(shù)包括通過(guò)使數(shù)據(jù)看起來(lái)好像是隨機(jī)的那樣彩扔,去除其他容易識(shí)別的協(xié)議屬性,例如確定性字節(jié)序列和數(shù)據(jù)包大小僻爽。 ISP對(duì)高帶寬的解決方案是P2P緩存虫碉,其中ISP存儲(chǔ)P2P客戶端訪問(wèn)最多的文件,以節(jié)省對(duì)互聯(lián)網(wǎng)的訪問(wèn)胸梆。
P2P流量的增加給ISPs帶來(lái)了問(wèn)題蔗衡。網(wǎng)絡(luò)可能會(huì)因P2P流量而飽和,從而造成其他類型互聯(lián)網(wǎng)使用的擁擠乳绕。P2P流量的成本與互聯(lián)網(wǎng)服務(wù)提供商從這些客戶中獲得的收入數(shù)量不成比例绞惦,這是因?yàn)槠毡殇N售的帶寬統(tǒng)一費(fèi)率包。為防止P2P流量對(duì)所有用戶的服務(wù)質(zhì)量下降洋措,ISP通常面臨三種選擇:
- 投資額外的帶寬和設(shè)備济蝉。不幸的是,增加帶寬往往不能解決問(wèn)題菠发,因?yàn)镻2P應(yīng)用固有地傾向于消耗盡可能多的帶寬王滤。
- 實(shí)施更嚴(yán)格的字節(jié)上限,策略或P2P流量整形滓鸠,限制P2P流量的速度雁乡。困難在于P2P數(shù)據(jù)包變得越來(lái)越難以識(shí)別,特別是在引入加密(如BitTorrent協(xié)議加密)的情況下糜俗。流量整形也會(huì)產(chǎn)生負(fù)面的宣傳和客戶反應(yīng)踱稍。
- 實(shí)現(xiàn)一種P2P緩存形式。
常見(jiàn) p2p系統(tǒng)BitTorrent簡(jiǎn)介
BitTorrent
BitTorrent是傳輸大文件的最常用協(xié)議之一悠抹,例如包含電視節(jié)目或視頻剪輯的數(shù)字視頻文件或包含歌曲的數(shù)字音頻文件珠月。據(jù)估計(jì),截至2009年2月楔敌,對(duì)等網(wǎng)絡(luò)占所有互聯(lián)網(wǎng)流量的大約43%至70%(取決于位置)啤挎。 2004年11月,BitTorrent負(fù)責(zé)所有互聯(lián)網(wǎng)流量的25%卵凑。截至2013年2月庆聘,BitTorrent占全球全部帶寬的 3.35%胜臊,超過(guò)專用于文件共享的總帶寬的6%中的一半以上。
要發(fā)送或接收文件伙判,某人在其連接到互聯(lián)網(wǎng)的計(jì)算機(jī)上使用BitTorrent客戶端象对。BitTorrent客戶端是實(shí)現(xiàn)BitTorrent協(xié)議的計(jì)算機(jī)程序。受歡迎的客戶包括μTorrent澳腹,Xunlei,Transmission杨何,qBittorrent酱塔,Vuze,Deluge危虱,BitComet和Tixati羊娃。BitTorrent追蹤器提供可用于傳輸?shù)奈募斜恚⒃试S客戶端找到可以傳輸文件的被稱為種子的對(duì)等用戶
算法介紹埃跷,名詞定義
一般的下載服務(wù)器為每一個(gè)發(fā)出下載請(qǐng)求的用戶提供下載服務(wù),而BitTorrent的工作方式與之不同蕊玷。分配器或文件的持有者將文件發(fā)送給其中一名用戶,再由這名用戶轉(zhuǎn)發(fā)給其他用戶,用戶之間相互轉(zhuǎn)發(fā)自己所擁有的文件部分,直到每個(gè)用戶的下載都全部完成。這種方法可以使下載服務(wù)器同時(shí)處理多個(gè)大體積文件的下載請(qǐng)求,
以下是BitTorrent協(xié)議中重要的名詞定義和算法介紹弥雹。
種子文件(Torrent文件) 垃帅。
BitTorrent是通過(guò)一個(gè)擴(kuò)展名為.torrent的種子文件進(jìn)行下載部署的,它由文件最初發(fā)布者創(chuàng)建,發(fā)布到互聯(lián)網(wǎng)上,供感興趣的用戶下載。種子文件記錄了負(fù)責(zé)管理該文件所在分發(fā)網(wǎng)絡(luò)的Tracker服務(wù)器的地址剪勿、文件名贸诚、文件長(zhǎng)度以及每個(gè)文件分塊的SHA-1校驗(yàn)值。種子節(jié)點(diǎn)(Seed節(jié)點(diǎn)) 厕吉。
Seed節(jié)點(diǎn)是指在一個(gè)P2P共享下載網(wǎng)絡(luò)中,擁有完整文件拷貝的節(jié)點(diǎn)酱固。這類節(jié)點(diǎn)只提供上傳服務(wù),而沒(méi)有下載請(qǐng)求。下載節(jié)點(diǎn)(Leecher節(jié)點(diǎn))头朱。
共享網(wǎng)絡(luò)中相對(duì)于Seed節(jié)點(diǎn)的是Leecher節(jié)點(diǎn)运悲,它只擁有部分的文件拷貝,在提供這部分拷貝的同時(shí),還會(huì)向其他節(jié)點(diǎn)請(qǐng)求自己缺少的那部分文件。跟蹤服務(wù)器(Tracker服務(wù)器) 项钮。
Tracker是一個(gè)中心服務(wù)器,負(fù)責(zé)跟蹤系統(tǒng)中所有的參與節(jié)點(diǎn),收集和統(tǒng)計(jì)節(jié)點(diǎn)狀態(tài),幫助參與節(jié)點(diǎn)互相發(fā)現(xiàn),維護(hù)共享網(wǎng)絡(luò)中文件的下載班眯。一個(gè)Tracker服務(wù)器可以同時(shí)維護(hù)和管理多個(gè)文件共享網(wǎng)絡(luò)。共享網(wǎng)絡(luò)(Swarm網(wǎng)絡(luò))烁巫。
一個(gè)Swarm共享網(wǎng)絡(luò)是擁有和傳輸同一個(gè)文件資源的所有節(jié)點(diǎn)所構(gòu)成的一個(gè)覆蓋網(wǎng)絡(luò),包括共享該文件的Seed節(jié)點(diǎn)鳖敷、Leecher節(jié)點(diǎn)和Tracker服務(wù)器。分片機(jī)制程拭。
BitTorrent像其他文件共享軟件一樣對(duì)文件進(jìn)行了分片(Piece),Piece是最小的文件共享單位,每個(gè)Leecher在下載完一個(gè)完整的分片后才會(huì)進(jìn)行完整性校驗(yàn), 完整性校驗(yàn)成功后通知其他節(jié)點(diǎn)自己擁有這部分?jǐn)?shù)據(jù)定踱。為了加快文件傳輸?shù)牟⑿行?每個(gè)分片還會(huì)分成更小的分塊(Block), Block是最小的文件傳輸單位,數(shù)據(jù)請(qǐng)求者每次向數(shù)據(jù)提供者請(qǐng)求一個(gè)Block的數(shù)據(jù)。片選擇機(jī)制恃鞋。
為了保證共享網(wǎng)絡(luò)的健壯性,延長(zhǎng)一個(gè)共享網(wǎng)絡(luò)的生命周期, BitTorrent通過(guò)局部最少塊優(yōu)先(Rarest-First)策略在節(jié)點(diǎn)間交換數(shù)據(jù)崖媚。下載節(jié)點(diǎn)根據(jù)自己周圍的鄰居節(jié)點(diǎn)擁有的數(shù)據(jù)塊信息,選擇擁有節(jié)點(diǎn)最少的分塊優(yōu)先下載,從而維護(hù)局部的數(shù)據(jù)塊相對(duì)平衡亦歉。節(jié)點(diǎn)選擇機(jī)制。
BT系統(tǒng)采用了基于"Tit-for-Tat"的激勵(lì)機(jī)制來(lái)抵御“Free-riding”行為畅哑,其中Choking/Unchoking算法最為關(guān)鍵肴楷。每個(gè)BT節(jié)點(diǎn)通過(guò)Internet/Uninterest消息來(lái)維護(hù)與多個(gè)節(jié)點(diǎn)的并發(fā)連接,但是只能為少數(shù)節(jié)點(diǎn)提供上傳荠呐。服務(wù)提供節(jié)點(diǎn)在收到上傳請(qǐng)求后會(huì)通過(guò)Choking/Unchoking機(jī)制決定是否對(duì)文件請(qǐng)求節(jié)點(diǎn)提供上傳服務(wù),可以拒絕服務(wù)(Choking)或者允許服務(wù)(Unchoking),該機(jī)制決定了兩個(gè)相連的節(jié)點(diǎn)是否共享彼此的資源赛蔫。為了防止部分節(jié)點(diǎn)只下載不上傳的自私行為,Choking/Unchoking算法優(yōu)先選擇曾經(jīng)為自己提供過(guò)上傳數(shù)據(jù)并擁有高下載速率的節(jié)點(diǎn),前者可以鼓勵(lì)節(jié)點(diǎn)上傳以獲取下載,后者有助于最大化系統(tǒng)資源利用率。此外, Choking/Unchoking算法每隔30s將不考慮過(guò)去的貢獻(xiàn)隨機(jī)選擇一個(gè)節(jié)點(diǎn)進(jìn)行上傳,一方面有利于發(fā)現(xiàn)可能存在更高下載速率的節(jié)點(diǎn),另一方面可以避免新節(jié)點(diǎn)因從未進(jìn)行過(guò)上傳而無(wú)法獲得有效的下載連接泥张。
文件下載的可視化展示
整體動(dòng)畫演示分發(fā)過(guò)程:
實(shí)際客戶端下載過(guò)程示例:
文件分塊下載的圖形展示:
一個(gè)文件被分成很多塊呵恢,下載時(shí)同時(shí)進(jìn)行塊的下載。
節(jié)點(diǎn)連接和下載情況:
會(huì)從每個(gè)具有這個(gè)文件的節(jié)點(diǎn)處進(jìn)行下載媚创。
參考資料
https://en.wikipedia.org/wiki/Peer-to-peer
https://en.wikipedia.org/wiki/P2P_caching
https://en.wikipedia.org/wiki/BitTorrent
https://en.wikipedia.org/wiki/Comparison_of_file-sharing_applications
https://en.wikipedia.org/wiki/Comparison_of_BitTorrent_clients
BitTorrent DHT 協(xié)議中文翻譯
https://segmentfault.com/a/1190000002528378
P2P網(wǎng)絡(luò)測(cè)量與分析 張宏莉, 葉麟, 史建燾