xmpp协议1
XMPP是一个开放的可扩展标记语言[XML]协议,用于近实时的消息、出席与请求-响应服务。基本语法语义最初是由Jabber开源社区在1999年开发的。2002年,XMPP工作组授权开发一个Jabber协议的改写本,以适用于IETF的即时消息(IM)与出席技术。作为XMPP工作组的成果,目前的文档定义了XMPP1.0的核心性质;该扩展要提供的在RFC2779[IM-REQS]中所定义的即时消息与即时出席功能,是由XMPP:即时消息与与即时出席[XMPP-IM]指定。
Extensible Messaging and Presence Protocol (XMPP): Core
//可扩展消息处理和出席协议(XMPP):核心
下面的图表给出了这种架构的一个高度概括("-"代表使用XMPP进行通信,"="代表使用其他的协议进行的通信)。
XMPP的架构
C1—-S1—S2—C3
|
C2—-+–G1===FN1===FC1
The symbols are as follows:
符号表示如下:
C1, C2, C3 = XMPP clients //XMPP客户端
S1, S2 = XMPP servers //XMPP服务器
G1 = A gateway that translates between XMPP and the protocol(s) used on a foreign (non-XMPP) messaging network //网关:在XMPP与外部协议(非XMPP)的消息网络间转换
FN1 = A foreign messaging network //外部消息网络
FC1 = A client on a foreign messaging network //外部消息网络的客户端
服务器
服务器在XMPP通信中作为一个智能的抽象层。它的主要作用是
管理连接其它实体的会话,以XML流格式在已授权的客户端、服务器以及其它实体间来回传送
通过XML流在实体间路由具有合适地址的XML节
客户端
大多数客户端通过[TCP]连接直接连到服务器,并且使用XMPP,充分利用由服务器及任何相关服务所提供的功能。多种资源(例如:设备或位置)可能代表每个被授权客户端同时连到服务器上。每个资源均由定义在地址方案(第3节)下的XMPP地址的资源标识符来区别(例如:< node@domain/home> vs. <node@domain/work>)。客户端与服务器的推荐连接端口为5222,已由IANA注册(参考端口编号(15.9节))。
网关
网关是服务器端的一种特殊服务,它的主要功能是将XMPP翻译成外部消息系统所使用的协议(非XMPP),也可将数据翻译回XMPP。例如EMAIL网关(参考[SMTP]),Internet Relay Chat(参考[IRC]),SIMPLE(参考[SIIMPLE],Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensions),短消息服务(SMS),遗留即时消息服务,诸如AIM,ICQ,MSN Messenger,Yahoo! Instant Messenger。网关与服务器间的通信,网关与外部消息系统间的通信,均未在此文档中定义。
网络
由于每个服务器由网络地址指定,并且由于服务器与服务器间的通信是客户与服务器协议的直接扩展,实际上,系统由互相通信的服务器网络组成。举个例子, <juliet@example.com>能与<romeo@example.net>交换消息、即时会议,以及其它信息。这是使用网络寻址标准的消息协议(例如[SMTP])所熟悉的模式。任意两服务器间的通信是可选的。如果可通信,此类通信就应当发生在绑定到[TCP]连接的 XML流上。服务器间连接的推荐端口为5269,已由IANA注册(参考端口编号(15.9节))
寻址方案
一个实体可被看作是使用XMPP进行通信的一个网络端点的任何事物(例如:一个网络上的ID)。所有此类实体均以符合RFC2396[URI]规范的格式来设定唯一地址。由于历史原因,XMPP实体的地址称作Jabber标识符或JID。一个有效JID包含一套有序元素:域标识符,结点标识符,资源标识符。
JID的语法定义如下,使用增广巴斯科范式[ABNF](Augmented Backus-Naur Form)。(Ipv4地址与Ipv6地址规则定义在[Ipv6]的附录B;符合结点规则的允许字符序列由Nodeprep profile of [STRINGPREP]定义,编入本文档的附录A;符合资源规则的允许字符序列由Resourceprep profile of [STRINGPREP]定义,编入本文档的附录B;子域规则参考国际化域标识的概念,在[IDNA]中有述)。*/
jid = [ node "@" ] domain [ "/" resource ]
domain = fqdn / address-literal
fqdn = (sub-domain 1*("." sub-domain))
sub-domain = (internationalized domain label)
address-literal = IPv4address / IPv6address
所有的JID都基于前面描述的规则。此结构最通常的应用就是以<user@host/resource>形式标识一个即时消息用户、用户连接的服务器及用户连接的资源(例如:特定的客户端)。然而,结点类型可能不仅是客户端,举个例子,一个提供多用户聊天服务的特定聊天室,可以以< room@service>(“room”是聊天室名,“service”是多用户聊天服务的主机名)作为地址。并且,此聊天室的特别拥有者可能以 <room@service/nick>(“nick”是此拥有者的房间昵称)作地址。许多其它JID类型也均有可能(例如:< domain/resource>可能是一个服务器端脚本或服务)。
JID(结点标识符,域标识符,资源标识符)的每个部分可允许长度不准超过1023字节,因此,最大总长度(包括‘@’,‘/’分隔符)为3071字节。
域标识符
域标识符是主要标识符,且是JID中唯一的一个必须有的元素(有域标识符的JID才是有效的)。它通常表示网络网关或“主要的”服务器,它具有为其它实体间的连接进行XML路由与数据管理的能力。然而,由域标识符标示的实体并不总是服务器,它可能是一项以服务器子域为地址的服务,提供多于服务器(例:多用户聊天服务,用户目录,或外部消息系统的一个网关)的功能。
每个将通过网络进行通信的服务器或服务的域标识符,它可以是IP地址,但一定要是完全合法的域名(参考[DNS])。域标识符必须是一个“国际化的域名”,定义在[IDNA],Nameprep [NAMEPREP] profile of stringprep [STRINGPREP]可以无错应用。比较两个域标识符之前,服务器必须(客户端是应该)首先对标签(定义在[IDNA])应用Nameprep profile,以补足每个标识符。
节点标识符
节点标识符是一个可选的辅助标识符,放在域标识符之前,后以‘@’字符分隔。它通常表示实体请求与使用由服务器或网关(例如:一个客户端)提供的网络访问,虽然它也能表示其它种类的实体(例如:有多用户聊天服务功能的聊天室)。由结点标识符表示的实体,在特定域上下文中,在XMPP即时消息与即时会议应用中被加以地址,此类地址称作“bare JID”,形式为<node@domain>。
节点标识符是放在域标识符前以字符'@'隔开的可选的辅助标识符。它通常代表请求或使用由服务器或网关(例如一个客户端)提供的网络访问的实体,虽然它也可以代表其他种类的实体(例如:有多用户聊天服务功能的聊天室)。由节点标识符表征的实体处于特定域上下文中;在XMPP即时消息与即时会议应用中,此类地址称作“bare JID”,形式为<node@domain>。
结点标识符必须格式化以使得Nodeprep profile of [STRINGPREP]可以无错应用。在比较两个结点标识符之前,服务器必须(客户端应该)首先对每个标识符应用Nameprep profile。
资源标识符
资源标识符是一个可选的第三位标识符,位于域标识符之后,后跟‘/’作为分隔符。资源标识符可以更进<node@domain>地址,也可以只是纯粹的<domain>地址。它通常表示一个特别的会话、连接(例如:一个设备或位置),或属于带有节点标识符的对象(例如:在多用户聊天室的一个参与者)。当提供必要的信息来完成资源绑定(第7节)时,资源标识符对服务器与其它客户端均不透明,并且由客户端实现来定义,以后,它作为一个 “已连接资源”参考。实体可能同时维护多连接,每个已连接的资源均由资源标识符来进行区别
资源标识符必须按Resourceprep profile of [STRINGPREP]格式化,才能无错应用。比较两个资源标识符前,服务器必须(客户端应该)首先为每个标识符应用Resourceprep profile。
Extensible Messaging and Presence Protocol (XMPP): Core
//可扩展消息处理和出席协议(XMPP):核心
下面的图表给出了这种架构的一个高度概括("-"代表使用XMPP进行通信,"="代表使用其他的协议进行的通信)。
XMPP的架构
C1—-S1—S2—C3
|
C2—-+–G1===FN1===FC1
The symbols are as follows:
符号表示如下:
C1, C2, C3 = XMPP clients //XMPP客户端
S1, S2 = XMPP servers //XMPP服务器
G1 = A gateway that translates between XMPP and the protocol(s) used on a foreign (non-XMPP) messaging network //网关:在XMPP与外部协议(非XMPP)的消息网络间转换
FN1 = A foreign messaging network //外部消息网络
FC1 = A client on a foreign messaging network //外部消息网络的客户端
服务器
服务器在XMPP通信中作为一个智能的抽象层。它的主要作用是
管理连接其它实体的会话,以XML流格式在已授权的客户端、服务器以及其它实体间来回传送
通过XML流在实体间路由具有合适地址的XML节
客户端
大多数客户端通过[TCP]连接直接连到服务器,并且使用XMPP,充分利用由服务器及任何相关服务所提供的功能。多种资源(例如:设备或位置)可能代表每个被授权客户端同时连到服务器上。每个资源均由定义在地址方案(第3节)下的XMPP地址的资源标识符来区别(例如:< node@domain/home> vs. <node@domain/work>)。客户端与服务器的推荐连接端口为5222,已由IANA注册(参考端口编号(15.9节))。
网关
网关是服务器端的一种特殊服务,它的主要功能是将XMPP翻译成外部消息系统所使用的协议(非XMPP),也可将数据翻译回XMPP。例如EMAIL网关(参考[SMTP]),Internet Relay Chat(参考[IRC]),SIMPLE(参考[SIIMPLE],Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensions),短消息服务(SMS),遗留即时消息服务,诸如AIM,ICQ,MSN Messenger,Yahoo! Instant Messenger。网关与服务器间的通信,网关与外部消息系统间的通信,均未在此文档中定义。
网络
由于每个服务器由网络地址指定,并且由于服务器与服务器间的通信是客户与服务器协议的直接扩展,实际上,系统由互相通信的服务器网络组成。举个例子, <juliet@example.com>能与<romeo@example.net>交换消息、即时会议,以及其它信息。这是使用网络寻址标准的消息协议(例如[SMTP])所熟悉的模式。任意两服务器间的通信是可选的。如果可通信,此类通信就应当发生在绑定到[TCP]连接的 XML流上。服务器间连接的推荐端口为5269,已由IANA注册(参考端口编号(15.9节))
寻址方案
一个实体可被看作是使用XMPP进行通信的一个网络端点的任何事物(例如:一个网络上的ID)。所有此类实体均以符合RFC2396[URI]规范的格式来设定唯一地址。由于历史原因,XMPP实体的地址称作Jabber标识符或JID。一个有效JID包含一套有序元素:域标识符,结点标识符,资源标识符。
JID的语法定义如下,使用增广巴斯科范式[ABNF](Augmented Backus-Naur Form)。(Ipv4地址与Ipv6地址规则定义在[Ipv6]的附录B;符合结点规则的允许字符序列由Nodeprep profile of [STRINGPREP]定义,编入本文档的附录A;符合资源规则的允许字符序列由Resourceprep profile of [STRINGPREP]定义,编入本文档的附录B;子域规则参考国际化域标识的概念,在[IDNA]中有述)。*/
jid = [ node "@" ] domain [ "/" resource ]
domain = fqdn / address-literal
fqdn = (sub-domain 1*("." sub-domain))
sub-domain = (internationalized domain label)
address-literal = IPv4address / IPv6address
所有的JID都基于前面描述的规则。此结构最通常的应用就是以<user@host/resource>形式标识一个即时消息用户、用户连接的服务器及用户连接的资源(例如:特定的客户端)。然而,结点类型可能不仅是客户端,举个例子,一个提供多用户聊天服务的特定聊天室,可以以< room@service>(“room”是聊天室名,“service”是多用户聊天服务的主机名)作为地址。并且,此聊天室的特别拥有者可能以 <room@service/nick>(“nick”是此拥有者的房间昵称)作地址。许多其它JID类型也均有可能(例如:< domain/resource>可能是一个服务器端脚本或服务)。
JID(结点标识符,域标识符,资源标识符)的每个部分可允许长度不准超过1023字节,因此,最大总长度(包括‘@’,‘/’分隔符)为3071字节。
域标识符
域标识符是主要标识符,且是JID中唯一的一个必须有的元素(有域标识符的JID才是有效的)。它通常表示网络网关或“主要的”服务器,它具有为其它实体间的连接进行XML路由与数据管理的能力。然而,由域标识符标示的实体并不总是服务器,它可能是一项以服务器子域为地址的服务,提供多于服务器(例:多用户聊天服务,用户目录,或外部消息系统的一个网关)的功能。
每个将通过网络进行通信的服务器或服务的域标识符,它可以是IP地址,但一定要是完全合法的域名(参考[DNS])。域标识符必须是一个“国际化的域名”,定义在[IDNA],Nameprep [NAMEPREP] profile of stringprep [STRINGPREP]可以无错应用。比较两个域标识符之前,服务器必须(客户端是应该)首先对标签(定义在[IDNA])应用Nameprep profile,以补足每个标识符。
节点标识符
节点标识符是一个可选的辅助标识符,放在域标识符之前,后以‘@’字符分隔。它通常表示实体请求与使用由服务器或网关(例如:一个客户端)提供的网络访问,虽然它也能表示其它种类的实体(例如:有多用户聊天服务功能的聊天室)。由结点标识符表示的实体,在特定域上下文中,在XMPP即时消息与即时会议应用中被加以地址,此类地址称作“bare JID”,形式为<node@domain>。
节点标识符是放在域标识符前以字符'@'隔开的可选的辅助标识符。它通常代表请求或使用由服务器或网关(例如一个客户端)提供的网络访问的实体,虽然它也可以代表其他种类的实体(例如:有多用户聊天服务功能的聊天室)。由节点标识符表征的实体处于特定域上下文中;在XMPP即时消息与即时会议应用中,此类地址称作“bare JID”,形式为<node@domain>。
结点标识符必须格式化以使得Nodeprep profile of [STRINGPREP]可以无错应用。在比较两个结点标识符之前,服务器必须(客户端应该)首先对每个标识符应用Nameprep profile。
资源标识符
资源标识符是一个可选的第三位标识符,位于域标识符之后,后跟‘/’作为分隔符。资源标识符可以更进<node@domain>地址,也可以只是纯粹的<domain>地址。它通常表示一个特别的会话、连接(例如:一个设备或位置),或属于带有节点标识符的对象(例如:在多用户聊天室的一个参与者)。当提供必要的信息来完成资源绑定(第7节)时,资源标识符对服务器与其它客户端均不透明,并且由客户端实现来定义,以后,它作为一个 “已连接资源”参考。实体可能同时维护多连接,每个已连接的资源均由资源标识符来进行区别
资源标识符必须按Resourceprep profile of [STRINGPREP]格式化,才能无错应用。比较两个资源标识符前,服务器必须(客户端应该)首先为每个标识符应用Resourceprep profile。