QQ的工作原理
QQ的工作原理是怎么样的?它是怎么样支持那么多用户同时登陆的?它的后台服务器是怎么设置的?是不是每个用户登陆的时候都要先登陆到服务器啊?那和某个好友聊天的时候是不是就换成点对点的了?怎么转换的?它用的是Socket技术吗?还有别的网络技术吗?它是怎么实现发送离线消息的?怎么实现群发消息的呢?
回答:
1.聊天时候时候用的点到点,对方离线的时候才发给服务器。
当然,登陆的时候首先要向服务器注册其IP地址和端口信息
2.登陆时发送消息告诉server说你登陆而已,由server通知你的好友说你上线(如有必要)
其他的基本不用通过server,那么用户多少有什么关系
user<->user聊天都是自己建立连接的,除非建立不了还会又server中转,好友不在线也又server中转
3.QQ使用的是UDP+TCP,一般默认的是UDP-->无状态连接的,好友之间应该是P2P的,你用D7的IDUDPServer都能做的 QQ有集群服务器. 补充:在比较安全的局域网中一般使用无连接的UDP协议,在相对不安全的广域网中使用的是面向连接的TCP协议。
4.P2P连接:
(1.)用户登录服务器,服务得到用户的经过NAT的公网IP;如;211.10.5.32:3300(此端口号由网关产生,负责将外网数据发给内网的指定主机,即你所登录的位置),
(2.)用户得到好友的公网IP后(通过服务器得到),发送握手包,建立彼此方向的打洞包(随便发点数据就行,重要的是一个方向,如内网A发一个数据包给外网B,此时B才有可能发送数据给A,让A成功接收,否则A的网关会丢弃此包,了解???!!)
(3.)双方通信成功,
(4.)如果NAT的类型比较特殊会有: 内网A发数据到S,网关NAT时建立一个端口3300,若此时A再发数据到B,有的NAT会在此端口上加一个SESSION,端口不变,而有的NAT会新建立一个端口,此时P2P将失效,这是一个很值得讨论和解决的问题,因为我也正在遇到这个问题.
5.根据我用防火墙监测试的结果,QQ的连接过程如下:
在登录的时候,QQ会先和服务器建立一个Tcp/iP 连接,
然后会建立4个UDP服务器,监听4000, 6000, 6001, 1085端口,如
果有消息的话,会随机的选用一个和客户端连接!
来自: http://hi.baidu.com/xuluoll/blog/item/b90bed593428efd49c820417.html
QQ通讯基本原理
我研究的是 QQ2007beta4 版本的通信原理,相信之后的版本暂时也不会有改动。。
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 的功能你都可以正常使用
为了您的安全,请只打开来源可靠的网址
来自: http://hi.baidu.com/%B7%DC%B6%B7%B5%C4%D1%C7%D1%C7/blog/item/84d3dcdf94b79619495403e8.html

浙公网安备 33010602011771号