XMPP协议的原理介绍

XMPP协议的原理介绍

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探測。它在促进server之间的准即时操作。这个协议可能终于同意因特网用户向因特网上的其它不论什么人发送即时消息,即使其操作系统和浏览器不同。

  XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP眼下被IETF国际标准组织完毕了标准化工作。标准化的核心结果分为两部分;

 

在IETF 中,把IM协议划分为四种协议,即即时信息和出席协议(Instant Messaging and Presence Protocol, IMPP)、出席和即时信息协议(Presence and Instant Messaging Protocol, PRIM)、针对即时信息和出席扩展的会话发起协议(Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensions, SIMPLE),以及可扩展的消息出席协议(XMPP)。最初研发IMPP 也是为了创建一种标准化的协议,可是今天,IMPP 已经发展成为基本协议单元,定义全部即时通信协议应该支持的核心功能集。

XMPP 和SIMPLE 两种协议是架构,有助于实现IMPP协议所描写叙述的规范。PRIM 最初是基于即时通信的协议,与XMPP 和SIMPLE 相似,可是己经不再使用

1.    XMPP 协议是公开的,由JSF开源社区组织开发的。XMPP 协议并不属于不论什么的机构和个人,而是属于整个社区,这一点从根本上保证了其开放性。

2.    XMPP 协议具有良好的扩展性。在XMPP 中,即时消息和到场信息都是基于XML 的结构化信息,这些信息以XML 节(XML Stanza)的形式在通信实体间交换。XMPP 发挥了XML 结构化数据的通用传输层的作用,它将出席和上下文敏感信息嵌入到XML 结构化数据中,从而使数据以极高的效率传送给最合适的资源。基于XML 建立起来的应用具有良好的语义完整性和扩展性。

3.    分布式的网络架构。XMPP 协议都是基于Client/Server 架构,可是XMPP协议本身并没有这种限制。网络的架构和电子邮件十分类似,但没有结合不论什么特定的网络架构,适用范围很广泛。

4.    XMPP 具有非常好的弹性。XMPP 除了可用在即时通信的应用程序,还能用在网络管理、内容供稿、协同工具、档案共享、游戏、远端系统监控等。

5.    安全性。XMPP在Client-to-Server通信,和Server-to-Server通信中都使用TLS (Transport Layer Security)协议作为通信通道的加密方法,保证通信的安全。不论什么XMPPserver能够独立于公众XMPP网络(比如在企业内部网络中),而使用SASL及TLS等技术更加增强了通信的安全性。例如以下图所看到的:

XMPP协议的原理介绍

 

 

XMPP协议的组成

基本的XMPP 协议范本及当今应用非常广的XMPP 扩展:

RFC 3920 XMPP:核心。定义了XMPP 协议框架下应用的网络架构,引入了XML Stream(XML 流)与XML Stanza(XML 节),并规定XMPP 协议在通信过程中使用的XML 标签。使用XML 标签从根本上说是协议开放性与扩展性的须要。此外,在通信的安全方面,把TLS 安全传输机制与SASL 认证机制引入到内核,与XMPP 进行无缝的连接,为协议的安全性、可靠性奠定了基础。Core 文档还规定了错误的定义及处理、XML 的使用规范、JID(Jabber Identifier,Jabber 标识符)的定义、命名规范等等。所以这是全部基于XMPP 协议的应用都必需支持的文档。

RFC 3921:用户成功登陆到server之后,公布更新自己的在线好友管理、发送即时聊天消息等业务。全部的这些业务都是通过三种主要的XML 节来完毕的:IQ Stanza(IQ 节), Presence Stanza(Presence 节), Message Stanza(Message 节)。RFC3921 还对堵塞策略进行了定义,定义是多种堵塞方式。能够说,RFC3921 是RFC3920 的充分补充。两个文档结合起来,就形成了一个主要的即时通信协议平台,在这个平台上能够开发出各种各样的应用。

XEP-0030 服务搜索。一个强大的用来測定XMPP 网络中的其他实体所支持特性的协议。

XEP-0115 实体性能。XEP-0030 的一个通过即时出席的定制,能够实时改变交变广告功能。

XEP-0045 多人聊天。一组定义參与和管理多用户聊天室的协议,相似于Internet 的Relay Chat,具有非常高的安全性。

XEP-0096 文件传输。定义了从一个XMPP 实体到还有一个的文件传输。

XEP-0124 HTTP 绑定。将XMPP 绑定到HTTP 而不是TCP,主要用于不可以持久的维持与serverTCP 连接的设备。

XEP-0166 Jingle。规定了多媒体通信协商的总体架构。

XEP-0167 Jingle Audio Content Description Format。定义了从一个XMPP 实体到还有一个的语音传输过程。

XEP-0176 Jingle ICE(Interactive Connectivity Establishment)Transport。ICE传输机制,文件攻克了怎样让防火墙或是NAT(Network Address Translation)保护下的实体建立连接的问题。

