Suppose I have a network with 2 hosts h1 and h2.
h1 and h2 are connected with each other via interfaces h1-eth0 and h2-eth0 respectively.
When I run Wireshark on host h1 to capture the interface h1-eth0, can I be absolutely certain that the timestamps being recorded correspond to the system time of host h1?
Se você executar o Wireshark (ou tcpdump ou WinDump ou snoop ou Microsoft Network Monitor ou Sniffer ou OmniPeek ou Commview ou qualquer outro sniffer; a resposta não é específica do Wireshark ...) no host h1 , os pacotes são provenientes de um mecanismo de captura na pilha de rede do sistema operacional executado no host h1, e os registros de hora correspondem à hora em que o pacote foi marcado pela pilha de rede (isto é, com registro de data e hora pelo host h1) ou, em alguns casos, até o momento em que o pacote foi carimbado pelo adaptador de rede conectado ao host h1 (ou, no HP-UX, no momento em que a libpcap lê o pacote de a rede empilhar no host h1, já que o mecanismo de captura do HP-UX não possui pacotes de carimbo de data / hora).
Portanto, o registro de data e hora é o mais próximo do horário do host na máquina em que você está executando o programa do sniffer. Ele não corresponde necessariamente ao tempo exato, até o microssegundo ou nanossegundo, no qual o pacote chegou ao adaptador de rede do host h1 (a menos que o adaptador de rede esteja marcando os pacotes); apoiar isso). Pode haver um atraso entre o momento em que o pacote chegou ao adaptador de rede e a hora em que é marcado, o que poderia incluir:
- o tempo entre a chegada do pacote e a sinalização de uma interrupção para informar ao host que um pacote chegou (não há necessariamente uma interrupção sinalizada para cada pacote);
- o tempo entre a sinalização da interrupção e o host respondendo a ela;
- o tempo entre o host que está respondendo à interrupção e o pacote sendo entregue ao mecanismo de captura;
- o tempo entre o pacote sendo entregue ao mecanismo de captura e sendo marcado pelo mecanismo de captura.
Então, se por "posso ter absoluta certeza de que os registros de data e hora que estão sendo registrados correspondem à hora do sistema do host h1?" quer dizer "posso ter absoluta certeza de que os timestamps que estão sendo gravados correspondem, com alta precisão, à hora do sistema do host h1 no momento em que o pacote chegou?", a resposta é "não necessariamente, mesmo se você estiver executando no host h1 ". É mais próximo do momento em que o pacote chegou no host h1 do que no momento em que o pacote foi enviado do host h2, mas se você precisar saber valores de carimbo de data e hora de alta precisão e alta precisão, precisará de um especialista hardware que cronografa pacotes no adaptador de rede ou um caminho de código de recepção especialmente ajustado (o que pode significar que você tenha que hackear código de driver de interface e código de pilha de rede; esse caminho de código de recepção especialmente ajustado não é, por exemplo , uma opção de configuração para um kernel Linux ou uma opção de registro para um kernel do Windows).
(BTW, a resposta do Mitch se aplica apenas ao Windows; não existe rotina como KeQuerySystemTime
no meu computador pessoal, por exemplo - os pacotes são marcados com um valor retornado por uma rotina chamada microtime
.)