-
如何使用PeaZip加密檔案
PeaZip視窗選擇所要壓縮的檔案或是資料夾,然後按【加入】。建立壓縮檔的視窗,壓縮檔預設的壓縮格式為ZIP,可以選擇其他壓縮格式。進階選單內可以設定壓縮方式,加密的演算法有兩[詳情]
-
PeaZip如何新增壓縮檔案教學
(一) 滑鼠點擊「加入」。(二) 新增主視窗。 (三) 選擇欲新增壓縮之格式。 (四) 於「正在壓縮」欄位點擊滑鼠右鍵 >「加入檔案」。 (五) 選擇欲壓縮單個或多個檔案,按「開[詳情]
-
PeaZip安裝教學
1.下載解壓縮後,執行PeaZip.exe 2.PeaZip程式執行後,首先進行語言選擇,PeaZip的預設為英文,點選上方的功能[Options] > [Localization],之後選擇[cht-3.0]後,按[開啟]PeaZip會自[詳情]
-
PeaZip 語言切換教學
1 「Options」→「Localizaiton」。 2 點選「cht」→按「開啟」按鈕。 3 程式自動重新開啟後即為中文介面。[詳情]
-
如何利用PotPlayer將影片中的聲音擷取出來
開啟影音檔之後,可以先暫停或關閉影片,這樣方便等一下錄製。接著在主視窗上按滑鼠右鍵→「音訊」→「音訊錄製」→「音訊錄製」,或者直接使用「Shift+G」開啟也行[詳情]
-
PotPlayer面板選項教學
PotPlayer的面板切換功能:【檢視】→【面板選項】 Default.dsf:預設的面板 自動隱藏:游標移開時自動隱藏黑色的面板Default.dsf:預設的面板 自動隱藏:游標移開時自動[詳情]
-
PotPlayer 檔案關聯設定教學
由於免安裝版的軟體沒有「安裝程式」,所以自然就不會去寫入登錄檔來設定檔案關聯,因此,一些還是習慣安裝版的讀者會問:「以前我只要點兩下影片就會自動用我安裝的播放軟體播放,現[詳情]
-
如何同時執行多個PotPlayer程式教學
看影片時,想同時開別的影片來看都會出現:Another PotPlayer is running.Close PotPlayer before running PotPlayer Portable. 參考下列設定允許同時執行多個PotPlayer程式,就[詳情]
BitTorrent詳解
核心提示:一、什麼是BitTorrent 一般來說,我們認為BitTorrent是一個P2P下載軟體(點對點下載軟體),你在下載的同時,也在為其他用戶提供該檔的上傳,因為大家是“互相幫助”,所以不會
一、什麼是BitTorrent
一般來說,我們認為BitTorrent是一個P2P下載軟體(點對點下載軟體),你在下載的同時,也在為其他用戶提供該檔的上傳,因為大家是“互相幫助”,所以不會隨著用戶數的增加產生伺服器擁塞而降低下載速度。
但是嚴格的來說,BitTorrent是一種用來在網路上傳輸檔的協議(Protocol),它本質上是分佈式系統的P2P(點對點)傳輸檔協議,用戶直接相連,然後互相發送和接收檔的各部分,BitTorrent仍然有一個中心伺服器(Tracker)(此處的伺服器不是指實體的伺服器,只是表示提供服務的服務者)來協調各個用戶之間的協作。Tracker伺服器只是管理連接,對發佈的檔內容並不關心,也不傳輸檔內容,因此Tracker可以用很少的帶寬就可以支持大量的用戶。BitTorrent的關鍵思想是用戶在下載(入埠傳輸)時也應該上傳(出埠傳輸),因此網路帶寬就能被充分的利用,因此參與下載的用戶數量越多,下載速度也越高。
現在 BitTorrent的DHT網路(分佈式哈希表Distributed Hash Table)技術,對一個用戶來說,它獲得一個使用DHT網路的種子後,運行 BitTorrent客戶端進行下載後,BitTorrent客戶端就會在DHT網路中搜索。連入DHT網路的用戶叫做節點(node),節點之間互相有路由記錄,因此只要和任何一個已經在DHT網路中的節點連接上,客戶端就可以尋找到更多的節點,從而連入網絡。一般種子上都有默認節點,那麼可以幫助沒有連入網絡的用戶通過那些節點連入網絡,如果下載者已經連入DHT網路了,種子裏填寫的節點就不需要了。因為DHT網路是分佈式存儲系統,所以連Tracker中心伺服器都不需要了(雖然沒有連入DHT網路的用戶需要找到第一個節點,之後才能連入DHT網路,不過之後用戶就可以進行分佈式查詢了,而不需要向Tracker伺服器不斷的查詢)。
二、BitTorrent與其它檔傳輸協議的比較
最一般的檔傳輸協議是客戶端/伺服器(C/S)模式,比如:HTTP和FTP等下載方式,它們一般都是首先將檔放到伺服器上,然後再由伺服器傳送到每位用戶的機器上,即用戶機只與伺服器相連,客戶機之間並不通信。因此如果同一時刻下載的用戶數量太多,勢必影響到所有用戶的下載速度,如果某些用戶使用了多線程下載,那對帶寬的影響就更嚴重了,因此幾乎所有的下載伺服器都有用戶數量和最高下載速度等方面的限制,且用戶越多,伺服器上需要的帶寬就越大。很明顯,由於上述的原因,即使你使用的是寬頻網,通常也很難達到運營商許諾的最高下載速度,這裏面固然有網路的原因,但與伺服器的限制也不無關係。
另外一種比較流行的檔傳輸協議是基於點對點(P2P)網路,比如Kazaa、eDonkey、 Gnutella和Direct Connect等,使用這些軟體網路用戶可以直接連接到其他網路用戶,而不需要連接到特定伺服器,但由於用戶操作系統的限制,發佈者可能不能回應很多的用戶請求,發佈的內容也完全由用戶自己決定,可能會涉及到法律和道德問題。
BitTorrent服務是通過一種類似於傳銷的方式來實現檔共用的,用戶幫助伺服器分發檔案,從而減小伺服器的負擔。舉個例子來說,例如BT伺服器將一個檔分成了N個部分,有甲、乙、丙、丁四位用戶同時下載,那麼BT客戶端並不會完全從伺服器下載這個檔的所有部分,而是根據實際情況有選擇地從其他用戶的機器中下載已下載完成的部分。例如甲已經下載了第1部分,乙已經下載了第2部分,那麼丙就會從甲的機器中下載第1部分,從乙的機器中下載第2部分,當然甲、乙、丁三位用戶也在同時從丙的機器中下載相應的部分,這就大大減輕了BT伺服器的負荷,也同時加快了丙的下載速度,也就是說每臺參加下載的電腦既從其他用戶的電腦上下載檔,同時自身也向其他用戶提供下載,因此參與下載的用戶數量越多,下載速度也越高。
當然,為了實現上述原理的快速分發,用戶需要使用BT客戶端進行下載,此外還需要有輔助伺服器幫助用戶互相連接,也就是Tracker。
三、BitTorrent的系統結構
1、WWW伺服器(或者其他能讓最終用戶獲得種子檔的服務):提供上傳和下載Torrent種子檔的功能。
2、Tracker:Tracker 是指運行於伺服器上的一個服務程式,也稱 Tracker伺服器。這個程式能夠追蹤到底有多少人同時在下載或上傳同一個檔。客戶端連上Tracker伺服器,就會獲得一個正在下載和上傳的用戶的資訊列表(通常包括IP地址、端口、客戶端ID等資訊),根據這些資訊,BT客戶端會自動連上別的用戶進行下載和上傳。
3、最終用戶web流覽器(或者其他能讓最終用戶獲得種子檔的軟體):提供上傳和下載Torrent種子檔的功能。
4、最終用戶下載軟體:泛指指運行在用戶自己電腦上的支持BitTorrent協議的程式。
5、Seed(****info file) :Torrent種子檔,擴展名為.torren,,在製作完torrent檔後,發佈者可以使用 BitTorrent下載客戶端,進行Seed他們將會被加進 Tracker伺服器的列表,其他人就可以從他那裏下載檔了。其包含了一些 BT下載所必須的資訊:資源的名稱,如果是資源是以目錄形式,還有目錄樹中每個檔的路徑資訊和文件名;如果資源是單個檔,這個檔的大小資訊;如果是以目錄形式,目錄樹中每個檔的大小;對資源實際檔按照固定大小進行分塊後每塊進行SHA1 hash運算得到的若干特徵值的集合;Torrent檔的創建時間、製作者填寫的注釋、以及製作者的資訊等;至少一個Announce地址(除非有 DHT網路),對應於Internet上部署的一個Tracker伺服器。有這個檔,用戶才可以下載別人發佈的東西。Torrent檔通常很小,大約幾十K、幾百K大小不等。
四、BitTorrent的基本工作原理與流程
1、首先三中的1—5的功能必須具備,實際當中說原始檔案發佈軟體與最終用戶下載軟體就是一個軟體(以下簡稱BT客戶端),發佈Torrent種子檔也是通過WWW方式,因為WWW方式最為普及,也便於查詢,下麵的介紹也是以WWW為標準。
2、現在想發佈資料件的用戶(上傳者)需要用BT客戶端製作Torrent種子檔,製作種子檔需要指定要發佈的檔或者檔夾、Tracker伺服器地址(Announce URL)、是否啟用DHT網路(什麼是DHT網路將在後面說明)、發佈者資訊等,Torrent種子檔製作軟體將要發佈的內容分成若干塊(每塊大小相同,一般為256KB或者1MB),然後計算每塊的哈希值(BitTorrent是使用的SHA1哈希軟法),該哈希值是用來區分不同的分塊的,Torrent種子檔主要包括announce 記錄、檔資訊、檔案名、目錄名長度、最後是片段長度、片段的 Sha1 校驗碼等資訊(見Torrent種子檔格式)。
3、現在上傳者就可以把Torrent種子檔上傳到到WWW伺服器,實際上Tracker一般都是內嵌WWW伺服器的,也就是上傳Torrent種子檔到Tracker伺服器,現在BT客戶端就可以上傳資料了。
4、當其他下載用戶(BT客戶端)下載到Torrent種子檔後,BT客戶端就根據 Torrent種子檔中的Announce 記錄找到Tracker伺服器地址,BT客戶端連接到Tracker伺服器(Tracker伺服器提供服務的方式大部分都是HTTP相容的,但也有使用 UDP的),發送Torrent種子檔的哈希資訊和其他一些資訊(見BT客戶端請求格式),Tracker伺服器查找該哈希資訊,如果找不到就作出相應的處理,如返回錯誤資訊或者斷開連接。
5、如果在步驟4找到該哈希資訊,Tracker伺服器就會反連(NatCheck)客戶的IP地址和端口這樣就可以區分內網用戶還是公網用戶(如果是內網用戶,它是連不通的,因為它會連到Nat伺服器或者路由器上,結果就是連不通),然後伺服器返回現在正在下載這個檔的所有公網用戶的IP地址和端口列表,返回給BT客戶端(也可能是部分客戶列表),最後如果該用戶是公網用戶 Tracker伺服器會把用戶提交的IP地址和端口保存下來,這樣其他人就可以找到該用戶。
6、上面說到Tracker伺服器只會返回公網的IP地址,現在來解釋一下內網用戶如何上傳數據,因為BT是一個主動連接的軟體(即使已經下載完了,也不也會主動連接他人)下麵是一個仿真流程:
1)內網用戶開始做Seed
2)伺服器收到請求,由於是第一個所以也沒有Peer(對端,只一個TCP連接的一方)返回
3)公網用戶提交請求,由於Seed是內網用戶所以也沒有Peer返回,等待下載,但伺服器會把它的IP放到列表中
4)內網經過設定的時間間隔後,再向伺服器放出請求,得到上面得公網IP
5)得到公網IP後,內網馬上進行連接
6)公網用戶建立連接,數據開始傳輸 (實際上現在是公網用戶做伺服器,內網用戶做客戶端)
7)其他內網用戶去上面公網用戶下載數據
7、BT客戶端得到這些其他用戶IP後,就可以直接連接到這些IP和端口下載資料了。BT客戶端會到所有的用戶去尋找自己要下載的東西。BT客戶端每找到一個用戶就建立一個Socket來下載,所以下載的人越多,速度就越快。
BT 客戶端下載一個檔並不是從一個伺服器下載,而是通過中心Tracker伺服器找到其他用戶,然後從不同用戶下載檔的不同部分,也就是實現分佈式下載,不過有中心伺服器(Tracker伺服器)協調的分佈式下載使系統更有效率,可能Tracker伺服器會成為瓶頸,但是由於BT客戶端的查詢內容簡單並且不是連續的查詢Tracker伺服器,這就相當於增加Tracker伺服器的負載能力。
五、Torrent檔(****info file)格式
Torrent檔格式使用了bencoding的數據表達方法,支持四種數據格式:字串、整數、列表、字典。一個Torrent檔就是一個經過編碼的bencoding字典。
Bencoding格式如下:
對於字串,首先是一個字串的長度,然後是冒號,後面跟著實際的字串,例如:4:spam,就是“spam”。
整數編碼如下,以 ‘i’開始,然後10進制的整數值,最後以’e’結尾。例如,i3e表示3,I-3e表示-3。整數沒有大小限制。I-0e是無效的。除了 i0e外,所有以0起始的整數都無效。I0e當然表示0。
列表編碼如下,以’l’開始,接下來是列表值的編碼(也採用bencoded編碼),最後以’e’結束。例如:l4:spam4:eggse 表示 [‘spam’,‘eggs’]。
字典編碼如下,以’d’開始,接下來是可選的keys和它對應的值,最戶以’e’結束。例如:d3:cow3:moo4:spam4:eggse,表示{‘cow’:’moo’,’spam’:’eggs’},而 d4:spaml1:al:bee 表示 {‘spam’:[‘a’,’b’]}。鍵值必須是字串,而且已經排序(並非是按照字母順序排序,而是根據原始的字串進行排序)。
1、Torrent檔基本格式
l info
包含檔資訊的一個字典。info有單檔和多檔兩種,詳細說明見下。
l announce
tracker伺服器地址。
l announce-list
可選,包含其他可用tracker伺服器地址的列表。
l creation date
可選,torrent檔創建時間,UNIX標準格式,表示自UTC1970年1月1日0時以來的秒數。
l comment
可選,torrent創建者寫的備註。
l created by
可選,創建torrent檔的程式名和版本。
除以上外,Torrent檔可能還包含encoding、nodes等內容,大概是由後續版本的BT協議規定的。nodes有可能跟DHT有關。
2、Info字典格式
1)Info字典有兩種格式,以下為兩種共有的部分:
l piece length
每塊數據的長度。
l pieces
字串格式,長度除以20即為總塊數,每20位元組又表示1塊數據的SHA1值。
l private
值為1或0的整數,可選。看不太懂什麼意思,似乎是說如該值為1,則只能從torrent檔中指定的tracker伺服器找別的peer,不設或為0則不限制。
2)只包含一個檔的Info字典:
l name
檔案名。
l length
檔長度。
l md5sum
可選,32位元組長的檔MD5值。
3)包含多個檔的Info字典:
l name
存放檔的目錄名。
l files
包含多個字典的列表,每個字典表示一個檔的資訊。
files列表中的每個字典包含的內容:
l length
檔長度。
l path
包含一個或多個字串的列表。0到-2個表示檔目錄,最後一個表示檔案名。例如["dir1", "dir2", "file.ext"]表示檔保存在dir1/dir2子目錄下,檔案名為file.ext。
六、BT客戶端請求格式
Trakcer 通過HTTP的GET命令的參數來接收資訊,而回應給對方(也就是下載者)的是經過bencoded 編碼的消息。注意,儘管當前的tracker的實現需要一個web伺服器,它實際上可以運行的更輕便一些,例如,作為apache的一個模組;而且現在還有使用UDP協議的Tracker伺服器。
發送給Tracker的GET請求,包含以下關鍵字:
Info_hash:
元檔中info部分的sha hash,20位元組長。這個字元創幾乎肯定需要被轉義(譯注:在URL中,有些字元不能出現,必須通過unicode進行編碼)
Peer_id:
下載者的id,一個20位元組長的字串。每個下載者在開始一次新的下載之前,需要隨機創建這個id。這個字串通常也需要被轉義。
IP:
一個可選的參數,給出了peer的ip地址(或者dns名稱?)。通常用在origin身上,如果它和tracker在同一個機器上。
Port:
peer所監聽的端口。下載者通常在在 6881 端口上監聽,如果該端口被佔用,那麼會一直嘗試到 6889,如果都被佔用,那麼就放棄監聽。
Uploaded:
已經上載的數據大小,十進位表示。
Downloaded:
已經下載的數據大小,十進位表示
Left:
該peer還有多少數據沒有下載完,十進位表示。注意,這個值不能根據檔長度和已下載數據大小計算出來,因為很可能是中斷點續傳,如果因為檢查檔完整性失敗而必須重新下載的時候,這也提供了一個機會。
Event:
一個可選的關鍵字,值是started、compted或者stopped之一(也可以為空,不做處理)。如果不出現該關鍵字,。在一次下載剛開始的時候,該值被設置為started,在下載完成之後,設置為completed。如果下載者停止了下載,那麼該值設置為 stopped。
Tracker的回應是用bencoded編碼的字典。如果tracker的回應中有一個關鍵字failure reason,那麼它對應的是一個字串,用來解釋查詢失敗的原因,其他關鍵字都不再需要了。否則,它必須有兩個關鍵字:Interval:下載者在兩次發送請求之間的時間間隔。Peers:一個字典的列表,每個字典包括以下關鍵字:Peer id,IP,Port,分別對應peer所選擇的id、IP地址或者dns名稱、端口號。
七、BitTorrent其他應用分佈式系統的相關技術
檔下載片斷選擇是為了提高系統的總效率,而阻塞演算法是為了提高個人用戶的公平性和效率,作為取自於用戶並用之於用戶的分佈式系統,整個系統的效率和個人用戶的公平性至關重要,BitTorrent的片斷下載策略保證了最大的下載效率和穩健的完整性,而阻塞演算法鼓勵個人用戶上傳。BitTorrent的阻塞演算法並不記錄歷史,也就是對用戶以前的上傳、下載行為沒有記錄,有些最先版本的BitTorrent已經能對帳戶的上傳、下載資訊做出統計,然後轉化為積分,但積分還沒有和用戶的下載優先順序綁定,而且積分也只是簡單的統計上傳流量,上傳的內容和上傳的目標用戶也沒有分析,簡單的積分策略並不能應對五花八門Spamming技術,積分演算法應該是上傳和下載流量的比數,且積分增加速度隨著上傳的不同目標用戶和不同上傳內容數量的增加而增加。
1、下載檔片斷的選擇(Piece Selection)
選擇一個好的順序來下載片斷,對提高性能非常重要。一個差的片斷選擇演算法可能導致所有的片斷都處於下載中,或者另一種情況,沒有任何片斷被上載給其他 peers。
1)嚴格的優先順序(Strict Priority)
片斷選擇的第一個策略是:一旦請求了某個片斷的子片斷,那麼該片斷剩下的子片斷優先被請求。這樣,可以盡可能快的獲得一個完整的片斷。
2)最少的優先(Rarest First)
對一個下載者來說,在選擇下一個被下載的片斷時,通常選擇的是它的peers們所擁有的最少的那個片斷,也就是所謂的“最少優先”。這種技術,確保了每個下載者都擁有它的peers們最希望得到的那些片斷,從而一旦有需要,上載就可以開始。這也確保了那些越普通的片斷越放在最後下載,從而減少了這樣一種可能性,即某個peer當前正提供上載,而隨後卻沒有任何的被別人感興趣的片斷了。也就說說,每個peer都優先選擇整個系統中最少的那些片斷去下載,而那些在系統中相對較多的片斷,放在後面下載,這樣,整個系統就趨向於一種更優的狀態。如果不用這種演算法,大家都去下載最多的那些片斷,那麼這些片斷就會在系統中分布的越來越多,而那些在系統中相對較少的片斷仍然很少,最後,某些 peer 就不再擁有其他 peer 感興趣的片斷了,那麼系統的參與者越來越少,整個系統的性能就下降。
在BT系統中,充分考慮了經濟學的概念,處處從整個系統的性能出發,參與者越多,系統越優化。
資訊理論顯示除非種子上傳了檔的所有片斷,否則沒有任何下載者可以完成所有檔的下載。如果在一個部署中,只有一個種子,而且種子的上載能力比它的大多數下載者都要差,那麼,不同的下載者從種子那裏下載不同的片斷,性能就會變得比較好,因為,重複的下載浪費了種子獲取更多資訊的機會。“最少優先”使得下載者只從種子處下載新的片斷(也就是整個系統中其他peer都沒有的片斷),因為,下載者能夠看到其他peers那裏已經有了種子已經上傳的片斷。
在某些部署中,原始的種子由於某些原因最終關閉,只好由剩下的這些下載者們來負責上傳。這樣顯然會帶來一個風險:某些片斷任何一個下載者都不擁有。“最少優先”也很好的處理了這種情況。通過儘快的複製最少的片斷,減少了這種由於當前的peers停止上載後帶來的風險。
3)隨機的第一個片斷(Random First Piece)
“ 最少優先”的一個例外是在下載剛開始的時候。此時,下載者沒有任何片斷可供上傳,所以,需要儘快的獲取一個完整的片斷。而最少的片斷,通常只有某一個peer擁有,所以,它可能比多個peers都擁有的那些片斷下載的要慢。因此,第一個片斷是隨機選擇的,直到第一個片斷下載完成,才切換到“最少優先”的策略。
4)最後階段模式(Endgame Mode)
有時候,從一個速率很慢的peer那裏請求一個片斷。在下載的中間階段,這不是什麼問題,但是卻可能潛在的延遲下載的完成。為了防止這種情況,在最後階段,peer向它的所有的peers們都發送某片斷的子片斷的請求,一旦某些子片斷到了,那麼就會向其他peer發送 cancel 消息,取消對這些子片斷的請求,以避免帶寬的浪費。實際上,用這種方法並沒有浪費多少帶寬,而檔的結束部分也一直下載的非常快。
2、阻塞演算法(Choking Algorithms)
BT 並不集中分配資源。每個peer自己有責任來盡可能的提高它的下載速率。Peers從它可以連接的peers處下載檔,並根據對方提供的下載速率給予同等的上傳回報(你敬我一尺,我敬你一丈)。對於合作者,提供上傳服務,對於不合作的,就阻塞對方。所以說,阻塞是一種臨時的拒絕上傳策略,雖然上傳停止了,但是下載仍然繼續。在阻塞停止的時候,連接並不需要重新建立。
阻塞演算法並不屬於BT對等協議(指peers 之間交互的協議)的技術部分,但是對提高性能是必要的。一個好的阻塞演算法應該利用所有可用的資源,為所有下載者提供一致可靠的下載速率,並適當懲罰那些只下載而不上傳的peers。
1)帕累托效率(Pareto Efficiency)
在經濟學裏,帕累托效率可以這樣來定義:一種狀態(資源配置、社會制度等)被稱為帕累托最優狀態,如果不存在另外一種可選擇的狀態使得沒有任何人的處境變差而至少有一個人的處境變得更好。這意味著,當滿足給定的約束條件,一種資源配置的狀態已經使沒有人能夠按照自己的偏好在不損害別人的條件下變得更好,那麼就是達到了帕累托最優狀態。可以通俗地理解為,如果處於這種狀態:除非損人,就不能利己,這就達到了帕累托最優。在電腦領域,尋求帕累托有效是一種本地優化演算法BitTorrent的阻塞演算法,用一種針鋒相對的方式來試圖達到帕累托最優。(原文不太好翻譯,我簡化了)。Peers對那些向他提供上傳服務的peers給予同樣的回報,目的是希望在任何時候都有若干個連接正在進行著雙向傳輸。
2)BitTorrent的阻塞演算法
從技術層面上說,BT的每個peer一直與固定數量的其他 peers 保持疏通(通常是4個),所以問題就變成了哪些peers應該保持疏通?這種方法使得TCP的擁塞控制性能能夠可靠的飽和上傳容量。(也就是說,儘量讓整個系統的上傳能力達到最大)。
嚴格的根據當前的下載速率來決定哪些peers應該保持疏通。令人驚訝的是,計算當前下載速率是個大難題。當前的實現實質上是一個每隔20秒的輪詢。而原來的演算法是對一個長時間的網路傳輸進行總計,但這種方法很差勁,因為由於資源可用或者不可用,帶寬會變化的很快。
為了避免因為頻繁的阻塞和疏通 peers造成的資源浪費,BT每隔10秒計算一次哪個peer需要被阻塞,然後將這種狀態保持到下一個10秒。10秒已經足夠使得TCP來調整它的傳輸性能到最大。
3)開放檢測(Optimistic Unchoking)
如果只是簡單的為提供最好的下載速率的peers們提供上載,那麼就沒有辦法來發現那些空閒的連接是否比當前正使用的連接更好。為了解決這個問題,在任何時候,每個peer都擁有一個稱為“optimistic unchoking”的連接,這個連接總是保持疏通狀態,而不管它的下載速率是怎樣。每隔30秒,重新計算一次哪個連接應該是“optimistic unchoking”。30秒足以讓上傳能力達到最大,下載能力也相應的達到最大。這種和針鋒相對類似的思想非常的偉大。“optimistic unchoking”非常和諧的與“囚徒困境”合作。
4)反對歧視(Anti-snubbing)
某些情況下,一個peer可能被它所有的peers都阻塞了,這種情況下,它將會保持較低的下載速率直到通過 “optimistic unchoking”找到更好peers。為了減輕這種問題,如果一段時間過後,從某個peer那裏一個片斷也沒有得到,那麼這個peer認為自己被對方 “怠慢”了,於是不再為對方提供上傳,除非對方是“optimistic unchoking”。這種情況頻繁發生,會導致多於一個的併發的“optimistic unchoking”。
5)僅僅上傳(Upload Only)
一旦某個peer完成了下載,它不能再通過下載速率(因為下載速率已經為0了)來決定為哪些 peers 提供上載了。目前採用的解決辦法是,優先選擇那些從它這裏得到更好的上載速率的peers。這樣的理由是可以盡可能的利用上載帶寬。