XEP-0177 Jingle Raw UDP Transport。纯UDP 传输机制,文件讲述了怎样在没有防火墙且在同一网络下建立连接的。

XEP-0180 Jingle Video Content Description Format。定义了从一个XMPP 实体到还有一个的视频传输过程。

XEP-0181 Jingle DTMF(Dual Tone Multi-Frequency)。

XEP-0183 Jingle Telepathy Transport Method。

XMPP协议网络架构

XMPP是一个典型的C/S架构,而不是像大多数即时通讯软件一样,使用P2Pclient到client的架构,也就是说在大多数情况下,当两个client进行通讯时,他们的消息都是通过server传递的(也有例外,比如在两个client传输文件时).採用这样的架构,主要是为了简化client,将大多数工作放在server端进行,这样,client的工作就比較简单,并且,当添加功能时,多数是在server端进行.XMPP服务的框架结构例如以下图所看到的.XMPP中定义了三个角色,XMPPclient,XMPPserver、网关.通信可以在这三者的随意两个之间双向发生.server同一时候承担了client信息记录、连接管理和信息的路由功能.网关承担着与异构即时通信系统的互联互通,异构系统可以包含SMS(短信)、MSN、ICQ等.主要的网络形式是单client通过TCP/IP连接到单server,然后在之上传输XML,工作原理是:

(1)节点连接到server;(2)server利用本地文件夹系统中的证书对其认证;(3)节点指定目标地址,让server告知目标状态;(4)server查找、连接并进行相互认证;(5)节点之间进行交互.

XMPPclient

XMPP 系统的一个设计标准是必须支持简单的client。其实,XMPP 系统架构对client仅仅有非常少的几个限制。一个XMPP client必须支持的功能有:

1. 通过 TCP 套接字与XMPP server进行通信;

2. 解析组织好的 XML 信息包;

3. 理解消息数据类型。

XMPP 将复杂性从client转移到server端。这使得client编写变得很easy,更新系统功能也相同变得easy。XMPP client与服务端通过XML 在TCP 套接字的5222 port进行通信,而不须要client之间直接进行通信。

主要的XMPP client必须实现下面标准协议(XEP-0211):

RFC3920 核心协议Core

RFC3921 即时消息和出席协议Instant Messaging and Presence

XEP-0030 服务发现Service Discovery

XEP-0115 实体能力Entity Capabilities

 

XMPPserver

 

XMPP server遵循两个主要法则:

l  监听client连接,并直接与client应用程序通信;

l  与其它 XMPP server通信;

XMPP开源server一般被设计成模块化,由各个不同的代码包构成,这些代码包分别处理Session管理、用户和server之间的通信、server之间的通信、DNS(Domain Name System)转换、存储用户的个人信息和朋友名单、保留用户在下线时收到的信息、用户注冊、用户的身份和权限认证、依据用户的要求过滤信息和系统记录等。另外,server能够通过附加服务来进行扩展,如完整的安全策略,同意server组件的连接或client选择,通向其它消息系统的网关。

主要的XMPP server必须实现下面标准协议

RFC3920 核心协议Core

RFC3921 即时消息和出席协议Instant Messaging and Presence

XEP-0030 服务发现Service Discovery

 

 XMPP网关

 

XMPP 突出的特点是能够和其它即时通信系统交换信息和用户在线状况。因为协议不同,XMPP 和其它系统交换信息必须通过协议的转换来实现,眼下几种主流即时通信协议都没有公开,所以XMPP server本身并没有实现和其它协议的转换,但它的架构同意转换的实现。实现这个特殊功能的服务端在XMPP 架构里叫做网关(gateway)。眼下,XMPP 实现了和AIM、ICQ、IRC、MSN Massager、RSS0.9 和Yahoo Massager 的协议转换。因为网关的存在,XMPP 架构其实兼容全部其它即时通信网络,这无疑大大提高了XMPP 的灵活性和可扩展性。

 

XMPP地址格式

一个实体在XMPP网络结构中被称为一个接点,它有唯一的标示符jabber identifier(JID),即实体地址,用来表示一个Jabber用户,可是也能够表示其它内容,比如一个聊天室.一个有效的JID包含一系列元素:(1)域名(domain identifier);(2)节点(node identifier);(3)源(resource identifier).它的格式是node@domain/resourcenode@domain,相似电子邮件的地址格式.domain用来表示接点不同的设备或位置,这个是可选的,比如a在Server1上注冊了一个用户,username为doom,那么a的JID就是doom@serverl,在发送消息时,指明doom@serverl就能够了,resource能够不用指定,但a在登录到这个Server时,fl的JID可能是doom@serverl、exodus(假设a用Exodus软件登录),也可能是doom@serverl/psi(假设a用psi软件登录).资源仅仅用来识别属于用户的位置或设备等,一个用户能够同一时候以多种资源与同一个XMPP服务器连接

 

