xmpp:节的大小与带宽的关系

时间:2015-04-09 04:10:02

标签: tcp ip xmpp

我正在尝试估算XMPP应用程序的带宽使用情况。

应用程序每秒接收一个150字节的ping,并使用相同大小的ping进行应答。(*)

但是,当我测量数据使用情况时,每个ping会得到900字节(而不是预期的300字节)

我怀疑这可能与某些层(TCP?IP?)和数据报大小有关。但是,到目前为止,阅读TCP / IP指南并没有把我带到任何地方。

另一个假设是,这种开销来自XMPP本身,不知何故。

任何人都可以启发我吗?

(*)得到这个“150字节”我计算了<iq>中的字符数(ping的xml表示)


我正在使用TLS,但不是BOSH(实际上,BOSH在另一个连接上:我在Android客户端测量结果,ping是来自Web应用程序,但我认为这不应该重要)

客户端是Xabber,在android上运行

1 个答案:

答案 0 :(得分:1)

让我们尝试计算降至IP级别的最坏情况开销。

对于TLS,我们有:

  • 使用TLS 1.1及更高版本,在CBC模式下:IV为16字节。
  • 同样,在CBC模式下:TLS填充。 TLS使用16字节的块,因此可能需要添加15个字节的填充。

    (从技术上讲,TLS允许最多255个字节的填充,但实际上我认为这很少见。)

  • 使用SHA-384:48字节的MAC。
  • 5个字节的TLS标题。

那是84个额外的字节。

如果没有使用额外的选项,TCP和IP头是40个字节(from this answer),但对于IPv6,这将是60个字节。

所以你可以看到每个ping 84 + 60 + 150 = 294个字节。

但是,在TCP级别上,我们还需要ACK。如果你正在ping一个不同的客户端(特别是在BOSH上),那么pong可能为时已晚,不能用于ping ping TCP ACK。因此服务器必须为ping发送60字节的ACK,客户端还需要为pong发送60字节的ACK。

这将我们带到:

294 + 60 + 294 + 60 = 708

900仍然听起来太大了。你确定ping和pong都是150个字节吗?