XMPP:为什么我们发送多个请求来打开一个连接的流?

时间:2014-10-11 00:50:51

标签: xmpp

我一直在关注一些教程,最好的是Yandex's

在第6步中,它说我需要在授权后再次打开流吗?有什么理由吗?

流是否自动关闭?如果我只是对流进行身份验证,为什么需要关闭并重新打开?我是否需要再次从步骤1开始递归或者我需要多久请求重新打开它?我是否需要验证此新流。

作为XMPP初学者,为什么要重点:新流 - >授权 - >新流 - >现在不确定是什么,可能再次授权?

2 个答案:

答案 0 :(得分:1)

作为XMPP的初学者,你可能会得到一个XMPP library来做正确的事情:)

当您准备深入了解时,您必须阅读官方XMPP规范:CoreInstant Messaging and PresenceAddress Format

此处描述的初始流“协商” - https://tools.ietf.org/html/rfc6120#section-4.3 简而言之 - 只有当您的聚会在新流(<auth ... />)的开头“宣传”<stream:features>元素时,您才需要进行身份验证,大部分时间都是一次。

答案 1 :(得分:0)

授权后,流功能会发生变化。正如他们在执行TLS握手后更改一样。流特征的改变总是意味着有一个新的&#34;流继续。这就是为什么流被重新打开&#34;。

如果查看RFC 6120 § 9.1,您会看到服务器(可能)首先宣布(仅)starttls作为流功能(9.1.1第3步):

S: <stream:features>
     <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'>
       <required/>
     </starttls>
   </stream:features>

然后在服务器和客户端执行TLS协商并建立TLS后,客户端会启动新流

现在服务器发送不同的流功能(9.1.2。步骤8):

S: <stream:features>
     <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
       <mechanism>SCRAM-SHA-1-PLUS</mechanism>
       <mechanism>SCRAM-SHA-1</mechanism>
       <mechanism>PLAIN</mechanism>
     </mechanisms>
   </stream:features>

注意starttls流功能如何消失,现在只将SASL机制报告为流功能。

在对客户端进行身份验证后,会创建另一个新流并再次发送新的流功能(9.1.3步骤14):

<stream:features>
    <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/>
</stream:features>