XMPP初解

1、什么是XMPP ?
XMPP:即Extensible Messaging and Presence Protocol,其前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分;
核心的XML流传输协议
基于XML流传输的即时通讯扩展应用
XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。
XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。

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

3、XMPP通过TCP传什么了?
传输的是与即时通讯相关的指令。在以前这些命令要么用2进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行苻的方式发送(比如MSN)。而XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。这不但使得解析容易了,人也容易阅读了,方便了开发和查错。而XMPP的核心部分就是一个在网络上分片断发送XML的流协议。这个流协议是XMPP的即时通讯指令的传递基础,也是一个非常重要的可以被进一步利用的网络基础协议。所以可以说,XMPP用TCP传的是XML流。

4、举个例子看看所谓的XML流是什么样子的?
客户端:<?xml version='1.0'?>
       <stream:stream
       to='example.com'
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'
       version='1.0'>
服务器:<?xml version='1.0'?>
       <stream:stream
       from='example.com'
       id='someid'
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'
       version='1.0'>
...其他通信...
客户端:<message from='[email protected]'
              to='[email protected]'
              xml:lang='en'>
客户端: <body>Art thou not Romeo, and a Montague?</body>
客户端: </message>
服务器: <message from='[email protected]'
              to='[email protected]'
              xml:lang='en'>
服务器:<body>Neither, fair saint, if either thee dislike.</body>
服务器:</message>
客户端:</stream:stream>
服务器:</stream:stream>
以文档的观点来看,客户端或服务器发送的所有XML文本连缀在一起,从<stream>到</stream>构成了一个完整的XML文档。其中的stream标签就是所谓的XML Stream。在<stream>与</stream>中间的那些<message>...</message>这样的XML元素就是所谓的XML Stanza(XML节)。XMPP核心协议通信的基本模式就是先建立一个stream,然后协商一堆安全之类的东西,中间通信过程就是客户端发送XML Stanza,一个接一个的。服务器根据客户端发送的信息以及程序的逻辑,发送XML Stanza给客户端。但是这个过程并不是一问一答的,任何时候都有可能从一个方发信给另外一方。通信的最后阶段是</stream>关闭流,关闭TCP/IP连接。
GTalk所遵循的协议---XMPP

前几天Google发布了一款名叫Google Talk的即时通讯软件,这款软件的买点卖点之一就是XMPP。那,什么是XMPP呢?
   可扩展通讯和表示协议 (XMPP) 可用于服务类实时通讯、表示和需求 - 响应服务中的 XML 数据元流式传输。XMPP 以 Jabber 协议为基础,而 Jabber 是即时通讯中常用的开放式协议。
   尽管 XMPP 没有完全溶合进任何特定的网络架构之中,但是通过客户机/服务器架构,它还是经常被采用,因为客户机需要使用 XMPP 经过 TCP 连接访问服务器,而服务器之间也是通过 TCP 连接进行通信的。服务器可起到 XMPP 通讯的智能提取层的作用。许多客户机直接通过 TCP 连接与服务器相连,并使用 XMPP 来充分使用服务器和任何相关服务所提供的功能。同时连接到服务器的可能有多种资源,它们代表各自已获授权的客户机。对于客户机和服务器之间的连接,推荐使用的端口号为 5222 。网关是一种有着特殊用途的服务器端服务,它的主要功能是在异构通讯系统协议之中解析 XMPP ,同时还要在 XMPP 之中解析返回的数据,如以下各各种服务的网关:电子邮件、国际互联网中继聊天(IRC)、SIMPLE、短信息服务(SMS)和现存的各种即时通讯服务,包括 AIM、ICQ、MSN Messenger 和 Yahoo! Instant Messenger 等。
  两个基本概念 — XML 数据流和 XML 节使得较小结构化信息的有效负载可以在敏感于数据传输的实体间进行迅速的异步传输。一个 XML 数据流就像一种容器,可应用在任何两个网络实体间 XML 数据元的交换。XML 节是结构化信息的独立单元,通过 XML 数据流从一个实体发送到另一个实体。
  XMPP 中包含了一种用于防范数据流被窜改和偷听的办法。这种信道加密的办法使用了传输层安全协议(TLS),连同其扩展协议 STARTTLS 。这种扩展与其它协议的扩展是同一模式的,如 IMAP、POP3 和 ACAP 等协议。XMPP 中还包含一种对数据流进行验证的办法,并采用了简单验证和安全层协议(SASL)中 XMPP 的特定框架。

协议结构
  XML 数据流在所有 XML 节的传送会话过程中起到一种包络的作用。我们可以采用一种单纯的方式来表示这个过程:
|--------------------|
| <stream>           |
|--------------------|
| <presence>         |
| <show/>            |
| </presence>        |
|--------------------|
| <message to='foo'> |
| <body/> |
| </message> |
|--------------------|
| <iq to='bar'> |
| <query/> |
| </iq> |
|--------------------|
| ... |
|--------------------|
| </stream> |
|--------------------|

你可能感兴趣的:(XMPP)