XMPP 协议工作流程
- 格式:doc
- 大小:223.44 KB
- 文档页数:6
网络协议知识:XMPP协议的工作原理和应用场景XMPP(Extensible Messaging and Presence Protocol,可扩展消息和存在协议)是一种基于XML的开放式即时通讯协议。
它最初被设计为一种聊天协议,但现在已被广泛用于实时通信、平台之间通讯、物联网等多个领域。
本文将为读者介绍XMPP协议的工作原理和应用场景。
一、XMPP协议的工作原理XMPP协议基于客户端/服务器架构,允许用户之间进行实时通信。
这些用户可能是个人,也可能是公司内部的员工或外部的供应商。
XMPP的设计目标是灵活、可扩展,并且易于部署和使用。
XMPP协议主要由以下三部分组成:1. Jabber XML Stream这是XMPP通信的基础,它提供了两个实体之间沟通的一种规范化方式。
Jabber协议由一系列XML元素、属性和扩展构成,这些元素用于交换信息和命令。
2. Jabber XML StanzaJabber协议使用“stanza”来描述不同类型的消息或命令。
XML stanza包括三个主要部分:头部、正文和扩展。
消息可以是文本或文件,如图片、视频和音频文件,也可以是命令,如在线状态更新和好友添加请求。
3. XMPP服务器XMPP服务器是整个协议的核心。
它负责维护用户账户信息、处理消息传输和控制通讯,还可以实现附加的功能扩展。
当两个XMPP客户端需要通信时,它们首先要连接到XMPP服务器,并进行身份验证。
一旦认证成功,客户端可以建立一个XML流,开始基于Jabber的通信。
客户端通过发送XML命令和消息给服务器,并将其发送到目标客户端。
当目标客户端收到消息后,它也会将响应发送回XMPP服务器,服务器再将消息转发给发送方客户端。
二、XMPP协议的应用场景XMPP协议已经得到了广泛的应用,以下是一些典型的应用场景。
1.即时通讯XMPP可以用于构建即时通讯系统。
它可以让用户之间实时发送文本、图像、视频和音频文件。
XMPP协议即时通讯(Openfire服务器版)一、什么是XMPPXMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的IM(IM:instant messaging,即时消息)协议之一。
XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML 环境中灵活的发展性。
XMPP中定义了三个角色,客户端,服务器,网关。
通信能够在这三者的任意两个之间双向发生。
服务器同时承担了客户端信息记录,连接管理和信息的路由功能。
网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ 等。
XMPP即时通信协议,采用C/S体系结构。
基本的网络形式是客户端连接到服务器,然后由服务器去连接到另一个客户端进行两个客户端之间的通信。
而他们传输的是XML流。
XMPP工作原理说明: 所有从一个客户端到另一个客户端的消息和数据都要通过服务器。
1、客户端连接服务器2、服务器利用本地目录系统的证书对其认证3、客户端制定目标地址,让服务器告知目标状态4、服务器查找,连接并进行相互认证5、客户端间进行交互二、搭建服务器(Openfire)通过上述的了解,我们知道要想进行通信,我们必须要有一个服务器。
服务器端采用Openfire作为服务器。
允许多个客户端同时登录并且并发的连接到一个服务器上。
服务器对每个客户端的连接进行认证,对认证通过的客户端创建会话,客户端与服务器端之间的通信就在该会话的上下文中进行。
首先安装Openfire点击继续点击安装安装成功后再偏好设置中就会有Openfire的图标。
点击Openfire的图标如果第一次安装Openfire,会发现Openfire的状态是停止的。
点击StartOpenfire,开启Openfire服务器注:如果Openfire一直打不开,请参考:/winer888/article/details/49886281当Status成为Running。
XMPP介绍可扩展的消息和出席信息协议(XMPP)是一个XML应用,让任何两个或多个网络实体之间进行结构化和可扩展的准实时信息交流. 本文定义了XMPP的核心协议方法: XML流的配置和解除, 通道加密, 验证, 错误处理, 以及消息通讯基础, 网络可用性("presence"), 和请求-应答交互。
XMPP的目标是允许两个(或多个)实体通过网络来交换相关的小件结构化数据(所谓"XML节"). XMPP典型地使用分布式的客户端-服务器体系结构来实现, 这里客户端需要连接到一个服务器以获得对网络的访问,从而被允许和其他实体(可能在其他服务器上)交换XML节. 一个客户端连接到一个服务器,交换XML节,以及结束连接,这样的流程如下:1. 确定要连接的IP地址和端口号, 典型的做法是对一个合格的域名做出解析2. 打开一个传输控制协议TCP连接3. 通过TCP打开一个XML流4. 握手最好使用传输层安全性TLS来进行通道加密5. 使用简单验证和安全层SASL机制来验证6. 绑定一个资源到这个流上7. 和其他网络上的实体交换不限数量的XML节8. 关闭XML流9. 关闭TCP连接在XMPP中, 一个服务器可以选择性地连接到另一个服务器以激活域间或服务器间的通讯. 这种情形下, 两个服务器需要在他们自身之间建立一个连接然后交换XML节; 这个过程所做的事情如下:1. 确定要连接的IP地址和端口号, 典型的做法是对一个合格的域名做出解析2. 打开一个TCP连接3. 打开一个XML流4. 握手最好使用TLS来进行通道加密5. 使用简单验证和安全层SASL机制来验证6. 交换不限数量的XML节,可以服务器之间直接交换,也可以代表每台服务器上的相关实体来交换,例如那些连到服务器上的客户端7. 关闭XML流8. 关闭TCP连接XMPP协议组成主要的XMPP 协议范本及当今应用很广的XMPP 扩展:RFC 3920 XMPP(RFC6120 新):核心。
xmpp 协议XMPP(Extensible Messaging and Presence Protocol)是一种开放式的实时通信协议,用于消息传递和在线状态共享。
它是一个基于XML的协议,能够实现跨平台和跨网络的通信。
XMPP的设计目标是提供一种分布式、松散耦合的系统,可以在不同的软件和服务之间交换信息。
它的核心功能是实时消息传递和在线状态共享,但它也提供了几个扩展功能,例如文件传输、在线游戏、语音和视频通话等。
XMPP采用了一种分布式的体系结构,其中包括一个中央服务器和多个客户端。
客户端可以是桌面应用程序、移动应用程序或者Web应用程序。
其中一个最重要的特性是可扩展性,用户可以根据自己的需求添加额外的功能和扩展。
在XMPP中,用户通过注册一个JID(Jabber ID)来加入网络。
JID由用户名和域名组成,类似于电子邮件地址。
用户之间可以通过JID来发送消息,并且可以通过JID来查看用户的在线状态。
XMPP协议使用基于XML的消息格式来传输数据。
消息可以是纯文本,也可以包含附加的元数据和命令。
这种灵活性使得XMPP协议可以适应不同的应用场景。
XMPP还提供了一套通用的扩展机制,允许用户添加额外的功能。
这些扩展可以通过描述XML命名空间和XML元素来实现。
许多常见的扩展已经被定义,例如文件传输、语音和视频通话等等。
XMPP在实时通信领域有广泛的应用。
它被用于构建即时通讯应用程序,如Google Talk和Facebook Messenger。
它还被用于构建社交网络和在线游戏服务。
总结起来,XMPP协议是一种开放式的实时通信协议,提供了分布式、松散耦合的系统架构。
它通过基于XML的消息格式来传输数据,并支持扩展功能。
XMPP在实时通信领域有广泛的应用,并且可以适应不同的应用场景和需求。
网络协议知识:XMPP协议和MQTT协议的比较随着物联网技术的不断发展,越来越多的设备和系统需要进行实时通信和消息传输。
XMPP协议和MQTT协议是两种常用的网络通信协议,本文将对这两种协议进行比较,探讨它们的优缺点和适用场景。
一、XMPP协议XMPP(Extensible Messaging and Presence Protocol)被定义为一种开放式的标准,用于实现即时通信(IM)和在线状态(Presence)功能。
XMPP最初被用于Jabber系统,现在已成为一种通用协议,越来越多的应用在使用XMPP协议进行通信。
XMPP协议的优点:1、安全性高XMPP协议支持TLS / SSL加密协议,可以保护数据传输的安全性。
此外,XMPP还支持SASL授权协议,用户可以使用用户名和密码等凭据进行身份验证。
2、灵活性强XMPP协议是一种灵活的协议,可以根据需要进行扩展和定制。
这种灵活性使XMPP适合用于各种应用场景,从即时消息到实时位置更新等等。
3、消息传递速度快XMPP协议传输消息使用的是XML格式,这种格式通常比其他格式更快更高效。
因此,XMPP协议的消息传输速度相对较快。
XMPP协议的缺点:1、性能不如其他协议由于XMPP的XML格式较为复杂,因此其性能一般不如其他协议。
这也限制了XMPP协议在某些性能要求较高的场景中的应用。
2、开发难度较大由于XMPP协议的复杂性和灵活性,对于开发者而言,学习和掌握XMPP协议需要一定的时间和精力。
这也会增加XMPP协议的开发难度。
二、MQTT协议MQTT协议(Message Queue Telemetry Transport)是一种轻量级的、基于发布/订阅模式的通信协议,适用于各种物联网设备之间的通信。
MQTT协议的优点:1、简单易用MQTT协议非常简单,易于开发和使用。
它基于发布/订阅模式,支持多种消息格式,包括JSON、AVRO和XML等。
这使得MQTT协议成为物联网通信的首选协议之一。
即时通讯协议即时通讯协议是一种用于实时传输文本消息、音频和视频数据的通信协议。
它可以让用户之间通过网络进行实时的交流和沟通。
即时通讯协议在现代社会中起到了重要的作用,让人们可以随时随地与亲朋好友、同事和商业伙伴保持联系。
1. 概述即时通讯协议是一种基于网络的通信协议,用于实现即时消息传输。
它的主要特点是实时性和即时性。
用户可以通过即时通讯软件或应用程序在任何时间、任何地点与其他用户进行交流。
2. 常见的即时通讯协议2.1 XMPPXMPP(Extensible Messaging and Presence Protocol)是一种开放式的即时通讯协议。
它基于XML(可扩展标记语言)格式,可以实现实时消息传输、在线状态展示、文件传输等功能。
XMPP协议具有灵活的扩展性,可以根据需求定制各种功能。
2.2 SIPSIP(Session Initiation Protocol)是一种用于建立、修改和终止会话的通信协议。
它可以用于语音、视频和即时消息传输。
SIP协议是一种灵活的通信协议,可以与其他协议(如XMPP)结合使用,以实现更丰富的功能。
2.3 IRCIRC(Internet Relay Chat)是一种基于文本的即时通讯协议。
它最初用于互联网上的实时聊天,但现在也广泛应用于团队协作和开源项目中。
IRC协议具有简单、轻量级的特点,适合于低带宽环境下的通信。
2.4 WebSocketWebSocket是一种在单个TCP连接上进行全双工通信的协议。
它可以使客户端和服务器之间实现实时的双向通信。
WebSocket协议可以用于实现即时通讯功能,但它也可以用于其他领域,如实时游戏和推送服务。
3. 即时通讯协议的优点3.1 实时性即时通讯协议具有实时传输消息的特点,用户可以在几乎同时收到发送方发送的消息。
3.2 方便快捷即时通讯协议可以随时随地进行通信,不受时间和地点的限制。
用户可以通过手机、电脑等设备进行即时通讯。
即时通讯方案引言即时通讯是指通过网络实时传递消息的技术,它在现代社交网络和企业通信中扮演着重要的角色。
本文将介绍几种常见的即时通讯方案,包括基于开源软件的方案和云服务方案。
开源软件方案1. XMPPXMPP(Extensible Messaging and Presence Protocol)是一种开源的即时通讯协议,被广泛应用于聊天、实时协作和在线游戏等领域。
XMPP协议基于XML,具有良好的可扩展性和灵活性。
优点•开源:XMPP是一个开放的标准,广泛应用于各种服务器和客户端实现。
•可扩展:XMPP支持自定义扩展,可以根据需求增加新功能。
•跨平台:XMPP可以在不同操作系统和设备上运行,包括Windows、Linux、iOS和Android等。
缺点•复杂性:XMPP协议复杂度较高,实现和部署有一定的难度。
•性能:XMPP在大规模用户和高并发场景下性能可能受到限制。
•部署成本:自建XMPP服务器需要一定的硬件和网络资源。
2. MatrixMatrix是一个去中心化的通讯协议和开放标准,类似于XMPP,但更注重去中心化和用户隐私保护。
Matrix基于HTTP和JSON等现有技术,可以实现跨平台、跨网络的通讯。
优点•去中心化:Matrix不依赖中央服务器,可以由多个服务器组成一个分布式网络。
•用户隐私保护:Matrix提供端到端加密和身份验证等安全机制,保护用户通讯内容和身份信息。
•跨平台:Matrix支持在不同操作系统和设备间进行通讯。
缺点•发展相对较新:Matrix在市场上的应用和认可程度相对较低。
•可用性:Matrix的服务器和客户端数量有限,用户规模和生态系统相对较小。
云服务方案1. Firebase Cloud MessagingFirebase Cloud Messaging(FCM)是谷歌提供的一种云服务,专门用于在应用程序之间传递消息和推送通知。
FCM支持 Android、iOS 和 Web 平台,提供了一套简单易用的API和开发工具。
RFC3920可扩展的消息和出席信息协议(GMPP):核心协议关于本文的说明本文为互联网社区定义了一个互联网标准跟踪协议,并且申请讨论协议和提出了改进的建议。
请参照“互联网官方协议标准”的最新版本( STD1 )获得这个协议的标准化进程和状态。
本文可以不受限制的分发。
版权声明本文版权属于互联网社区(C)TheInternetSocietP(20GG).摘要本文定义了可扩展消息和出席信息协议(GMPP )的核心功能,这个协议采用 GML流实现在任意两个网络终端接近实时的交换结构化信息。
GMPP提供一个通用的可扩展的框架来交换GML数据,它主要用来建立即时消息和出席信息应用以实现RFC2779的需求。
目录1. 绪论2. 通用的架构3. 地址空间4. GML 流5. TLS的使用6. SASL的使用7. 资源绑定8. 服务器回拨9. GML 节10. 服务器处理GML节的规则11. GMPP中的GML用法12. 核心的兼容性要求13. 国际化事项14. 安全性事项15. IANA 事项16. 参考1. 绪论1.1. 概览GMPP是一个开放式的GML协议,设计用于准实时消息和出席信息以及请求- 响应服务。
其基本的语法和语义最初主要是由Jabber开放源代码社区于1999年开发的。
20GG年,GMPP工作组被授权接手开发和改编 Jabber协议以适应 IETF的消息和出席信息技术。
作为GMPP工作组的成果,本文定义了 GMPP1.0 的核心功能;在RFC2779[IMP-REQS]中指定的提供即时消息和出席信息功能的扩展,定义在GMPP-IM 协议[theEGte nsibleMessagi ngan dPrese nceProtocol(GMPP):l nsta ntMessagi ng andPresenee]中。
1.2. 术语本文中大写的关键字"MUST","MUSTNOT","REQUIRED","SHALL","SHALLNOT","SHOULD","SH OULDNOT","RECOMMENDED","MAP", 和"OPTIONAL"的确切含义符合BCP14,RFC2119[TERMS].2. 通用的架构2.1. 概览尽管GMPP没有结合任何特定的网络结构,通常认为它是客户-服务器架构的一种实现,在这里客户端用GMPP的方式访问服务器采用的是TCP连接,服务器之间的通信也是TCP连接。
XMPP 协议1。
XMPP 优缺点XMPP (Extensible Messaging and Presence Protocol) (前称Jabber) 是一种以 XML 为基础的开放式即时通讯协议,是经由互联网工程工作小组(IETF)通过的互联网标准。
[1]1.1 XMPP 协议的优点1。
1.1 可扩展性XMPP 的数据传输基于 XML 格式,可扩展性强.XMPP 的核心协议栈(Core Stack) 部分只定义了基础的 Presence,Message,Iq 等最主要数据格式和传输逻辑,更多的功能则通过定义扩展 (Extensions) 实现.1.1.2 受 IETF 组织规范Internet Engineering Task Force (IETF)在2002年开始规范 XMPP 协议,使其协议的修订和扩展的添加都经过严格的流程审核,防止 XMPP 协议因缺乏标准而分裂.并且这也保证了 XMPP 协议是完全开放的。
1。
1。
3 应用广泛XMPP 协议的应用比其他开放即时通讯协议更为广泛.较有名的使用 XMPP 协议的聊天服务有 Google Gtalk 和 Facebook Chat 等。
此外,XMPP 在各平台下都有若干服务端、客户端和程序库的实现,二次开发时成本较低。
XMPP 协议的可扩展性和开放性是该协议被广泛应用的保证。
1。
2 XMPP 协议的缺点1。
2.1 不内置支持二进制数据的传输XMPP 的核心部分没有包含对二进制数据传输的支持,这使得 XMPP 的基本数据限定在文本文件范围内。
XMPP 社区认为,XMPP 应该用于传输 meta 信息,辅助其他应用进行协议握手,XMPP 本身不应负担海量信息的传输。
从当前流行的轻量化观点来看,XMPP 把二进制数据传输的协议移入核心栈,是符合了最小核心的需求.但同时却为实际应用中 XMPP 客户端传输二进制数据增加了开发扩展协议的负担。
1。
XMPP 协议工作流程详解分类:翻译文章2014-04-23 11:11 2221人阅读评论(0) 收藏举报原文: .au/content/how-xmpp-works-step-step作者: Yilun Fan, 日期2011-01-05 13:09XMPP 核心协议/rfcs/rfc3920.htmlXMPP 要点.∙ 1. 客户端(C) 和服务器端(S) 通过TCP连接5222端口进行全双工通信.∙ 2. XMPP 信息均包含在XML streams中.一个XMPP会话, 开始于<stream> 标签, 并结束于</stream>标签.所有其他的信息都位于这俩标签之间.∙ 3. 出于安全目的考虑, 开始<stream>之后, 后续的内容会被适度的使用Transpor Layer Security (TLS) 协商传输和强制性的Simple Authentication 和SecurityLayer (SASL) 协商传输.∙ 4. SASL协商完成后, 一个新的stream 将会被迅速打开, 它将会更加安全和保密.第一步: 打开 streamClient: 客户端发送打开stream 的片段到服务器, 请求一个新的session.[html]view plaincopy1.<stream:stream to=''xmlns='jabber:client'xmlns:stream='http://e/streams'version='1.0'>这里“” 是客户端试图连接的服务器的域名.Server: Server 返回XML stream, 以<stream:freatures> 开头, 包含要求TLS 或者SASL 协商谈判之一, 或者2个都要求.[html]view plaincopy1.<stream:features>2.<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'>3.<required/>4.</starttls>5.<mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>6.<mechanism>DIGEST-MD5</mechanism>7.<mechanism>PLAIN</mechanism>8.<mechanism>EXTERNAL</mechanism>9.</mechanisms>10.</stream:features>第二步: 加密和认证.2.1 如果服务器需要 TLS 交涉.Client: 客户端发送STARTTLS 到服务器.[html]view plaincopy1.<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>Server: 服务器返回消息显示TLS 已被允许:[html]view plaincopy1.<proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>或者TLS失败了:[html]view plaincopy1.<failure xmlns='urn:ietf:params:xml:ns:xmpp-tls'/></stream:stream>在失败的情况下, 服务器会关闭TCP 连接.Client: 如果TLS 已被服务器正确处理, 客户端发送请求一个新的session:1.<stream:stream xmlns='jabber:client'xmlns:stream='/streams'to=''version='1.0'>Server: 服务器响应一个XML stream, 指示是否需要SASL 交涉.[html]view plaincopy1.<stream:stream xmlns='jabber:client'xmlns:stream='/streams'from=''id='c2s_234'version='1.0'>2.<stream:features>3.<mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>4.<mechanism>DIGEST-MD5</mechanism>5.<mechanism>PLAIN</mechanism>6.<mechanism>EXTERNAL</mechanism>7.</mechanisms>8.</stream:features>2.2 SASL 交涉Client 客户端需要选择一个服务器上有效的认证方式来携带SASL交涉数据, 上面的情况, “DIGEST-MD5“, “PLAIN” 和“EXTERNAL” 是一些可选项.“PLAIN” 认证模式是三者之中最简单的了. 它是这样工作的:Client: 客户端按照自己选择的认证模式发送一个将用户名和密码以base64编码的stream.用户名和密码按这种格式组织:[html]view plaincopy1.“\0UserName\0Password”.例如我想以用户名为“mbed@”登录, 密码是“mirror”. 那么, 在进行base64编码之前, 用户名和密码按照上面的格式组织为一个新的字符串,“\0mbed\0mirror”, 再进行base64编码, 得到字符串“AG1iZWQAbWlycm9y”.然后, 客户端发送下列stream 到服务器.1.<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl'mechanism='PLAIN'>AG1iZWQAbWlycm9y</auth>Server: 如果服务器接受了认证信息, 服务器会发回带“success”标签的stream.[html]view plaincopy1.<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>或者:Server: 如果密码和用户名不匹配, 或者上面的base64编码有错误, 服务器发回错误信息的stream.[html]view plaincopy1.<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>“DIGEST-MD5” 认证模式的具体方法可以在这里找到: /rfc/rfc2831.txt.第三步: 资源绑定(可选)Client: 客户端要求服务器绑定一个资源(可以理解为客户端的类型, 比如电脑, 手机, Web 应用等):[html]view plaincopy1.<iq type='set'id='bind_1'>2.<bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/>3.</iq>或者Client: 客户端自己绑定一个资源:[html]view plaincopy1.<iq type='set'id='bind_2'>2.<bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'>3.<resource>someresource</resource>4.</bind>5.</iq>Server: 服务器发回另外一个<iq>片段, 如果“type” 标签的内容是“result”, 说明绑定是成功的, 否则说明绑定失败.[html]view plaincopy1.<iq type='result'id='bind_2'>2.<bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'>3.<jid>somenode@/someresource</jid>4.</bind>5.</iq>第四步: 请求一个新的session在SASL 交涉完成之后或者可选资源绑定之后, 客户端必须建立一个session 来开始即时消息发送和接收.Client: 客户端向服务器发送请求:[html]view plaincopy1.<iq to=''type='set'id='sess_1'>2.<session xmlns='urn:ietf:params:xml:ns:xmpp-session'/>3.</iq>Server: 服务器发回一个<iq> 片段表明session 是否成功创建.创建成功的消息类似于:[html]view plaincopy1.<iq from=''type='result'id='sess_1'/>如果服务器未能创建session, 服务器将会回复一个如下消息或者其他类型的错误消息.[html]view plaincopy1.<iq from=''type='error'id='sess_1'>2.<session xmlns='urn:ietf:params:xml:ns:xmpp-session'/>3.<error type='auth'>4.<forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>5.</error>6.</iq>第五步: 客户端和服务器交换 XMPP 片段如果以上步骤均成功完成, 那么客户端就可以发送XMPP 片段到服务器和接收XML stream了.客户端可以发送<iq> 片段来向服务器请求roster 或者其他信息. 并可以使用<presence> 片段来改变客户端的presence 状态(比如在线, 离开等)即时消息和其他的负载可以通过发送<message> 片段来完成.第六步: 关闭 stream最后, 如果客户端想要结束聊天和关闭XMPP session, 客户端需要发送一个关闭stream 的片段到服务器.[html]view plaincopy1.<presence type='unavailable'/>2./stream:stream>然后, 服务器将会改变客户端的presence 状态为“Offline” , 并且关闭和客户端的TCP 连接.。