加菲猫窝

房价日涨,生活艰难
随笔 - 42, 评论 - 504, 引用 - 61

导航

关于

标签

每月存档

最新留言

广告

 

     发现很多情况下,msn传输文件比qq要慢,倒不是说msn没有快的时候,但是大部分的时候是真的比QQ慢,连我这种神经比较大条的人都注意到了,google了一下,早就有人做了解答,基本上就是说msn传输文件是使用TCP,而QQ使用UDP,剩下的事情就是论证TCP传输文件没有UDP快。大概的就是下面的几个观点:

1. TCP是可靠的,需要验证数据是否到达和是否正确,而UDP是不可靠的,少做了很多事情,所以MSN的文件传输比QQ慢。

我看了当时就想笑,UDP传输不可靠,但是应用层肯定会写代码作些和TCP的可靠传输差不多的事情。也用了QQ不少时日了,从来也没有发现传输文件有问题的,用UDP作协议也很久了,不做应用层验证重传的代码,我还真不敢写。这个理由,失败。

2. TCP建立连接需要3次握手,而UDP不需要,所以TCP慢。

3次握手这个事实倒是千真万确,还好我没有那么容易被忽悠,两个人谈话之前要握握手的确要稍微费上几秒钟,但是这个关谈话的语速啥事情?假如网络的ping值达到300ms,各位看官喜欢网络游戏的,估计都不会玩了,否则垂死的boss会高兴的发现你忽然变成了木偶可以随便殴打不还手,最后你只能骂骂电信网通然后复活几分钟后又是一条好汉。但是对于TCP,这样的ping值,3次握手一般都不需要1秒钟,把这个定为文件慢慢传的罪魁祸首,似乎太不靠谱了,这个理由还是失败。

3. TCP一旦建立链接,路由就确定了,而UDP是不确定的路由方式,谁速度快走谁的线路。

这样说就说明没有作者好好理解TCP/IP协议了,TCP的链路只是一个逻辑的,又没有建立物理链路,下面跑的还是IP包,这个包走这条路,那个包完全可能走另外的路,这点TCP和UDP没有两样。理由继续失败。

4. msn服务器在国外?

有些道理,但是我听一个美国的朋友说他也喜欢用QQ传文件的。

 

     那到底是怎么回事呢?是因为微软没有做好?(题外话,个人的确觉得MSN相比QQ的飞速进步而显得动作迟缓)QQ的Fans开始摩拳擦掌,一些不那么喜欢M$的估计就要开始丢板砖了。不管立场如何,事实还是要探寻一下,本着不求甚解,薄积薄发,浅入浅出的精神,我认为有几个可能原因:

1. 两个传文件客户端都在NAT后面的时候 (你不知道NAT啥意思?比如多个人通过路由器共享一个猫上网,那么你们一般就是在NAT后面了),从技术实现上讲,TCP在这种情况下穿越NAT比UDP麻烦得多。UDP只要开始几个穿越NAT的协商包需要服务器转一下,后面的文件数据可以两个客户端之间直接传输搞定,但是一般TCP就只能全程由服务器中转了,你说哪一个会比较快? 为什么TCP需要服务器中转?先看看NAT吧,听说有高人可以用raw sock搞定,反正我没有中间服务器搞不定。

 

2. 但是即使上面的条件不成立,msn还是一般比QQ慢的。问题还是在出在前面提到的验证数据可靠性上面,TCP是可靠的,UDP是不可靠的,但是用UDP做传输文件这档子事情,肯定要在应用层写一个验证的协议,否则传过来的文件缺胳膊少腿,会被用户骂死的。说是协议,其实也不难,打个比方吧:

    long long ago,贾宝玉在北京,林黛玉在长沙,怎么互诉衷肠呢,派家丁送信!路途遥远,怎么知道信收到没有?打电话问?那时候发明了这个就不用送信了,只能看家丁是否带了回信来了。假如发现一个家丁一个月还没有回,那就多半迷路堵车遭遇山贼或者开小差到扬州花差快活去了,再派一个人送吧! TCP就是这么做的,UDP在应用层协议一般也需要这么做,但是实现上有时候往往有区别。

    北京到长沙之间的路,并不是只有一个人跑的,常常会发生拥堵,假如发现家丁好久没有回了,TCP版的贾宝玉再派人送信是要的,但是他会比较识大体,他会少写信,降低发送速度,原来一天一封,现在可能一周一封了。他想,大家假如都这样,路就不会那么拥挤了。这做法很有道理,假如塞车了大家都想见缝插针,只能越来越塞,最后大家都动不了,还不如彼此容让慢慢排队。而UDP版本的贾宝玉假如也这么集体主义,那么他就叫做TCP友好流,就假如它只管自己拼命挤,就是非TCP友好的。

    所有的TCP协议实现假如发现拥塞,都会马上降低自己的发送速度。假如基于UDP的协议不这么做的话,原来拥塞的IP包加上重发的包,网路只会越来越拥塞,最后所有的坚持集体主义的TCP流都会做出牺牲,把带宽让给一些非TCP友好的UDP流。所以除非网络状况非常好,否则TCP是拼不过非TCP友好的协议的。

    我怀疑(仅仅是怀疑而已,我也没有条件和时间验证),QQ的文件传输机制是不那么TCP友好的,它抢带宽更加"我能",这样虽然对于整个网络负荷不是什么好事,但是对于单个用户,就见仁见智了,就好像大家看待多线程下载或者p2p一样。

