Jingle与P2P技术 jabber(xmpp)讨论 RooyeeMessenger

来源:百度文库 编辑:神马文学网 时间:2024/04/20 05:55:31

 

limumu 2009-04-29 15:44 由于笔者时间上原因,并没有仔细研读所有的文档;再者水平有即的原因,可能存在着不正确的描述,敬请指正。
Todo:增加文档自述
XMPP协议及其扩展
XMPP协议
Extensible Messaging and Presence Protocol即可扩展消息与在线感知协议,它是一个基于XML流的即时通信协议。由Jabber工作组于1999年开始研发,2003(有待确认)被IETF工作组确立为标准的即时通信协议。此后又经过几年的发展与完善,逐渐形成了现在的协议框架
核心文档
Extensible Messaging and Presence Protocol (XMPP): Core
这里XMPP协议框架中最重要的文档,它定义了XMPP协议框架下应用的网络架构,这是一个非常开放的框架,从而使XMPP协议的极具可扩展性、极具开放性。它引入了XML Stream与XML Stanza,并规定XMPP协议在通信过程中都使用XML标签。使用XML标签从根本上说是由于协议开放性与扩展性的需要。此外,在通信的安全方面,把TLS安全传输机制与SASL认证机制与引入到内核,与XMPP进行无缝的连接,为协议的安全性、可靠性奠定了基础。
Core文档还规定了错误的定义及处理、XML的使用规范、JID的定义、命名规范等等。所以这是所有基于XMPP协议的应用都必需支持的文档
Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence
Core文档中只对支持XMPP协议的应用作出了最基本的规范,并没有对消息与在线状态进行详细的定义。从应用的角度来讲,Core文档(RFC3920)中定义的是从连接服务器到用户上线之前的工作。
本节中讨论的文档,规定的是用户成功登陆到服务器之后,发布更新自己的在线、好友管理、发送即时聊天消息等等业务。所有的这些业务都是通过3种基本的XML Stanza来完成的,IQ Stanza, Presence Stanza, Message Stanza。
RFC3921还对阻塞策略进行了定义,定义是多种阻塞方式。
可以说,RFC3921是RFC3920的充分补充。两个文档结合起来,就形成了一个基本的IM通信协议平台,在这个平台上可以开发出各种各样的应用。XMPP把复杂的具体的应用通过扩展来规定
其他文档
Mapping the Extensible Messaging and Presence Protocol (XMPP) to Common Presence and Instant Messaging (CPIM)
Internationalized Resource Identifiers (IRIs) and Uniform Resource Identifiers (URIs) for the Extensible Messaging and Presence Protocol (XMPP)
(Todo增加对它的说明)
XMPP协议的扩展框架
RFC3920与RFC3921两个核心文档奠定了XMPP协议框架的基础,在这个框架上可以方便的扩展出各种各样的应用。如果说核心的文档规定的XMPP的骨架的话,那么这些扩展就是XMPP应用上的肉。
Jabber Software Foundation对扩展进行了规范。如果一个扩展协议可发布成为公开的扩展应用,那么它必需遵循XMPP Extension Protocols。到目前为止,已经有很多的应用扩展,这些扩展涉及到实际IM系统中需的各种需求。
扩展协议的标准化进程
Todo:查阅有关文档,在此做简要说明
根据笔者目前的了解,主要可分为以下几个方面
基础应用扩展
[1] XEP-0004 Data Forms
[2] XEP-0030 Service Discovery
[3] XEP-0076 Malicious Stanzas
[4] XEP-0053 XMPP Registrar
[5] XEP-0090 Entity Time
[6] XEP-0092 Software Version
[7] XEP-0114 Jabber Component Protocol
[8] XEP-0115 Entity Capabilities
[9] XEP-0124 HTTP Binding
[10] XEP-0138 Stream Compression
[11] XEP-0154 User Profile
IM应用扩展
[1] XEP-0045 Multi-User Chat
[2] XEP-0047 In-Band Bytestreams (IBB)
[3] XEP-0049 Private XML Storage
[4] XEP-0055 Jabber Search
[5] XEP-0060 Publish-Subscribe
[6] XEP-0077 In-Band Registration
[7] XEP-0083 Nested Roster Groups
[8] XEP-0084 User Avatar
[9] XEP-0107 User Mood
[10] XEP-0146 Remote Controlling Clients
[11] XEP-0163 Personal Eventing via Pubsub
[12] XEP-0172 User Nickname
P2P扩展
[1] XEP-0096 File Transfer
[2] XEP-0003 Proxy Accept Socket Service
[3] XEP-0166 Jingle
[4] XEP-0167 Jingle Audio Content Description Format
[5] XEP-0176 Jingle ICE Transport
[6] XEP-0177 Jingle Raw UDP Transport
[7] XEP-0180 Jingle Video Content Description Format
[8] XEP-0181 Jingle DTMF
[9] XEP-0183 Jingle Telepathy Transport Method
Todo:对上面列出的文件做简单的介绍,如果不是很确定的文件,则特别说明
上面列出的只是笔者工作中涉及到的一些文档,并实现了部分的扩展协议。由于工作上原因,有些文档只是有所了解,而没有深入研读。XMPP官方网站上列出了
基于XMPP协议的产品
现在已经有很多基于XMPP协议开发的产品,很多公司也选择她作为即时通信的协议。Blogcn公司新开发的Rabo3.0中即时通信采用就是XMPP协议。Google公司推出即时通信工具,gtalk也采用的是XMPP协议[参考gtalk]。在开源领域,也已经出现了很多开源的工程,即有开源的客户端也有开源的服务器。

