分类: LINUX
2007-10-30 17:28:33
在网上讲msn协议的文章比较少,有一个网站不错,,讲得很多也很细,可惜是英文的,看得好费劲,对照着自己抓的包把内容看了一遍,现在根据自己的理解把内容整理一下,当然,只是整理与即时消息有关的部分,有时间的话单独整理完整版吧。
[概要介绍 Overview]
MSN Messenger Service Protocol是微软提出的通讯服务协议,1999年微软向IETF提交1.0版草案,此后再没有公开过后续版本的细节。目前各类文章都是基于大家自己做协议分析得来的,针对MSNP8、MSNP9、MSNP10比较多。
[连接 Connections]
协议建立在TCP/IP上,除了文件传输与语音聊天是p2p外,其它全都通过服务器进行。
服务器主要有3种:
1、Dispatch Server,派遣服务器,简称DS,客户端最初连接的服务器,负责给客户端分配合适的通知服务器。有固定的域名与端口。完成派遣任务后切断TCP连接。(似乎现在已经没有DS了)
2、Notification Server,通知服务器,简称NS,客户端需要一直保持连接的服务器,很多任务都在这个会话内完成,但其不负责传输与消息实体相关的数据。
3、Switchboard Server,接线服务器,简称SB,客户端之间聊天使用的中转服务器,每开一个聊天窗口,客户端和服务器就建立一个TCP会话。开始聊天前,发起方必须先申请并连接这个服务器。
[命令 Commands]
MSN的命令使用ASCII码,遇到非ASCII码字符就使用URL编码。格式基本是这样的:
XXX TrID Param1 Param2 ... \r\n
命令以三个字符的命令标识符开头,比如CAL、USR。对TrID要特别说明一下,全称Transaction ID,用于匹配客户端的命令与服务端的响应。这是一个介于0到4294967295之间的整数,跟在每个命令与消息后面,服务端收到并做出处理后,要回复客户%