TCP 和 UDP 传输的深入浅析,MSN 和 QQ 文件传输速度解析

发现很多情况下,MSN 传输文件比 QQ 要慢,倒不是说 msn 没有快的时候,

但是大部分的时候是真的比 QQ 慢,连我这种神经比较大条的人都注意到了,

Google 了一下,早就有人做了解答,基本上就是说 msn 传输文件是使用 TCP,而 QQ 使用UDP,

剩下的事情就是论证 TCP 传输文件没有 UDP 快。


大概的就是下面的几个观点:

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

我看了当时就想笑,也用了 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 一样。

发布了63 篇原创文章 · 获赞 5 · 访问量 18万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览