您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页xmpp协议

xmpp协议

来源:爱go旅游网


XMPP协议分析-原理篇

分类: Computer Network 2009-11-25 20:13 2093人阅读 评论(2) 收藏 举报

XMPP协议简介

XMPP协议(Extensible Messaging and PresenceProtocol,可扩展消息处理现场协议)是一种基于XML的协议,目的是为了解决及时通信标准而提出来的,最早是在Jabber上实现的。它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。并且XML很易穿过防火墙,所以用XMPP构建的应用不易受到防火墙的阻碍。利用XMPP作为通用的传输机制,不同组织内的不同应用都可以进行有效的通信。

XMPP协议特点

1)所有XMPP信息都是以XML为基础的,信息交换的事实标准,扩展性强

2)XMPP系统是一个分布式系统,每台服务器控制自己的资源,但是如果需要,它能与外在的系统进行通信。XMPP服务器利用开放的XML协议来进行S2S(Serverto Server)通信,就像在C2S(Client to Server)一样。相比之下,大多数的IM系统使用了只是支持C2S/S2C通信的协议,因此Jabber/XMPP服务器具有更大的灵活性。

3)XMPP协议是公开的,程序则开放源代码。定义了客户端和服务器端的交互要经由XML流。普通消息类型(message),如改变状态(presence),传递消息内容或查询/更新(info/quey)应用则用每个指定的命名空间(namespace)来建立。

4)状态(Presence)在整个持久连接中。通过持久连接的有效维持,XMPP协议一直有在网络中维持存在和可用信息的能力。

5)XMPP允许建立并行的TCP套接字连接对所有连接上的客户端和服务器端。一旦建立连接,则只有当状态改变,例如存在的改变,通过这个连接传输数据。既然这个连接是持久的,那么设置、认证、状态查找功能都不用每次都重复执行。这种持久的套接字的连接使得XMPP能够更有效的支持高级的具有存在能力的应用在带宽和处理资源的使用中。

_______________________________________________________________________________________

1

6)Jabber/XMPP系统是模块化的,而且Jabber/XMPP的设计强调如何实现可伸缩性、安全性和可扩展性。

XMPP协议分析

XMPP中定义了三个角色:客户端,服务器,网关。

通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS (短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。

XMPP的基本网络结构如下:

C1----S1---S2---C3

|

C2----+--G1===FN1===FC1

符号表示:C1,C2,C3=XMPP客户端;S1,S2=XMPP;服务端G1=在XMPP和使用外部消息网络(非XMPP)的协议之间转换的网;FN1=外部消息网络;FC1=外部消息网络的客户端。

(1)服务器

服务系统是XMPP通信的智能提取层,它主要负责:管理来自其他个体的会话连接或者XML流(streams)和来自客户端、服务器、其他个体的认证发送在XML流实体之中的适当的XML地址节点。大多数XMPP服务都允许存储一些客户端数据(比如联系人列表),在这种情况下,服务直接面向这个客户端处理XML数据,而不是其他个体。 (2)客户端

大多数客户端是通过TCP直接连接,并且使用XMPP获得服务器提供全部-12-第2章Jabber协议原理及其应用功能和其他服务。许多资源通过认证的客户端也许同时连接到服务器,定义在XMPP地址的每个资源是不同的(比如)建议服务器和客户端采用的端中是5222。

_______________________________________________________________________________________

2

(3)网关

它的主要功能是将XMPP协议转换成外部消息(non-XMPP)系统使用的协议,也将返回的数据转换成XMPP。这些通信是基于网关和服务器,基于网关和外部消息系统之间的。

XMPP消息格式

Jabber/XMPP系统使用XML流在不同实体之间相互传输数据。在两个实体的连接期间,XML流将从一个实体传送到另一个实体。在实体间,有三个顶层的XML元素:。每一个都包含属性和子节点。下面将分别描述这些元素。

1)消息(message)元素:

一个即时消息系统最基本的功能就是能够在两个用户之间实时交换消息,元素就提供了这个功能。每条消息都有一个或多个属性和子元素。属性“from”和“to”分别表示了消息发送者和接收者的地址。也可以包含一个“type”属性,这给接收者一个提示,这个消息是什么样的消息。表3-1给出了“type”属性的可能取值。中也可以包含“id”属性,用来唯一的标识一个输出消息的响应。

2)状态(presence)元素:

元素用来传递一个用户的存在状态的感知信息。用户可以是“available”,要么是“unavailable”,“Hide”等。当用户连接到即时消息服务器后,好友发给他的消息就立即被传递。如果用户没有连接到服务器,好友发给他的消息将被服务器存储起来直到用户连接到服务器。用户通过即时消息客户端自己控制可用性。但是,如果用户断开了同服务器的连接,服务器将发送给订阅了这个用户的存在信息的用户通知他们用户已经不可用。还包含了两个子元素:包含了一个对的文本描述。

3)IQ(InfoIQ元素是Jabber/XMPP消息协议的第三个顶层元素。IQ代表\"Info/Query\",用来发送和获取实体之间的信息。IQ消息是通过“请求/响应”机制在实体间进行交换的。IQ元素用于不同的目的,它们之间通过不同的命名空间来加以区分。在Jabber/XMPP消息协议里有许多的命名空间,但最常用的命名空间是:\"jabber:iq:register\。

_______________________________________________________________________________________

3

上面描述了Jabber协议的三个顶层节点。通过这种格式Jabber消息不仅可以是简单的文本(text),而且可以携带复杂的数据和各种格式的文件,也就是说Jabber不仅可以用在人与人之间的交流,而且可以实现软件与软件或软件与人之间的交流。Jabber的这种功能大大扩展了即时通信的应用范围。 XMPP工作机制

例如:一个终端名字是Remeo,通过服务器montague.lit与其他的用户相连,其他的用户

通过服务器juliet@capulet.lit建立连接。

第一步Romeo开始通过发送一个stream包与服务器montague.lit取得联系,这一步包含了鉴权,登录等等。

第二步Romeo获取了他的联系人列表,通过向服务器montague.lit发送字段请求,按照下面的协议。

第三步Romeo发送了一个presence请求到服务器montague.lit,然后会将这个信息广播到他的所有好友。

第四步如果Romeo的联系人都在线,就会将presence回复给Romeo,告知自己的状态。

_______________________________________________________________________________________

4

第五步Romeo和Juliet开始交换信息,进行聊天。

hi!

hi yourself!

以文档的观点来看,客户端或服务器发送的所有XML文本连缀在一起,从构成了一个完整的XML文档。其中的stream标签就是所谓的XML Stream。在中间的那些...这样的XML元素就是所谓的XML Stanza(XML节)。XMPP核心协议通信的基本模式就是先建立一个stream,然后协商一堆安全之类的东西,中间通信过程就是客户端发送XML Stanza,一个接一个的。服务器根据客户端发送的信息以及程序的逻辑,发送XML Stanza给客户端。但是这个过程并不是一问一答的,任何时候都有可能从一个方发信给另外一方。通信的最后阶段是关闭流,关闭TCP/IP连接。

XML流:

_______________________________________________________________________________________

5

可扩展消息处理现场协议(eXtensible Messaging and Presence Protocol , XMPP)是一种基于可扩展标记语言(eXtensible Markup Language, XML)的近端串流式即时通信协议。它将现场和上下文敏感信息标记嵌入到XML 结构化数据中, 使得人与人之间、应用系统之间以及人与应用系统之间能即时相互通信。XMPP 协议已被批准为互联网即时通信协议标准。 1 XMPP 的地址和数据结构 1.1 实体地址

XMPP 整体框架下图 所示。图中, XMPP 框架的各类实体(如XMPP 客户、服务器和网关等) 的地址称为Jabber地址(Jabber Identifier, JID)。JID 惟一确定进行即时消息和在线状态信息通信的对象或实体, 并可兼容其他即时通信系统( 如MSN 等) 相应的实体标识及其在线状态信息。其语法规则为: [节点″@″] 域名[″/″资源], 其中各个域的长度不能超过1 023 字节, 总长度最大为3 071 字节。

此主题相关图片如下:

域名指定了实体连接的XMPP 服务器。每个可用XMPP 服务器都拥有一个完整域名, 域名可在域名系统(DNS)中查找; 节点可表示某用户、一类应用或某项服务,所有节点都对应一个精确的域名; 资源用来识别属于用户的特殊对象(如设备或位置), 允许一个用户同时以多个资源与同一XMPP 服务器连接, 如yb@sdpt.com/lab、yb@sdpt.com/chat。 1.2 XMPP 的数据结构

由于XMPP 是基于XML 的协议, 因此用户可根据自己的需要定义标记, 表述几乎任何一种结构化数据, 并可方便地创建定制的应用或增加功能。 1.2.1 三个顶级XML 元素

XMPP 定义的3 个关键顶级XML 元素为(info/query), 每个元素都可以通过属性和名字空间包含大量数据, 其属性和名字空间都是XMPP的组成部分。

元素用来包含2 个XMPP 实体间互相发送的消息内容; 元素表示实体可用性信息, 可用性信息有“可用”和“不可用”2 种; 元素用来构建2 个

_______________________________________________________________________________________

6

实体间的会话, 并且允许实体间来回传送XML 格式的请求和响应以便取得或设置公共的用户信息, 如名字等。

即时通信中名字冲突问题使用XML 的命名空间特性来解决。XML 命名空间定义了一种将XML 中使用的元素和属性与统一资源定位符(Uniform Resource Locator,URL)引用联系起来对元素和属性进行定义的方法。

1.2.2 XMPP 的数据结构

从结构上看, XMPP 有3 种数据: XML 流、流认证和XML 节。XML 流是实体交换XML 元素的容器,以开始, 以结束, 是通信双方采用异步方式进行数据传输的标准方法, 在整个XMPP 通信过程中处于最外层; XML 节是实体通过XML 流传输的结构化信息单元, 在XML 流中以深度为1 的子标记开头, 并以深度为1 的子标记结束, 这些标记为。XML 节也可通过包含其他子元素来传送结构化信息, 是实际需要交换的信息所在地; 流认证是在XML 流中有关协商传输层安全协议、简单认证与安全层协议和服务器回拨认证协议完成通信认证、加密等目的的数据交互, 是XMPP 安全机制的重要组成部分。

XMPP 为XML 流扮演通用“传输层”的角色。XML 流中包含传输的认证信息和现场消息, XMPP 能使数据高效路由至最合适的请求源, 并最大限度地简化客户机上的实现, 使跨应用实时交流信息成为可能。 2 工作过程

(1)节点(如yb、pt)向本地服务器连接。

①XMPP 用户通过开启一个从客户端到服务器端的XML 流, 来申请一个在服务器上的Socket 连接。 SEND: xmlns=′jabber: client′

xmlns: stream=′http: //etherx.jabber.org/streams′>

②服务器通过开启一个从服务器到客户端的XML 流进行回复。 RECV: xmlns=′jabber: client′

xmlns: stream=′http: //etherx.jabber.org/streams′> (2)节点向本地服务器申请登录。

①用户询问登录服务器时需提供的信息。 SEND:

yb

②服务器回应用户, 告知用户登录所需要的信息。 ③用户提供所需的信息。

④服务器响应一个空的类型为“result”的iq 元素, 表明登录成功。

RECV:

⑤yb 用户发送当前状态给服务器, 表明其在线。 SEND:

Online

(3)用户获得花名册, 好友增加一个联系人( 如yb 获知朋友sd 在线) 。 (4)用户间发送消息( 如yb 向sd 发送消息) 。 用户发送一条消息:

SEND: Where are you?

_______________________________________________________________________________________

7

服务器会根据XMPP 用户的会话信息加上一个源地址, 这样接收者收到消息时, 消息中已经包含了源地址。

(5)XMPP 服务器根据目标JID 中的域名查找、连接到目标服务器并进行认证(如sdpt.com 使用DNS 查找jabber.org, 连接到jabber.org 服务器上并进行认证) 。

(6)XMPP 服务器jabber.org 证实sd 连接到该服务器上, yb 被授权与sd 进行通信。 (7)数据在yb 与sd 间流动。

(8)用户退出, 退出时只需要关闭。 3 结束语

简单的接口、开放的协议、互联的架构、权威的标准再加上坚实的用户基础是XMPP 的优势。相信XMPP 将为即时通信技术的运用提供更为广阔的空间

IM(Instant Messaging)正在被广泛地采用,特别是在公司与它们的客户互动联接方案上。为了解决即时通讯的标准问题,IETF成立了专门的工作小组,研究和开发与IM相关的协议。

目前IM有四种协议:即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)、针对即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)以及XMPP。PRIM与XMPP、 SIMPLE类似,但已经不再使用了。

