QQ通讯机制

来源:互联网 发布:淘宝水印是图片怎么加 编辑:程序博客网 时间:2024/04/29 20:40

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用户也可以更加放心地使用我们的产品了。

OICQ服务器系统通讯协议 
协议说明: 
协议由报文头(T)+发送者(T)+接收者(T)+报文类型(T)+报文长度(L)+报文内容组成 
发送者和接收者是系统内的程序种类,OICQ服务器0x01,传真服务器0x02,WEB服务器0x03,打印服务器是0x04,聊天服务器是0x05,OICQ用户是0x0A。 

OICQ用户到OICQ服务器的通讯协议 引导符 (0x81+0x0A+0x01) 
报文类型 报文内容 报文说明 
0x01 昵称(S)+肖像(M)+用户密码(S)+性别(T)+年龄(T)+真实姓名(S)+国家/地区(T)+省(T)+市(S)+地址(S)+邮编(S)+学历(T)+毕业院校(S)+职业(T)+电话(S)+寻呼(S)+电邮(S)+爱好(S)+说明(S)+身份验证(T)新用户注册,身份验证用于当有人要将他加入好友时询问是否允许 
0x02 服务号(L)+密码(S)+注册方式(T)老用户注册,方式分为0正常,1隐身 
0x03 服务号(L)+对方服务号(L)+内容(S) 发送信息到某人 
0x04 服务号(L)+组号(L)+内容(S) 广播信息,组号=0为全体 
0x05 服务号(L)+朋友服务号(L) 查看朋友资料 
0x06 服务号(L)+组名称(S) 增加组 
0x07 服务号(L)+组编号(T)+组名称(S) 修改组名称 
0x08 服务号(L)+组编号(T) 删除组 
0x09 服务号(L)+移动人数(T)+{朋友服务号(L)+目的组号(T)} 移动组成员 
0x0a 服务号(L)+起始编号(L)+回传个数(T)+查找标志(T) 看谁在线上 
查找标志 1=向小找 2=向大找 
0x0b 服务号(L)+SQL语句(S) 自定义查找 
0x0c 服务号(L)+朋友服务号(L) 增加好友 
0x0d 服务号(L)+朋友服务号(L)+加入原因(S) 请求加入好友 
0x0e 服务号(L)+朋友服务号(L) 删除好友 
0x10 服务号(L)+显示模式(T) 更改显示方式 1上线2隐藏3免打扰4离线 
0x11 服务号(L)+监视服务号(L) 监视某人谈话 
0x12 服务号(L)+昵称(S)+肖像(M)+用户密码(S)+性别(T)+年龄(T)+真实姓名(S)+国家/地区(T)+省(T)+市(S)+地址(S)+邮编(S)+学历(T)+毕业院校(S)+职业(T)+电话(S)+寻呼(S)+电邮(S)+爱好(S)+说明(S)+身份验证(T)更改用户基本信息 
0x13 服务号(L)+朋友服务号(L)+文件名(S)+文件长度(L) 请求发送文件 
0x14 服务号(L)+朋友服务号(L)+允许/拒绝 是否允许发送文件 
0x15 服务号(L)+朋友服务号(L)+文件内容(B) 发送文件 
0x16 服务号(L) 连接测试报文 
0x17 服务号(L)+朋友服务号(L)+同意标志(T) 应答对方请求加入好友 
0=拒绝 
1=同意 

OICQ服务器到OICQ的通讯协议 
报文类型 报文内容 报文说明 
0x01 成功/失败(T)+服务号(L) 新用户注册结果返回 
0x02 成功/失败(T)+组个数(T)+{组名称(S)+组编号(T)+朋友个数(T)+{朋友服务号(L)+肖像编号(T)+朋友状态(T)+朋友昵称(S)] 老用户注册结果返回 
朋友状态 
1=上线=2隐藏=3免打扰4离线 
0x03 标志(T) + 朋友服务号(L)+信息(S)+信息类型(T) 标志 1=系统 2=用户 
发送消息,服务号=0是系统消息 
1=用户某某已经把你加为好友 
2=用户某某请求你通过身份验证 
3=用户某某同意了你的验证要求 
4=用户某某拒绝了你的验证请求 
0x04 成功/失败(T)+朋友服务号(L)+昵称(S)+肖像(M)+性别(T)+年龄(T)+真实姓名(S)+国家/地区(T)+省(T)+市(S)+地址(S)+邮编(S)+学历(T)+毕业院校(S)+职业(T)+电话(S)+寻呼(S)+电邮(S)+爱好(S)+说明(S)朋友信息回送 
0x05 成功/失败(T)+组编号(T)+组名称(S) 增加组结果回送 1/0 
0x06 成功/失败(T)+组编号(T)+组名称(S)修改组名称结果回送1/0 
0x07 成功/失败(T)+组编号(T) 删除组结果回送1/0 
0x08 成功/失败(T) 移动组成员结果回送1/0 
0x09 成功/失败(T)+在线个数(T)+{服务号(L)+昵称(S)+肖像(M)+省(T)+市(S)} 查找在线人员结果回送 
0x0a 成功/失败(T)+找到个数(T)+{服务号(L)+昵称(S)+肖像(M)+省(T)+市(S)} 自定义查找结果回送(最多50) 
0x0b 标志(T)+朋友服务号(L) 增加好友结果回送标志 
0=数据库失败 
=1成功 
=2需要身份验证 
=3对方不允许加入 
=4需要身份验证且不在线 
0x0c 朋友服务号(L)+昵称(S)+肖像号(M)+朋友状态(T) 给在线用户增加好友 
0x0e 成功/失败(T)+朋友服务号(L) 删除好友结果回送 
0x10 服务号(L)+显示模式(T) 显示模式回送 =1上线=2隐藏=3免打扰4离线 
0x11 成功/失败 更改用户基本信息结果回送 
0x12 朋友服务号(L)+文件名(S)+文件长度(L) 请求发送文件 
0x13 朋友服务号(L)+允许/拒绝 是否允许发送文件 1允许 0拒绝 
0x14 朋友服务号(L)+文件内容(B) 发送文件 
0x15 朋友服务号(L)+当前状态(T)朋友状态回送(系统发送)=1上线=2隐藏=3免打扰4离线 
0x16 服务号(L) 连接测试

原创粉丝点击