MSN Messenger协议的内容介绍

MSN Messenger协议的内容介绍

前 言

MSN Messenger 是Microsoft开发的聊天工具,目前在国内拥有很大的用户群。使用MSN Messenger可以与他人进行文字聊天,语音对话,视频会议等即时交流,还可以通过此软件来查看联系人是否联机等。该软件的最新版本是6.1。

1999年,Microsoft向IETF提交了一份"MSN Messenger Service 1.0 Protocol"草案,这是最初版本的MSN Messenger协议。在以后几年,该公司不再公开有关MSN Messenger协议的升级、修改细节的官方文档。但无论是开发第三方的聊天客户端软件(如Gaim, MyIM等),还是做协议分析,必须对其通信协议有深入了解。正因为如此,有一些民间人士对这些协议开展了研究(见本文的"相关资源"一节)。

当我们还在感叹"这世界,变化快"的时候,MSN Messenger的协议已经到了第10版,简称MSNP10,对应于MSN Messenger 6.1。MSN Messenger 6.0则使用MSNP9。现在Microsoft强迫MSN Messenger用户升级到6.0或6.1版,因为服务器对MSNP8以下的版本不再支持。本文及后续文章所描述的MSN Messenger协议主要针对MSNP9/MSNP10。

1. 连 接

MSN Messenger协议建立在TCP/IP之上。除了文件传输和语音聊天是直接的"点对点"通信之外,其它所有的情形全部通过服务器进行。

在逻辑上,一共有三种类型的服务器,各司其职:

  • 派遣服务器(Dispatch Server, DS) - 客户端最初连接的服务器。负责给客户端分配合适的通知服务器。域名是messenger.hotmail.com,标准服务端口是1863。完成派遣任务后,切断TCP连接。
  • 通知服务器(Notification Server, NS) - 客户端需要一直保持连接的服务器。很多任务要在这个会话内完成,包括登录、改变状态、获取用户列表、修改用户信息、发起聊天、接受呼叫、邮件通知、退出等等。服务端口由派遣服务器指定,通常也是1863。
  • 接线服务器(Switchboard Server, SS) - 客户端之间聊天使用的中转服务器。每开一个聊天窗口,客户端和服务器就建立一个TCP会话。当客户端之间需要进行文件传输或语音聊天时,发送系统消息,建立"点对点"会话通道(可能转为使用UDP)。服务端口通常也是1863。"点对点" 通信使用的端口由客户端自动协商决定,如文件传输通常使用6891端口。

2. 命 令

MSN Messenger命令使用纯ASCII码。对非ASCII码字符使用URL编码。命令的语法是

XXX[<SP>TrID<SP>PARAM1<SP>PARAM2…]<CRLF>

其中,<SP>是空白字符,<CRLF>是回车换行,XXX是一个3字符的命令串,TrID是一个流水号,PARAMx是参数,[ ]内是可选项。最简单的命令没有流水号和参数。为了方便起见,下面讨论时用" "代表<SP>,"/r/n"代表<CRLF>,"/x??"代表一个值为0x??字节。红色表示由客户端发出,蓝色表示由服务器发出。一个MSN Messenger命令的例子如下:

USR 18 TWN I example@hotmail.com/r/n

3. 错 误

无论是由于客户端发出的命令无效,参数无效,还是其他什么原因,服务器可以返回一个错误。格式为

XXX[<SP>TrID]<CRLF>

其中,XXX是一个3位数字的串。如

ADD 21 AL non_existent@passport.com non_existent@passport.com/r/n
205 21/r/n

上例中,non_existent@passport.com是一个不存在的账号。

4. 消 息

MSN Messenger消息符合MIME 1.0标准,由消息头与消息体组成。通常使用UTF-8编码,消息头中也需要URL编码格式,消息体则直接用二进制数据。

一个MSN Messenger消息的例子如下:

MIME-Version: 1.0/r/n
Content-Type: text/plain; charset=UTF-8/r/n
X-MMS-IM-Format: FN=%E5%AE%8B%E4%BD%93; EF=; CO=0; CS=86; PF=0/r/n
/r/n
bhw98/xE4/xBD/xA0/xE5/xA5/xBD/xEF/xBC/x81

经简单分析可知,"%E5%AE%8B%E4%BD%93"是"宋体"的UTF-8加URL编码,而"bhw98/xE4/xBD/xA0/xE5/xA5/xBD/xEF/xBC/x81"是"bhw98你好!"的UTF-8编码。

 

〖相关资源〗

  • URL编码:RFC 1738
  • UTF-8编码:RFC 2279
  • MIME 1.0:RFC 2045, RFC 2046, RFC 2047, RFC 2048, RFC 2049
  • Blobsy开源站点:www.maldivianunderground.net/blobsy/
  • Mike Mintz等研究MSN的站点:www.hypothetic.org/docs/msn/
  • MSN Messenger官方网站:messenger.msn.com
  • 科脑工作室(Kernel Studio):www.kernelstudio.com

首次发布: 2004-01-13
最后修订: 2004-01-15