XMPP消息格式
XMPP中定义了       3个顶层XML元素: Message、Presence、IQ,以下针对这三种元素进行介绍。

 

<Message>

用于在两个jabber用户之间发送信息。Jsm(jabber会话管理器)负责满足全部的消息,无论目标用户的状态怎样。假设用户在线jsm马上提交;否则jsm就存储。

To :标识消息的接收方。

from : 指发送方的名字或标示(id)o

Text: 此元素包括了要提交给目标用户的信息。

结构例如以下所看到的:

 

<message to= ‘lily@jabber.org/contact’ type =’chat’>

<body> 你好,在忙吗</body>

</message>

 

 <Presence>

用来表明用户的状态,如:online、away、dnd(请勿打搅)等。当用户离线或改变自己的状态时,就会在stream的上下文中插入一个Presence元素,来表明自身的状态.结构例如以下所看到的:

<presence>

From =‘lily @ jabber.com/contact’

To = ‘yaoman @ jabber.com/contact’

<status> Online </status>

</presence>

<presence>元素能够取以下几种值:

Probe :用于向接受消息方法发送特殊的请求

subscribe:当接受方状态改变时,自己主动向发送方发送presence信息。

 

 

< IQ >

一种请求/响应机制,从一个实体从发送请求,另外一个实体接受请求,并进行响应.比如,client在stream的上下文中插入一个元素,向Server请求得到自己的好友列表,Server返回一个,里面是请求的结果.

<iq > 基本的属性是type。包含:

Get :获取当前域值。

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

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

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

结构例如以下所看到的:

<iq from =‘lily @ jabber.com/contact’id=’1364564666’ Type=’result’>

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117941.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • android传感器高级编程_传感器程序编写

    android传感器高级编程_传感器程序编写1.Android的三大类传感器Android传感器按大方向划分大致有这么三类传感器:动作(Motion)传感器、环境(Environmental)传感器、位置(Position)传感器。(1)动作传感器这类传感器在三个轴(x、y、z)上测量加速度和旋转角度。包括如下几个传感器:加速(accelerometer)传感器、重力(gravity)传感器、陀螺仪(gyrosc

    2022年9月29日
    0
  • 小技巧——防止系统出问题文件丢失

    为什么要进行数据备份,怕有一天数据你真的找不回来的时候,还有后悔药可以吃!有时候数据在你手上的时候你可能觉得它的价值不是很高,但是一旦你失去,你就会发现,它的重要性远远超过了你的想象!不犯错就不会成长,这次我一定要记住,让这种错误以后再也不要犯!重要的资料不要放到c盘!!! 不要放到桌面!!! 重要的资料不要放到c盘!!! 不要放到桌面!!!

    2022年2月25日
    43
  • 双绞线制作实验报告心得体会_制作网络双绞线实验心得

    双绞线制作实验报告心得体会_制作网络双绞线实验心得参考各路资料。不一一指出。一、实验目的:(1)学会两种双绞线制作方法;(2)掌握剥线/压线钳和普通网线测试仪的使用方法;(3)了解双绞线和水晶头的组成结构;(4)了解各网络设备之间网线连接的特点。二、实验项目:(1)直通线的制作(2)交叉线制作三、实验准备1、相关知识的准备(1)RJ-45水晶头结构(2)做线工具 剥线/压线钳

    2022年10月24日
    0
  • pycharm入门教程(非常详细)_php网站部署教程

    pycharm入门教程(非常详细)_php网站部署教程最全Pycharm教程(1)——定制外观  最全Pycharm教程(2)——代码风格  最全Pycharm教程(3)——代码的调试、运行  最全Pycharm教程(4)——有关Python解释器的相关配置  最全Pycharm教程(5)——Python快捷键相关设置  最全Pycharm教程(6)——将Pycharm作为Vim编辑器使用  最全Pyc

    2022年8月29日
    1
  • Ajax中Success中进行跳转问题

    Ajax中Success中进行跳转问题我在使用ajax的过程中,当返回成功信息的时候在success:function()跳转另一个页面使用了window.location("url")来跳转页面,出现了页面无法跳转的问题。自己整理,记录下来。Ajax部分代码: $.ajax({ ‘url’: "${pageContext.request.contextPath}/MailVerify", …

    2022年6月13日
    36
  • 免费php空间带域名,freehostia免费250MB无广告PHP空间可绑域名「建议收藏」

    免费php空间带域名,freehostia免费250MB无广告PHP空间可绑域名「建议收藏」freehostia是一个老牌的主机服务商,创建于2005年,不但提供收费主机及域名,也提供可无限续期的免费PHP空间。空间信息:空间大小:250M月流量:6G免费域名:无绑定域名:支持申请指南:1、进入freehostia空间官方网站:http://www.freehostia.com/。2、选择免费空间free套餐开始注册,如果你找不到,请直接打开此链接:http://www.freeho…

    2022年6月24日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号