• 1. Jabber/XMPP 简介Messia 2009-06-10
  • 2. 一、XMPP概述XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。 XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。
  • 3. 二、 XMPP体系架构XMPP的基本网络结构 ,xmpp定义了3个角色 Client Server Gateway 通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。 客户端利用xmpp(基于TCP/IP)访问server,传输的是XML Client--------Server----Client TCP TCP TCP
  • 4. 二、 XMPP体系架构XMPP server:其内核是一个XMPP路由器,完成基本组件间的数据包交换和路由。 功能: 1.会话管理器:负责客户端会话认证,在线状态,用户联系表等 2.数据存储器(XDB):连接数据库系统,保持用户信息、通信日志等 3.连接器管理器:管理与客户端之间的连接 4.服务器连接器:管理xmpp服务器之间的连接 5.传输器:建立xmpp服务器与非xmpp服务器通信
  • 5. XMPP ClientXMPP ClientXMPP ServerDNS ServerXMPP ServerOther ServerXMPP Client XMPP Client三、XMPP工作原理图Xml流Protocol Gateway
  • 6. XMPP工作原理说明所有从一个client到另一个client的jabber消息和数据都要通过xmpp server。 1.client连接到server 2.server利用本地目录系统的证书对其认证 3.client制定目标地址,让server告知目标状态 4.server查找,连接并进行相互认证 5.client间进行交互
  • 7. 四、XMPP地址模式统一的JID(jabber identifier) JID=[ node”@” ] domain [ “/” resource ] eg: cyber@cyberobject.com/res domain:服务器域名 node: 用户名 resource:属于用户的位置或设备 一个用户可以同时以多种资源与同一个XMPP服务器连接
  • 8. 五、XMPP xml消息格式定义xmpp xml包括3个元素:简单示例:
  • 9. XMPP xml消息格式定义-presence-此元素确定用户的状态 online
  • 10. XMPP xml消息格式定义-message-用于两个用户之间发送信息 Hello
  • 11. XMPP xml消息格式定义-iq-信息/请求,是一个请求-响应机制,管理xmpp服务器上两个用户的转换,允许他们通过相应的xml格式的查询和响应 Iq的主要属性:type,包括: Get:获取当前域值 Set:设置或替换get查询的值 Result:说明成功的响应了先前的查询 Error:查询和响应中出现的错误
  • 12. 六、XMPP的安全机制XMPP协议簇XMPPSASLTLSTCPSimple Authentication and Security LayerTransport Layer Security
  • 13. XMPP登录身份认证协议XMPP采用SASL作为身份认证协议 SASL包含的信息: <服务名>:XMPP <初始序列> <交换序列> <安全层协商> 顺序:[TCP][TLS][SASL][XMPP]
  • 14. XMPP TLS XMPP采用TLS的“START-TLS”扩展来为通信双方提供加密性和数据完整性服务
  • 15. Spark 登录xmpp服务器过程示例C—client S—server 步骤: 1.client初始流给server C: 16. Spark 登录xmpp服务器过程示例3.Server发送STARTTLS扩展给client,并带有认证机制与任何其他流特征  S: PLAIN DIGEST-MD5 zlib
  • 17. Spark 登录xmpp服务器过程示例4. Client发送STARTTLS命令给Server C: 5.Server通知Client它被允许处理 S: Note:client与server TLS协商失败,server通知client TLS协商失败,并关闭流与TCP连接
  • 18. Spark 登录xmpp服务器过程示例6. 如果TLS协商成功,client初始化一个新流给server C:
  • 19. Spark 登录xmpp服务器过程示例7.Server靠发送带有任何可利用流特征的流头作为响应 S: PLAIN DIGEST-MD5 zlib
  • 20. Spark 登录xmpp服务器过程示例8.Client选择一个认证机制 C: AGh4dwAx 9.Server通知client认证成功 S: Note:如果认证不成功,server通知client认证失败,并关闭流
  • 21. Spark 登录xmpp服务器过程示例10.如果认证成功,client初始化一个新流给server C:
  • 22. Spark 登录xmpp服务器过程示例11.Server依靠流头来响应client,并伴随有另外的特征 S: zlib
  • 23. Spark 登录xmpp服务器过程示例12.资源绑定:client发送一个类型为set的iq,并包含所需绑定的资源节点 C: spark
  • 24. Spark 登录xmpp服务器过程示例13.如果server为client产生了一个资源标识符或是接受了由客户端提供的资源标识符,它必须返回一个类型为result的iq节点给client,并必须包含子节点,来为server决定的已连接资源指定全JID S: spark username@cyber/spark
  • 25. Spark 登录xmpp服务器过程示例14.Client向server请求session C: 15.Server告知client,session已建立 S:
  • 26. 参考资料RFC3920—Extensible Messaging and Presence Protocol(XMPP) core