EMule原理
原文地址:emule原理作者:az13ds2 關于emule原理
http://vincentchun.javaeye.com/category/63685?show_full=true
http://vincentchun.javaeye.com/blog/380708
2009-05-07
關于emule原理
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老大。
2)emule到底是什么?
隨著二代技術的普及,又一個的問題誕生了,自私的人們在利用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(電騾)也出現了??梢哉femule是eDonkey的升級版,是eDonkey的一個Mod,就象osp就是quake3的mod一樣,它的獨到之處在于開源,它的基本原理和運作方式,也都是基于eDonkey, eMule基于eDonkey網絡協議,因此能夠直接登錄eDonkey的各類服務器。eMule同時也提供了很多eDonkey所沒有的功能,比如可以自動搜索網絡中的服務器、保留搜索結果、與連接用戶交換服務器地址和文件、優先下載便于預覽的文件頭尾部分等等,這些都使得eMule使用起來更加便利,也讓它得到了電騾的美譽。
總之,他們繼承了第二代P2P無中心、純分布式系統的特點,但他們它不再是簡單的點到點通信,而是更高效、更復雜的網絡通信;再加上eDonkey和eMule引入的強制共享機制,在一定程度上避免了前幾代P2P純個人服務器管理帶來的隨意性和低效率。
3)emule的下載原理?
當你在搜索列表中選取了你要的文件并開始下載后,emule會記錄下這個文件的大小,文件名以及另一個叫做hash的特殊值。會向所有添加的服務器發出請求,要求得到有相同hash值的文件。而服務器則返回持有這個文件的用戶信息。這樣我們的客戶端就可以直接的和擁有那個文件的用戶溝通,看看是不是可以從他那里下載所需的文件。它最棒的部分就在于:你不是只在一個用戶那里下載文件,而是同時從許多個用戶那里下載文件。如果另一個用戶僅僅只有你要的文件的一個小小片斷,他也會自動地把這個片斷分享個大家,而你就可以從這個用戶的機器上下載這個片斷。當然你也是一樣。只要你得到了一個文件片斷,系統就會把這個片斷共享給大家。在查找到下載源(其他客戶端)后,下載就是客戶端和客戶端通過點對點(P2P)進行直接對話了。期間沒有數據流通過服務器。
4)emule是如何工作的?
emule建立于多點文件傳輸協議之上。一個emule網絡由服務器端和客戶端兩部分組成。服務器端是客戶端連接的、為了搜索和查找可以下載用戶的橋梁。服務器列表像電話本一樣排列,客戶通過瀏覽它而獲取他需要的文件所有者的客戶端信息。在download過程中,沒有下載文件通過服務器端。
5)emule是如何搜索的?
每一個客戶端連接到一個服務器作為他的主服務器。在連接時,由客戶端告訴主服務器他share了那些文件,以及IP地址等其他信息。所以每一個服務器會記錄所有登陸到他服務器上的以上信息。在本服務器搜索時,它會通過匹配記錄的已知以上信息把查找結果反饋給搜索的客戶端列表。當你使用擴展搜索(extend search)時,你的搜索請求和應答結果通過發送限制帶寬的UDP包連接到客戶端本身的服務器列表(server.met)對應的某一個ip地址的服務器。
6)emule是如何下載的?
當客戶端選擇了一個文件下載時,它首先收集一個擁有該文檔的客戶端的列表。它會先行查詢主服務器所有登陸用戶他們是否擁有該文件。然后再連接和查選其他服務器的登陸用戶所擁有該文件的客戶端列表。一旦它找到擁有該文件的其他客戶端,它將請求每個客戶端發送這個文件的不同片。直至最后文件由這個不同的片組裝成一個完整的文件。在進行pause/resume的時候,我們選擇的下載列表已經獲取,它pause的僅僅是客戶端和客戶端之間的TCP連接然后恢復TCP連接。這個過程只有再resume時通過客戶端向服務器端發送22個字節后即可。占用的僅僅是22個字節的網絡流量。在pause是甚至不通過你登陸的服務器進行,也無須你登陸的主服務器進行任何干預和操作。所以說,它并未占用主服務什么資源,只是在你已經和主服務器連接的通道上發送22個字節而已。
7)emule有什么優點?
不需要服務器來存放共享文件,節省了服務器架設、海量硬盤、網絡帶寬。每個用戶端節點都同時是文件下載者和提供者。實際上,在你正在下載但還沒當完整個文件時,你已經可以把你已下載的部分共享給別人了!因為emule同時從很多文件提供者那里下載所需的文件最后再拼成整個文件的。加入的人越多,下載速度越快,資源越豐富。共享方便,每個人在自已的emule里指定一個share目錄就可以把自己的文件共享給網絡中的其它人了。不必再辛苦地上傳到服務器上了。
以上就是關于emule的一些基礎知識,希望大家看完之后,能對emule的原理,有一個本質的認識。
下面我再來說說一些很困擾,很迷惑人的問題。
1)id問題
朋友們最關心的就是這個問題,id是什么?id其實沒有什么用,id就是在emule傳輸里面,作為地址作用的一個東西,起到尋址和定址作用,它直接和我們ip掛鉤,是由emule根據我們的ip地址,通過算法得到的一組數字。所以adsl用戶經常會說,為什么我的id變了?當然要變,因為你每次上網撥號所取得的ip地址都不相同,所以id當然也要隨之變化,一句話;ip不變id就不變,ip變了id就變化。
關于高id和低id,目前好多朋友也存在一個誤區,認為同一個ip地址,只能而且最多只能擁有一個高id,其實這是不對的。一個公網ip地址,可以同時取得2個以上的高id,這一點我要在這里強調一下,比如,adsl用戶,如果你本身是高id,那么你可以同時打開第二個emule兩個同時運行,但是彼此的emule端口一定不要相同,這樣你會發現兩個都是高id,同一個ip地址。同樣對于端口映射,同一個ip地址,也可以同時取得兩個以上高id,同樣端口不要相同。
對于低id用戶,還存在一個誤區,那就是認為只要映射了,就能變成高id,這一點我要說明一下,什么叫高id,它是一個9位以上的id數字,它代表了你的ip地址是公網獨立的ip,也就是說只有前提你能夠擁有公網獨立的ip地址,你才能獲得高id,端口映射的原理是把你的內網地址和端口,通過地址轉換投影到公網干線上,使你作為一個公網節點,從而變成高id。那么這里就存在一個網絡拓撲的問題,有些低id用戶,不是處在公網干線的一級子網內,而是子網的下一級子網,甚至下好幾級子網,拓撲的結構是層層拓撲,那么這部分用戶,無論如何也無法獲得高id,因為你做了映射只不過是成了上一級子網的節點,但是仍然還是內網,只不過映射了一層,你上面還有好幾層,所以要正確看待映射的問題。目前,國內除了電信和網通,有好多二級運營商玩的就是這個路子,他們或者層層拓撲,或者只保留部分公網ip地址,作為機動分配,這樣你運氣好一撥號能得到一個公網ip,你運氣不好就是內網,沒有辦法。
?
3)kad問題
好多朋友對這個東西始終不太明白,我說一下,kad和我們目前的ed2k不一樣,我們目前的ed2k要通過服務器進行中轉,我們都要連到服務上才能進行傳輸,而kad則是無服務器工作模式,它的傳輸可以獨立進行,完全不需要服務器參與,我們只需要打開kad就可以不再需要服務器了,所以說kad是屬于試驗階段,應該說他的前景最為光明,應該是p2p的未來,所以建議朋友們多多打開,對于找源很有幫助,特別是對于低id而言,vkad就是vnn+kad的模式。
4)服務器問題
這個問題論壇已經說了很多了,我主要說一些大家容易誤會的地方,好多朋友經常問到,怎么我的服務器少了,或者是消失了,或者開機提示列表文件丟失,這里大家要注意在emule>選項>服務器設置里面啟用智能lowid檢測這一項最好不要選啟動自動更新服務器列表也不要選把連接到其它服務器時自動更新選上,這樣你可以在服務器切換的時候,自動更新服務器列表而不用添加什么列表的url網址之類的東西,另外對于常用的服務器,最好把他的狀態選擇為靜態服務器,這樣他就不會消失了,其實我們服務器列表有300多個服務器,能夠用上的就那么幾個,大家可以把他們設置成高級,靜態,另外還要說一點,選擇服務器的時候選擇ping值小的人數多的文件多的這個文件數什么意思,是連接到這個服務器的所有用戶的共享文件總數,要注意服務器上沒有任何文件,另外大家注意一下服務器列表里面,每個服務器還有:軟性文件限制硬性文件限制,這個是什么意思?他代表了服務器接受你的共享文件任務列表文件的大小限制,如果你要是超過了這個限制,就會被服務器拒絕,舉個例子,如果這個值顯示的是1k,那么你的共享文件數最好少于1000個,目前來看大部分都是1k。
其實對于服務器端,有好多愿意研究的朋友,很感興趣。其實他就是edonkey的服務器,二者目前列表都一樣,所以大家想要自己架設em服務器,可以上edonkey網站,下載服務器端的程序,我看了一下這個程序不大,而且也很簡單,有興趣的朋友們可以自己分析一下。
5)web服務器問題
大家都看了在emule>服務器>我的信息最下面總是有一個web服務器的東西,這個是什么?我說一下通常情況下我們這個禁用是正常的,Web服務器的作用是提供了遠程訪問eMule的功能,我們可以先在emule端配置一些相關參數,然后可以實現遠程利用ie來對emule進行控制,當然了需要我們emule端要有獨立的訪問地址,遠程控制emule可以實現emule的大部分功能,但是不是全部功能,還是有一些限制。另外對于emule端的web設置,懂行的朋友還可以自己進行編程,很有交互性,一般來講,我們什么時候能夠用上它呢?比如我們在公司開了emule,但是還想下班后繼續在家里操作公司的emule,那么我們就可以使用這個功能,如此還有許多場合和環境特別利于web功能的使用,但是要注意隨之帶來的有關網絡安全性問題也很重要。對于這個功能的使用,要是詳細寫出來的話,要很長需要專門的一個主題說明,由于篇幅限制,我在這里先簡單說一下,如果朋友們都比較感興趣,我考慮單獨寫一個主題詳細說明具體設置和用法。不再贅述。
6)emule日志問題
其實這個問題沒什么好說的,日志就是記載了emule的運行記錄,我要強調的是好多朋友不懂得利用它,其實大部分emule遇到問題的時候,我們如果仔細注意日志記錄,都會自己找到問題原因所在,如果你不懂你可以把它復制下來,發到網上,希望各位朋友以后多多注意emule的日志記錄,遇到問題,多半能都自己解決。
7)任務下載問題
對于這個問題,我想說得是大家要學會使用給任務分優先級來控制下載順序,經常有許多朋友抱怨,為什么任務結束一個,開始下一個的時候是隨機開始,怎么能實現自動控制?這里我們就可以手動設置任務列表里面任務的優先級,右鍵就可以看到,把不同任務的優先級設置成高中低這樣emule在完成一個的時候自然按照優先級去選擇下一個該是誰,而不會隨機開始了,另外在選項里面也可以設置一下,新建任務為停止模式,或者自動開始下一個停止文件。
8)搜索問題
其實要是大家都學會了利用該功能,就會找到好多意想不到的東西,好多朋友平時很少用這個功能,其實p2p引以為自豪的就是他的搜索功能,建議大家以后多多自己搜索,搜索的時候要注意,每頁都有200條的限制,所以要想看更多的可以點擊旁邊的“更多”,這樣可以顯示下一個200條,可不要以為就只有第一頁的200條記錄啊!對于搜索顏色問題我說明一下:
紅色:代表你的任務列表里面已經有的文件 或者 你已經下載完成正在共享的文件
藍色:普及程度較高源比較多的文件
黑色:你從來都沒有下載過的文件
?
?
?
本人注:第九第十條認識有誤,故刪除之。未看完其他錯誤待修改。
?
?
11)代理問題
?
這里我要說明一點,好多朋友使用代理運行emule,比如一些公司內網的朋友,你們在尋找代理的時候,盡量使用sock5的代理,當然sock4和http也可以,但是要注意好多http代理本身不支持udp協議,所以導致了emule無法運行,大家要注意,選擇支持udp協議的代理。而且多找幾個,留作備用。
12)統計信息問題
這個問題,我要說兩點
(1)上傳:下載比例問題之前好多朋友對這個有很多誤會,這里我要說明這個比例大于1說明你的貢獻大于索取,等于1,說明你的貢獻和索取一致。小于1,則說明了你是一個索取的人,對p2p的貢獻為負。大家一定要注意誰比誰,哪個是分母,哪個是分子,那么這有什么用呢?要注意p2p是一個講究奉獻,講究積分的東西,你的上傳多,你的下載快,這個比例也說明了使用者素質問題,另外對于這個比例,我們也有一些獎懲措施,比如上傳:下載大于2,也就是說明了你的上傳量是下載量的2倍,這個時候你在排隊的時候,就可以享受優先排隊待遇,這個比值越大越好,不存在什么限制,越大說明你的上傳量越多,說明你的積分越多,你的貢獻越多,當然你排隊的時間就越少。如果這個比值小于1,而且越來越小,那么同樣你的速度也會越來越慢,這個你怨不了誰。
(2)速度大小的問題好多朋友往往只關注了那個最大速度,但是實際上那個數值沒有什么意義,他只是一個曲線峰值,往往一閃即逝,或者最多持續幾秒,我們要關注的是我們的平均速度,這個二元值包含了時間的因素,所以他才能說明我們emule的整體速度大小。
13)積分問題
積分不是你對所有人的積分,只是在你機器下載的人他們的EM對你的積分,比如你開放的帶寬大,小A在你那里下的很舒服,你就在小A那里的分數高。同樣,小A那里也有一群人在下他的資料其中也有你,由于你開放的帶寬多小A在你那里下的多,你在小A那里的積分就高,你就比其他在小A那里下載東西的人有優先下載小A資料的權限(小A可以設置高、普通這些的,設置高的時候就只有積分高的人優先下了)。
自己是無法看自己的積分的,因為這個積分不是永恒的,只是暫時針對一個文件的。
14)好友通道問題
我說明一點,加為好友開通通道,起到的作用只是,可以縮短你的排隊時間,使你的信用積分突然變大,此外沒有任何作用,他和速度沒有本質的聯系。
15)tag問題
好多朋友到現在也不明白為什么要有個[chn]有個[VeryCD],這個有什么用,其實這個名稱是任意的,甚至重名都沒有問題,因為p2p世界里面判斷你的標志是userhash,而不是用戶名,用戶名你隨便改,一天一個新名字也不會影響你的積分,tag的作用是為了讓一些服務器判斷,從而可以連接該服務器,有的服務器就是規定了如果你不加[*****]就是不讓你連接,所以就加上他連接方便點,另外有的mod可以實現對有相關[****]進行加分,比如我們vc版本對有[chn]的朋友就有固定的加分設置,它可以使所有有這個[chn]的朋友積分比沒有這個的人多,從而達到中國人優先下載優先上傳的問題,當然了這個問題,現在在世界范圍內,仍是一個爭論的話題,到底是否應該加分,大家也是眾說紛紜。其實,懂行的朋友可以自己設置加分,可以隨心所欲給任何[*****]加分減分,也可以給任意userhash加分減分,以達到優先上傳優先下載的目的,甚至可以達到任意ban人的目的。當然了,這個問題不合適公開討論,有違背p2p的根本,這里點到為止。
16)對于如何隱藏emule頭像的問題
對于一些在公司工作的朋友,這一直是一個困擾很久的問題,如何還能下載,還不讓老板發現。這里我說兩個解決方案
(1)使用第三方軟件解決可以使用SysTrayX軟件,這個軟件,國內大型軟件站都有下載,它是一個管理系統托盤的軟件,非常簡單,具體使用方法,大家一看就明白了,他可以做到隱藏emule頭像的問題,
(2)使用系統服務解決 我們知道在2000以上系統中都有srvany服務,借助這個服務,也可以實現隱藏頭像不借助第三方軟件同樣server系統可以用終端服務來實現隱藏頭像,另外還可以借助instsrv服務來實現隱藏頭像,原理和前面一樣,其實就是一個東西,這種方法原理,常見于一些黑客網站,其實有些木馬軟件,或者后臺軟件,就是用的這個方案。大家有興趣可以上一些黑客網站研究研究。
17)關于emule和bt的相關問題
好多朋友都在使用bt的同時,也在使用emule,我這里說一點,對于bt文件,如果我們下到了一半,沒有種了,或者非常慢,我們可以把它導入emule下載,用dmTorrent2Par和Jcd2Met或者 Edonkeydoctor或者MetFileRegenerator,都可以實現該功能,很簡單,另外emule的文件同樣也可以導入bt進行下載,二者可以相互轉換。為什么要說這一點呢,是要提醒大家,其實有好多emule的輔助工具,都可以幫我們更好的使用emule,它不是孤立的,只不過國內興起的比較晚,目前來看,只要edonkey能用的相關軟件,emule都能使用。比如,關于重建met的edonkeydoctor軟件,就可以使一些下載了很多的錯誤文件,直接進行修復而不是像以前那樣把辛苦下到的刪掉。是我們遇到問題需要關閉的時候,不用再擔心要刪除文件了。
林林總總。寫了好多,但是發現其實關于每個問題說明,都還只是停留在蜻蜓點水的層面,由于篇幅所限,不能深入寫下去,如果要是寫多了,朋友們多沒有耐心看,所以對于每個問題,我就先寫這么多,如果大家對于其中的某個問題,特別有興趣,我考慮可以逐個展開,以獨立主題的方式,詳細介紹,這里先寫這么多,可能這樣,也不一定有朋友能都看完??傊?#xff0c;這是我作為版主一個多月來,對于大家集中問題的一個搜集和解答,希望會對大家有所幫助,同樣,我們論壇里面藏龍臥虎,我深知還有不少朋友也都很有心得,潛于當中,我的水平有限,好多問題考慮的也不周到,這里肯定還有不少錯誤的地方,請大家指出,我本身也是一個外行,希望各位能夠不吝賜教,我深感榮幸!在這里先行感謝了!
Ps:文中部分資料來源于網上,恕不列出轉引出處,請原作者見諒!
總結
- 上一篇: Tiny210加入AC97驱动Wm971
- 下一篇: ubuntu 12.04 amule 设