物联网通信协议–XMPP

发表于 物联网知识  |  标签 , , ,

概述

XMPP 是可扩展消息传递和状态协议(the Extensible Messaging and Presence Protocol),是一组用于即时消息、状态、多方聊天、语音和视频呼叫、协作、轻量级中间件、内容联合和 XML 数据通用路由的开放技术,作为一种物联网协议,构建可靠,安全和可互操作的设备,服务和物联网应用程序。

XMPP协议

XMPP 提供了几个关键产品特点:

  • 开放 — XMPP 协议是自由、开放、公开且易于理解的;此外,客户端、服务器、服务器组件和代码库的形式存在多个实现。
  • 标准 — 互联网工程任务组 (IETF) 已将核心 XML 流协议正式化为经批准的即时消息和状态技术。XMPP 规范在 2004 年作为 RFC 3920RFC 3921 发布,XMPP 标准基金会继续发布许多 XMPP 扩展协议。2011 年,对核心 RFC 进行了修订,从而产生了最新的规范(RFC 6120RFC 6121 RFC 7622)。
  • 经过验证 – 第一个Jabber/XMPP技术是由Jeremie Miller在1998年开发的,现在相当稳定;数以百计的开发人员正在研究这些技术,今天有成千上万的XMPP服务器在互联网上运行,数百万人使用XMPP通过公共服务进行即时消息,例如Google Talk和XMPP在全球组织中的部署。
  • 分散 – XMPP网络的架构类似于电子邮件;因此,任何人都可以运行自己的XMPP服务器,使个人和组织能够控制他们的通信体验。
  • 安全 — 任何 XMPP 服务器都可以与公共网络隔离(例如,在公司内部网上),并且使用 SASL 和 TLS 的强大安全性已内置于核心 XMPP 规范中。此外,XMPP开发人员社区正在积极致力于端到端加密,以进一步提高安全标准。
  • 可扩展 — 使用 XML 的强大功能,任何人都可以在核心协议之上构建自定义功能;为了保持互操作性,XEP 系列中发布了通用扩展,但不需要此类发布,组织可以根据需要维护自己的专用扩展。
  • 灵活 — IM 以外的 XMPP 应用程序包括网络管理、内容联合、协作工具、文件共享、游戏、远程系统监控、Web 服务、轻量级中间件、云计算等。
  • 多样化 – 广泛的公司和开源项目使用XMPP来构建和部署实时应用程序和服务;当您使用XMPP技术时,您将永远不会被“锁定”。

历史

Jeremie Miller于1998年开始研究Jabber技术,并于1999年1月4日发布了该服务器的第一个版本。早期的Jabber社区专注于开源软件,主要是jabberd服务器。

互联网工程任务组(IETF)于2002年成立了一个XMPP工作组,将核心协议正式化为IETF即时消息和状态技术(IETF instant messaging and presence technology)。1999 年和 2000 年开发的早期 Jabber 协议构成了 2004 年 10 月在 RFC 3920 和 RFC 3921 中发布的 XMPP 的基础(IETF 的 XMPP 工作组在形式化期间的主要变化是添加了用于通道加密的 TLS 和用于身份验证的 SASL)。XMPP 工作组还制定了规范 RFC 3922 和 RFC 3923。2011 年,RFC 3920 和 RFC 3921 分别被 RFC 6120 和 RFC 6121 取代,RFC 6122 指定了 XMPP 地址格式。2015 年,RFC 6122 被 RFC 7622 取代。除了IETF标准化的这些核心协议外,XMPP标准基金会(前身为Jabber软件基金会)还积极开发开放的XMPP扩展。

第一个基于XMPP的IM服务是 Jabber.org,自1999年以来一直持续运行并提供免费帐户。从1999年到2006年2月,该服务使用jabberd作为其服务器软件,当时它迁移到了ejabberd(两者都是自由软件应用程序服务器)。2010年1月,该服务迁移到IIsode Ltd的专有M-Link服务器软件。

2008年9月,思科系统公司收购了商业产品Jabber XCP的创造者Jabber, Inc