IMPP 主要定义必要的协议和数据格式,用来构建一个具有空间接收、发布能力的即时信息系统。到目前为止,这个组织已经出版了三个草案RFC,但主要的有两个:一 个是针对站点空间和即时通讯模型的(RFC 2778);另一个是针对即时通讯/空间协议需求条件的(RFC2779)。RFC2778是一个资料性质的草案,定义了所有presence和IM服务 的原理。RFC2779定义了IMPP的最小需求条件。另外,这个草案还就presence服务定义了一些条款,如运行的命令、信息的格式,以及 presence服务器如何把presence的状态变化通知给客户。

SIMPLE是目前为止制定的较为完善的一个。SIMPLE和 XMPP两个协议,都符合RFC2778和RFC2779 。SIMPLE计划利用SIP来发送presence信息。SIP是IETF中为终端制定的协议。SIP一般考虑用在建立语音通话中,一旦连接以后,依* 如实时协议(RTP)来进行实际上的语音发送。但SIP不仅仅能被用在语音中,也可以用于视频。SIMPLE被定义为建立一个IM进程的方法。 SIMPLE在2002年夏季得到额外的信任,目前,微软和IBM都致力于在它们的即时通讯系统中实现这个协议。

SIMPLE小组致力 于进程模式的操作,这将提升运行效率,使基于SIP的机制能够进行会议和三方电话交谈控制,也考虑到能和未来提供的许多新特性实现兼容并提升表现能力。有 了进程模式,SIMPLE使用SIP来建立一次进程,再利用SDP(进程描述协议)来实际传输IM数据。

