當前位置:編程學習大全網 - 源碼下載 - verycd的驢怎樣才能建立low to low?

verycd的驢怎樣才能建立low to low?

測試開始以來,效果不錯,Low2Low成功率頗高。

關註了壹下大家的反饋,有人擔心內網穿透會增加HighID負擔,這個理解得有所偏差,關於內網穿透的原理,比較成熟的帖子有: /article/79/79799.shtm

不過這個說的比較復雜,用我自己的淺薄理解,簡單說來就是:

內網計算機(也就是LowID),都通過至少壹層網關連接互聯網,沒有自己的獨立IP和端口(別人看到的妳的IP是網關的),所以別人無法主動與妳建立連接,兩個內網用戶自然也就無法連通,更無法實現傳輸。

但是內網計算機可以主動連接其他有獨立IP的外網計算機,再通過udp協議通訊的時候,因為udp是非持續連接的,所以網關那邊會給妳開壹個臨時端口,讓妳能夠接受外網計算機返回給妳的udp包,如果壹段時間內沒有傳輸,臨時端口便會取消。

這個步驟就可有空子鉆,比如A和B 兩臺內網計算機,都同時連接外網計算機C進行udp協議的傳輸,A和B分別用到了臨時端口Ap和Bp,這個時候通過Ap就可以主動連接到A,Bp就可以主動連接到B,所以C所要做的,就是把Ap告訴B,把Bp告訴A。AB通過從C那裏知道的Ap和Bp,即可實現UDP直連。只要連接不斷,臨時端口就壹直有效,傳輸期間,C什麽都不需要參與,這個過程,俗稱打洞,C幫AB打好洞,AB就可以自己玩了。

當然我這個是最簡單的講法,根據不同的網關設備,還是有很多不同情況需要解決。

有人怕Low2Low會耗HighID資源,這個多慮了,不是說不耗,而是耗的根小,C只不過初期接受壹下AB發來的UDP請求,並向雙方返回壹次數據,打洞成功之後就再也沒事了。本身UDP傳輸就耗的資源很少,這壹兩次UDP傳輸相對於連接頻繁的eMule,可以忽略不計了。

更要說明的壹點就是,我們目前測試用的內網穿透eMule,都是連接的我們自己的壹臺服務器用來做“C”,幫LowID打洞,沒有依賴任何其他HighID,而我們那臺破PIII服務器,目前同時處理著幾百個low2low的連接,也幾乎沒占多少服務器資源。

當然將來最好的方案,是可以讓eMule的Low2Low基於Kad來進行,這樣可以不依賴任何第三方的服務器,獨立的發展下去。基本原理是LowID利用自己的buddy來做幫助打洞,每個HightID只會幫1個LowID做buddy,所以不會增加HighID的負擔。這方面我們也作了研究,不日也準備進行測試。

內網穿透目前是壹套成熟的方案,QQ,BC等都早已開始大規模使用。為什麽eMule到現在為止才開始由我們開始測試內網穿透呢?主要是因為eMule的開發長期以來都由老外們主導,國外大都由公網IP,Low2Low對他們來說,太不重要。而我們自己也走了很多的彎路,去年嘗試通過內置VNN來解決問題,但VNN相對eMule,是壹套太大的解決方案,需要註冊和安裝虛擬網卡才能使用。雖然我們後來的版本自動完成了這2步,但是VNN的服務器還是無法拖起eMule這巨大的用戶群進行這樣復雜的應用。

所以這次痛定思痛,自己從頭開始開發,主要就是讓使用tcp協議傳輸數據的eMule可以利用到UDP直連,並且解決各種各樣的細節問題(因為eMule之前都沒考慮到low2low問題)。

國外也有個neo版本的eMule,嘗試利用kad解決Low2Low的問題,但實際使用效果不好。我們在開發過程中也想參考,不過基本沒參考成,代碼太復雜太亂。最後還是根據自己的思路自己寫的,會比neo的思路更清晰些。

這次的內網測試版本,是我們VeryCD軟件開發組近幾個月努力得來的壹點小成績,希望能夠早日正式發布。我雖不是軟件開發,但有幸參與這個過程。所以把自己所理解的東西向大家解釋壹下。雖然會有紕漏,但不熟悉相關技術的同誌,應該更容易理解。

最後補充,eMule既然是開源軟件,這項技術成熟之後,必然可以***用,對所有eMule用戶,都能有所幫助。

  • 上一篇:離娛樂圈最近的4大專業老師來指路
  • 下一篇:壹個現成的寫好的“JavaWeb”工程,為什麽導入到Idea中,會是:“右三角運行按鈕為灰色不可用”?
  • copyright 2024編程學習大全網