打印 | 张贴于 2007-07-21 11:59:00 | Tag:多维技术

留言反馈

#回复: 从msn和qq文件传输速度说开去 编辑
qq的文件传输是点对点连接不通过服务器,而msn传文件要通过服务器中转,所以,显然了。。。
2007-09-23 13:01:00 | [匿名用户:sjtu iser]
#回复: 从msn和qq文件传输速度说开去 编辑
2007-08-31 09:41:00 | [匿名用户:dfhdfh]
#回复: 从msn和qq文件传输速度说开去 编辑
实际上tcp在大部分情况下也是可以nat穿透的,而且方法有很多种
国外有使用nat传统的穿透之外,还有的使用了修改路由信息等来实现,
可惜这个文章我现在找不到了
好可惜
2007-08-15 15:20:00 | [匿名用户:fangsang]
#回复: 从msn和qq文件传输速度说开去 编辑
受教了。。。
很久没有看到这么有意义的文章了
2007-08-08 14:40:00 | [匿名用户:lubosun]
#回复: 从msn和qq文件传输速度说开去 编辑
受教了。。。
2007-08-08 14:39:00 | [匿名用户:lubosun]
#回复: 从msn和qq文件传输速度说开去 编辑
俺比较倾向冷静一下的意见。
2007-07-27 22:06:00 | [匿名用户:Freeman]
#回复: 从msn和qq文件传输速度说开去 编辑
同意“冷静一下”的观点:)受教了
2007-07-27 12:56:00 | [匿名用户:疯狂的投石]
#回复: 从msn和qq文件传输速度说开去 编辑
我觉得作者分析的是有道理的 大家可以用下面这个方法验证:
首先保证两台机器在同一个局域网内,最好物理距离也要足够近,一个宿舍里面的两台机器最好了;
然后开始传送文件,文件大小只考虑100M以上的,能够使现场时间传送便于观察的;
传送开始后发现传送的速度一般都回稳定到1-10M左右,不骗你哦,我们寝室试验过,但是在传送的同时会发现整个局域网出现掉线的情况,不明什么是掉线?在同一个局域网里面有人开bt网络电视,明白了吧,两者效果差不多,所以我认为qq的传输机制有主动抢占带宽的嫌疑
2007-07-26 17:07:00 | [匿名用户:六翼拉菲尔]
#回复: 从msn和qq文件传输速度说开去 编辑
回iceboundrock :
不是TCP/IP,而是TCP拥塞避免机制和慢启动机制.我可没说是Cisco发明了TCP/IP
2007-07-24 13:55:00 | [匿名用户:dawnh]
#回复: 从msn和qq文件传输速度说开去 编辑
我觉得要了解一下MSN的传输协议,是否用文本进行了封包,如采用SOAP或类似的进行传输的话,速度将会慢的。
而QQ是直接二进制传输。这样效率自然高。


那么,我们争论的问题就不是UDP,TCP的速度,因为QQ也有TCP登录方式,也可以通过服务器进行中传输方式。

我在猜测,MSN采用的编码方式是将文件的内容再封装成一个个符合SOAP或类似的XML格式包进行传输。这样增加了许多无谓的内容。
而QQ的封包没有这么大,因此可以在单位时间传递更多的内容。
2007-07-24 09:38:00 | [匿名用户:冷静一下]
#回复: 从msn和qq文件传输速度说开去 编辑
MSN传文件用什么端口?
2007-07-24 00:13:00 | [匿名用户:湘北GG]
#回复: 从msn和qq文件传输速度说开去 编辑
另外就是我个人还觉得UDP速度上比不上TCP,自己定义协议来保证发送数据的完整型,在怎么也比不上TCP的.所以觉得并不是采用UDP才快的原因.
2007-07-23 23:53:00 | [匿名用户:黑糊糊]
#回复: 从msn和qq文件传输速度说开去 编辑
按照楼主的理论,穿透NAT只能是采用UDP了哦,一些P2P的软件,比如EM,我怎么发现他是TCP的呢,如果两端都在NAT后面数据全部都靠服务器中转那不是完蛋了.我觉得不是这么回事情,肯定是MSN没写好.
2007-07-23 23:24:00 | [匿名用户:黑糊糊]
#回复: 从msn和qq文件传输速度说开去 编辑
不解楼上的楼上,msn 是使用TCP端口阿
2007-07-23 17:36:00 | [匿名用户:kilnt]
#回复: 从msn和qq文件传输速度说开去 编辑
谢谢。
2007-07-23 17:32:00 | [匿名用户:M]
#回复: 从msn和qq文件传输速度说开去 编辑
纯属胡说八道,MSN Messenger Service 1.0 Protocol 网上有。
这样的东西发在首页太不负责了。
找几个好友传个文件看看端口都不做,就乱说。
大多数防火墙都不支持Simultaneous Open。不然也不会有UDT了。
2007-07-23 16:15:00 | [匿名用户:kilnt]
#回复: 从msn和qq文件传输速度说开去 编辑
楼上,关于 QQ/MSN 的问题, 其实不过是一个引子而已,这篇文章的本意也不是为了为什么辩护,我只不过是就事论事,

