1)P2P到底是什麼?
Peer-to-peer的縮寫,指的是點對點的意思,最早是在美國由 18歲的Shawn Fanning開發出一個叫Napster的軟件時,引入得概念 ,它不僅僅是一種軟件架構,也是一種社會模式的體現,網絡上流行的P2P軟件的架構手段主要有兩種:集中式和分布式。
集中式:便是利用服務器作為媒介使各個分散的節點(用戶)能互相聯系,生成各種服務響應。
分布式:每個節點即做服務器又做客戶端,這種方式非常靈活,一個孤立的節點只要連上另一個節點便可以進行傳輸。
Napster可以說是第一代p2p軟件。後來由於Napster陷入訴訟危機(相關版權問題),便出現了Gnutella,它吸取了Napster的失敗教訓,將P2P的理念更推進一步:它不存在中樞目錄服務器,用戶只要安裝了該軟件,立即變成一台能夠提供完整目錄和文件服務的服務器,並會自動搜尋其它同類服務器,從而聯成一台由無數PC組成的網絡超級服務器。傳統網絡的Server和Client在它的面前被重新定義。Gnutella作為第二代p2p軟件,他們可以說是最早的p2p技術。然後FastTrack (即Kazaa 的底層技術)迅速掘起取代其地位。成為p2p老大。
隨著二代技術的普及,又一個的問題誕生了,自私的人們在利用P2P軟件的時候大多只願“獲取”,而不願“共享”,P2P的發展遇到了意識的發展瓶頸。不過,一頭“騾”很快改變了游戲規則,它就是後來鼎鼎大名的 eDonkey。這標志著第三代p2p技術的興起,eDonkey采用了以“分散式雜湊表”(distributed hash tables )為訴求的Neonet技術,改變了P2P網絡上的搜索方式,理論上可以更有效率的搜索更多的電腦,以及更容易找出少見的文件。這種技術已經使eDonkey基本快要追上了P2P服務龍頭業界的另一個老大Kazaa了. eDonkey由Jed McCaleb在2000年創立。他最重要的是可以同時從許多人那裡下載同一個文件,並且采用了“多源文件傳輸協議”(MFTP,the Multisource FileTransfer Protocol)。電騾的索引服務器並不集中在一起的,而是各人私有的,遍布全世界,每一個人都可以運行電騾服務器,同時共享的文件索引為被稱為“ed2k-quicklink”的連接,文件前綴“ED2K://”。
同時,在協議中,定義了一系列傳輸、壓縮和打包的標准,甚至還定義了一套積分的標准,你上傳的數據量越大,積分越高,下載的速度也越快。而且每個文件都有有md5-hash的超級鏈接標示,這使得該文件獨一無二,並且在整個網絡上都可以追蹤得到。EDonkey可以通過檢索分段從多個用戶那裡下載文件,最終將下載的文件片斷拼成整個文件。而且,只要你得到了一個文件片斷,系統就會把這個片斷共享給大家,盡管通過選項的設置你可以對上傳速度做一些控制,但你無法關閉它。
在eDonkey出現後,其改良品種eMule(電騾)也出現了。可以說emule是eDonkey的升級版,是eDonkey的一個Mod,就象osp就是quake3的mod一樣,它的獨到之處在於開源,它的基本原理和運作方式,也都是基於eDonkey, eMule基於eDonkey網絡協議,因此能夠直接登錄eDonkey的各類服務器。eMule同時也提供了很多eDonkey所沒有的功能,比如可以自動搜索網絡中的服務器、保留搜索結果、與連接用戶交換服務器地址和文件、優先下載便於預覽的文件頭尾部分等等,這些都使得eMule使用起來更加便利,也讓它得到了電騾的美譽。
總之,他們繼承了第二代P2P無中心、純分布式系統的特點,但他們它不再是簡單的點到點通信,而是更高效、更復雜的網絡通信;再加上eDonkey和eMule引入的強制共享機制,在一定程度上避免了前幾代P2P純個人服務器管理帶來的隨意性和低效率。
當你在搜索列表中選取了你要的文件並開始下載後,emule會記錄下這個文件的大小,文件名以及另一個叫做hash的特殊值。會向所有添加的服務器發出請求,要求得到有相同hash值的文件。而服務器則返回持有這個文件的用戶信息。這樣我們的客戶端就可以直接的和擁有那個文件的用戶溝通,看看是不是可以從他那裡下載所需的文件。
它最棒的部分就在於:你不是只在一個用戶那裡下載文件,而是同時從許多個用戶那裡下載文件。如果另一個用戶僅僅只有你要的文件的一個小小片斷,他也會自動地把這個片斷分享個大家,而你就可以從這個用戶的機器上下載這個片斷。當然你也是一樣。只要你得到了一個文件片斷,系統就會把這個片斷共享給大家。在查找到下載源(其他客戶端)後,下載就是客戶端和客戶端通過點對點(P2P)進行直接對話了。期間沒有數據流通過服務器。
4)emule是如何工作的?
emule建立於多點文件傳輸協議之上。一個emule網絡由服務器端和客戶端兩部分組成。服務器端是客戶端連接的、為了搜索和查找可以下載用戶的橋梁。服務器列表像電話本一樣排列,客戶通過浏覽它而獲取他需要的文件所有者的客戶端信息。在download過程中,沒有下載文件通過服務器端。
5)emule是如何搜索的?
每一個客戶端連接到一個服務器作為他的主服務器。在連接時,由客戶端告訴主服務器他share了那些文件,以及IP地址等其他信息。所以每一個服務器會記錄所有登陸到他服務器上的以上信息。在本服務器搜索時,它會通過匹配記錄的已知以上信息把查找結果反饋給搜索的客戶端列表。當你使用擴展搜索(extend search)時,你的搜索請求和應答結果通過發送限制帶寬的UDP包連接到客戶端本身的服務器列表(server.met)對應的某一個ip地址的服務器。
當客戶端選擇了一個文件下載時,它首先收集一個擁有該文檔的客戶端的列表。它會先行查詢主服務器所有登陸用戶他們是否擁有該文件。然後再連接和查選其他服務器的登陸用戶所擁有該文件的客戶端列表。一旦它找到擁有該文件的其他客戶端,它將請求每個客戶端發送這個文件的不同片。直至最後文件由這個不同的片組裝成一個完整的文件。 在進行pause/resume的時候,我們選擇的下載列表已經獲取,它pause的僅僅是客戶端和客戶端之間的TCP連接然後恢復TCP連接。這個過程只有再resume時通過客戶端向服務器端發送22個字節後即可。占用的僅僅是22個字節的網絡流量。在pause是甚至不通過你登陸的服務器進行,也無須你登陸的主服務器進行任何干預和操作。所以說,它並未占用主服務什麼資源,只是在你已經和主服務器連接的通道上發送22個字節而已。
7)emule有什麼優點?
不需要服務器來存放共享文件,節省了服務器架設、海量硬盤、網絡帶寬。 每個用戶端節點都同時是文件下載者和提供者。實際上,在你正在下載但還沒當完整個文件時,你已經可以把你已下載的部分共享給別人了! 因為emule同時從很多文件提供者那裡下載所需的文件最後再拼成整個文件的。加入的人越多,下載速度越快,資源越豐富。 共享方便,每個人在自已的emule裡指定一個share目錄就可以把自己的文件共享給網絡中的其它人了。不必再辛苦地上傳到服務器上了。
以上就是關於emule的一些基礎知識,希望大家看完之後,能對emule的原理,有一個本質的認識。