XMPP是一种基于XML的协 议,它继承了在XML环境中灵活的发展性。这表明XMPP是可扩展的。可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统 和基于地址的服务等应用程序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系 统添加功能。

XMPP目前在免费源代码开放Jabber IM系统中被广泛采用。2002年,这个产品有超过5万的下载量。XMPP拥有成千的Jabber开发者,以及大约数万台配置的服务器和超过百万的终端用户。

在XMPP能够成为标准前,还需要努力克服它本身的缺点。对于网络协同工作者而言,需要加强安全性和互连性。 (二)介绍

随 着即时信息应用的普及,人们期待着产生相关的标准,否则就无法做到互通有无,阻碍即时信息应用的发展。这一工作仍旧由IETF来完成。他们的工作取得了一 定进展,但是也有许多困难需要征服。正像有人比喻的那样,如果说标准是一种被推广的“普通话”,可以促进厂商产品的互操作性,那么,目前看

_______________________________________________________________________________________

8

来,IETF从 事的即时信息的标准研究和制定,似乎更像修建巴比伦塔。因为可以使用的协议很多,但在互通方面却还有不少工作要做。

随着2002年秋季可扩展的信息和表示协议(eXtensible Message and Presence Protocol,XMPP)工作组的创立,目前在IETF内部已经有4个工作组授权开发与IM有关的协议。

当 然,这就产生了一个问题:企业应该采用哪一种IM,才可以使得到服务的客户最多?针对这个问题的讨论,可以分为两部分:首先是网关的执行和提供;其次是了 解有关的达成协作的协议。在IETF中,把IM划分为4个协议,即即时信息和表示协议(Instant Messaging and Presence Protocol,IMPP)、表示和即时信息协议(Presence and Instant Messaging Protocol,PRIP)、针对即时信息和表示扩展的会话发起协议(Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensions,SIMPLE),以及XMPP。

