XMPP_协议介绍
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Jabber/XMPP 简介
Messia 2009-06-10
一、XMPP概述 概述
• XMPP(可扩展消息处理现场协议)是基于 可扩展标记语言(XML)的协议,它用于 即时消息(IM)以及在线现场探测。 • XMPP的前身是Jabber,一个开源形式组织 产生的网络即时通信协议。
二、 XMPP体系架构 体系架构
• </presence>
XMPP xml消息格式定义 消息格式定义-message 消息格式定义
• <message>-用于两个用户之间发送信息 • <message from=cyber1@jabber.org/contact • to=cyber2@jabber.org/contact • Type=“chat”>
• • • • • XMPP的基本网络结构 ,xmpp定义了3个角色 Client Server Gateway 通信能够在这三者的任意两个之间双向发生。服务器同时 承担了客户端信息记录,连接管理和信息的路由功能。网 关承担着与异构即时通信系统的互联互通,异构系统可以 包括SMS(短信),MSN,ICQ等。基本的网络形式是单 客户端通过TCP/IP连接到单服务器,然后在之上传输 XML。 • 客户端利用xmpp(基于TCP/IP)访问server,传输的是 XML • Client--------Server----Client
XMPP TLS
XMPP采用TLS的“START-TLS”扩展来为通 信双方提供加密性和数据完整性服务
Spark 登录 登录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 使用一个流标记作为响应发给 S: <stream:stream from=‘cyber' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='a7747277-ad62-4813-b739-63504d6e1246' version='1.0' xml:lang='zh-cn‘ >
Spark 登录 登录xmpp服务器过程示例 服务器过程示例 8.Client选择一个认证机制 选择一个认证机制 C: <auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmppsasl">AGh4dwAx</auth> 9.Server通知 通知client认证成功 通知 认证成功 S:<success xmlns="urn:ietf:params:xml:ns:xmpp-sasl" /> Note:如果认证不成功,server通知client认证失败,并关闭流 <failure xmlns=“urn:ietf:params:xml:ns:xmpp-tls” > <temporary-auth-failure/> </failure> </stream:stream>
四、XMPP地址模式 地Βιβλιοθήκη Baidu模式
• • • • • • •
统一的JID(jabber identifier) JID=[ node”@” ] domain [ “/” resource ] eg: cyber@cyberobject.com/res domain:服务器域名 node: 用户名 resource:属于用户的位置或设备 一个用户可以同时以多种资源与同一个 XMPP服务器连接
Spark 登录 登录xmpp服务器过程示例 服务器过程示例 10.如果认证成功,client初始化一个新流给 如果认证成功, 初始化一个新流给server 如果认证成功 初始化一个新流给 C: <stream:stream to=“example" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">
Spark 登录 登录xmpp服务器过程示例 服务器过程示例
6. 如果 如果TLS协商成功,client初始化一个新流 协商成功, 协商成功 初始化一个新流 给server C: <stream:stream to="example.com" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/stre ams" version="1.0">
XMPP xml消息格式定义 消息格式定义-presence 消息格式定义
• <presence>-此元素确定用户的状态 • <presence from=cyber1@jabber.org/contact • to=cyber2@jabber.org/contact>
<status>online</status>
Spark 登录 登录xmpp服务器过程示例 服务器过程示例
7.Server靠发送带有任何可利用流特征的流头作为响应 靠发送带有任何可利用流特征的流头作为响应 S: <stream:stream from=‘cyber' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='a7747277ad62-4813-b739-63504d6e1246' version='1.0' xml:lang='zh-cn'> <stream:features xmlns="http://etherx.jabber.org/streams"> <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"> <mechanism>PLAIN</mechanism> <mechanism>DIGEST-MD5</mechanism> </mechanisms> <compression xmlns="http://jabber.org/features/compress"> <method>zlib</method> </compression> <auth xmlns="http://jabber.org/features/iq-auth" /> <register xmlns="http://jabber.org/features/iq-register" /> </stream:features>
Spark 登录 登录xmpp服务器过程示例 服务器过程示例 4. Client发送 发送STARTTLS命令给 命令给Server 发送 命令给 C: <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/> 5.Server通知 通知Client它被允许处理 通知 它被允许处理 S: <proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls" /> Note:client与server TLS协商失败,server通知client TLS 协商失败,并关闭流与TCP连接 <failure xmlns=“urn:ietf:params:xml:ns:xmpp-tls” /> </stream:stream>
六、XMPP的安全机制 的安全机制
• XMPP协议簇 XMPP SASL TLS TCP
Simple Authentication and Security Layer Transport Layer Security
XMPP登录身份认证协议 登录身份认证协议
XMPP采用SASL作为身份认证协议 • SASL包含的信息: • <服务名>:XMPP • <初始序列> • <交换序列> • <安全层协商> • 顺序:[TCP] [TLS] [SASL] [XMPP]
<body>Hello</body>
• </message>
XMPP xml消息格式定义 消息格式定义-iq 消息格式定义
• <iq>-信息/请求,是一个请求-响应机制,管理 xmpp服务器上两个用户的转换,允许他们通过相 应的xml格式的查询和响应 • <iq • from=cyber1@jabber.org/contact • Id=“id1” Type=“result”> • </iq> • Iq的主要属性:type,包括: • Get:获取当前域值 • Set:设置或替换get查询的值 • Result:说明成功的响应了先前的查询 • Error:查询和响应中出现的错误
Spark 登录 登录xmpp服务器过程示例 服务器过程示例
3.Server发送 发送STARTTLS扩展给 扩展给client,并带有认证机制与任何其他流特征 发送 扩展给 , S: <stream:features xmlns="http://etherx.jabber.org/streams"> <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls" /> <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"> <mechanism>PLAIN</mechanism> <mechanism>DIGEST-MD5</mechanism> </mechanisms> <compression xmlns="http://jabber.org/features/compress"> <method>zlib</method> </compression> <auth xmlns="http://jabber.org/features/iq-auth" /> <register xmlns="http://jabber.org/features/iq-register" /> </stream:features>
三、XMPP工作原理图 工作原理图
DNS Server XMPP Client XMPP Client
XMPP Server Xml流
XMPP Server
XMPP Client XMPP Client Protocol Gateway
Other Server
XMPP工作原理说明 工作原理说明
• 所有从一个client到另一个client的jabber消 息和数据都要通过xmpp server。 • 1.client连接到server • 2.server利用本地目录系统的证书对其认证 • 3.client制定目标地址,让server告知目标状 态 • 4.server查找,连接并进行相互认证 • 5.client间进行交互
TCP TCP TCP
二、 XMPP体系架构 体系架构 • XMPP server:其内核是一个XMPP路由器,完成 基本组件间的数据包交换和路由。 • 功能: • 1.会话管理器:负责客户端会话认证,在线状态, 用户联系表等 • 2.数据存储器(XDB):连接数据库系统,保持用 户信息、通信日志等 • 3.连接器管理器:管理与客户端之间的连接 • 4.服务器连接器:管理xmpp服务器之间的连接 • 5.传输器:建立xmpp服务器与非xmpp服务器通 信
五、XMPP xml消息格式定义 消息格式定义
• xmpp xml包括3个元素:简单示例: • <stram> • <presence> • <status/> • </prensence> • <message> • <body/> • </message> • <iq>
<bind/>
• </iq> • </stream>
Messia 2009-06-10
一、XMPP概述 概述
• XMPP(可扩展消息处理现场协议)是基于 可扩展标记语言(XML)的协议,它用于 即时消息(IM)以及在线现场探测。 • XMPP的前身是Jabber,一个开源形式组织 产生的网络即时通信协议。
二、 XMPP体系架构 体系架构
• </presence>
XMPP xml消息格式定义 消息格式定义-message 消息格式定义
• <message>-用于两个用户之间发送信息 • <message from=cyber1@jabber.org/contact • to=cyber2@jabber.org/contact • Type=“chat”>
• • • • • XMPP的基本网络结构 ,xmpp定义了3个角色 Client Server Gateway 通信能够在这三者的任意两个之间双向发生。服务器同时 承担了客户端信息记录,连接管理和信息的路由功能。网 关承担着与异构即时通信系统的互联互通,异构系统可以 包括SMS(短信),MSN,ICQ等。基本的网络形式是单 客户端通过TCP/IP连接到单服务器,然后在之上传输 XML。 • 客户端利用xmpp(基于TCP/IP)访问server,传输的是 XML • Client--------Server----Client
XMPP TLS
XMPP采用TLS的“START-TLS”扩展来为通 信双方提供加密性和数据完整性服务
Spark 登录 登录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 使用一个流标记作为响应发给 S: <stream:stream from=‘cyber' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='a7747277-ad62-4813-b739-63504d6e1246' version='1.0' xml:lang='zh-cn‘ >
Spark 登录 登录xmpp服务器过程示例 服务器过程示例 8.Client选择一个认证机制 选择一个认证机制 C: <auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmppsasl">AGh4dwAx</auth> 9.Server通知 通知client认证成功 通知 认证成功 S:<success xmlns="urn:ietf:params:xml:ns:xmpp-sasl" /> Note:如果认证不成功,server通知client认证失败,并关闭流 <failure xmlns=“urn:ietf:params:xml:ns:xmpp-tls” > <temporary-auth-failure/> </failure> </stream:stream>
四、XMPP地址模式 地Βιβλιοθήκη Baidu模式
• • • • • • •
统一的JID(jabber identifier) JID=[ node”@” ] domain [ “/” resource ] eg: cyber@cyberobject.com/res domain:服务器域名 node: 用户名 resource:属于用户的位置或设备 一个用户可以同时以多种资源与同一个 XMPP服务器连接
Spark 登录 登录xmpp服务器过程示例 服务器过程示例 10.如果认证成功,client初始化一个新流给 如果认证成功, 初始化一个新流给server 如果认证成功 初始化一个新流给 C: <stream:stream to=“example" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">
Spark 登录 登录xmpp服务器过程示例 服务器过程示例
6. 如果 如果TLS协商成功,client初始化一个新流 协商成功, 协商成功 初始化一个新流 给server C: <stream:stream to="example.com" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/stre ams" version="1.0">
XMPP xml消息格式定义 消息格式定义-presence 消息格式定义
• <presence>-此元素确定用户的状态 • <presence from=cyber1@jabber.org/contact • to=cyber2@jabber.org/contact>
<status>online</status>
Spark 登录 登录xmpp服务器过程示例 服务器过程示例
7.Server靠发送带有任何可利用流特征的流头作为响应 靠发送带有任何可利用流特征的流头作为响应 S: <stream:stream from=‘cyber' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='a7747277ad62-4813-b739-63504d6e1246' version='1.0' xml:lang='zh-cn'> <stream:features xmlns="http://etherx.jabber.org/streams"> <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"> <mechanism>PLAIN</mechanism> <mechanism>DIGEST-MD5</mechanism> </mechanisms> <compression xmlns="http://jabber.org/features/compress"> <method>zlib</method> </compression> <auth xmlns="http://jabber.org/features/iq-auth" /> <register xmlns="http://jabber.org/features/iq-register" /> </stream:features>
Spark 登录 登录xmpp服务器过程示例 服务器过程示例 4. Client发送 发送STARTTLS命令给 命令给Server 发送 命令给 C: <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/> 5.Server通知 通知Client它被允许处理 通知 它被允许处理 S: <proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls" /> Note:client与server TLS协商失败,server通知client TLS 协商失败,并关闭流与TCP连接 <failure xmlns=“urn:ietf:params:xml:ns:xmpp-tls” /> </stream:stream>
六、XMPP的安全机制 的安全机制
• XMPP协议簇 XMPP SASL TLS TCP
Simple Authentication and Security Layer Transport Layer Security
XMPP登录身份认证协议 登录身份认证协议
XMPP采用SASL作为身份认证协议 • SASL包含的信息: • <服务名>:XMPP • <初始序列> • <交换序列> • <安全层协商> • 顺序:[TCP] [TLS] [SASL] [XMPP]
<body>Hello</body>
• </message>
XMPP xml消息格式定义 消息格式定义-iq 消息格式定义
• <iq>-信息/请求,是一个请求-响应机制,管理 xmpp服务器上两个用户的转换,允许他们通过相 应的xml格式的查询和响应 • <iq • from=cyber1@jabber.org/contact • Id=“id1” Type=“result”> • </iq> • Iq的主要属性:type,包括: • Get:获取当前域值 • Set:设置或替换get查询的值 • Result:说明成功的响应了先前的查询 • Error:查询和响应中出现的错误
Spark 登录 登录xmpp服务器过程示例 服务器过程示例
3.Server发送 发送STARTTLS扩展给 扩展给client,并带有认证机制与任何其他流特征 发送 扩展给 , S: <stream:features xmlns="http://etherx.jabber.org/streams"> <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls" /> <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"> <mechanism>PLAIN</mechanism> <mechanism>DIGEST-MD5</mechanism> </mechanisms> <compression xmlns="http://jabber.org/features/compress"> <method>zlib</method> </compression> <auth xmlns="http://jabber.org/features/iq-auth" /> <register xmlns="http://jabber.org/features/iq-register" /> </stream:features>
三、XMPP工作原理图 工作原理图
DNS Server XMPP Client XMPP Client
XMPP Server Xml流
XMPP Server
XMPP Client XMPP Client Protocol Gateway
Other Server
XMPP工作原理说明 工作原理说明
• 所有从一个client到另一个client的jabber消 息和数据都要通过xmpp server。 • 1.client连接到server • 2.server利用本地目录系统的证书对其认证 • 3.client制定目标地址,让server告知目标状 态 • 4.server查找,连接并进行相互认证 • 5.client间进行交互
TCP TCP TCP
二、 XMPP体系架构 体系架构 • XMPP server:其内核是一个XMPP路由器,完成 基本组件间的数据包交换和路由。 • 功能: • 1.会话管理器:负责客户端会话认证,在线状态, 用户联系表等 • 2.数据存储器(XDB):连接数据库系统,保持用 户信息、通信日志等 • 3.连接器管理器:管理与客户端之间的连接 • 4.服务器连接器:管理xmpp服务器之间的连接 • 5.传输器:建立xmpp服务器与非xmpp服务器通 信
五、XMPP xml消息格式定义 消息格式定义
• xmpp xml包括3个元素:简单示例: • <stram> • <presence> • <status/> • </prensence> • <message> • <body/> • </message> • <iq>
<bind/>
• </iq> • </stream>