UDP效率高,包小,UDP的 速度是TCP比不了,QQ就是用UDP协议传输的,TCP只作为辅助。

解决方案 »

  1.   

    奇怪的一点,既然QQ登录后,服务器和客户端之间都会保留一个TCP长连接用于保持用户的在线状态,为什么数据中转不通过这条TCP链路中转呢,而非要用UDP协议来中转,还加上什么辅助算法来确保安全性(难道不需要占用额外的资源吗),理由说是,UDP较TCP快,服务器端只有采用UDP协议与客户端进行通讯才能保证这种超大规模的服务(TCP长连接不是在了吗,资源已经被占用了),有必要吗,真的是这样吗?
      

  2.   

    TCP与UDP的性能差别不是主要在建立连接前的三次握手吗?现在服务器和客户端间的TCP长连接已经建立了,效率上差别还大吗?更何况用UDP还需辅助算法来确可靠性,这不影响服务器性能吗?
      

  3.   

    不是所有聊天记录都经过服务器的,否则腾讯早就挂机了,TCP长连接只不过记录通信双方的连接端口,点对点通信就用UDP了。减轻了服务器的大部分压力。
      

  4.   

    点对点通讯用UDP非常认同,但是在点对点无法建立连接时,就只得走服务器中转了吧。我困惑的主要是:在走中转时,服务器端为什么不利用现成的TCP长连接,而要选择用UDP。TCP的耗时主要在建立连接时的3次握手,现在连接早已建立,TCP这方面的耗时已不存在了,另外,TCP的耗时还体现在重传和确认机制,但这方面,即时通讯不是本来就需要吗,用UDP不也要在应用层实现可靠机制吗?求解?
      

  5.   

    TCP长连接只有这个作用吗?
    TCP长连接一直连着不是很耗服务器资源吗,为什么不好好利用它或把这个长连接关掉呢?
      

  6.   

    这个是网上很多文章上看到的,感觉困惑所以提出来,既然长连接存在,为什么不利用它呢。
    文章链接
    http://blog.sina.com.cn/s/blog_491e726f0100mk2r.html
      

  7.   

    qq 是udp的。。昨天装了个防火墙。看到的。。
      

  8.   

    用 wireshark-win32 自己抓包看看吧。里面还非常神奇的分析出了OICQ协议
      

  9.   


    QQ一直都保有OICQ协议每个版本抓包都会发现
      

  10.   


    请问大哥,你在哪本网络书里面介绍OICQ协议??QQ就叫OICQ,他发的数据叫OICQ有什么好奇的啊,问题是中国的软件一个外挂的抓包工具居然能识别,这个强大啊
      

  11.   

    QQ当初这么设计的,因为刚开始服务器没有那么多资源,所以用UDP,连TCP连接都没有。
    而MSN什么的是直接采用TCP连接的。
      

  12.   

    qq里,udp用来坐p2p的,别想多了。
      

  13.   

    一次聊天就是一次p2p;单纯而简练 既降低服务器负载又利于消息快速到达. 何乐而不为呢.MSN是个失败的作品,全凭借MS的强势而活着.你要说通讯机制的灵活与消息的即时性,他和QQ比起来差很多.
      

  14.   

    QQ要为几亿人聊天提供支持,还有视频音频
    肯定会用到p2p的啊
      

  15.   

    啊,根据UDP的优点吧,
    学习啦
      

  16.   


    你在哪里看到QQ有TCP长连接?
    我看到,只有UDP的。
    千里孤行
      

  17.   

    netstat -abn  TCP    192.168.1.107:2225     183.62.127.9:80        SYN_SENT        560
      [QQ.exe] TCP    192.168.1.107:2191     122.227.184.98:80      FIN_WAIT_2      560
     [QQ.exe] TCP    192.168.1.107:2214     117.79.157.241:80      TIME_WAIT       0
     TCP    192.168.1.107:2215     117.79.157.241:80      TIME_WAIT       0
     TCP    192.168.1.107:2218     117.79.157.241:80      TIME_WAIT       0
     UDP    0.0.0.0:2093           *:*                                    2124
     [QQ.exe]什么情况???
      

  18.   

    TCP只处理最关键的控制信息,总量小,频度低,实时性要求不太强的数据。UDP用针对应用的特定算法既保证速度又保障安全,使得效率更高,灵活性更强。也就是选用合适的工具做合适的工作。
    至于那个工具更合适,是要看使用工具的人的水平的
      

  19.   

    那UDP是面向非连接的,怎么能进行点对点通信呢?求解
      

  20.   

    那UDP是面向非连接的,怎么能进行点对点通信呢?求解从逻辑上来说,现在象QQ和其他IM软件都从逻辑上来说,都还是面向联接的。他们的UDP都是可靠UDP.比如UDX协议。http://www.goodudx.com/web/index.php/site/download/6这些都是利用可控的流控算法来进行可靠的数据传输,特别在实时性要求高,效率要求高的应用中。
      

  21.   

    其中一点:
    UDP的回程有时间限制,一般路由设置为30秒;
    就是说,在30秒后,如果这个UDP没有数据发送,对方就不能做数据推送了。
    但TCP是长连接,一般路由不会把TCP超时。
      

  22.   

    这有什么疯狂的
    一个指令频率并不高的协议
    一台2*4核心服务器
    带个几万用户还是很轻松的
    几亿用户也就10000台服务器可以搞定了
    TENCENT服务器[数据中心]早就超过这个规模了吧
      

  23.   

    没研究过QQ的通讯。用UDP去做TCP就能做的事,有的是为了点对点穿越防火墙,有的是为了能带更多的客户端(Windows的Handle有数量限制,想要支持超过这个数量的用户就不能为每个用户建立长连接),至于IM,其实P2P还有潜在的好处,就是不用担心被Server端记录在案。
      

  24.   

    分析一下QQ你就会发现,QQ登录时会发送请求给服务器,QQ的服务器并不是一直监听客户端,反之是通过30秒的一个时间间隔来确定客户端是否还在,这个主要的以客户端完成,30秒以内客户端会和服务器握手,告诉服务器我还在,状态正常,而服务器会记录下这个时间,如果30后再次收到客户端握手则维护当前状态,如果收不到则表示客户端掉线了。然后服务器清除当前客户端的状态和注销用户。这就是为什么如果我们是退出QQ,对方很快就看到我们下线了,不超过五秒,但是如果我们的网络出现故障意外断线了,对方要看到你下线需要在大约30-40秒之后。所以使用UDP是为了降低服务器的压力,至于TCP,QQ同样提供了支持。登录时可以选择是TCP还是UDP,默认为随机。登录请求发送给服务器后自动分配的。QQ在文件传输和媒体通讯过程中使用UDP降低了很大的服务器承载。我自己也做IM,早期的版本全跑TCP,用户承载没问题,但是当有文件传输时 服务器承载能力大打折扣,更关键的是多人视频,使用UDP点对点之后客户端内存增加了,CPU也增加了,但是服务器承载变强了。在使用TCP时 ,200人同时视频通话 服务器程序就吃掉970MB内存,2GB的服务器 只能承载200人就差不多极限,8GB内存 4核CPU的服务器也只能承载500-800人的视频通话,改成UDP之后差不多只占原来服务器资源的十五分之一。但是客户端内存消耗增加,使用服务器中转时,客户端9个视频,内存消耗大约90MB,UDP之后这个内存飙升到170MB。
      

  25.   

    UDP在这方面,比TCP要有利多了。中国网络环境还是比较复杂的。UDP可以更好的利于自己的控制。
      

  26.   

    QQ的架构能用PC机的逻辑去思考吗?