Пинговать один и тот же адрес несколько раз

Мне просто интересно, можно ли пинговать один и тот же IP-адрес из одного и того же источника несколько раз (то есть достаточно быстро, чтобы они передавались по конвейеру) и все же получить действительный результат. Под верным результатом я имею в виду, что вы записываете правильное время приема-передачи для всех пакетов ping.

Я имею в виду, что существует вероятность того, что пакеты могут быть смешаны, поэтому получатель не знает, какой пакет какой, и, следовательно, записанное время прохождения сигнала туда и обратно не будет точным. Существуют ли механизмы с ICMP или IP, которые нумеруют пакеты пингования, чтобы их можно было отличить от других пингов по тому же адресу.

2 ответа

В заголовке ICMP есть Идентификатор и Порядковый номер, используемые именно для этой цели. Они занимают байты 5-7.

См. RFC792, стр. 15:

Идентификатор и порядковый номер могут использоваться отправителем эха, чтобы помочь в сопоставлении ответов с запросами. Например, идентификатор может использоваться как порт в TCP или UDP для идентификации сеанса, а порядковый номер может увеличиваться при каждом отправленном запросе. Получатель возвращает те же значения в ответе.

Стандарт ping(1) Команда даже включает в себя -f аргумент флуда, который запрашивает посылку пакетов ping как можно быстрее; ping пытается максимально быстро, не теряя пакетов. (Удобный инструмент, позволяющий убедиться, что ваша сеть не в отличной форме, просто не делайте этого между компьютерами OS X, они ограничивают количество ответов ICMP, и вы будете удивлены ужасной скоростью потери пакетов.)

Заголовок ICMP содержит достаточно информации для отслеживания 2^16 ожидающих пакетов ICMP между двумя хостами. От моего /usr/include/linux/icmp.h:

struct icmphdr {
  __u8          type;
  __u8          code;
  __sum16       checksum;
  union {
        struct {
                __be16  id;
                __be16  sequence;
        } echo;
        __be32  gateway;
        struct {
                __be16  __unused;
                __be16  mtu;
        } frag;
  } un;
};
Другие вопросы по тегам