可扩展消息和存在协议外文翻译资料

 2022-04-26 10:04

英语原文共 6 页,剩余内容已隐藏,支付完成后下载完整资料


可扩展消息和存在协议

摘要 - 可扩展消息和呈现协议(XMPP)是基于XML的即时消息传递协议套件。 XMPP是开放协议,它的根在开放的即时消息软件Jabber上。 在本文中,我们介绍了在两个rfc文档中定义的基本XMPP功能,即rfc 3920和rfc 3921。

索引术语 - 即时消息,可扩展消息传送和呈现协议XMPP

历史

Jabber - 第一步

Jeremie Miller于1999年1月发布了Jabber。这是一个在开发阶段即时消息和存在的开放技术。大约一年后(2000年2月),IETF的IMPP工作组(Instant Messaging and Presence Protocol)发布了其工作结果:RFC 2778和RFC 2779.第一个包含一个即时消息和存在系统的模型[1],第二个是一组对此类系统的要求[2]。

由于观点不同,IMPP工作组从未制定过任何真正的协议。 Jabber社区制作了一个记录Jabber协议的互联网草案,。 不连贯的Jabber社区从未更新过草稿,因此已过期。即使如此,Jabber仍然在快速开发,并且在2000年10月发布了jabberd 1.2版(Jabber服务器)。 XMPP历史的时间线如图1所示。[3]

组织

Jabber软件基金会(JSF)成立于2001年8月,负责协调Jabber中使用的基于XML(可扩展标记语言)协议的开发和文档。 随着更强大和更一致的组织,Jabber软件基金会最终成功地和IETF一起使Jabber协议更加官方。

2002年2月,JSF向IETF提交了关于Jabber的Internet草案。 结果是很有希望的,并于2002年6月又提交了另外三份互联网草案。 在这些草案中,JSF为Jabber协议套件发布了新的中性名称:可扩展消息传送和呈现协议,XMPP。 很快XMPP工作组章程提交给IESG(互联网工程指导组),并于2002年10月批准了XMPP工作组。

XMPP工作组对草案进行了一些安全性和内部化增强。同时,JSF还使用了几个JEEP(Jabber增强方案),它们基本上是对XMPP的扩展。

2004年10月,IETF和XMPP工作组发布了四个RFC。 RFC 3920涵盖了核心XMPP。即时消息和状态支持在RFC 3921中进行了描述。另外两个RFC(RFC 3922,RFC 3923)涵盖了XMPP到CPIM的映射(即时消息的通用配置文件,RFC 3860) XMPP的端到端签名和目标加密。

介绍

架构

通常XMPP用于普通的客户机-服务器体系结构,但这不是必须的。 例如也可以使用直接客户端-客户端XMPP通信。通常XMPP在TCP之上使用,但也可以与其他协议一起使用。
图2给出了XMPP即时消息网络的一个示例。网络可以有多个XMPP客户端和服务器。还有一个XMPP网关,允许其他IM网络的用户与XMPP用户通信。服务器在XMPP中的主要角色是管理到客户端和其他服务器的连接和XML流。服务器还在XMPP网络中的XML流中路由XML节。在我们的示例(图2)中,XMPP服务器1正在路由发送到XMPP客户端2的所有节。因特网分配号码管理局(IANA)已为xmpp服务器到服务器连接注册了tcp端口5269[4]。

客户端正在启动与服务器或其他客户端的连接。 IANA为XMPP客户端连接注册了TCP端口5222,并且通常使用TCP进行连接,但也有其他方法。 例如,如果其他主机支持,则可以使用HTTP轮询。

寻址和JID

统一资源标识符(URI)是一种紧凑的字符串,用于标识资源。[5]。 XMPP网络中的每个Entinty(例如客户端)都具有符合URI的地址,该地址由于历史原因而被称为JID(Jabber ID)。 用户的连接资源(客户端)具有lt;user @ host / resourcegt;的JID形式,其中资源是可选的。 还有其他形式,例如lt;chatroom @ servicegt;或lt;chatroom @ service / nicknamegt;。 前者可用于解决特定服务的聊天室问题,后者则用于解决特定服务的聊天室中的昵称问题。

