Java 你能用Netty测量TCP带宽、延迟和抖动吗?

Java 你能用Netty测量TCP带宽、延迟和抖动吗?,java,tcp,netty,Java,Tcp,Netty,我目前正在用Java为最后一年的E&E工程项目编写Minecraft客户端仿真器。我用这个来处理数据包。该库在内部使用Netty 5.0库进行联网 我的项目的一部分涉及测量带宽、延迟和发送数据包的抖动。带宽不是什么大问题,因为我知道发送/接收哪些数据包,但不知道如何测量延迟和抖动 据我所知,TCP数据包确实包含时间信息。是否有办法访问此信息或通过Netty直接测量延迟/抖动 最简单的解决方案是测量请求/响应时间。您的客户端发送一条消息,该消息具有来自服务器的预期响应。然后,您可以使用tcpdum

我目前正在用Java为最后一年的E&E工程项目编写Minecraft客户端仿真器。我用这个来处理数据包。该库在内部使用Netty 5.0库进行联网

我的项目的一部分涉及测量带宽、延迟和发送数据包的抖动。带宽不是什么大问题,因为我知道发送/接收哪些数据包,但不知道如何测量延迟和抖动


据我所知,TCP数据包确实包含时间信息。是否有办法访问此信息或通过Netty直接测量延迟/抖动

最简单的解决方案是测量请求/响应时间。您的客户端发送一条消息,该消息具有来自服务器的预期响应。然后,您可以使用tcpdump或wireshark记录所有数据包,并编写一个工具来计算请求到响应的时间


这可以在不更改客户端或服务器代码的情况下完成。

我了解在开始和结束时需要计时的延迟或抖动。这是您需要添加的内容,或者您需要记录数据包并单独分析这些数据包。对于我的项目而言,拥有发送数据包的时间(即使它仅与其他数据包相比较)就足够了。我们把等待时间看作是发送和接收之间的时间,抖动是分组“时间间隔”的变化(如果两个数据包分开5ms,到达3ms,抖动被认为是2ms)。好的,你可以做到这一点,唯一的问题是你不能访问TCP报头中的时间戳。相反,您需要考虑将时间戳添加到消息中,或者将此信息记录到其他地方。注意:如果您正在查看长延迟(如毫秒),您的主要原因将是GC暂停,您可能会发现记录这些暂停可能是一个好的开始。注意:如果您需要记录微秒暂停和抖动,您需要更加小心地记录数据。添加信息是我最后的选择。我将不得不更改很多代码,因为我没有同时编写客户端和服务器端。我问这个问题是为了确保我不会重新发明轮子。我有工程背景,不是计算机科学,所以解决方案越简单越好!