XMPP协议3

作者: 不规则先生 | 来源:发表于2015-12-04 16:58 被阅读153次

    XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。XMPP协议采用的是客户端-服务器架构,所有从一个客户端发到另一个客户端的消息和数据都必须经过XMPP服务器转发,而且支持服务器间DNS的路由,也就是说可以构建服务器集群,XMPP的前身是一个开源组织制定的网络通信协议——Jabber,XMPP的核心是在网络上分片段发送XML流的协议,这个协议是XMPP的即时通讯指令的传递手段。

     XMPP的基本网络结构 :

    xmpp定义了3个角色:Client Server Gateway

    通信能够在这三者的任意两个之间双向发生。

    服务器同时承担了客户端信息记录,连接管理和信息的路由功能。

    网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。

     客户端利用xmpp(基于TCP/IP)访问server,传输的是XML 

    Client--------Server----Client

        TCP               TCP            TCP

    XMPP server:

    其内核是一个XMPP路由器,完成基本组件间的数据包交换和路由。

    功能:

    1.会话管理器:负责客户端会话认证,在线状态,用户联系表等

    2.数据存储器(XDB):连接数据库系统,保持用户信息、通信日志等

    3.连接器管理器:管理与客户端之间的连接

    4.服务器连接器:管理xmpp服务器之间的连接

    5.传输器:建立xmpp服务器与非xmpp服务器通信

    所有从一个client到另一个client的jabber消息和数据都要通过xmpp server:

    1.client连接到server

    2.server利用本地目录系统的证书对其认证

    3.client制定目标地址,让server告知目标状态

    4.server查找,连接并进行相互认证

    5.client间进行交互

    统一的JID(jabber identifier)

    JID=[ node”@” ] domain [ “/” resource ]

    eg: cyber@cyberobject.com/res

    domain:服务器域名

    node: 用户名

    resource:属于用户的位置或设备

    一个用户可以同时以多种资源与同一个XMPP服务器连接xmpp (手机和PC)

    xml包括3个元素:

    简单示例:

    <stream>

       <presence>

            <status/>

    <message>

         <body/>

    </message>

    <iq>

    <bind/>

    </iq>

    </stream>

    <presence>--此元素确定用户的状态

    <presence from = cyber1@jabber.org/contact

    to = cyber2@jabber.org/contact>

    <status>online</status>

    </presence>

    <message>-用于两个用户之间发送信息

    <message frome=cyber1@jabber.org/contact

    to = cyber2@jabber.org/contact

    Type = "chat">

    <body>Hello</body>

    </message>

    <iq>信息/请求,是一个请求响应机制,管理xmpp服务器上两个用户的转换,允许他们通过相应地xml格式查询和响应

    <iq

    from = cyber1@jabber.org/contact

    id = "id1" Type = "result"

    </iq>

    Id的主要属性:type,包括:

    Get:获取当前域值

    Set:设置或替换get查询的值

    Result:说明成功地响应了先前的查询

    Error:查询和响应中出现的错误

    XMPP 协议族基于TCP

    XMPP采用SASL作为身份认证协议

    SASL包含的信息:

    <服务名>:XMPP

    <初始序列>

    <交换序列>

    <安全层协商>

    顺序:[TCP]?[TLS]?[SASL]?[XMPP] 

    XMPP采用TLS的“START-TLS”扩展来为通信双方提供加密性和数据完整性服务

    登录xmpp服务器过程示例 :C—client      S—server

    步骤:1.client初始流给server 

     C:<stream:stream to = "example.com" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version = "1.0">

    2:server使用一个流标记作为响应发给client

    3:Server发送STARTTLS扩展给client,并带有认证机制与任何其他流特征

    4. Client发送STARTTLS命令给ServerC:

    5.Server通知Client它被允许处理 S:Note:client与server TLS协商失败,server通知client TLS协商失败,并关闭流与TCP连接

    6. 如果TLS协商成功,client初始化一个新流给server C:

    7.Server靠发送带有任何可利用流特征的流头作为响应S:PLAINDIGEST-MD5zlib

    8.Client选择一个认证机制C:AGh4dwAx

    9.Server通知client认证成功S:Note:如果认证不成功,server通知client认证失败,并关闭流

    10.如果认证成功,client初始化一个新流给serverC:

    11.Server依靠流头来响应client,并伴随有另外的特征S:zlib

    12.资源绑定:client发送一个类型为set的iq,并包含所需绑定的资源节点C:spark

    13.如果server为client产生了一个资源标识符或是接受了由客户端提供的资源标识符,它必须返回一个类型为result的iq节点给client,并必须包含子节点,来为server决定的已连接资源指定全JIDS:sparkusername@cyber/spark

    14.Client向server请求sessionC:

    15.Server告知client,session已建立S:

    相关文章

      网友评论

        本文标题:XMPP协议3

        本文链接:https://www.haomeiwen.com/subject/vrmshttx.html