看不下去了,贴出来大家看看指点一下,鼓励一下!
1. 介绍
系统C/S结构;1.1 Server 功能:
-管理连接
-route appropriately-addressed XML stanzas
1.2 端口
-客户端之间:5222,
-server间: 5269
2. 寻址策略
2.1 JID结构
node@domain/resource
domain:网关,主server…
node:网关或server提供的实体或服务
resource:代表特定的session,connection或者属于node提供的entity
从范围上讲resource最小,node其次,domain最大
2.2 确定地址
在SASL negotiation后,且合适的话,进行 Resource Binding, 数据流的接收实体必须(MUST)确定发起方的JID.
(SASL):Simple Authentication and Security Layer
3. XML 数据流
包括:XML streams and XML stanzas.
3.1 XML streams
XML streams是xml用于网络间实体进行数据交换的容器。
XML streams可以简单的认为由XML tag确定的数据。<stream>…</stream>内标示的特点属性的数据。
在stream生命周期内,实体发起方可以发送很大的数据块,用于协商这个数据(使用 TLS 或SASL协商) 或者作为XML stanzas (使用如下默认名字空间下的元素<message/>, <presence/>, or <iq/>)。
3.2 XML stanzas
XML stanzas是一种discrete的语法单元,它是通过xml stream从一个实体发送到另一个网络实体的。
因此XML stanzas是<stream>的子项。depth=1,它还可以包含子项。
XML Stanzas只使用stream内默认namespace:<message/>, <presence/>,<iq/>等。
XML元素用于TLS或SASL协商或者server dialback 的不属于XML stanza。
当client完成协商后,将发送极大的XML stanzas数据,最后client通过发送</stream>结束,client和server端断开连接。
本质上,XML stanza是通过XML stream包装后才在session内发送的。
3.4 Binding to TCP
邦定XMPP和TCP连接。
如在client-server连接中使上下行xmpp使用同一个tcp连接。Server-server中使用两个tcp,一个server to peer,另一个peer to server。
3.5 Stream Security
-必须使用TLS或SASL。
-initial stream(初始方发往接收侧的)和response stream(接收方发往初始侧)二者必须(MUST)单独加密。尽管两个方向的安全策略可能(MAY)要通过双方某种相互鉴定和协商的机制来建立。
在未能通过鉴定前不能发送数据,如果发送了,接收方也不应该当采用,应该回复<not-authorized/> ,报错并结束该<stream>关闭tcp连接。
3.6 Stream Attributes
Stream属性,也就是stream的子项。包括:
to:发起方到接收
from:接收到发起方
id:接收方创建,唯一标示一个发起方的session。
xml:lang:语言
version:版本至少1.0
若在错误的一方收到如上属性采取silently ignored的策略。
注:版本的问题,不同版本可能无法解析对方stream中的属性。
发起和接收都在head的显著位置标示自己的version,若不表示则默认都支持。若检测到不支持则关闭stream、关闭tcp。
3.7 Stream Features
若发起方发送version为最新版本,则接收方(一般指server)必须发送一个<feathers/>,用于发起stream-level可协商的feather。目前仅用于广告,资源邦定。
3.8 Stream Errors
root stream 可能包含<error/>,<error/>必须由适当的实体发送,一般是server而非client。
Ruls:
l 若错误不可恢复,则检测到错误的entity向其他entity发送</stream>关闭tag,关闭tcp。
l 如果error发生在setup阶段,接收端应仍旧发送opening <stream> tag, <error/>做为子项,并关闭tcp。
l 如果发起方在to中提供未知的host或无to项,server应在发送的‘from’中提供authoritative hostname 。
Syntax:
l <error>必须由child元素,且xmlns(xml namespace)必须为urn:ietf:params:xml:ns:xmpp-streams
注:xmlns是xml名字空间,用于声明namespace主要是区别ns,提高使用灵活性。
l 可包含<text/>子元素(OPTIONAL),包含名字空间urn:ietf:params:xml:ns:xmpp-streams,且应包含xml:lang属性
l 可以包含app特定的信息,namespace采用app指定的内容。
Defined Conditions
. <bad-format/> 、<bad-namespace-prefix/>、 <conflict/>
<connection-timeout/>、<host-gone/>、<host-unknown/>
<improper-addressing/>、<internal-server-error/>…等等
指出多种可能的错误指示,xml的ns需要双方支持才有效。