我有一个简单的 Java 服务器/客户端 TCP 套接字程序来计算 rtt。我这样做的方法是让客户端在其传出消息上添加时间戳,然后服务器在收到消息时添加一个时间戳,最后当消息返回到客户端时添加另一个时间戳。
好吧,我最终得到的结果有点奇怪。我绘制了消息大小与往返时间的关系图,最终得到一条直线而不是线性增加。
有人可以解释一下为什么会发生这种情况吗?
最佳答案
首先,我认为您不需要在服务器端对消息添加时间戳。只需要在发送数据包时加上发送时间,然后计算响应返回给客户端时与当前时间的差值(当然服务器需要复制回复中的sent_time)。
注意:如果您的服务器需要“长”时间来执行,那么您将需要服务器向数据包添加某种“处理时间”信息。
RTT = (cur_clientTime_when_response_is_received - time_sent) - time_to_server_process
这个公式的优点是不关心客户端和服务器时钟之间的时间差异。
直线是可以解释的,因为发送数据的时间差异在统计上与克服网络层中引入的随机性无关,因为它不是实时媒体,并且因为它与其他应用程序和主机(如果您位于网络交换机上)。 无论如何,不要费心增加字母数量,底层协议(protocol)将占用最大 MTU (通常是 1500)每个 TCP 数据包字节:仍然不够。
关于java - RTT 上消息大小的意义 : Simple Java Server/Client Socket program,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34379504/