虚拟机中的不同虚拟机的系统时间是否同步?

我正在开发一个应用程序,需要复杂的testing,涉及各种事件的确切时间戳。

举个例子,假设我们有两个主机:h1和h2。

现在,如果我在h1上运行一个tcpdump,我会得到一个关联的时间戳。 h2也一样。

现在,假设h1发送一个ICMP数据包给h2。 根据我的理解,数据包应该在h1接收到h1的时候在h1的tcpdump上logging,在h2的tcpdump上logging。

现在我使用VirtualBox模拟Ubuntu机器的主机。

所以我有两个问题:

一,我对tcpdump的假设是否正确?

其次,我可以绝对确定两台虚拟机的中央时间是相同的。 我知道这在物理networking中是不可能的。 然而,由于虚拟机共享一个共同的系统,我想知道这是否也是如此。 如果不是的话,有没有其他的方式来确保同步testing?

[结束语]:对于那些可能会感到好奇的人来说,VirtualBoxconfiguration了NTP,如果你有类似的任务,可以将你的待办事项列表设置为NTP。

你对tcpdump假设是正确的。 tcpdump捕获抓取原始数据包。
因此,处理转储时可以访问的时间戳值是数据包中的时间戳值(由发送系统input)。

如果您在接收方上logging数据包,您的日志可以同时包含时间戳(发送方的数据包时间戳和接收方本地时钟的时间戳)。
他们在1981年的RFC 781中详细讨论了这个问题 。


关于时间同步, 答案总是 NTP 。

虚拟机可以将虚拟硬件时钟与主机对时间的想法进行同步,但是操作系统可能不会迷恋地检查硬件时钟。 现代操作系统(至lessunix / linux)保留一个与硬件时钟半独立的操作系统时间,偶尔会写回操作系统。

NTP规定了系统“现在几点”的概念,并解释了硬件时钟/定时子系统的自然漂移。 使您的VM时钟与NTP同步是确保他们能够在现实世界中实际达成一致的最佳方法。

虚拟机不应该用于任何时间的关键,虽然*虚拟机真的是糟糕的时间守护者。 即使是最好的商业pipe理程序,也可能因为系统负载和其他因素而获得或损失时间。 VirtualBox是工作站级的虚拟化,更容易出现这样的问题。
我看到没有NTP或其他计时助手的VirtualBox虚拟机在我的工作站上每小时会丢失一分钟。 这绝对超出了我可接受的准确性范围。

我会同意voretaq7在一切,但一点,不要使用ntp! 使用sntp。 Ntp是一个很好的协议,但是对于虚拟机来说是不合适的。 Ntp假定时钟是可测量和可预测的,并且使用这个假设通过测量它们的不精确性来使它们更准确。 这产生了一个鲁棒的,准确的容错时间测量。 然而,它在虚拟机上打破了时钟既没有属性混淆虚拟机guest上的ntp服务器(记住ntp是一个点对点协议)。 这对于大多数Windows客户来说并不是什么问题,因为他们使用sntp并将其称为ntp,但这对于linux客户来说是一个问题,因为如果不包括标准,他们通常会有一个ntp服务器可用。 这也是ntpdate的不公开。 不过,我build议在主机上运行一个完整的ntp服务器,因为它具有可预测的可测量的硬件时钟。