Jingle扩展框架
Jingle是XMPP协议上的扩展协议,它着手解决在XMPP协议框架下的点对点的连接问题,也即P2P连接。在Jingle框架下,即使用户在防火墙或是NAT网络保护之下,也能够建立连接,从而提供文件传送、视频、音频服务等等。
Jingle扩展
Jingle扩展主要包含以下几个文件:
XEP-0166 Jingle
这是Jingle扩展框架的纲领文件,这个扩展定义Jingle协议应用的特点、应用的场合,也决定了Jingle协议自身的特点[[viii]]。从作者信息来看,Jingle协议是由google公司开发的。它作了如下的规定:
1) 目标是建立点对点的连接,不管是否在防火墙或是NAT网络下
2) 将传输与内容分离
3) 有关Jingle会话的过程
XEP-0167 Jingle Audio Content Description Format
Todo增加描述
XEP-0176 Jingle ICE Transport
在Jingle框架下,它属于Jingle的传输方式。这个文件解决了如何让防火墙或是NAT保护下的实体建立P2P连接的问题。
从协议的名字可以看出,它是利用了ICE协议来建立P2P连接的。ICE协议是一个基于STUN协议的一个旨在建立实体间P2P连接的协议(下文中有专门的说明)。XEP-0176所做的工作就是,将ICE协议与XMPP协议结合起来,也就是用XMPP协议作为ICE的signal channel,在它的协调之下建立连接。
XEP-0177 Jingle Raw UDP Transport
顾名思义,XEP-0177 Jingle Raw UDP Transport是直接建立连接,它也是一种传输的方式。但是与XEP-0176 Jingle ICE Transport方式不同,它只能建立没有防火墙且在同一网络下面的P2P连接。
XEP-0180 Jingle Video Content Description Format
Todo增加描述
XEP-0181 Jingle DTMF
XEP-0183 Jingle Telepathy Transport Method
Rabo3.0中采用的文件传输协议
由于到目前为止,Jingle框架下还没有专门的文件传送协议(即内容为文件)。所以,Rabo在开发中,采用的是自定义的基于Jingle框架的文件传送协议。这个协议的正文请参考《P2P文件、文件夹传送扩展协议BFT――Blogcned File Transfer 1.0》版本[[xvii]]
Jingle框架的特点
传输内容与传输方式分离
Jingle在设计时,就将传输的内容与传输的方式进行分离,内容可以利用多种传输方式进行传输,内容是复杂多样的,对传输方式也有着不同的要求。而传输方式也有多种,不同的传输方式,可以应用到不同的场合。
在Jingle中目前有对Audio、Video进行专门的规定。XEP-0167: Jingle Audio via RTP与XEP-0180 Jingle Video via RTP。由于还没有专门对它进行研究过,所以这里先不作进一步的描述[todo]。
在传输方式上,也有很多种,这些在前面介绍Jingle扩展的文件时有提到过。
可扩展性
Jingle框架传承了XMPP协议的特点,也极具可扩展性。这得益于传输内容与传输方式的分离的设计理念。
基于Jingle提供的几种传输方式下,我们可以根据需求设计支持不同的传输内容。比如文件传送、目录共享,都可以很方便的添加进来。这些扩展在gtalk中也得到应用。
值得专门提出的是,Rabo3中的采用的文件传输协议也是基于XEP-0176 Jingle ICE Transport专门设计的。
可部署性
Jingle扩展框架在应用时,非常的方便。在两个实体之间要建立P2P连接时,只要实体双方都支持相应的传输方式与传输内容,在理想的情况下,它不需要XMPP服务器的任务支持,也不需要其它第三方的中转,就可以建立连接。理想的情况是指,双方可以直接建立连接的情况下,比如在同一个局域网或者没有防火墙保护。
如果在不理想的情况下,原先的XMPP网络框架[2]:
C1----S1---S2---C3 |C2----+--G1===FN1===FC1
只需要作简单的扩展即可支持Jingle的P2P连接。
由于在不理想的情况下,两个实体之间建立连接需要通过XEP-0176 Jingle ICE Transport协议来建立。这种传输方式是基于ICE&STUN的,所以只需要部署STUN服务器。如果愿意的话,还可以部署stun relay server[],这样就可以支持所有情况下的P2P连接,但是部署stun relay server的代价是昂贵的[参考stun relay server的部署]。
Jingle与P2P技术
Jinlge中XEP-0176 Jingle ICE Transport传输方式支持在防火墙与NAT网络保护下的P2P连接的。
XEP176本身并没有探讨如何建立P2P连接,它所做的工作就是使用ICE与STUN协议来建立连接。ICE是一个标准的建立P2P连接性检查的协议,它自身不能独立的工作,而需要在信号通道的协调下建立连接。ICE在描述时,是采用SIP协议[参考sip协议]作为它的信道。
XEP176就是将ICE中的信道改用XMPP,在XMPP的协调下建立P2P连接。
Blice 1.0
Blice是由Blogcn公司开发的基于ICE与STUN协议的库,它带有以下功能:
[1] 实现STUN协议,包括了STUN的客户端与简化的服务端,因此1.能够发现自身的映射地址2.发现STUN请求中的对方的映射地址
[2] ICE协议的实现,是基于STUN协议的建立连接性检查应用。Blice1.0中基本上实现了ICE规范中的大部分内容,但并不完全兼容[参考Blice程序设计]。

