XMPP——xmpp协议详解、优势、缺点及优化思路

XMPP(Extensible Messaging and Presence Protocol,前称Jabber)协议介绍

可扩展消息处理现场协议(eXtensible Messaging and Presence Protocol , XMPP) 是一种基于可扩展标记语言(eXtensible Markup Language, XML)的近端串流式即时通讯协议。它将现场和上下文敏感信息标记嵌入到XML 结构化数据中, 使得人与人之间、应用系统之间以及人与应用系统之间能即时相互通讯
XMPP是一种基于XML架构的开放式协议.XMPP的基础部分已经在2002-2004年获得了互联网工程任务组(IETF)的批准,将来XMPP协议会理所固然的同Internet协议TCP/IP、HTTP、FTP、SMTP、POP同样成为Internet标准。安全

Xmpp协议内容

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

Xmpp协议优势

一、分布式
XMPP网络的架构和电子邮件十分相像;XMPP核心协议通讯方式是先建立一个stream,XMPP以TCP传递XML数据流,没有中央主服务器。任何人均可以运行本身的XMPP服务器,使我的及组织可以掌控他们的实时传讯体验markdown

二、安全
任何XMPP协议的服务器能够独立于公众XMPP网络(例如在企业内部网络中),而使用SASL(1)及TLS(2)等技术的可靠安全性,已自带于核心XMPP技术规格中。
XMPP–>SASL–>TLS–>TCP–>IP网络

(1)SASL:SASL全称Simple Authentication and Security Layer,是一种用来扩充C/S模式验证能力的机制。在Postfix能够利用SASL来判断用户是否有权使用转发服务,或是辨认谁在使用你的服务器。SASL提供了一个通用的方法为基于链接的协议增长验证支持,而XMPP使用了一个普通的XML名字空间来知足SASL的须要
(2)TLS:安全传输层协议(TLS)用于在两个通讯应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。架构

三、可扩展
XML命名空间的威力可以使任何人在核心协议的基础上建造客制化的功能。
在XMPP 中,即时消息和到场信息都是基于XML 的结构化信息,这些信息以XML 节(XML Stanza)的形式在通讯实体间交换。XMPP 发挥了XML 结构化数据的通用传输层的做用,它将出席和上下文敏感信息嵌入到XML 结构化数据中,从而使数据以极高的效率传送给最合适的资源。基于XML 创建起来的应用具备良好的语义完整性和扩展性。框架

四、弹性佳
XMPP除了可用在实时通讯的应用程序,还能用在网络管理、内容供稿、协同工具、文件共享、游戏、远程系统监控等,应用范围至关普遍。分布式

五、多样性
用XMPP协议来建造及布署实时应用程序及服务的公司及开放源代码计划分布在各类领域;用XMPP技术开发软件,资源及支持的来源是多样的,使得使你不会陷于被“绑架”的困境ide

六、分布式的网络架构
xmpp协议的实现,都是基于client/server的网络架构。可是xmpp协议自己并无限定非此架构不可,其和电子邮件的架构很是类似,可是其又不只限于此,因此其应用范围十分普遍!工具

XMPP协议的组成

主要的XMPP 协议范本及当今应用很广的XMPP 扩展性能

RFC 3920 XMPP:核心。定义了XMPP 协议框架下应用的网络架构,引入了XML Stream(XML 流)与XML Stanza(XML 节),并规定XMPP 协议在通讯过程当中使用的XML 标签。使用XML 标签从根本上说是协议开放性与扩展性的须要。此外,在通讯的安全方面,把TLS 安全传输机制与SASL 认证机制引入到内核,与XMPP 进行无缝的链接,为协议的安全性、可靠性奠基了基础。Core 文档还规定了错误的定义及处理、XML 的使用规范、JID(Jabber Identifier,Jabber 标识符)的定义、命名规范等等。因此这是全部基于XMPP 协议的应用都必需支持的文档。

