- 浏览: 1010393 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (394)
- OSGI (14)
- 多线程 (10)
- 数据库 (30)
- J2ME (1)
- JAVA基础知识 (46)
- 引用包 (1)
- 设计模式 (7)
- 工作流 (2)
- Ubuntu (7)
- 搜索引擎 (6)
- QT (2)
- Ubuntu下编程 (1)
- 小程序 (2)
- UML (1)
- Servlet (10)
- spring (16)
- IM (12)
- 文档视频转为flash格式在线播放 (19)
- Maven (8)
- 远程调用 (2)
- PHPRPC (1)
- EXTJS学习 (2)
- Hibernate (16)
- 技术文章 (38)
- flex (5)
- 海量数据处理 (5)
- FTP (8)
- JS (10)
- Struts (1)
- hibernate search (13)
- JQuery (2)
- EMail (3)
- 算法 (4)
- SVN (7)
- JFreeChart (4)
- 面试 (4)
- 正规表达式 (2)
- 数据库性能优化 (10)
- JVM (6)
- Http Session Cookie (7)
- 网络 (12)
- Hadoop (2)
- 性能 (1)
最新评论
-
hy1235366:
能够随便也发一下,你退火算法程序使用的DistanceMatr ...
模拟退火算法总结(含例子)(转) -
梅强强:
感谢分享。。帮大忙了
swftools转换文件时线程堵塞问题的解决方法 -
wenlongsust:
openoffice和文件不在同一个服务器上,用过吗?
[JODConverter]word转pdf心得分享(转) -
2047699523:
如何在java Web项目中开发WebService接口htt ...
利用Java编写简单的WebService实例 -
abingpow:
唉,看起来好像很详细很不错的样子,可惜不是篇面向初学者的文章, ...
Spring与OSGi的整合(二)(转)
QQ通信原理
我研究的是QQ2007beta4版本的通信原理,相信之后的版本暂时也不会有改动。。
先来看看QQ上线会向这11个服务器发送UDP数据包,选择回复速度最快的一个作为连接服务器。
这6个服务器名字均以SZ开头,域后缀是tencent.com,域名与IP对应为
sz sz2 : 61.144.238.145 61.144.238.146 61.144.238.156
sz3 sz4 sz6 sz7 : 202.104.129.251 202.104.129.254 202.104.129.252 202.104.129.253
sz5 : 61.141.194.203
202.96.170.166 218.18.95.221 219.133.45.15
61.141.194.224
202.96.170.164
2、TCP HTTP连接服务器4个
使用HTTP 80 和443端口连接
这4个服务器名字均以tcpconn开头,域后缀是tencent.com,域名与IP对应为
tcpconn tcpconn3 218.17.209.23
tcpconn2 tcpconn4 218.18.95.153
61.141.194.227
218.18.95.171
3、会员VIP登陆服务器
使用HTTP 443安全连接
服务器IP 218.17.209.42
负载均衡+主机集群
QQ通信 用的P2P,当对方掉线,才会把数据发到腾讯保留;这样能减低服务器负担
QQ通信的消息 用密码 的MD5 进行Tea加密。
TCP/IP协议中又分为TCP协议和UDP协议,TCP协议是面向连接的协议,它比较安全、稳定,
但是效率不高,占用资源较多。UDP协议是无连接方式的协议,它的效率高,速度快,
占资源少,但是其传输机制为不可靠传送,必须依靠辅助的算法来完成传输控制。
QQ采用的通信协议以UDP为主,辅以TCP协议。由于QQ的服务器设计容量是海量级的应用,
一台服务器要同时容纳十几万的并发连接,因此服务器端只有采用UDP协议与客户端进行
通讯才能保证这种超大规模的服务。
QQ客户端之间的消息传送也采用了UDP模式,这不同于国外的ICQ在客户端之间采用
TCP进行通讯的模式。因为国内的网络环境非常复杂,而且很多用户采用的方式是通过
代理服务器共享一条线路上网的方式,在这些复杂的情况下,客户端之间能彼此建立起来
TCP连接的概率较小,严重影响传送信息的效率。而UDP包能够穿透大部分的代理服务器,
因此我们在开发QQ的时候选择了UDP作为客户之间的主要通信协议,因此网友会觉得用
QQ传送信息要比ICQ及其它采用TCP协议的ICQ类软件快。当然,UDP协议优点突出,缺点
也很明显:UDP包的传送是不可靠的传输,它不象TCP一样有包重传等机制,因此采用UDP
协议的信息在传送过程中很容易丢失,这样就需要辅助的算法实现包重传机制以保证信息
不会丢失,而QQ服务器的负荷非常重,因此在QQ 99b 0425之前我们只是在客户端到客户端
之间传送消息时采用了这个辅助的机制,当消息在客户间直接传送无法到达时就需要通过
服务器来中转,由于服务器端在老版本的时候迫于负荷过重的压力没有对主动发往客户端
的信息进行传输控制,因此在老版本的时候容易造成通过服务器中转的信息丢失的现象。
在QQ99c 0725之后我们单独设立出了几台专用的服务器采用包重传机制来中转消息
(仅限于99c之间传递的消息),确保通过服务器转发的消息也能够发送到对方的QQ。
从QQ0410开始我们将客户端到服务器之间的信息传送使用了128位的密钥进行了加密,
大大地提高了QQ的安全性,从0725版本以后QQ 我们对客户端到客户端的信息传送也
采用了同样的算法进行加密,这样就可以基本杜绝可能存在的信息炸_弹、信息伪装、
信息截获等隐患。
特别需要说明的是我们的加密模式是完全按照公开源代码的方式来设计的,也
就是说即使破解者获得了全部的加密算法也依然无法对其他用户的安全构成威胁,
相信随着新版的不断推出,QQ将会变得越来越安全,广大QQ用户也可以更加放心地
使用我们的产品了。
1、登陆。不管UDP还是TCP,最终登陆成功之后,QQ都会有一个TCP连接来保持在线状态。这个TCP连接的远程端口一般是80,采用UDP方式登陆的时候,端口是8000。因此,假如你所在的网络开放了80端口(80端口是最常用端口。。就是通常访问Web的端口,禁掉它的话,你的网络对你来说价值已经不大了),但没有屏蔽腾讯的服务器IP,恭喜你,你是可以登陆成功QQ的。
2、聊天消息通信。采用UDP协议,通过服务器中转方式。因此,现在的IP侦探在你仅仅跟对方发送聊天消息的时候是无法获取到IP的。大家都知道,UDP协议是不可靠协议,它只管发送,不管对方是否收到的,但它的传输很高效。但是,作为聊天软件,怎么可以采用这样的不可靠方式来传输消息呢?于是,腾讯采用了上层协议来保证可靠传输:如果客户端使用UDP协议发出消息后,服务器收到该包,需要使用UDP协议发回一个应答包。如此来保证消息可以无遗漏传输。之所以会发生在客户端明明看到“消息发送失败”但对方又收到了这个消息 的情况,就是因为客户端发出的消息服务器已经收到并转发成功,但客户端由于网络原因没有收到服务器的应答包引起的。
3、文件/自定义表情传送。大家都知道,QQ可以传送文件,可以发送自定义表情。先说官方表情。官方表情实际发送的是命令字,而没有发送表情。客户端收到命令字后,会自动解释为对应的表情。因此,QQ2007正式版的客户端发出的新版表情,在2007beta4及以前的版本无法找到相对应的表情,就无法解释,看到的就会是空白信息,但查聊天记录就会有[表情]字样。自定义表情的传送是以文件传输方式进行的。下面说文件传输方式:A要向B发送一个文件,于是发出一个文件传送请求。服务器收到这个文件传送请求后,转发给B,同时或者在B应答后,将A的IP地址同时发送给B。B这个时候就得到了A的真实IP。这里的IP是你的本机IP。也就是说,如果A处在内网,B得到的地址就是一个内网地址。B得到了A的地址之后,就会尝试去连接A。如果B也处于内网,那么,显然A跟B之间的连接是无法建立的。这个时候,客户端就会请求服务器进行文件中转。因为服务器具有公网IP,处在内网的A跟B都是可以连接到服务器的,于是,A跟B的文件传送就通过服务器中转的方式,顺利进行。(注:服务器文件中转使用443端口) “穿透内网”的原理就是这样的。至于其中的程序细节,暂时还没研究到。。谁有空就研究研究吧,呵呵
4、小结。结合1跟2,可以知道,如果一个局域网只开放80端口,QQ是可以登陆成功的,也可以进行聊天。但传送文件也是不可以的,除非你们都在同一个内网。如果局域网还同时开放443端口,那么,恭喜你,QQ的功能你都可以正常使用。端使用UDP协议发出消息后,服务器收到该包,需要使用UDP协议发回一个应答包。如此来保证消息可以无遗漏传输。之所以会发生在客户端明明看到“消息发送失败”但对方又收到了这个消息 的情况,就是因为客户端发出的消息服务器已经收到并转发成功,但客户端由于网络原因没有收到服务器的应答包引起的。
发表评论
-
提取html内容放入xml文件时空格问题
2011-05-24 17:09 2660由于项目的需要,将网站上的信息抓取下来,提取出想要的信息,然后 ... -
简述URI和URL区别(转)
2011-04-20 16:23 1418URL:(Uniform Resoure Locato ... -
jsp页面乱码解决方案及编码设置问题(转)
2011-03-27 15:46 1841经常遇到关于JSP页面乱码的问题,在网上也查了相关的帖子,故在 ... -
使用JSTL标签异常
2011-01-02 09:48 1851我使用JSTL标签,如下所示: <c:when ... -
HSQL入门及使用指南 (转)
2010-12-27 22:29 2191HSQL可以到官方网站 ... -
使用POI读取Word207和Excel2007的例子 (转)
2010-12-26 16:19 2618天在写全文检索功能时,POI读取Word2007和Excel2 ... -
SSH session连接关闭问题的解决(转)
2010-12-15 22:12 21532008-07-20 22:25:27,531 INF ... -
svn和myeclipse使用搜狗浏览器代理
2010-12-11 16:42 18141 在svn里的setting功能选项中选择Network,勾 ... -
Kissy Suggest 自动提示例子
2010-12-10 14:45 3823由淘宝团队开发出来的Kissy Suggest 自动提示组件是 ... -
计算机开机启动过程详解(转)
2010-12-10 13:22 13901、http://product.zdnet.com. ... -
更强的自动补全提示:提示补全组件:Kissy Suggest(转)
2010-12-09 16:25 1059去年针对谷歌的搜索提示,发过一篇文章:从谷歌的一个Bug说 ... -
磁盘分区与文件系统(转)
2010-12-09 09:38 2046一个磁盘是分成一个个扇区来存放信息,整个磁盘的第一个扇区是作 ... -
邮件激活
2010-11-17 09:34 1457今天看了一下公司做的网站,看到有关邮件激活的程序,就做下笔记。 ... -
HttpSessionBindingListener获取在线用户数(转)
2010-11-01 14:59 2369下面为我的测试 ... -
cookie的简单使用
2010-10-29 11:13 1575一、cookie的作用 在 ... -
Cookie工作原理(转)
2010-10-29 09:30 1824Cookies基础 Cookies是 ... -
swfobject的使用
2010-10-26 09:54 32231 swfobject可以将swf文件嵌入到网页内,它是一个j ... -
java获取当前工程名(转)
2010-10-24 09:14 1628String projectname = System.get ... -
利用Java编写简单的WebService实例(转)
2010-10-22 15:30 2740/* * File name: TestHell ... -
利用Java编写简单的WebService实例
2010-10-22 14:55 87119使用Axis编写WebService比较简单,就我 ...
相关推荐
QQ通信原理分析,为什么只要可以连上互联网的计算机都可以用QQ相互建立通信,而不需要固定IP
QQ聊天程序的网络通信原理及编程
文章介绍了QQ通信原理
QQ的工作原理,本人正在学习网络通信,共享资源
二、 通信原理::利用P2P之UDP穿透Cone(锥型)NAPT原理。 三、 系统特点: 1、所有会话命令均封装成对象。 2、每个命令对象都有Send(发送)与Exec(执行)方法。Send方法用于把对象(自己)发到对方,Exec方法完成...
QQ是如何通信的,是如何交流的?QQ的通信交流原理。深入剖析QQ的运行机制
对于那些自己学习通信原理的人来说应该有所帮助。
Q Q 聊天程序在通信方式上采用的是C/S 通信模式,即客户/服务模式。具体操作原理是将一个应用编制功能不同的两个部分,并使其在两台或多台计算机应用。
北航通信原理期末试题,可作为考研复习使用
华中科技大学本科教学课件,通信原理,电子,通信等专业
通信原理实验指导书正式版
通信原理实验说明书
电子科技大学中山学院通信原理复习资料:往年卷,模拟题,帮扶资料。。。
通信原理课程
通信原理实验课件PPT,通信原理工具实验箱中的实验,PPT里的操作基本都有
浙江大学通信原理答案,浙江大学通信原理答案,浙江大学通信原理答案
现代通信原理答案
通信原理实验报告范本,帮助同学们,可以打印的