版本 |
时间 |
内容 |
整理人 |
V1.0 |
|
MSN Media协议分析初稿 |
彭令鹏 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MSN Media协议分析
第1章. 文档说明
本文档建立在另一篇文章——《MSNP15(MSN8.1)协议分析》的基础上。因此MSNP的一些基础知识请参考该文,而本文的重心是进一步分析MSN Media所用的协议。
第2章. 通信过程
2.1. 概述
MSN Media的通信过程将分音频通信过程和视频通信过程两部分来讲解。音频和视频的通信过程同即时消息的通信过程(《MSNP15(MSN8.1)协议分析》中已讲述)很类似。只是音频通信和视频通信不经服务器中转,一般是点对点的UDP通信,而且为了保证实时性和服务质量,UDP之上还使用了RTP/RTCP协议(请参看《RTP协议分析》)。
2.2. 音频通信过程
msn单纯语音聊天时,建立连接用的是STUN协议,数据传输使用RTP协议。示意性的过程如下。
1) 本机客户端向NS服务器(Notification Server,假设其IP:端口为64.4.13.195:1863)请求两个新SB 服务器地址(Switchboard Server),其中一个用于发送请求,另一个用于接受回复。如下面表格所示:
secondary connection port range protocol type direction info
6891-6900 tcp inbound sending
6891-6900 tcp outbound receiving
客户端通过tcp向服务器发送xfr命令,参数为sb。NS服务器收到请求后,同样以xfr命令返回,参数中包含SB服务器的ip地址和端口号,以及SB服务器的cki安全序号。如下例所示:
>>> xfr 10 sb
<<< xfr 10 sb 64.4.12.193:1863 cki 16925950.1016955577.17693
2) 客户端根据返回的ip地址和端口好,通过tcp协议连接两SB服务器。
3) 连接成功后,客户端分别向两SB服务器发送usr命令,第一个参数为实际连接的电子邮件地址,第二个参数为第二步骤返回SB服务器cki安全序号。如果发送成功,SB服务器返回usr命令,第一个参数为ok。如下例所示:
>>> usr 1 example@passport.com 16925950.1016955577.17693
<<< usr 1 ok example@passport.com mike
4) 当邀请对方对话时,把对方的注册的电子邮件地址作为参数传递到cal命令中,然后发送SB服务器,收到该请求后,服务器返回一个id号。同时服务器又向客户端发送joi命令,把被请求方的电子邮件地址作为第一个参数。如下例所示:
>>> cal 2 name_123@hotmail.com
<<< cal 2 ringing 11752099
<<< joi name_123@hotmail.com name_123
以上步骤都是本机客户端与两SB服务器之间同时进行,都执行了以上所有的步骤。
5) 当客户要进行语音对话时,本机客户端向发送请求SB服务器发送一个请求(假设SB服务器的ip地址:64.4.12.192,端口:1863)。该请求的格式如下例所示:
msg 4 n 277
mime-version: 1.0
content-type: text/x-msmsgsinvite; charset=utf-8
application-name: 请求服务类型
application-guid: {5d3e02ab-6190-11d3-bbbb
session-protocol:sm1
context-data:
requested:sip_a; capabilities: sip_a,sip_v
invitation-command: invite
…………
6) 服务器64.4.12.192收到该请求后,回复ack,表示确定已收到该请求。
7) 当被请求方接受你的语音对话邀请后,回复SB服务器(假设为ip地址:64.4.12.159,端口:1863)向本机客户端发送回复,其回复格式如下:
msg name_123@hotmail.com name_123
mime-version: 1.0
content-type: text/x-msmsgsinvite; charset=utf-8
invitation-command: accept
…………
ip-address:返回被请求方的ip地址。
8) 当本机收到该回复后,向服务器64.4.12.159发送一个消息,其格式如下:
msg
mime-version: 1.0
content-type: text/x-msmsgsinvite; charset=utf-8
invitation-command: accept
…………
ip-address:本机的ip地址和端口。
9) 服务器64.4.12.159收到该消息后,返回一个ack命令,表示确认已收到。
10) 然后由被请求方根据本机客户端的ip地址和端口进行udp连接,进行数据传递。
2.3. 视频通信过程
视频通信过程与语音通信相同,同样申请两个SB服务器,最后通过udp进行连接,进行数据传送。当然视频通信也可以使用TCP通信,这种情况下MSN视频聊天时,先用TCP建立连接,然后用HTTP传输数据。
第3章. RTP封装
关于RTP的详细介绍,请参考《RTP协议分析》。在这里我们主要关注RTP头部的3个字段:Payload Type、Sequence Number和Time Stamp。
Payload Type:长度为7比特,该区域的数值标识了载荷所承载的内容的数据类型。如果此RTP流是用来传输语音或者视频数据的,此区域的数值是具体的载荷数据的编码类型。这些具体的数值所对应的编码由IETF的其他RFC规定,但是现存的大量的应用程序使用的是自己定义的标识符,MSN同样是这样的。例如对于音频通信,MSN的音频通信一般使用自定义类型114(对应的十六进制为0x72)。
Sequence Number和Time Stamp则用来实现RTP信息的排序和同步。
第4章. 实现方案
ID |
Protocol |
Captured contents |
|||
Local account |
Opponents account |
Audio/video |
|||
39 |
msn media 8.1 |
√ |
|