不同虛擬機的系統時間是否在virtualbox中同步?
我正在開發一個應用程序,該應用程序需要涉及各種事件的準確時間戳的複雜測試。
例如,假設我們有兩個主機:h1 和 h2。
現在,如果我在 h1 上執行 tcpdump,我會得到一個相關的時間戳。h2也是如此。
現在,假設 h1 向 h2 發送 ICMP 數據包。據我了解,該數據包應該在離開 h1 時記錄在 h1 的 tcpdump 上,並在 h2 接收到相同數據時記錄在 h2 的 tcpdump 上。
現在我正在使用 VirtualBox 將主機模擬為 Ubuntu 機器。
所以我有兩個問題:
一,我對 tcpdump 的假設是否正確?
其次,我可以絕對確定兩個虛擬機的中心時間相同嗎?我知道這在物理網路中是不可能的。但是,由於虛擬機共享一個公共系統,我想知道是否也是如此。如果沒有,還有其他方法可以確保測試時的同步嗎?
$$ CONCLUDING REMARKS $$:對於那些可能好奇的人,VirtualBox 配備了 NTP,如果您有類似的任務,設置 NTP 可能會從您的待辦事項列表中刪除。
你的假設
tcpdump
是正確的。tcpdump
擷取抓取原始數據包。因此,您在處理轉儲時可以訪問的時間戳值是數據包中的時間戳值(由發送系統輸入)。
如果您在接收器上記錄數據包,您的日誌可以包含兩個時間戳(來自數據包的發送者時間戳和來自本地時鐘的接收器時間戳)。
他們在 1981 年的 RFC 781 中詳細討論了這一點。
關於時間同步,答案總是NTP。
虛擬機可以將虛擬硬體時鐘與主機對時間的想法進行同步,但作業系統可能不會痴迷於檢查硬體時鐘。現代作業系統(至少是 unix/linux)保持一個半獨立於硬體時鐘的作業系統時間,並且偶爾會寫回它。
NTP 規範了系統的“現在是什麼時間”的概念,並解釋了硬體時鐘/計時子系統中的自然漂移。將您的 VM 時鐘與 NTP 同步是確保它們在現實世界中的實際時間範圍內一致的最佳方式。
虛擬機不應該用於任何時間緊迫的事情* – 虛擬機真的很糟糕。即使是最好的商業虛擬機管理程序也會根據系統工作負載和其他因素獲得或失去時間。VirtualBox 是工作站級虛擬化,更容易受到此類問題的影響。
我已經看到沒有 NTP 或其他計時助手的 VirtualBox VM 在我的工作站上每小時損失一分鐘。這絕對超出了我可接受的準確性範圍。