关键词为 “协议” 的文章

KJava QQ 2005 1.6.1 分析

by trac on 8月 16, 2008

在阅读本文之前,我很想让您明白几件事。

第一,我这分析极不完整,也极不专业。仅仅是作为兴趣,写一写,消磨消磨时间。

第二,我并不想抢腾讯的饭碗。说实在的,如果让我设计一款 IM,特别是用在手机上的,我决不会使用 HTTP 协议,也决不会将所有的消息以明文发送。用户密码是 MD5 过的,但您听说过山东大学那位受人尊敬的王小云教授吗,她破解了 MD5。HTTP 的头部也太大,浪费流量。

第三,请您自重。计算机网络通讯协议分析,这本来就属于法律的灰色地带,搞得好那么你可以学习学习,设计出更优秀的协议,搞不好是什么下场我就不细说了。我可不希望看见谁谁谁收到一份包装精美的来自腾讯的律师函。

好了,客气话说完,我下面就不客气了,说说腾讯 KJava QQ 2005 版协议的几个特点:

1、使用 HTTP 1.1;

2、每个 Request / Response 都需要标明 Content-Length。很显然,HTTP 1.1 的 RFC 也要求我们这么做(小道消息,没验证过,我只知道 1.1 的协议要求 Host,这个是为虚拟主机设计的);

3、客户发送请求的时候,都是用 POST 方法,所有的参数都包含在 POST 数据里;

4、可以用代理,但最终必须是从中国移动/中国联通的 IP 访问登录服务器;

5、密码采用 MD5 加密;

6、每一次和服务器交换信息,都使用短连接,也就是说,在交换完了之后立即关闭连接(Connection: close);

7、全部采用 UTF-8 编码(String mystring(“this is it”, “UTF-8”););

8、每隔一段时间执行一次 GetMsgEx 命令;再隔一定时间执行 Query_Stat。