关于实现BT的一个想法
大家知道BT是使用TCP来进行文件传输的,这样做的目的是因为TCP是可靠传输协议,在实现时不用考虑丢包和乱序的问题,使编程变的简单.如果采用UDP的话,尽管UDP传输不可靠,但可以实现穿透防火墙以及内网和内网之间通讯的功能,这样供下载的"点"增多,如果UDP传输不可靠的问题解决的好的话,那传文件的速度肯定要比TCP快.
请大家评论一下我说的对不对,以及BT用UDP实现的可行性. 谢谢.
问题点数:100、回复次数:22Top
1 楼liushaoyi0704(【化外之民】)回复于 2006-06-01 11:00:00 得分 0
抢沙发Top
2 楼liushaoyi0704(【化外之民】)回复于 2006-06-01 11:02:29 得分 10
UDP实现的是无连接通讯,本来就是不可靠的,你还能怎么解决,能解决的话那就不叫UDP了.Top
3 楼fengge8ylf(秀视工作室,承接P2P项目)回复于 2006-06-01 11:10:50 得分 0
liushaoyi0704 当然可以解决了 其实对于物理层的传输比如网线根本不区分传输的是TCP还是UDP 也就是说不论是TCP还是UDP在物理层传输都会丢包和乱序的 只不过TCP在传输层(可能是这一层)时解决了丢包和乱序的问题Top
4 楼fengge8ylf(秀视工作室,承接P2P项目)回复于 2006-06-01 11:31:41 得分 0
CSDN人气越来越差了 发个帖子半天没人回答 高手都干吗去了Top
5 楼liushaoyi0704(【化外之民】)回复于 2006-06-01 11:42:58 得分 10
我认为你要费时间去解决的话必然要降低速度,也就失去了UDP的优越性,那就不叫UDP了,那还不如用TCP.Top
6 楼hlidea()回复于 2006-06-01 11:44:25 得分 10
Bitcomet早已经实现了UDP方式的连接了(估计很多客户端都实现了),没必要所有的peers全部用UDP连接,只需要内网用户之间用UDP方式就可以了,全部用UDP的话,还是得自己实现差错控制与流量控制,就我所知,现在还没有自己实现的可靠UDP超过了TCP的传输效率的...Top
7 楼pripor(心欲若止水,落花起涟漪)回复于 2006-06-01 12:35:19 得分 10
呵呵
要是人人都自己实现可靠UDP传输,那还设计TCP干吗
设计个内网UDP就行了
比特精灵就这么实现的Top
8 楼fengge8ylf(秀视工作室,承接P2P项目)回复于 2006-06-01 12:45:50 得分 0
我承认UDP的传输效率比不过TCP(因为不可能把UDP改造的象TCP那么强大) 但我是想利用UDP的两个优势 可以穿透防火墙以及内网之间的通讯 这两个问题目前TCP还是做不到的吧Top
9 楼fengge8ylf(秀视工作室,承接P2P项目)回复于 2006-06-01 12:47:13 得分 0
我使用UDP的目的不是因为UDP比TCP 快 而是为了穿透防火墙以及内网之间的通讯 这样一来可供下载的"点"就多了 速度自然就快了Top
10 楼hlidea()回复于 2006-06-01 12:56:13 得分 10
这些已经实现了...
肯定是可以的,我知道Bitcomet就可以,按pripor的说法,比特精灵也可以。。。不过你可以自己研究一下怎么实现Top
11 楼fengge8ylf(秀视工作室,承接P2P项目)回复于 2006-06-01 13:04:13 得分 0
好 谢谢各位了 我想采用混合模式 如果能直接连接的就用TCP 如果不能的就用UDP 不过发现对BT的好多细节了解的不够 如果大家谁熟悉BT可以联系我 或者提供有关BT的资料也可以 先谢谢了 谢谢了Top
12 楼hlidea()回复于 2006-06-01 13:11:04 得分 10
我觉得现在做BT,应该研究怎么把它这种算法应用到其他的方面(即不仅仅是文件传输,还可以用来做别的,至于具体做什么,就要靠大家的聪明才智了);另一个方向是DHT的算法改进,现在BT和emule一样用的是Kademlia,怎样能做的更好?这个也是值得考虑的。单纯的穿透防火墙以及内网之间的通讯已经比较成熟了(至少别人已经实现了)。Top
13 楼hlidea()回复于 2006-06-01 13:29:05 得分 10
BT的客户端我已经完成了大概二分之一了,不过最近快要实习了,就停了下来,好在现在实习单位已经签了,有一个月的时间可以供我挥霍,应该可以写个雏形出来,到时候再慢慢改。。。
BT的资料可以参考:
http://www.bittorrent.org/developer.html
http://wiki.theory.org/BitTorrentSpecification
http://www.newsmth.net/pc/index.php?id=wolfenstein
还可以找“Bittorrent性能卓越的原因”小马哥翻译的
有关KAD的论文Kademlia: A Peer-to-peer Information System Based on the XOR Metric
以及P2P内网通讯的论文Peer-to-Peer Communication Across Network Address Translators
用google一搜就能搜到
Top
14 楼fengge8ylf(秀视工作室,承接P2P项目)回复于 2006-06-01 13:40:55 得分 0
hlidea 多谢了 我现在做BT不是为了超越BT 呵呵 难度比较大 而是为了公司的需要 需要写一个类似BT的程序
可以和你交流一下吗 我的QQ:24582946Top
15 楼hlidea()回复于 2006-06-01 16:01:47 得分 10
你给我发邮件吧,我的邮箱是hlidea.gm@gmail.comTop
16 楼qiaodong()回复于 2006-06-05 12:23:58 得分 10
hlidea,你的BT是用的是第三方内核么~用的是哪个内核?Top
17 楼hlidea()回复于 2006-06-05 23:43:46 得分 10
我没用第三方库,自己从头写起,不过参考了BNBT的解bencode编码的部分,以及其中的SHA1算法,BNBT是一个bt的tracker服务器,你可以在google上面找到它的相关信息,至于BT库,可以参考这几个:
1.FTKernelAPI http://www.hwysoft.com/chs/source.htm 国人写的,作者封装成dll了,不公开源代码,我是对BT的原理感兴趣,所以这个没多大用(商用要钱)
2.libtorrent 开源
3.libbt 开源
4.还有可以参考的c++代码有ctorrent,Shareaza,这两个都是成品,不是库,ctorrent的作者还是个中国人哦,这里还有一个人对其源码的分析http://www.starone.cn/blog/article.asp?id=11,至于Shareaza,在国外很火,但是其是个综合的下载器,支持很多P2P协议,我看过它的代码,太复杂了...
Top
18 楼qiaodong()回复于 2006-06-06 21:05:29 得分 0
我也写过一个,用的是第三方类,有时间交流一下
Top
19 楼CUG122032(烫烫烫烫烫烫?烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫?烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫)回复于 2006-06-07 12:12:06 得分 0
你自己解决,能比人家解决的好?Top
20 楼eqxu(天使联盟)回复于 2006-06-07 12:52:30 得分 0
支持hlidea() ( ) 信誉:94Top
21 楼X_worm(蒙山大盗)回复于 2006-06-07 18:55:10 得分 0
先标记一下,回头再看Top
22 楼citywanderer2005(流浪狗)回复于 2006-11-16 13:11:09 得分 0
mark以下Top