XMPP 标准基金会 (XSF) 通过以 XMPP 扩展协议为中心的标准流程(XEP,以前称为 Jabber 增强提案 – JEP)开发和发布对 XMPP 的扩展

XMPP协议特点

客户端-服务器体系结构

XMPP 的工作原理是通过中间服务器在端点(客户端)之间传递小的结构化 XML 数据块。换句话说,如果您使用 XMPP 向朋友发送消息,则该消息作为 XML 文档的一部分,首先传输到服务器,而不是直接传输到朋友的设备。每个客户端都有一个唯一的名称,类似于电子邮件地址,服务器使用它来识别和路由邮件。XMPP为每个客户端提供了一种统一的方式来联系服务器,使机器之间的期望保持一致

分散式去中心化

XMPP 基于客户端-服务器架构,即客户端不直接通信,而是在服务器作为中介的帮助下进行通信。它是分散的,这意味着没有像电子邮件一样的集中式XMPP服务器,任何人都可以运行自己的XMPP服务器。

每个 XMPP 客户端都由 JID(Jabber ID)标识

#JID
 {
   user,
   server,
   resource
}

资源用于应用程序支持移动以及桌面或Web应用程序的情况,因此在即时消息应用程序仅支持单一资源的情况下,它可以是可选的

XMPP 实施

XMPP 的原始协议是传输控制协议,通过长期存在的 TCP 连接使用开放式 XML 流。

在某些情况下,有受限制的防火墙,XMPP(端口5222)被阻塞,因此它不能用于受限制防火墙后面 Web应用程序和用户,为了克服这一点,XMPP社区还开发了HTTP传输。
由于客户端使用HTTP,因此大多数防火墙允许客户端毫无问题地获取和发布消息。因此,在 XMPP 使用的 TCP 端口被阻止的情况下,服务器可以侦听正常的 HTTP 端口,并且流量应该可以毫无问题地通过

持久性 TCP 连接

传统上,XMPP使用互联网的传输控制协议(TCP)在客户端和服务器之间建立连接。这些是持久连接,因此不需要在每次发送新消息时重新建立它们。从这个意义上说,XMPP 建立了一个 XML 流,将两个实体之间的自由交换或 XML 数据包络起来。一些较新的XMPP扩展也使用网络别名和/或TLS加密

异步推送消息传递

XMPP允许用户的设备异步发送消息,这意味着您可以连续发送多条消息而无需等待响应,并且两个用户不必同时在线即可相互发送消息。消息以 XML 节的形式发送 — 包含消息正文以及关键信息(如发件人的唯一 ID、收件人的唯一 ID 和其他元数据)的各个信息单元。

在许多其他客户端-服务器系统中,客户端(用户设备)反复 ping 服务器,询问是否有任何新信息(消息)需要下载。这个过程被称为轮询,以定时的时间间隔发生 – 例如,每30秒一次 – 因此它不提供近实时通信的“即时”体验。它还会占用额外的带宽。XMPP 消息传递的工作方式与此相反:它不是客户端从服务器提取数据,而是将用户的任何新消息推送到服务器,然后从服务器推送到收件人的设备。

其他消息传递协议的网关

XMPP的另一个强大功能是它能够与其他协议进行交互,连接到原始消息来源之外的网络。例如,XMPP 网络可以具有到短消息服务 (SMS) 域的网关,以将消息中继到移动电话,到 SMTP 域以通过电子邮件传递聚合消息,或者连接到不同的即时消息协议(如 Internet 中继聊天 (IRC))

开源灵活性

作为一种开放协议,XMPP分散了开发,并允许许多不同类型的实现,这些实现可以很容易地相互连接。任何人都可以构建自己的客户端、服务器和库设置,并将其作为免费或付费解决方案分发.

支持多种语言

广泛的采用和较长的生命周期也产生了广泛的XMPP库和支持的语言,因此开发人员可能会找到适合其环境和专业知识的模板。XMPP 库适用于语言,包括 C, C++, C#, Ruby, Java, Python, Perl,等其他一些语言。

参考资料

xmpp.org

物联网 (xmpp-iot.org)

Swift XMPP 客户端

网站总编:

内容审核: