P2PSoftWare 板


LINE

啊咧... 整篇文章看起来好像很有道理,但实际上... 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)
1F:推 lordmi:Hmmm, DK Goooodjob... :Q 01/11 10:55
2F:推 netsc:Orz... 01/11 11:14
3F:推 KarasuTW:小水管要多考虑一项大量连线时额外浪费的频宽吧 XD 01/11 12:22
4F:推 Yanten:改成由DHT以後 会不会判定对方是优秀client上的工作由自己 01/11 16:21
5F:→ Yanten:不然为什麽缩小连线数目 提高每个用户上传的频宽 反而速度 01/11 16:22
6F:→ Yanten:会明显的增加呢??????????? 01/11 16:23
7F:推 lwecloud:推 「我要某个 piece」 「干,我不给你」 XD 01/12 00:05
8F:推 j1233212020:受教了,原来这麽复杂 01/13 12:10
9F:推 apic:嗯,有意思! 01/15 01:31







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP