- 浏览: 750034 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
u011487470:
感觉就是知识采集一样,博主能不能整理一下
基于Web的IM简介 -
whxtbest:
whxtbest 写道2里面:如果T本身就是重复的话 比如 ...
关于后缀树的一些理解 -
whxtbest:
2里面:如果T本身就是重复的话 比如S是aaab,T是aa ...
关于后缀树的一些理解 -
刘亮love小雪:
谢谢啦
Java 2D高级绘图 -
bluky999:
收集的资料挺多的 哈哈
基于Web的IM简介
即时消息(IM)指的是近似实时的消息交互。即时消息通常很短,虽然并不要求这样。IM通常用于会话模式,也就是说,消息的交互是一来一回的,并且很快,近似于交互式的会话。
提出了MESSAGE方法,扩展了SIP协议以传送IM消息。由于MSEEAGE是SIP消息,所以它继承了SIP协议所有的路由和安全特性。 MESSAGE用MIME格式的body携带具体内容。MESSAGE本身并不建立dialog;在多数应用里,每条IM消息都是独立的,颇似分页消息。 MESSAGE也可以在dialog内发送。
1.简介
IM的历史。
SIP协议提供了在线功能,也提供了面向会话的通信应用,但还没有提供即时消息功能。
本规范提出了一个新的方法:MESSAGE,用于在body里携带即时消息的内容。
2.适用范围
用SIP传递即时消息,有两种模式:
pager模式,用信令传递IM,消息之间没有明确的联系,或者说“会话”的概念仅存在于用户的想象中。
session模式,用INVITE建立,用BYE结束的一个会话,IM是其中的媒体流。
两种模式都有存在的价值(设想一下腾讯公司QQ的普通消息和UDP直连的对话模式)。本文只关心pager模式。
为什么MESSAGE消息之间不关联。试想一下先创建一个dialog,MESSAGE在dialog内进行传递。这样所有的消息必然走相同的路由,由于 IM消息的流量通常很大,这样势必会引起拥塞问题。另一个问题是,如果MESSAGE必须走in dialog,那么IM的目的地就势必和会话的目的地一 样,而这种限制是不合理的。(阐述发消息的对象可以与打电话的对象不同的事实,所以消息不应该从Dialog中走)
一个MESSAGE走in dialog的例子:voice会话的一个参与者想同其中的一人进行IM交互(即想给正在通话的人发消息),这时把IM和该会话联系在一起是比较合理的。但是纯粹是为了把几个IM联系在一起而让MESSAGE都走in dialog是不允许的。
3.操作简介
当一个人想给另外一个人发IM消息时,构造一个MESSAGE,发出去即可。请示URI可以是SIP URI,也可以是其它类型的地址。要发的即时消息放
在body里。body可以是任何MIME格式。可能用message/cpim会好一点,因为已有的IM系统标准是message/cpim格式。
MESSAGE请求到达目的地之前可能经过多个SIP proxy。
像SIP其它请求一样,收到MESSAGE应回临时应答和最终应答。200-OK只说明消息成功到达了目的地,并不代码用户已经阅读。
MESSAGE不创建dialog。
4.UAC的操作
SIP相关的操作参照rfc3261。
MESSAGE body必须支持plain/text格式。可以选择支持message/cpim格式。
由于不创建一个dialog,所以MESSAGE不应该包含contact头域。
MESSAGE可以在in dialog里发送,此时代表这个消息和某个dialog有关联关系(即发消息的URI为SIP URI)。
最终应答的含义,
200-OK:消息已成功送达目的地,但不保证对方用户已阅;
202-Accept:消息已成功发送到某网关,但不保证网关一定能把该消息送达目的地。
外发proxy有可能把MESSAGE分叉,可以加Expire头域,Date头域表明消息的生存时间。
5.使用IM URI
Request URI,From头域,To头域可以填SIP URI,实在不行也可以填IM URI,此时会有proxy解析成SIP URI。
和路由相关的头域中的URI必须是SIP URI。
6.代理的操作
和SIP相关的操作参见rfc3261,需要注意的是,代理可以对MESSAGE进行分叉(fork)。
7.UAS的操作
和SIP相关的操作参见rfc3261。
200-OK:UAS收到MESSAGE,应立即回200-OK,但是是否把消息的内容显示给用户与本地策略有关 (是不是可以用来制作黑名单功能?) 。200-OK不能带body,,也不能携带Contact头域。
202-Accepted:如果自己不是MESSAGE的最终用户,就回202-Accepted。意味着该MESSAGE会被尽力转发,但不保证一定能到达目的地。
4xx, 5xx :4xx, 5xx表示消息未被成功发送。
6xx :6xx表示消息虽被成功发送,但已被拒收。
支持MESSAGE就必须支持text/plain格式的MIME type。也可以选择支持message/cpim格式。
如果消息携带有Expire头域,就处理超时,否则没有超时的概念。
如果UAS收到消息时该消息已经超时,可以选择处理该消息这和本地策略有关。例如可以选择丢弃,也可以正常显示给用户(标明超时),或采取其它策略。
如果消息不能被正确中继,如何处理该消息也与本地策略有关。
8.拥塞控制
MESSAGE用信令携带媒体,所以流量会很大,需要特殊考虑。
如果可能,MESSAGE最好使用有拥塞控制的传输层协议,如TCP,SCTP。
消息本身的大小不一不要超过1300个字节,除非你知道确切的PMTU大小。
对于不采用Dialog方式的消息,发往同一个目的URI的MESSAGE,如果上一个transaction还没有结束,就不允许发送下一个MESSAGE;而且如果不是路由设置每一跳在传输中采用拥塞控制,用Dialog传送的MESSAGE也禁止这么做。
有人曾建议为了减少拥塞,MESSAGE不必回临时应答。实际上没有必要规定这个。因为很多代理服务器根本就不关心是否是MESSAGE方法,他们只管转发。
9.方法定义
MESSAGE
10.例子
描述User1向处于一个Domain(domain.com)中的User2,发送即时消息的过程,经过一个简单代理Proxy。
| F1 MESSAGE | |
| -----------------〉| F2 MESSAGE |
| |--------------------〉|
| | |
| | F3 200 OK |
| |<-------------------- |
| F4 200 OK | |
|<-------------------| |
User1 Proxy User2
1. User 1向domain.com的服务器发送请求信令F1,
MESSAGE SIP:user2@domain.com SIP/2.0
Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse
Max-Forwards:70
From: sip:user1@domain.com;tag=49583
To: sip:user2@domain.com
Call-ID: asd88asd77a@1.2.3.4
CSeq: 1 MESSAGE
Content-Type:text/plain
Content-Length: 18
Method type为MESSAGE,使用TCP协议发送(有拥塞控制),Body类型 text/plain,body长度18。
2. 代理Proxy收到请求F1,确认是从domain.com的服务器来的请求,到数据库中查询User2(注册过程中生成数据库),User2@domain.com匹配User2@User2pc.domain.com,生成信息F2 ,
MESSAGE SIP:user2@domain.com SIP/2.0
Via: SIP/2.0/TCP proxy.domain.com;branch=z9hG4bK123dsghds
Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse
received=1.2.3.4
Max-Forwards:69
From: sip:user1@domain.com;tag=49394
To: sip:user2@domain.com
Call-ID: asd88asd77a@1.2.3.4
CSeq: 1 MESSAGE
Content-Type:text/plain
Content-Length: 18
3. User2收到F2,显示,向Proxy产生响应消息F3
SIP/2.0 200 OK
Via: SIP/2.0/TCP proxy.domain.com;branch=z9hG4bK123dsghds;
received=192.0.2.1
Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse
received=1.2.3.4
From: sip:user1@domain.com;tag=49394
To: sip:user2@domain.com;tag=ab8asdasd9
Call-ID: asd88asd77a@1.2.3.4
CSeq: 1 MESSAGE
Content-Length:0
直接回应 没有Body(200-OK不能带body,,也不能携带Contact头域)
4. 服务器收到F3 去掉最顶端的Via,向下一个Via标识的地址(User1)发送F4
SIP/2.0 200 OK
Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse;
received=1.2.3.4
From: sip:user1@domain.com;tag=49394
To: sip:user2@domain.com;tag=ab8asdasd9
Call-ID: asd88asd77a@1.2.3.4
CSeq: 1 MESSAGE
Content-Length:0
11.安全性考虑
多数情况下,SIP请求是用来建立和修改会话的,但MESSAGE方法却用SIP请求传送媒体本身。因此安全性的问题需要特殊考虑。一般还要考虑端到端(end-to-end)的安全性。
11.1.代理认证
11.2.使用SIPS URI
11.3.端到端加密
提出了MESSAGE方法,扩展了SIP协议以传送IM消息。由于MSEEAGE是SIP消息,所以它继承了SIP协议所有的路由和安全特性。 MESSAGE用MIME格式的body携带具体内容。MESSAGE本身并不建立dialog;在多数应用里,每条IM消息都是独立的,颇似分页消息。 MESSAGE也可以在dialog内发送。
1.简介
IM的历史。
SIP协议提供了在线功能,也提供了面向会话的通信应用,但还没有提供即时消息功能。
本规范提出了一个新的方法:MESSAGE,用于在body里携带即时消息的内容。
2.适用范围
用SIP传递即时消息,有两种模式:
pager模式,用信令传递IM,消息之间没有明确的联系,或者说“会话”的概念仅存在于用户的想象中。
session模式,用INVITE建立,用BYE结束的一个会话,IM是其中的媒体流。
两种模式都有存在的价值(设想一下腾讯公司QQ的普通消息和UDP直连的对话模式)。本文只关心pager模式。
为什么MESSAGE消息之间不关联。试想一下先创建一个dialog,MESSAGE在dialog内进行传递。这样所有的消息必然走相同的路由,由于 IM消息的流量通常很大,这样势必会引起拥塞问题。另一个问题是,如果MESSAGE必须走in dialog,那么IM的目的地就势必和会话的目的地一 样,而这种限制是不合理的。(阐述发消息的对象可以与打电话的对象不同的事实,所以消息不应该从Dialog中走)
一个MESSAGE走in dialog的例子:voice会话的一个参与者想同其中的一人进行IM交互(即想给正在通话的人发消息),这时把IM和该会话联系在一起是比较合理的。但是纯粹是为了把几个IM联系在一起而让MESSAGE都走in dialog是不允许的。
3.操作简介
当一个人想给另外一个人发IM消息时,构造一个MESSAGE,发出去即可。请示URI可以是SIP URI,也可以是其它类型的地址。要发的即时消息放
在body里。body可以是任何MIME格式。可能用message/cpim会好一点,因为已有的IM系统标准是message/cpim格式。
MESSAGE请求到达目的地之前可能经过多个SIP proxy。
像SIP其它请求一样,收到MESSAGE应回临时应答和最终应答。200-OK只说明消息成功到达了目的地,并不代码用户已经阅读。
MESSAGE不创建dialog。
4.UAC的操作
SIP相关的操作参照rfc3261。
MESSAGE body必须支持plain/text格式。可以选择支持message/cpim格式。
由于不创建一个dialog,所以MESSAGE不应该包含contact头域。
MESSAGE可以在in dialog里发送,此时代表这个消息和某个dialog有关联关系(即发消息的URI为SIP URI)。
最终应答的含义,
200-OK:消息已成功送达目的地,但不保证对方用户已阅;
202-Accept:消息已成功发送到某网关,但不保证网关一定能把该消息送达目的地。
外发proxy有可能把MESSAGE分叉,可以加Expire头域,Date头域表明消息的生存时间。
5.使用IM URI
Request URI,From头域,To头域可以填SIP URI,实在不行也可以填IM URI,此时会有proxy解析成SIP URI。
和路由相关的头域中的URI必须是SIP URI。
6.代理的操作
和SIP相关的操作参见rfc3261,需要注意的是,代理可以对MESSAGE进行分叉(fork)。
7.UAS的操作
和SIP相关的操作参见rfc3261。
200-OK:UAS收到MESSAGE,应立即回200-OK,但是是否把消息的内容显示给用户与本地策略有关 (是不是可以用来制作黑名单功能?) 。200-OK不能带body,,也不能携带Contact头域。
202-Accepted:如果自己不是MESSAGE的最终用户,就回202-Accepted。意味着该MESSAGE会被尽力转发,但不保证一定能到达目的地。
4xx, 5xx :4xx, 5xx表示消息未被成功发送。
6xx :6xx表示消息虽被成功发送,但已被拒收。
支持MESSAGE就必须支持text/plain格式的MIME type。也可以选择支持message/cpim格式。
如果消息携带有Expire头域,就处理超时,否则没有超时的概念。
如果UAS收到消息时该消息已经超时,可以选择处理该消息这和本地策略有关。例如可以选择丢弃,也可以正常显示给用户(标明超时),或采取其它策略。
如果消息不能被正确中继,如何处理该消息也与本地策略有关。
8.拥塞控制
MESSAGE用信令携带媒体,所以流量会很大,需要特殊考虑。
如果可能,MESSAGE最好使用有拥塞控制的传输层协议,如TCP,SCTP。
消息本身的大小不一不要超过1300个字节,除非你知道确切的PMTU大小。
对于不采用Dialog方式的消息,发往同一个目的URI的MESSAGE,如果上一个transaction还没有结束,就不允许发送下一个MESSAGE;而且如果不是路由设置每一跳在传输中采用拥塞控制,用Dialog传送的MESSAGE也禁止这么做。
有人曾建议为了减少拥塞,MESSAGE不必回临时应答。实际上没有必要规定这个。因为很多代理服务器根本就不关心是否是MESSAGE方法,他们只管转发。
9.方法定义
MESSAGE
10.例子
描述User1向处于一个Domain(domain.com)中的User2,发送即时消息的过程,经过一个简单代理Proxy。
| F1 MESSAGE | |
| -----------------〉| F2 MESSAGE |
| |--------------------〉|
| | |
| | F3 200 OK |
| |<-------------------- |
| F4 200 OK | |
|<-------------------| |
User1 Proxy User2
1. User 1向domain.com的服务器发送请求信令F1,
MESSAGE SIP:user2@domain.com SIP/2.0
Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse
Max-Forwards:70
From: sip:user1@domain.com;tag=49583
To: sip:user2@domain.com
Call-ID: asd88asd77a@1.2.3.4
CSeq: 1 MESSAGE
Content-Type:text/plain
Content-Length: 18
Method type为MESSAGE,使用TCP协议发送(有拥塞控制),Body类型 text/plain,body长度18。
2. 代理Proxy收到请求F1,确认是从domain.com的服务器来的请求,到数据库中查询User2(注册过程中生成数据库),User2@domain.com匹配User2@User2pc.domain.com,生成信息F2 ,
MESSAGE SIP:user2@domain.com SIP/2.0
Via: SIP/2.0/TCP proxy.domain.com;branch=z9hG4bK123dsghds
Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse
received=1.2.3.4
Max-Forwards:69
From: sip:user1@domain.com;tag=49394
To: sip:user2@domain.com
Call-ID: asd88asd77a@1.2.3.4
CSeq: 1 MESSAGE
Content-Type:text/plain
Content-Length: 18
3. User2收到F2,显示,向Proxy产生响应消息F3
SIP/2.0 200 OK
Via: SIP/2.0/TCP proxy.domain.com;branch=z9hG4bK123dsghds;
received=192.0.2.1
Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse
received=1.2.3.4
From: sip:user1@domain.com;tag=49394
To: sip:user2@domain.com;tag=ab8asdasd9
Call-ID: asd88asd77a@1.2.3.4
CSeq: 1 MESSAGE
Content-Length:0
直接回应 没有Body(200-OK不能带body,,也不能携带Contact头域)
4. 服务器收到F3 去掉最顶端的Via,向下一个Via标识的地址(User1)发送F4
SIP/2.0 200 OK
Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse;
received=1.2.3.4
From: sip:user1@domain.com;tag=49394
To: sip:user2@domain.com;tag=ab8asdasd9
Call-ID: asd88asd77a@1.2.3.4
CSeq: 1 MESSAGE
Content-Length:0
11.安全性考虑
多数情况下,SIP请求是用来建立和修改会话的,但MESSAGE方法却用SIP请求传送媒体本身。因此安全性的问题需要特殊考虑。一般还要考虑端到端(end-to-end)的安全性。
11.1.代理认证
11.2.使用SIPS URI
11.3.端到端加密
发表评论
-
【转】SIP对Instant Message的支持——MESSAGE方法
2008-05-26 14:44 4474Instant Message是指用户间实时的短消息通信,这些 ... -
dialog, transaction, session之我见
2008-05-06 11:12 4514SIP中3个很重要的概念,就是dialog, session和 ... -
SIP应答头
2008-04-07 14:20 24021xx = 通知性应答 100 正在尝试 180 正在拨打 ... -
SIP Servlet知识点总结【更新】
2008-04-02 18:33 28561) sip.xml处理http请求的web应用里的概念一样: ... -
【转】Ethereal简介
2008-04-02 13:39 1511Ethereal是一个开放源码 ... -
启动sailfin时问题:CLI156 Could not start the domal的解决办法
2008-04-01 16:21 1920Default server domain can be cr ... -
Sailfin自带的例子CallSetup的实现过程
2008-03-21 18:22 19721. 首先,UAC(可以是X-lite等)向Registrar ... -
Eclipse环境下开发基于Sailfin的Sip Servlet应用
2008-03-21 18:01 7228SailFin项目由爱立信公司开发,它基于具有健壮性和可扩展性 ... -
SIP: From ,Contact, Via 和 Record-Route/Route head
2008-03-21 15:37 11887From: 如果一个SIP消息中没有Contact或者Reco ... -
SIP电话设计思路
2008-03-19 10:06 16041. caller调用方法Call creat ... -
sailfin安装方法
2008-03-10 18:06 1908https://sailfin.dev.java.net/do ... -
SIP IM设计思路
2008-02-22 02:44 32731。启动客户端界面程序InstantMessagingGUI, ... -
SIP协议简介
2008-02-20 04:25 2543SIP( Session Initiation Proto ... -
Jain Sip知识点总结
2008-02-20 03:36 17131)register的时候from头和to头一样 2)requ ... -
Jain-Sip API
2008-02-20 02:17 2837http://snad.ncsl.nist.gov/proj/ ... -
[更新]SIP Communicator功能总结
2008-02-01 01:05 17991) contact list的meta data可以重名名, ... -
sip-communicator
2008-01-31 01:11 1572http://www.sip-communicator.org ... -
How to configure Eclipse to compile and debug SIP
2008-01-30 00:42 1416http://www.sip-communicator.org ...
相关推荐
《SIP协议RFC3428中文翻译:即时消息MESSAGE方法扩展详解》 SIP(Session Initiation Protocol)协议是一种用于控制多媒体通信会话(如语音和视频通话)的信令协议,它允许用户发起、修改和终止多媒体会话。然而,...
XMPP是一种基于XML的即时消息(IM)和出席协议,最初由Jabber开源社区在1999年开发,随后在2002年由XMPP工作组进行标准化工作,使之符合IETF的即时消息与出席技术标准。 #### 核心特性与功能 XMPP的核心特性在于其...
SIP SIMPLE协议通过RFC 3428和RFC 2778等文档为即时通讯和存在状态服务提供了标准化的SIP扩展。它使得用户可以在互联网上无缝地进行语音、视频通话、文字聊天以及分享自己的在线状态。了解并掌握SIP SIMPLE协议对于...
4. **引用标准**:本规范引用了多项国内外标准,如中国移动的IMS即时消息、Presence和Group业务总体技术要求,以及IETF(互联网工程任务组)的相关RFC(请求评论)文档,确保遵循行业最佳实践。 5. **附录**:包含...
它主要用于构建满足即时消息(Instant Messaging,IM)和出席(Presence)需求的应用程序。XMPP为交换XML数据提供了一种通用的、可扩展的框架,使得几乎可以进行实时的消息交换,以及出席状态信息的共享。XMPP协议...
IM即时通讯系统是一种常见的在线交流工具,用于实时的文字、语音、视频聊天以及文件传输等功能。在本提供的资源中,"IM聊天代码"是基于XMPP(Extensible Messaging and Presence Protocol)协议实现的一个聊天框架,...
XMPP(Extensible Messaging and Presence Protocol,可扩展消息传递及存在协议)是一种基于XML的开放标准,用于即时通讯(IM)和实时通信。RFC 3921是XMPP的核心规范之一,它详细定义了XMPP的用户存在与消息交换...
在聊天即时通讯(IM)场景中,WebSocket是理想的通信机制,因为它可以实现低延迟、高效率的消息传递。 在Android平台上,WebSocket的实现通常依赖于第三方库,如OkHttp、Socket.IO或环信等。下面将详细解释如何利用...
XMPP是一种基于XML的即时消息(IM)协议,它不仅提供了基本的即时通讯功能,还支持丰富的扩展特性,如多用户聊天、文件传输、语音和视频通话等。这一标准由Jabber软件基金会提出,并在2004年由网络工作组的Philip ...
本文定义提供了遵循RFC2779要求的基本的即时消息(IM)和出席信息功能的可扩展的消息和出席信息协议(XMPP)的核心功能的扩展. 本文取代了 RFC 3921
即时通讯(Instant Messaging,简称IM)是一种实时在线通信技术,让用户可以快速地交换文本消息、文件、音频和视频等信息。在iOS平台上实现即时通讯,通常会借助特定的框架,如本例中提到的XMPP(Extensible ...
- **概览**:XMPP是一种用于实时通讯的协议,旨在提供即时消息(Instant Messaging, IM)和出席信息(Presence)服务。 - **需求**:该文档定义了一系列的需求,确保XMPP协议能够满足特定的功能性和非功能性要求。...
随着信息技术的发展,即时通讯(Instant Messaging,简称 IM)已成为企业内部沟通的重要工具之一。它不仅能够提高工作效率,还能加强团队之间的协作与交流。本篇文章将详细介绍如何利用 Openfire 和 XMPP 协议来搭建...
10. **参考文献**:文档引用了其他的RFC,如RFC2779,用于即时消息和出席信息的需求,以及后续的RFC3921(XMPP-IM),定义了即时消息和出席信息的扩展。 11. **Nodeprep和Resourceprep**:这两个部分分别定义了节点...
- **RFC3920**定义了XMPP 1.0的核心功能,其中即时消息和出席信息的功能则由**XMPP-IM协议**进行扩展定义。 ##### 2.2 术语 - 文档中提到的关键字如"MUST"、"SHALL"等遵循**BCP14**、**RFC2119**的规定,用于明确...
此外,XMPP协议的扩展需求,如即时消息和出席功能,是在RFC2779中定义的,并由XMPP即时消息与出席(XMPP-IM)进一步具体化。 总的来说,XMPP协议是一个强大且灵活的框架,支持实时通信应用的构建,包括但不限于即时...
它不仅满足了即时消息和在线状态协议(IMPP)的要求[RFC2779],还遵循了即时消息通用配置文件(CPIM)的规范,后者是在IMPP工作组中制定的一项标准。 ##### 2.1 设计目标与假设 PRIM的设计目标在于提供一种高效、...
2002年,IETF成立XMPP工作组继续开发和完善Jabber协议以满足更广泛的即时消息和出席信息需求。最终,**RFC3920**文档定义了XMPP 1.0的核心部分,而更多具体的应用则定义在XMPP-IM协议中。 #### 2. 通用的架构 ####...
XMPP(Extensible Messaging and Presence Protocol,可扩展消息与出席协议)是一种开放的XML协议,用于即时消息传递(IM)和在线状态呈现(Presence)。它的前身是Jabber项目,最早由Jabber社区开发,后来被标准化...
XMPP(可扩展消息和出席协议)是一种基于XML的开放即时消息传递技术,最初由Jabber开源社区开发,并于2002年成为IETF即时消息与出席(IM)的官方标准。它利用XML元素在任意两个网络端点间近实时地交换结构化信息,并...