我正在尝试估算XMPP应用程序的带宽使用情况。
应用程序每秒接收一个150字节的ping,并使用相同大小的ping进行应答。(*)
但是,当我测量数据使用情况时,每个ping会得到900字节(而不是预期的300字节)
我怀疑这可能与某些层(TCP?IP?)和数据报大小有关。但是,到目前为止,阅读TCP / IP指南并没有把我带到任何地方。
另一个假设是,这种开销来自XMPP本身,不知何故。
任何人都可以启发我吗?
(*)得到这个“150字节”我计算了<iq>
中的字符数(ping的xml表示)
我正在使用TLS,但不是BOSH(实际上,BOSH在另一个连接上:我在Android客户端测量结果,ping是来自Web应用程序,但我认为这不应该重要)
客户端是Xabber,在android上运行
答案 0 :(得分:1)
让我们尝试计算降至IP级别的最坏情况开销。
对于TLS,我们有:
同样,在CBC模式下:TLS填充。 TLS使用16字节的块,因此可能需要添加15个字节的填充。
(从技术上讲,TLS允许最多255个字节的填充,但实际上我认为这很少见。)
那是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个字节吗?