最 初研发IMPP也是为了创建一种标准化的协议,但是今天,IMPP已经发展成为基本协议单元,定义所有IM协议应该支持的核心功能集。XMPP和 SIMPLE是架构,有助于实现IMPP描述的规范。PRIM最初是基于IM的协议,与XMPP和SIMPLE类似,但是后来有了一些变化。以上只是粗略 的介绍,下面将详细讨论常用的3个协议的具体内容。 1.IMPP定义基本模型

IMPP协议组定义了协议和数据格式,以满足Internet规模的终端用户所需要的信息表示、告知,以及即时信息系统。这组协议最初的任务就是为了实现这一服务,定义明确的设计目标和需求。

即使在Internet初期,信息表示和即时信息系统也不是特别新的事物。多用户系统上的用户已经可以在本地和其他用户进行实时交流。但是,随着计算结构向分布式系统发展,实现这种功能显得更加困难。IMPP的目标就是通过定义协议的基本元素来解决这一难题。

到 目前为止,IETF的IMPP工作小组已经出版了3个RFC文档,其中最重要的两个是“表示和即时信息模型”(RFC 2778)和“即时信息/表示协议的需求”(RFC 2779)。RFC 2778是一篇报告性的RFC,定义了所有的表示和即时信息服务。表示服务用于接收、存储和分发信息,包括用户跨越一组设备进行通信的能力和主动性。总 之,一个即时信息服务负责即时邮箱接收和传递即时信息。

RFC 2779定义了实现IMPP的最小需求,后来在它的基础上形成了通用表示和即时信息(Common Presence and Instant Messaging,CPIM)Internet草案。CPIM提供了在即时信息和表示服务之间的互操作所需要的细节。 2.SIMPLE融合多媒体

IETF 正在制定以下两种协议:SIMPLE和XMPP协议,它们都遵守RFC2778和RFC2779,并且实现CPIM协议。到目前为止,SIMPLE协议已 经取得了很大进展。正如其协议名所指示的那样,SIMPLE的目的是通过SIP协议实现分布式的信息表示。SIP也是IETF制定的协议,主要是称为代理 的端点用于创建、修改和结束它们之间的会话。这个协议对于事先约定好的通信极为有效。一般认为,SIP协议可以用在建立语音呼叫方面,一旦通信双方建立起 联系,就依*实时协议(Real Time Protocol,RTP)完成实际的语音传送。

但是,这并不意味着SIP协议只在用于语音方面。实际上,正如这个标准所指出的那样,它与建立会话的方法和种类无关。而且SIP协议在其结构中包含了表示信息的结构。人们将看到,基于文本的即时信息可以同语音和视频呼叫融合在一种单独的结构中。

目前,SIMPLE协议已经被定义为一种建立即时信息会话的方法。Microsoft和IBM在其即时信息系统中都采用了该协议。对于SIMPLE协议指责较多的是其融合语音和即时信息的效率不高。 3.XMPP基于XML

面 对SIMPLE协议的不足,开放源代码社团已经提出接纳XMPP。基于XML的协议XMPP正在自由开放源代码的Jabber即时信息系统中得到广泛开 发。在2002年,就有超过5万个产品可以下载。在个人应用方面,AOL和Yahoo已经发展了大量用户,他们的产品都基于XMPP协议。

_______________________________________________________________________________________

9

为 什么会出现另一个标准的即时信息结构呢?对于新手来说,因为XMPP是一个基于XML的协议,因此它继承了在XML环境中开发的灵活性。这意味着XMPP 是可扩展的,可以方便地创建定制的应用和增加功能。由于XML可以轻易地通过防火墙,所以基于XMPP的应用和即时信息服务不受防火墙的。XMPP的 主要缺点是安全性不高。

_______________________________________________________________________________________

10

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务