`
ncs123
  • 浏览: 103423 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

XMPP协议分析

阅读更多
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能够更有效的支持高级的具有存在能力的应用在带宽和处理资源的使用中。

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地址的每个资源是不同的(比如<node@domain/home>和<node@domain/work>)建议服务器和客户端采用的端中是5222。

(3)网关

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



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

1)消息(message)元素:

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

       2)状态(presence)元素:

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

3)IQ(Info<Query)元素

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

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

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

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

第一步Romeo开始通过发送一个stream包与服务器montague.lit取得联系,这一步包含了鉴权,登录等等。
第二步Romeo获取了他的联系人列表,通过向服务器montague.lit发送<iq/>字段请求,按照下面的协议。


<iq type=‘get’from=‘romeo@montague.lit/pda’>

<query xmlns=‘jabber:iq:roster’/>

</iq>

<iq type=‘result’to=‘romeo@montague.lit/pda’>

<query xmlns=‘jabber:iq:roster’>

<item jid=‘juliet@capulet.lit’/><item jid=‘mercutio@shakespeare.lit’/>

<item jid=‘benvolio@shakespeare.lit’/>

</query>

</iq>


第三步Romeo发送了一个presence请求到服务器montague.lit,然后会将这个信息广播到他的所有好友。
<presence from=‘romeo@montague.lit/pda’/>

<presence from=‘romeo@montague.lit/pda’to=‘juliet@capulet.lit’/>

<presence from=‘romeo@montague.lit/pda’to=‘mercutio@shakespeare.lit’

/>

<presence from=‘romeo@montague.lit/pda’to=‘benvolio@shakespeare.lit’

/>

第四步如果Romeo的联系人都在线,就会将presence回复给Romeo,告知自己的状态。
<presence to=‘romeo@montague.lit/pda’from=‘juliet@capulet.lit/balcony’/>

<presence to=‘romeo@montague.lit/pda’from=‘juliet@capulet.lit/chamber’/>

<presence to=‘romeo@montague.lit/pda’from=‘mercutio@shakespeare.lit/home’/>

第五步Romeo和Juliet开始交换信息,进行聊天。
<message from=‘romeo@montague.lit/pda’to=‘juliet@capulet.lit’>

<body>hi!</body>

</message>

<message from=‘juliet@capulet.lit/balcony’to=‘romeo@montague.lit/pda’

>

<body>hi yourself!</body>

</message>



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

原文地址:http://blog.csdn.net/xutaozero21/article/details/4873439
  • 大小: 46.6 KB
分享到:
评论

相关推荐

    xmpp协议分析

    ### XMPP协议分析 #### 一、XMPP协议概述 XMPP(Extensible Messaging and Presence Protocol,可扩展消息出席协议)是一种基于XML的即时通讯协议,最初由Jabber开源社区于1999年开发。2002年,IETF(Internet ...

    XMPP协议分析-原理篇.pdf

    XMPP协议分析,xmpp是即时通讯IM中比较普遍的应用

    XMPP协议分析资料指纹提取特征提取物联网协议分析网络安全.zip

    研究生期间在做协议分析时留存的公开文档资料,内含lua脚本,.pacp包,协议文档,nmap探测命令等,以及相关的证明脚本留存,协议分析截图。适用于做网络安全的同学,物联网安全,车联网安全,了解协议分析的步骤,...

    xmpp协议demo

    这个“xmpp协议demo”很显然是一个演示如何使用XMPP协议的项目,可能包含客户端和服务器端的实现。让我们深入探讨XMPP协议以及这个项目中的关键组成部分。 1. **XMPP协议**:XMPP最初设计用于即时通讯,但现在也被...

    基于XMPP协议的Android即时通信应用项目源码

    【XMPP协议详解】 XMPP是由IETF(Internet Engineering Task Force)制定的开放标准,其设计目标是提供基于XML的即时通讯服务。XMPP的核心组件包括: 1. **Jabber服务器**:负责处理用户连接、消息路由和存储离线...

    XMPP研究.zip

    首先,我们来看《XMPP协议分析-原理篇.pdf》。这份文档应该详细介绍了XMPP的基本概念、架构以及工作原理。XMPP的核心是 Jabber 协议,它基于客户端-服务器模型,允许用户通过TCP连接与服务器进行交互。XMPP服务器...

    XMPP协议分析与应用探讨

    XMPP协议,全称可扩展消息处理现场协议(eXtensible Messaging and Presence Protocol),是一种开放标准的即时通讯协议,基于XML(可扩展标记语言)技术,支持即时消息传输以及在线状态信息的共享。XMPP最初由...

    XMPP 协议讲解 openfire 结构分析以及插件开发指南

    XMPP协议本身是协议规范,需要通过实现来具体应用,Smack库就是XMPP协议在Java语言中的一种实现。Smack提供了丰富的API,允许开发者创建基于XMPP的应用。 Openfire是一个基于XMPP协议的即时通讯服务器端实现,它...

    xmpp核心协议分析(openfire)

    openfire+smack即时通讯使用的xmpp核心协议进行分析

    xmpp 协议即时通讯

    这个压缩包文件包含了使用VC6(Visual C++ 6.0)编译的一个XMPP客户端应用的源代码,可以帮助开发者了解XMPP协议的工作原理以及如何在C++环境下实现它。 首先,我们来看看`Jabba`系列的文件。`Jabba.aps`是Visual ...

    Android资料_XMPP

    资源包括 基于XMPP的多方通信系统研究与实现.pdf 基于XMPP的P2P即时通信系统的研究及实现.kdh ...XMPP协议分析及客户端开发.nh XMPP_3920_最靠谱的中文翻译文档.docx XMPP-RFC3920中文.pdf Android中的XMPP应用.pdf

    基于xmpp协议的gloox底层库开发的即时通讯qtalk源码

    【基于XMPP协议的Gloox底层库开发的即时通讯Qtalk源码】是一个使用C++编写的项目,它利用了Gloox库来构建一个即时通讯应用。Gloox库是一个开源的实现,完全遵从XMPP(Extensible Messaging and Presence Protocol)...

    基于XMPP协议的Qt聊天程序

    通过学习和分析这个项目,不仅可以掌握XMPP协议的工作原理,还能深入理解Qt库的使用,提升C++编程和即时通讯应用开发的能力。对于想要从事即时通讯软件开发的工程师来说,这是一个极好的学习资源。

    xmpp协议及时通讯

    XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的实时通信协议,主要...通过分析和学习这个项目,开发者可以更好地理解XMPP协议的实现细节,以及如何在其基础上构建一个功能完善的即时通讯应用。

    基于XMPP协议的智能家居环境监测系统设计与实现.pdf

    由于XMPP协议的可扩展性,基于XMPP协议的智能家居环境监测系统能够很好地满足这一需求,使用户能够根据自己的需要灵活地构建个性化的智能家居环境。 文档中还提到了一些关于推荐系统在博物馆网站中的应用。推荐系统...

    基于XMPP协议文件传输的研究与实现

    通过实证分析,证明了基于XMPP协议进行XML流传输的优势,尤其是在与其他通用协议相比时的表现。未来的研究可以进一步探索如何提高系统的性能和安全性,以及如何更好地集成第三方服务和功能。 综上所述,本文提供了...

    基于XMPP协议、HTML5的WebRTC

    在"基于XMPP协议、HTML5的WebRTC"这个项目中,开发者可能已经创建了一个使用HTML5作为用户界面,通过XMPP协议进行信令交互的WebRTC示例。用户可以通过浏览器直接参与音视频通话或者数据共享。XMPP服务器作为中间媒介...

Global site tag (gtag.js) - Google Analytics