Re: [BT]UTORRENT 連接用戶好慢啊

看板P2PSoftWare作者 (System hacked)時間18年前 (2007/01/11 08:53), 編輯推噓7(702)
留言9則, 7人參與, 最新討論串4/5 (看更多)
啊咧... 整篇文章看起來好像很有道理,但實際上... bittorrent 的通訊協定在這裡,第一個連結是官方的說明,但是寫的太亂而且 太簡單,第二個連結是比較容易懂的: http://www.bittorrent.org/protocol.html http://wiki.theory.org/BitTorrentSpecification 我先說明一下,這篇文章充滿各類技術文字,可能對您的身體造成不適,如果 您對於「bittorrent 為甚麼會這麼快」沒興趣的話,請迅速按下 End 鍵以減 減少心血管疾病發作機率。 ※ 引述《whotear (~微風香水~)》之銘言: : 我先來說個基本的原理,各類bt軟體為了讓檔案更快完成, : 讓檔案更完整,會優先傳給上傳比較大的人、或那個人擁有的 : 部分大部分人都沒有。 我要先解釋一些 bittorrent protocol 的內容 (寫完後發現其實靠盃多...), 然後說明會這樣說的人,其實不了解 bittorrent 的運作。 ======== 解釋 bittorrent protocol 的一部分 ======== bittorrent 通訊協定裡定義了 peer 與 peer 之間的連線怎麼處理。 雙方連線後,主動連線的這方要先送 torrent 的資訊讓對方確認,對方如果發 現這個 torrent 在我的系統上找不到,那麼可以斷線。 連線建立後,兩邊是對稱的:你可以跟我要資料,我也可以跟你要資料,其實 連通訊的指令都一樣,並不會因為是我連到你,主動權就在你那邊或是在我這 邊。 每條連線都有兩個方向、兩個狀態 (choking 與 interested),所以共四個變 數要存。 choking 就是指「噎住」,在 bittorrent protocol 裡,如果我送給你 "i'm choking",就是請你不要再送東西過來了,目前這邊噎住了。反過來,如果對 方送 "i'm choking" 給你,代表請你不要再東西過去,直到對方說 "i'm unchoking now"。 interested 指的是「興趣」,如果我告訴對方 "i'm interested",表示我對 對方的某個 piece 有興趣,反過來如果對方丟 "i'm interested" 給我,表示 對方對我的某個 piece 有興趣。 連線建立完後雙方的預設值都是 "choking" 與 "uninterested",所以一開始 什麼都不能做。 接下來等到雙方都在 unchoking 時會有控制資訊的傳輸,連線建立後一開始會 有 "bitfield" 的傳輸,這個傳輸資訊會告訴對方我手上目前有哪些 piece 的 資料。 之後然後會有 "have" 的傳輸,這是告訴對方「我剛收完某個 block」,如果 對方有興趣的話,可以送 "interested" 過來,這樣我就會知道狀態修改成 "peer-interested"。 當雙方都在 unchoking 且有一方在 interested (對於對方的某個 piece 有興 趣),就會有 "request"/"piece"/"cancel" 的動作發生,這時候會有一方送 "request" 要求某個 piece,而另外一方就會用 "piece" 指令帶著該分 piece 的資料送回去。 ======== 這部份暫時解釋完畢 ======== 你可以看到整個架構相當複雜,並不是一個連線過去說「我要某個 piece」, 然後另外一邊說「幹,我不給你」或是「喏,這是資料」就結束了。會設計成 這樣是為了解決很多問題,包括解決 TCP 的缺點,以及 firewall/NAT 所產生 的麻煩。 在這篇我不打算再細寫下去,以後有機會再說。 回到原來主題,我再引一次: ※ 引述《whotear (~微風香水~)》之銘言: : 我先來說個基本的原理,各類bt軟體為了讓檔案更快完成, : 讓檔案更完整,會優先傳給上傳比較大的人、或那個人擁有的 : 部分大部分人都沒有。 事實上「為甚麼 bittorrent 可以這麼快」這個問題非常的複雜,複雜到很多 人很討厭 bitcomet 但是根本不知道真正的原因,以及所產生的問題。 所以... ======== 第二部份解釋開始 ======== bittorrent 一開始是沒有 DHT 與 PEX。 其中 DHT 是不需要透過 tracker server 就可以知道某個 torrent 有哪些人 正在抓 (或是做種),而 PEX 則可以再 peer 之間直接互相交換 peer list 的 資訊。 換句話說,以前你要知道某個 torrent 有哪些人正在抓,一定要透過 tracker 告訴你,於是 tracker 就變得靠盃重要。 在 bittorrent tracker protocol 裡面,client 連上 tracker 的時候會送出 downloaded (已經下載的量) 與 uploaded (已經上傳的量) 這兩個數據,而 tracker 可以用一個除法得到 ratio 得知這個 client 到底好不好。 於是 tracker 可以將比較優良的 client 出現的機會提高。也就是說,當其他 的 client 來要 peerlist 的時候,比較優良的 client 被傳回去的機會也比 較高。 於是比較優良的 client 連線數就會比別人多,傳輸的機會當然就變得比別人 大,速度當然就會比較快。 ======== 第二部份暫時解釋完畢 ======== 再引一次: ※ 引述《whotear (~微風香水~)》之銘言: : 我先來說個基本的原理,各類bt軟體為了讓檔案更快完成, : 讓檔案更完整,會優先傳給上傳比較大的人、或那個人擁有的 : 部分大部分人都沒有。 以前大家都是透過 tracker,所以因為 tracker 的影響,ratio 比較漂亮的人 得到資造的機率會比其他人高。 但現在是 DHT 與 PXE 當道的時代,tracker 的影響力變小了,所以你所取得 的清單中無法得知到底誰的上傳速度比較快,誰的比較慢。 這就是我說會說「優先傳給上傳比較大的人」不了解 bittorrent 運作。 而「優先傳給那個人擁有的部分大部分人都沒有」這句話... 該怎麼說呢... 在文件裡所建議演算法是: Clients may choose to download pieces in random order. A better strategy is to download pieces in rarest first order. The client can determine this by keeping the initial bitfield from each peer, and updating it with every 'have message. Then, the client can download the pieces that appear least frequently in these peer bitfields. 這個方法很簡短的說就是:你可以隨機下載,但比較好的方法是儘量下載最少 人擁有的部份。而不是優先把最少人擁有的 block 上傳。 事實上「優先把最少人擁有的 block 上傳」這個部份反而在 super-seeding 裡才有提到。 : 不曉得有沒有人仔細看過,尤其是自己上傳比較大的人,觀察 : 使用者名單裡面,假設有5個人傳資料給你、a是上傳給你速 : 度最快的人,如果你也有資料可以傳給他,你的軟體也會慢慢 : 調整傳給他的速度,相對於其他人優先傳更快的速度給他,你 : 也會發現,當那個傳最快給你的人突然只傳很慢的速度給你, : 你的軟體過一下也會降低對他的上傳速度,他如果不傳給你了 : ,你也會停止傳給他。 雖然上傳的策略中有提到: It should reciprocate to peers who let it download. 但為了讓新加入的大水管能很快的幫助所有下載的人,choking & unchoking 要考慮的事情非常多,再加上祖國偉大的 BitComet 惡搞,你所看到的現象跟 當初所希望的現象完全不一樣... (因為 BitComet 佔了目前華人大多數的族群,而你所下載的應該也都是) 在 bittorrent 設計中,除了對方傳給你愈多,你也會調高他的優先權外,另 外還有所謂的 optimistic unchoking 的設計提高新連線的優先權。 沒錯,在 unchoking 時,新連線的優先權比舊的高。於是偉大的 bitcomet 惡 搞這個部份,他會不斷的重連裝作新的連線... 這個部份已經有些發展者在思 考要怎麼樣找出一般性的反制方法比較好。 : 在仔細看看 utorrnet 裡面的詳細設定值,如果我記得沒有錯 : 的話,說錯希望有人可以糾正我,在進階裡面 net.wsaevents : 設定值那個數值,如果設定是6,那代表如果六分鐘內,你連 : 接到的使用者,都沒有傳給你任何資料的話,由使用者名單移 : 除,然後軟體會有一定的時間,持續更新名單。 不對,你所說得東西是 peer.disconnect_inactive_interval。 net.wsaevents 並沒有任何 utorrent 官方的解釋,僅能就字面上的意思從 MSDN 查到 wsaevent 是跟 Winsock 有關的東西。 utorrent 官方只說「如果你有防火牆的問題,將這個數字調小試看看」,但連 「防火牆的問題」是哪種都沒講,在 utorrent 的論壇裡有人問過,但沒有人 知道這是什麼。 : 這代表什麼?! : 連接數大不能代表速度快,要依照自己的上傳能力,適當的設 : 定合適的上傳連接數,並不是任務越多越好,這樣只會降低對 : 每個任務分配到的上傳,如果你對每個人都只能很小的上傳, : 那別人也會很小的傳給你,甚至因為你上傳速度真的太小,傳 : 給他的人都傳的比你快,軟體內都有限制最多只能上傳幾個人 : ,如果他限制傳給5個人,你是第六順位或第七順位,那你就 : 連他回傳給你的機會都沒有了,因為你上傳的速度對他完成檔 : 案影響太小了。 就 bittorrent 協定的設計,連接數愈大速度會愈快,而且對於整體下載會愈 有效率,跟你說的相反。 寫好久,肚子餓,該吃早餐了... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.54.119 ※ 編輯: DarkKiller 來自: 140.113.54.119 (01/11 08:55)

01/11 10:55, , 1F
Hmmm, DK Goooodjob... :Q
01/11 10:55, 1F

01/11 11:14, , 2F
Orz...
01/11 11:14, 2F

01/11 12:22, , 3F
小水管要多考慮一項大量連線時額外浪費的頻寬吧 XD
01/11 12:22, 3F

01/11 16:21, , 4F
改成由DHT以後 會不會判定對方是優秀client上的工作由自己
01/11 16:21, 4F

01/11 16:22, , 5F
不然為什麼縮小連線數目 提高每個用戶上傳的頻寬 反而速度
01/11 16:22, 5F

01/11 16:23, , 6F
會明顯的增加呢???????????
01/11 16:23, 6F

01/12 00:05, , 7F
推 「我要某個 piece」 「幹,我不給你」 XD
01/12 00:05, 7F

01/13 12:10, , 8F
受教了,原來這麼複雜
01/13 12:10, 8F

01/15 01:31, , 9F
嗯,有意思!
01/15 01:31, 9F
文章代碼(AID): #15fOg3VW (P2PSoftWare)
文章代碼(AID): #15fOg3VW (P2PSoftWare)