Jabber ID可以由三部分组成:节点,域和资源(nodersquo;@rsquo;domainrsquo;/rsquo;resource)。 JID部分的长度有一些限制,但限制并不令人不安。 任何部分的最大长度为1023字节,因此JID的最大大小(包括分隔符#39;@#39;和#39;/#39;)为3071个字节。

JID的唯一必需部分是域,其他两个是可选的。 域标识符可以是IP地址,但建议使用完全限定的域名(FQDN)。节点标识符是可选的,通常代表客户端,但它也可以用来表示多用户服务的聊天室。 资源标识符通常代表会话,连接或对象。

流和节

所有XMPP通信都是在XML流内完成的。当客户端建立与服务器(或与其他客户端)的连接时,它将打开一个XML流。 然后另一台主机将另一个流打开回原始主机,因此每个正在运行的XMPP连接都有两个XML流,每个方向一个。

XML流是允许在网络中的两台主机之间交换XML元素的容器。 流就像普通的XML文档,它具有整个会话的大小。 在流内发送的所有消息都在构建文档,因此流在关闭之前不是完整的XML文档。 XML流的根元素是lt;stream /gt;。 流用于将节从一个主机发送到另一个主机。 节是第一级子元素,并且有三个核心节类型:lt;message /gt;,lt;presence /gt;和lt;iq /gt;。

一个简化的XMPP流的示例:

lt;streamgt;

lt;message to=rsquo;somebodyrsquo;gt;

lt;bodygt;Hello!lt;/bodygt;

lt;/messagegt;

...

lt;/streamgt;

稍后有更详细的这些节的描述。

流协商

让我们假设客户端已经建立到服务器的TCP连接。然后,客户端通过发送XML版本元素(如lt;?xml version =#39;1.0#39;?gt;和打开的lt;streamgt;元素)开始流协商。服务器响应lt;?xml version =#39;1.0#39;?gt;并使用其自己的lt;streamgt;元素打开流向相反的方向。实际上,lt;streamgt;元素需要名称空间声明,所以在lt;streamgt;元素中有stream:前缀,而完整的元素名称是lt;stream:streamgt;。

流属性在lt;streamgt;元素中定义。属性包括名称空间和版本信息。当服务器使用lt;streamgt;元素进行响应时,它会向lt;stream:featuresgt;元素内的客户端发送STARTTLS请求。

成功的TLS协商客户端启动到服务器的新流之后。服务器像以前一样响应,但不再提供TLS。请求启动SASL协商包含在服务器响应中,有点像之前描述的TLS请求。如果TLS协商失败,服务器只需关闭TCP连接。

TLS

TLS协议(传输层安全性)在RFC 2246中进行了规定。它提供加密并防止客户端 - 服务器通信内的数据篡改[6]。 TLS的细节超出了本文的范围,但我们描述了如何在XMPP中协商TLS握手。 XMPP的序列TLS协商如图3所示。

  1. 启动实体(例如XMPP客户端应用程序)打开与接收实体(XMPP服务器)的TCP连接,并通过发送lt;stream:streamgt;元素启动XML流。
  2. 接收实体(XMPP服务器)打开TCP连接,发送XML流头和lt;stream:featuresgt;元素以及支持的流特征列表,包括STARTTLS扩展名。 如果TLS被配置为接收实体的必需特性,则它应该包含lt;required /gt;作为lt;starttlsgt;元素的子元素。 lt;stream:featuresgt;元素的一个例子:

lt;stream:featuresgt;

lt;starttls xmlns=

rsquo;urn:ietf:params:xml:ns:xmpp-tlsrsquo;gt;

lt;required/gt;

lt;/starttlsgt;

...

3)启动实体,然后通过发送

lt;STARTTLS xmlns=

lsquo;urn:IETF:params:xml:NS:XMPP-TLSrsquo;/gt;

来发出STARTTLS命令,到接收实体

4)接收实体以

