【问题标题】:Why don't the timestamps in Java and Wireshark match?为什么 Java 和 Wireshark 中的时间戳不匹配?
【发布时间】:2015-02-16 19:13:23
【问题描述】:

在 Java 中,我通过这种方式获取时间戳:

Date date= new java.util.Date();
return (new Timestamp(date.getTime())).toString();

输出例如:

Start - 2015-02-16 13:59:41.427

然后我将一个数据包写入一个套接字。

但是,在 Wireshark 中,第一个数据包的日期如下:

62  2015-02-16 13:59:41.421115000   ...

什么???

好的,我不希望有人告诉我时间戳已关闭。有没有办法更改 Java 代码以使其生成更符合 Wireshark 的时间戳?

谢谢

编辑:请求代码

System.err.println("Start - "+currentTimestamp());
int sent = socketChannelOut.write(data);

【问题讨论】:

  • 在写入套接字之前,你会带时间戳吗?
  • 已知 Wireshark 会监听一些 NTP 正在进行吗?
  • @Zhedar 是的。它在java中打时间戳的顺序,发送数据包,然后在wireshark中打时间戳。
  • @Zhedar 我预计在写入套接字之后,在数据包出现在 Wireshark 之前会有一点延迟。
  • 我认为您所看到的完全正常。将数据包下推到网络堆栈需要时间。您所看到的只是发送数据包与在 java 中请求系统时间之间的时间差。

标签: java performance optimization time wireshark


【解决方案1】:

我怀疑这完全取决于您的系统测量时间的准确性。引用 java 文档:

"以毫秒为单位返回当前时间。注意,虽然单位是 返回值的时间为毫秒,粒度为 value 取决于底层操作系统,可能更大。 例如,许多操作系统以几十为单位测量时间 毫秒。”

由于您看到的差异是 0.005885 秒,并且小于 10 毫秒,我认为与另一个过程测量时间的比较不会精确到小于 10 毫秒的粒度。也就是说这次你从 Java 得到的 41.427 真的是 41.427 +/-10ms

【讨论】:

  • 另外,添加 Timestamp 是从(四舍五入?)毫秒值 (Date.getTime()) 构造的,而 Wireshark 可能会调用 gettimeofday 返回微秒。
猜你喜欢
  • 2011-10-30
  • 2014-07-25
  • 2021-02-26
  • 2016-01-17
  • 2015-01-28
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多