XMPP协议简介
XMPP(息处理现场协议)是基于可扩展标记语言(XML)的协议。它用于即时消息(IM)以及在线现场探測。XMPP协议採用的是client-server架构,全部从一个client发到还有一个client的消息和数据都必须经过XMPPserver转发,并且支持server间DNS的路由,也就是说能够构建server集群,XMPP的前身是一个开源组织制定的网络通信协议——Jabber。XMPP的核心是在网络上分片段发送XML流的协议,这个协议是XMPP的即时通讯指令的传递手段。
XMPP的基本网络结构 ,xmpp定义了3个角色
Client
Server
Gateway
通信可以在这三者的随意两个之间双向发生。
server同一时候承担了client信息记录,连接管理和信息的路由功能。
网关承担着与异构即时通信系统的互联互通。异构系统能够包含SMS(短信)。MSN,ICQ等。
主要的网络形式是单client通过TCP/IP连接到单server,然后在之上传输XML。
client利用xmpp(基于TCP/IP)訪问server。传输的是XML
Client--------Server----Client
TCP TCP TCP
XMPP server:其内核是一个XMPP路由器。完毕基本组件间的数据包交换和路由。
功能:
1.会话管理器:负责client会话认证,在线状态。用户联系表等
2.数据存储器(XDB):连接数据库系统,保持用户信息、通信日志等
3.连接器管理器:管理与client之间的连接
4.server连接器:管理xmppserver之间的连接
5.传输器:建立xmppserver与非xmppserver通信
全部从一个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:server域名
node: username
resource:属于用户的位置或设备
一个用户能够同一时候以多种资源与同一个XMPPserver连接
xmpp xml包含3个元素:简单演示样例:
<stram>
<presence>
<status/>
</prensence>
<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 from=cyber1@jabber.org/contact
to=cyber2@jabber.org/contact
Type=“chat”>
<body>Hello</body>
</message>
<iq>-信息/请求,是一个请求-响应机制,管理xmppserver上两个用户的转换,同意他们通过对应的xml格式的查询和响应
<iq
from=cyber1@jabber.org/contact
Id=“id1” Type=“result”>
</iq>
Iq的主要属性:type。包含:
Get:获取当前域值
Set:设置或替换get查询的值
Result:说明成功的响应了先前的查询
Error:查询和响应中出现的错误
XMPP 协议族基于TCP
XMPP採用SASL作为身份认证协议
SASL包括的信息:
<服务名>:XMPP
<初始序列>
<交换序列>
<安全层协商>
顺序:[TCP]?
[TLS]?[SASL]?[XMPP]
XMPP採用TLS的“START-TLS”扩展来为通信两方提供加密性和数据完整性服务
登录xmppserver过程演示样例 :
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‘ >
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>
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>
6. 假设TLS协商成功。client初始化一个新流给server
C:
<stream:stream to="example.com" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">
7.Server靠发送带有不论什么可利用流特征的流头作为响应
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'> <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>
8.Client选择一个认证机制
C:
<auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmpp-sasl">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>
10.假设认证成功。client初始化一个新流给server
C:
<stream:stream to=“example" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">
</stream:stream>
11.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'> <stream:features xmlns="http://etherx.jabber.org/streams">
<compression xmlns="http://jabber.org/features/compress">
<method>zlib</method>
</compression>
<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind" />
<session xmlns="urn:ietf:params:xml:ns:xmpp-session" />
</stream:features>
12.资源绑定:client发送一个类型为set的iq,并包括所需绑定的资源节点<resource/>
C:
<iq id="O193v-0" type="set">
<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
<resource>spark</resource>
</bind>
</iq>
13.假设server为client产生了一个资源标识符或是接受了由客户端提供的资源标识符,它必须返回一个类型为result的iq节点给client,并必须包括<jid/>子节点,来为server决定的已连接资源指定全JID
S:
<iq xmlns="jabber:client" id="O193v-0" type="result">
<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
<resource>spark</resource>
<jid>username@cyber/spark</jid>
</bind>
</iq>
14.Client向server请求session
C:<iq id="O193v-1" type="set">
<session xmlns="urn:ietf:params:xml:ns:xmpp- session"/>
</iq>
15.Server告知client,session已建立
S:<iq xmlns="jabber:client" id="O193v-1" type="result">
<session xmlns="urn:ietf:params:xml:ns:xmpp-session" />
</iq>
XMPP协议简介的更多相关文章
- XMPP协议实现原理介绍
本文介绍XMPP协议原理及相关信息. XMPP协议简介 XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM ...
- 【XMPP】XMPP协议之原理篇
XMPP协议简介 XMPP协议(Extensible Messaging and Presence Protocol,可扩展消息处理现场协议)是一种基于XML的协议. 目的是为了解决及时通信标准而提出 ...
- XMPP协议实现原理介绍(转)
XMPP协议简介 XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM(IM:instant messagi ...
- (转)XMPP协议原理
本文介绍XMPP协议原理及相关信息. XMPP协议简介 XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM ...
- 即时聊天IM之一 XMPP协议简述
合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q Q:408365330 E-Mail:egojit@qq.com 综述: ...
- 转:XMPP协议、MQTT协议、HTTP协议、CoAP协议的基本比较
一.先看下相关国外的专业数据对四大协议的比较: Protocol CoAP XMP ...
- XMPP协议的基本理解
即时通讯技术简介 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容.大多数常用的即时通讯发送程序都会提 ...
- Fiddler--一、HTTP协议简介
在学习Fiddler之前,最好先学习一下HTTP协议. HTTP协议简介 什么是HTTP协议 超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端 ...
- 即时聊天IM之三 XMPP协议客户端库的和Android端框架概述
合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q Q:408365330 E-Mail:egojit@qq.com smack ...
随机推荐
- 【C/C++多线程编程之四】终止pthread线程
多线程编程之终止pthread线程 Pthread是 POSIX threads 的简称,是POSIX的线程标准. 终止线程似乎是多线程编程的最后一步,但绝不是本系列教 ...
- STL之iterator(迭代器)
3.迭代器简单介绍 除了使用下标来訪问vector对象的元素外,标准库还提供了訪问元素的方法:使用迭代器.迭代器是一种检查容器内元素而且遍历元素的数据类型. 百科释义: 迭代器(iterator)是一 ...
- 如何在Eclipse配置Tomcat服务器
链接地址:http://jingyan.baidu.com/article/3065b3b6efa9d7becff8a4c6.html 要想在Eclipse运行jsp文件,首先需要指定对应的服务器,即 ...
- SAP 标准单价、移动单价在 AP 中的影响--(详细)
今天我将向大家介绍下SAP中两种单价模式在系统中所产生的影响,先主要讲讲在AP中影响,它主要有两个方面产生影响(物料收货migo,发票校验miro). 演示背景(假设以下都为本位币交易): 库存(单价 ...
- javascript笔记整理(window对象)
浏览器对象模型 (BOM--Browser Object Model),window对象是BOM中所有对象的核心 A.属性 1.(位置类型-获得浏览器的位置) IE:window.screenLeft ...
- Linux入门:文件权限、用户、用户组(比较清楚)
单个文件名或目录名长度不超过255字符: 文件或目录的绝对路径长度不超过4096字符: 一.文件所有者与用户组 一个文件有很多属性,包括文件类型.文件权限.文件隐藏权限.文件所有者.用户组 ...
- linux命令:scp
有时候ftp被禁用了, 就用scp替代; 命令行: scp from to_user@to_ip:dir_to/file_name 执行该命令之后,按照提示输入to_host的登陆密码即可. scp ...
- js监听滚动条 回到顶端
效果:当出现滚动条,且滚动条出现移动时,把回到顶端按钮 显示出来:当滚动条回到顶部时,将回到顶端按钮隐藏. <script type="text/javascript"> ...
- delphi不同版本字符串类型的演化(要支持基于firemonkey的app调用,字符串最好使用olevariant类型)
string,DELPHI2009以前的版本string=ansistring,一个字符占一个字节,DELPHI2009及以上版本string=unicodestring,一个字符占二个字节. cha ...
- 一个与Log4j相关的死锁(转)
这个死锁的原因:一个动作需要两个临界对象.静态同步方法,就是一个临界对象.这种场景,静态同步方法每次只能有一个线程持有.如果存在另一个临界对象,静态同步方法中也需要获取这个临界对象.即一个动作需要两个 ...