lt;proceed xmlns=

rsquo;urn:ietf:params:xml:ns:xmpp-tlsrsquo;/gt;

元素答复。 如果发生故障(在starttls阶段),接收实体应答lt;failure /gt;元素并终止TCP连接。

5)在lt;proceed /gt;元素发送后,双方停止发送XML元素,并通过现有的TCP连接启动TLS协商。

6)如果TLS协商不成功(A)接收实体终止TCP连接。 否则(B)初始实体向接收实体打开新的XML流,就像在第一步一样,但是使用现有的TCP连接。

7)接收实体通过在第二步发送新的流标题来回复,但省略了STARTTLS部分。

下一步启动实体继续进行SASL协商。

SASL

简单认证和安全层(SASL)在RFC 2222中定义。它可以用来为基于连接的协议添加认证[7]。 就像TLS一样,SASL的细节超出了本文的范围,但我们提供了XMPP的SASL协商的简要说明。 以下SASL协商序列如图4所示。

  1. SASL协商开始于成功设置TLS时打开的新XML流的XML流标头。 第一个启动实体发送版本号为1.0的流元素。

lt;stream:stream

...

version=rsquo;1.0rsquo;gt;

2)接收实体用流标题和流特征来响应。

lt;stream:stream

...

version=rsquo;1.0rsquo;gt;

lt;stream:featuresgt;

lt;mechanisms xmlns=

rsquo;urn:ietf:params:xml:ns:xmpp-saslrsquo;gt;

lt;mechanismgt;

DIGEST-MD5

lt;/mechanismgt;

lt;mechanismgt;

EXTERNAL

lt;/mechanismgt;

lt;/mechanismsgt;

lt;/stream:featuresgt;

3)发起实体选择认证机制并将其发送给接收实体

lt;auth xmlns=

rsquo;urn:ietf:params:xml:ns:xmpp-saslrsquo;

mechanism=rsquo;DIGEST-MD5rsquo;/gt;

4)接收实体发送base 64编码(仅使用US-ASCII字符[8]传输数据的方法)询问

lt;challenge xmlns=

rsquo;urn:ietf:params:xml:ns:xmpp-saslrsquo;gt;

...

lt;/challengegt;

  1. 初始实体发送base64编码响应

lt;response xmlns=

rsquo;urn:ietf:params:xml:ns:xmpp-saslrsquo;gt;

...

  1. lt;/responsegt;
  2. 在必要时交换更多的询问/响应。

所需询问/响应对的数量取决于所使用的身份验证机制。身份验证的结果可以是lt;Success/gt;、lt;ABORT/gt;(由发起实体发送)或lt;Failure/gt;(由接收实体发送)。在失败的情况下,有一个原因代码包括在子元素中,例如lt;NOTENALATED/gt;。在SASL谈判失败或中止期间,应该可以进行合理数量的重试(例如,从输入密码错误中恢复),但如果身份验证失败,接收实体必须终止TCP连接。

如果认证成功,则接收实体向发起实体发送lt;success /gt;元素。当接收实体发送lt;success /gt;元素时,它认为现有的XML流关闭,并等待新流的流头。因此,另一个XML流在接收到lt;success /gt;元素时由发起实体打开,并将相应的流头发送给接收实体。接收实体响应流头和特征列表(可能为空),这次没有STARTTLS的信息扩展或SASL。

流成功打开后,包括SASL协商和可能的TLS协商,可以通过流发送XML节。节可以与命令或操作相比较。有三个为jabber定义的基本节:client和jabber:服务器空间名称 lt;message /gt;,lt;iq /gt;和lt;presence /gt;。

这三个节有五个共同的属性。 Allattributes并不总是存在。

1)to指定节的接收者。

2)from指定节的发送者。 当服务器收到一个节时,它应该检查#39;from#39;属性的有效性。服务器可以在

全文共14237字,剩余内容已隐藏,支付完成后下载完整资料


资料编号:[13263],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。