msn qq 哪个好用,就要看用户的喜好和需求了。我是两个都开,或者都不开,呵呵
2007-07-23 12:30:00 | [匿名用户:加菲猫]
#回复: 从msn和qq文件传输速度说开去 编辑
实际上,无论是UDP还是TCP,或者P2P,在同一个INTERNET环境下,最重要的是保证INTERNET带宽资源不被滥用,同时使得用户有更好的使用体验.不要说因为你用TCP,就有理由传的慢,呵呵.
2007-07-23 12:14:00 | [匿名用户:SIMON]
#回复: 从msn和qq文件传输速度说开去 编辑
精彩!好久没在JOYCODE看到那么好玩的文章了!
2007-07-23 11:18:00 | [匿名用户:Rome]
#回复: 从msn和qq文件传输速度说开去 编辑
另外,TCP在高带宽延时积网络(比如洲际主干网络、卫星网络)下表现糟糕,导致很多研究人员开始研究新的协议。UDT就是其中一个代表。这个可以参考另外一个RFC draft: draft-gg-udt-01.txt
2007-07-23 09:54:00 | [匿名用户:iceboundrock]
#回复: 从msn和qq文件传输速度说开去 编辑
我觉得传文件Gtalk就快过了QQ,只是在国内不稳定,时快时慢,有时甚至会中断连接,这到不足以让我放弃Gtalk而用QQ。
2007-07-23 09:52:00 | [匿名用户:tsyung]
#回复: 从msn和qq文件传输速度说开去 编辑
dawnh太能联想了,TCP协议的历史比Cisco悠久多了。
RFC793发布于1981.9,Cisco是1992年才成立的。
2007-07-23 09:51:00 | [匿名用户:iceboundrock]
#回复: 从msn和qq文件传输速度说开去 编辑
长见识了,对网络这方面还有很多一知半解的地方!
2007-07-23 00:25:00 | [匿名用户:助燃]
#回复: 从msn和qq文件传输速度说开去 编辑
然,最后两段话是实质,因为文件传输这种应用应当属于非常普遍的小网络负荷应用.因此不会导致达到TCP/UDP的设计性能极限等问题,对于NAT来说也是设备性能绝对能够保证其正常应用而不会对速度有所限制,因此,关键在于二者程序设计上的差别.
就好像为什么多线程的下载工具比IE下载速度快,原因不过是这玩艺"抢"带宽而已,对于在同网络下的其他客户端,这玩艺就属于"霸道不讲道理"的工具了.

还好,网络上"讲道理"的程序还是主流,否则互联网真的就不是那么美好的世界了.至于P2P,从某方面讲,确实是加大互联网无用流量的元凶.

最后补充一下:发明了TCP的慢启动和拥塞控制机制的那个大牛,好像是Cisco的某工程师,就因为这项成就被人尊称为"拯救了互联网的人".
2007-07-22 23:54:00 | [匿名用户:dawnh]
#回复: 从msn和qq文件传输速度说开去 编辑
有点意思啊,不错,学到点东西,哪位有兴趣继续写下去?
2007-07-22 23:14:00 | [匿名用户:LeadNT]
#回复: 从msn和qq文件传输速度说开去 编辑
勾起了我对网络的回忆
2007-07-22 22:21:00 | [匿名用户:volnet]
#回复: 从msn和qq文件传输速度说开去 编辑
似乎忽略了一点,就是本地化的原因
毕竟MS不是国内的企业,所以我们的公仆机构难免会对其采取些措施,要知道就算把MSN给封掉也不是不可能的事
2007-07-22 16:04:00 | [匿名用户:aspnetx]
#回复: 从msn和qq文件传输速度说开去 编辑
楼上正解。 不过Simultaneous TCP Open 虽然是一种支持的标准技术,但是在internet下并不好用,对于时间的苛刻要求和NAT的要求都导致他麻烦多多
2007-07-21 16:53:00 | [匿名用户:加菲猫]
#回复: 从msn和qq文件传输速度说开去 编辑
讲的有点意思,但是从技术上并不是完全正确。
NAT穿越是要看NAT实现的,具体可以参考一个rfc draft:draft-ford-midcom-p2p-03.txt
这个文档里面也讲到了TCP穿越NAT的方法:Simultaneous TCP Open
2007-07-21 16:33:00 | [匿名用户:iceboundrock]
#回复: 从msn和qq文件传输速度说开去 编辑
开卷有益啊,受教了。
2007-07-21 12:56:00 | [匿名用户:买福彩吧]
博客主人设置本博客不允许匿名用户发表言论,请登录后再试

Powered by: Joycode.MVC引擎 0.5.1.0