XEP-0030 服务搜索: 一个强大的用来测定XMPP 网络中的其它实体所支持特性的协议。
XEP-0115 实体性能: XEP-0030 的一个经过即时出席的定制,能够实时改变交变广告功能。
XEP-0045 多人聊天: 一组定义参与和管理多用户聊天室的协议,相似于Internet 的Relay Chat,具备很高的安全性。
XEP-0096 文件传输: 定义了从一个XMPP 实体到另外一个的文件传输。
XEP-0124 HTTP 绑定: 将XMPP 绑定到HTTP 而不是TCP,主要用于不可以持久的维持与服务器TCP 链接的设备。
XEP-0166 Jingle: 规定了多媒体通讯协商的总体架构。
XEP-0167 Jingle Audio Content Description Format: 定义了从一个XMPP 实体到另外一个的语音传输过程。
XEP-0176 Jingle ICE(Interactive Connectivity Establishment)Transport: ICE传输机制,文件解决了如何让防火墙或是NAT(Network Address Translation)保护下的实体创建链接的问题。
XEP-0177 Jingle Raw UDP Transport: 纯UDP 传输机制,文件讲述了如何在没有防火墙且在同一网络下创建链接的。
XEP-0180 Jingle Video Content Description Format: 定义了从一个XMPP 实体到另外一个的视频传输过程。
XEP-0181 Jingle DTMF(Dual Tone Multi-Frequency)
XEP-0183 Jingle Telepathy Transport Method。

Xmpp协议缺点

没有二进制数据
XMPP协议的方式被编码为一个单一的长的XML文件,所以没法提供修改二进制数据。文件传输使用HTTP协议,采用Base64(3)
(3)Base64是网络上最多见的用于传输8Bit字节代码的编码方式之一

优化思路
优化思路
优化思路2

Xmpp提供电子名片协议

vCard是一种现存的、普遍使用的,用户我的信息存储的标准,有点像是电子名片。基础的功能是存储和获取用户的电子身份,该信息是用XML表示的,数据的存储取决于全部现存的XMPP服务器的实现

XMPP系统特色

客户机/服务器通讯模式、分布式网络、简单的客户端、XML的数据格式。

工做原理

(1)节点(client1)链接到服务器;
(2)服务器利用本地目录系统中的证书对其认证;
(3)节点指定目标(client2)地址,让服务器告知目标状态;
(4)服务器查找、链接并进行相互认证;
(5)节点之间(client1与client2)进行交互.

对话栗子:
客户端(kuusipuu)链接到一个XMPP服务器(amessage.de:5222/TCP),发送一条消息(主题和内容均为“test 1449”)到另外一个客户端(tero),而后注销。

用户发送链接请求到服务器
kuusipuu:

<?xmlversion='1.0'?>
<stream:stream xmlns:stream="http://etherx.jabber.org/streams"
xmlns="jabber:client" to="amessage.de">

server对请求应答
amessage.de:

<stream:stream xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
from='amessage.de' id='1461777714'>

server利用本地目录系统的证书对其认证
kuusipuu:

<iq type="set" id="auth_2" to="amessage.de" >
<query xmlns="jabber:iq:auth">
  <username>kuusipuu</username>
  <password>mypassword</password>
  <resource>Work</resource>
 </query>
</iq>

server将相应的结果返回给用户端
amessage.de:

<iq from="amessage.de" id='auth_2' type='result'/>

用户发送消息请求,并注销
kuusipuu:

<message to="tero@example.com" >
    <subject>test 1449</subject>
    <body>test 1449</body>
</message>
<presence type="unavailable" >
    <status>Logged out</status>
</presence>
</stream:stream>

server返回注销信息
amessage.de:

</stream:stream>

下篇文章主要从代码的角度介绍基于xmpp的服务器构成、客户端、XMPP网关、XMPP地址格式、XMPP消息格式等我最近学习的相关知识和总结,并简单列举相应的列子。

jessonlv——吕国栋原创文章,转载请注明出处:个人博客http://blog.csdn.net/jessonlv

相关文章
相关标签/搜索