参考文献

--------------------------------------------------------------------------------
http://www.xmpp.org/about/history.shtml,History of XMPP
[ii]Saint-Andre, P., “Extensible Messaging and Presence Protocol (XMPP): Core,” RFC 3920, October 2004
[iii]Saint-Andre, P., “Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence,” RFC 3921, October 2004
[iv]XMPP Standards Foundation,XEP-0001 XMPP Extension Protocols, Version: 1.18, 2006-12-07
[v] XMPP Extensions
[vi] Jabber/XMPP server implementations
[vii] Jabber/XMPP clients
[viii] Scott Ludwig, Joe Beda, Peter Saint-Andre,XEP-0166: Jingle, Version: 0.17, 2007-06-20
[ix] Scott Ludwig, Peter Saint-Andre, Sean Egan, Robert McQueen,XEP-0167: Jingle Audio via RTP, Version: 0.9, 2007-04-17
[x] Peter Saint-Andre, Joe Beda, Scott Ludwig, Joe Hildebrand, Sean EganXEP-0176: Jingle ICE Transport, Version: 0.9, 2007-06-28
[xi]Interactive Connectivity Establishment (ICE): A Methodology for Network Address Translator (NAT) Traversal for Offer/Answer Protocols . Work in progress.
[xii]J. Rosenberg, C. Huitema, R. Mahy, D. Wing,Simple Traversal Underneath Network Address Translators (NAT) (STUN)draft-ietf-behave-rfc3489bis-04,Internet-Draft, October 23, 2006,Expires: April 26, 2007
[xiii] Joe Beda, Peter Saint-Andre, Scott Ludwig, Joe Hildebrand, Sean Egan,XEP-0177: Jingle Raw UDP Transport, Version: 0.7, 2007-06-25
[xiv] Peter Saint-Andre, Milton Chen,XEP-0180: Jingle Video via RTP, Version: 0.8, 2007-05-23
[xv] Peter Saint-Andre, Sean Egan,XEP-0181: Jingle DTMF, Version: 0.6, 2007-06-20
[xvi] Peter Saint-Andre,XEP-0183: Jingle Telepathy Transport, Version: 1.0, 2006-04-01