Я разрабатываю приложение, которое требует сложного тестирования с точными отметками времени различных событий.
В качестве примера допустим, что у нас есть два хоста: h1 и h2.
Теперь, если я запускаю tcpdump на h1, я получаю связанную временную метку. То же самое и с h2.
Теперь предположим, что h1 отправляет пакет ICMP на h2. Насколько я понимаю, пакет должен регистрироваться в tcpdump h1 в то время, когда он покидает h1, и в tcpdump h2, когда h2 получает то же самое.
Теперь я моделирую хосты как машины Ubuntu с помощью VirtualBox.
Итак, у меня есть два вопроса:
Во-первых, верны ли мои предположения о tcpdump?
Во-вторых, могу ли я быть абсолютно уверен в том, что центральное время одинаково для обеих виртуальных машин. Я знаю, что это невозможно в физической сети. Однако, поскольку виртуальные машины используют общую систему, мне было интересно, верно ли то же самое. Если нет, есть ли другой способ обеспечить синхронизацию во время тестирования?
[ЗАКЛЮЧИТЕЛЬНЫЕ ЗАМЕЧАНИЯ]: Для тех, кому может быть любопытно, VirtualBox поставляется с настроенным протоколом NTP, и если у вас есть аналогичная задача, настройку NTP можно исключить из вашего списка дел.
Ваши предположения о tcpdump
правильные. А tcpdump
захват захватывает необработанные пакеты.
Значения отметок времени, к которым у вас будет доступ при обработке дампа, являются значениями отметок времени в пакетах (которые вводятся отправка система).
Если ты протоколирование пакеты на получателе ваши журналы жестяная банка включают обе отметки времени (отметку времени отправителя из пакета и отметку времени получателя от локальных часов).
Немного подробно об этом говорили еще в 1981 году, в RFC 781..
Что касается синхронизации времени, ответ всегда NTP.
ВМ могут синхронизировать виртуальные аппаратные часы с представлением хоста о том, сколько времени, но операционная система может не навязчиво проверять аппаратные часы. Современные операционные системы (по крайней мере, unix / linux) поддерживают время ОС, которое частично не зависит от аппаратных часов и иногда записывается обратно в него.
NTP дисциплинирует представление системы о том, «сколько сейчас времени», и учитывает естественный дрейф в подсистеме часов / синхронизации оборудования. Синхронизация часов виртуальных машин с NTP - лучший способ убедиться, что они согласуются по времени, насколько это практически возможно в реальном мире.
Однако виртуальные машины не должны использоваться для чего-то критичного по времени * - Виртуальные машины действительно плохо хранят время. Даже лучшие коммерческие гипервизоры могут выиграть или потерять время в зависимости от рабочей нагрузки системы и других факторов. VirtualBox - это виртуализация класса рабочих станций, и она еще более подвержена таким проблемам.
Я видел виртуальные машины VirtualBox без NTP или других помощников по хронометражу, которые теряли до минуты в час на моей рабочей станции. Это определенно выходит за рамки моей приемлемой точности.
Я бы согласен с voretaq7 Во всем, кроме одного, не используйте ntp! Используйте sntp. Ntp - отличный протокол, но он не подходит для виртуальных машин. Ntp предполагает, что часы измеримы и предсказуемы, и использует это предположение, чтобы сделать их более точными, измеряя их неточности. Это обеспечивает надежное, точное и отказоустойчивое измерение времени. Однако он ломается на виртуальных машинах, для которых часы не имеют ни одного свойства, сбивающего с толку сервер ntp на гостевой виртуальной машине (помните, что ntp - это одноранговый протокол). Это не проблема для большинства гостей Windows, поскольку они используют sntp и называют его ntp, но это проблема гостей Linux, поскольку у них часто есть доступный ntp-сервер, если он не включен в стандартную комплектацию. Это тоже не проблема с ntpdate. Однако я рекомендую запустить на хосте полный ntp-сервер, поскольку у него есть измеримые аппаратные часы, которые предсказуемы.