Расчет времени получения ответа ICMP (clock_gettime, gettimeofday)

Спасибо за то, что уделили моему вопросу внимание!

Пытаюсь получить время между отправкой дейтаграммы и получением дейтаграммы Использую clock_gettime

for(optval = 0; optval < 10; optval++){
   clock_gettime(CLOCK_MONOTONIC, &ts_1);
   
   sendto(sd, packet, sizeof(struct icmphdr), 0, (struct sockaddr*)&addr_req, sizeof(struct sockaddr_in));
   recvfrom(sd, bufer, sz_buf, 0, (struct sockaddr*)&from_req, &tolen);

   clock_gettime(CLOCK_MONOTONIC, &ts_2);

   t_eq = (ts_2.tv_nsec - ts_1.tv_nsec) / 1000000.0;
   total = (ts_2.tv_sec -ts_1.tv_sec) * 1000.0 + t_eq;
   printf("\tt_total = %Lf ms\n", total);
   sleep(1);
}

Вывод

t_total = 69.268422 ms
t_total = 72.526032 ms
t_total = 69.225890 ms
t_total = 70.945620 ms
t_total = 69.188274 ms
t_total = 69.181105 ms
t_total = 69.295679 ms
t_total = 72.721442 ms
t_total = 69.633848 ms
t_total = 69.522615 ms

Если я запускаю, в новом сеансе эмулятора терминала, стандартную программу ping до другого хоста, то вывод моей программы становится таким

t_total = 69.686600 ms
t_total = 0.044133 ms
t_total = 0.053209 ms
t_total = 0.043486 ms
t_total = 0.038839 ms
t_total = 0.042971 ms
t_total = 0.042133 ms
t_total = 0.043499 ms
t_total = 0.045853 ms
t_total = 0.018189 ms

С чем это связанно?


Ответы (2 шт):

Автор решения: eri

Кроме того что пакеты icmp перехватываются потому что устроенны так, они ещё могут приходить не в том порядке в котором отправленны. поэтому их номеруют. добавьте в поле пакета счётчик и записывайте время отправки в массив. сравнивайте время приёма по номерам.

→ Ссылка
Автор решения: Pak Uula

У меня в офисной сети тоже разнобой ответов на ping: один сервер отвечает с задержкой 3ms, а второй 0.0377 ms. Темна вода в облацех. Единственное, что могу сказать - первый сервер сидит на хабе с ещё несколькими машинками, а второй подключен к роутеру напрямую. Причём, что удивительно, сам роутер отвечает с задержкой порядка 0.1ms.

Поэтому на ваш вопрос нельзя ответить ничего определённого, не поглядев на разводку сети.

→ Ссылка