ping
— это утилита программного обеспечения для администрирования компьютерных сетей , используемая для проверки доступности хоста в сети Интернет-протокола (IP). Она доступна практически для всех операционных систем, которые имеют сетевые возможности, включая большинство встроенного программного обеспечения для администрирования сетей.
Ping измеряет время прохождения туда и обратно для сообщений, отправленных от исходного хоста к компьютеру назначения, которые возвращаются обратно к источнику. Название происходит от терминологии активного сонара , который посылает звуковой импульс и слушает эхо для обнаружения объектов под водой. [1]
Ping работает с помощью пакетов протокола управления сообщениями Интернета (ICMP) . Pinging включает отправку эхо-запроса ICMP на целевой хост и ожидание эхо-ответа ICMP . Программа сообщает об ошибках, потере пакетов и статистическом обзоре результатов, обычно включающем минимальное, максимальное, среднее время приема-передачи и стандартное отклонение среднего значения.
Параметры командной строки утилиты ping и ее вывод различаются в зависимости от многочисленных реализаций. Параметры могут включать размер полезной нагрузки, количество тестов, ограничения на количество сетевых переходов ( TTL ), которые проходят зонды, интервал между запросами и время ожидания ответа. Многие системы предоставляют сопутствующую утилиту ping6 для тестирования в сетях Интернет-протокола версии 6 (IPv6), которые реализуют ICMPv6 .
Утилита ping была написана Майком Мууссом в декабре 1983 года во время его работы в Лаборатории баллистических исследований , ныне Исследовательской лаборатории армии США . Замечание Дэвида Миллса об использовании эхо-пакетов ICMP для диагностики и измерений в IP-сетях побудило Муусса создать утилиту для устранения неполадок в сети. [1] Автор назвал ее в честь звука, который издает сонар , поскольку ее методология аналогична эхолокации сонара. [1] [2] Бэкроним Packet InterNet Groper для PING используется уже более 30 лет, и хотя Муусс говорит, что с его точки зрения PING не был задуман как аббревиатура, он признал расширение имени Миллсом. [1] [3] Первая выпущенная версия была программным обеспечением в открытом доступе ; все последующие версии были лицензированы по лицензии BSD . Ping был впервые включен в 4.3BSD . [4] Версия FreeDOS была разработана Эриком Энгельке и лицензирована по лицензии GPL . [5] Тим Кроуфорд разработал версию ReactOS . Она лицензирована по лицензии MIT . [6]
Любой хост должен обрабатывать эхо-запросы ICMP и выдавать в ответ эхо-ответы. [7]
Ниже приведен вывод запуска ping в Linux для отправки пяти зондов (интервал по умолчанию составляет 1 секунду, настраивается с помощью параметра -i) на целевой хост www.example.com :
$ ping -c 5 www.example.com PING www.example.com (93.184.216.34): 56 байт данных 64 байта от 93.184.216.34: icmp_seq=0 ttl=56 время=11,632 мс 64 байта от 93.184.216.34: icmp_seq=1 ttl=56 время=11,726 мс 64 байта от 93.184.216.34: icmp_seq=2 ttl=56 время=10,683 мс 64 байта от 93.184.216.34: icmp_seq=3 ttl=56 время=9,674 мс 64 байта от 93.184.216.34: icmp_seq=4 ttl=56 время=11.127 мс--- www.example.com статистика ping --- 5 пакетов передано, 5 пакетов получено, 0,0% потерь пакетов туда и обратно мин/ср/макс/стдотв = 9,674/10,968/11,726/0,748 мс
В выходных данных перечислены все сообщения зонда и полученные результаты. Наконец, в нем перечислена статистика всего теста. В этом примере наименьшее время прохождения сигнала туда и обратно составило 9,674 мс, среднее значение — 10,968 мс, а максимальное значение — 11,726 мс. Измерение имело стандартное отклонение 0,748 мс.
В случаях отсутствия ответа от целевого хоста большинство реализаций либо ничего не отображают, либо периодически выводят уведомления об истечении времени ожидания. Возможные результаты ping, указывающие на проблему, включают следующее:
В случае ошибки целевой хост или промежуточный маршрутизатор отправляет обратно сообщение об ошибке ICMP, например, host unreachable или TTL exceeded in transit . Кроме того, эти сообщения включают первые восемь байтов исходного сообщения (в данном случае заголовок эхо-запроса ICMP, включая значение подавления), поэтому утилита ping может сопоставлять ответы с исходными запросами. [8]
Пакет ICMP, передаваемый с помощью IPv4, выглядит следующим образом.
Большинство систем Linux используют уникальный идентификатор для каждого процесса ping, а порядковый номер — это увеличивающееся число в этом процессе. Windows использует фиксированный идентификатор , который различается в разных версиях Windows, и порядковый номер , который сбрасывается только во время загрузки.
Эхо -ответ возвращается в виде:
Пакет ICMP, передаваемый с помощью IPv6, выглядит следующим образом.
Большинство систем Linux используют уникальный идентификатор для каждого процесса ping, а порядковый номер — это увеличивающееся число в этом процессе. Windows использует фиксированный идентификатор , который различается в разных версиях Windows, и порядковый номер , который сбрасывается только во время загрузки.
Эхо -ответ возвращается в виде:
Полезная нагрузка пакета обычно заполнена символами ASCII , как показывают выходные данные утилиты tcpdump в последних 32 байтах следующего примера (после восьмибайтового заголовка ICMP, начинающегося с 0x0800 ):
16 : 24 : 47 . 966461 IP (tos 0x0, ttl 12 8, id 1510 3, смещение 0 , флаги [ нет ], протокол: ICMP (1), длина: 60 ) 19 2. 16 8. 14 6. 22 > 19 2. 16 8. 14 4.5: ICMP echo- запрос , id 1, seq 38 , длина 40 0x 0000 : 4500 003c 3aff 0000 8001 5c55 c0a8 9216 E..<:.....\U .... 0x 0010 : c0a8 9005 0800 4d35 0001 0026 6162 6364 ......M5...&abcd 0x 0020 : 6566 6768 696a 6b6c 6d6e 6f70 7172 7374 efghijklmnopqrst 0x 0030 : 7576 7761 6263 6465 6667 6869 uvwabcdefghi
Полезная нагрузка может включать временную метку, указывающую время передачи, и порядковый номер, которые не найдены в этом примере. Это позволяет ping вычислять время кругового пути без учета состояния , без необходимости записывать время передачи каждого пакета.
Полезная нагрузка также может включать магический пакет для протокола Wake-on-LAN , но минимальная полезная нагрузка в этом случае длиннее, чем показано. Echo Request обычно не получает никакого ответа, если хост спал в состоянии гибернации, но хост все равно просыпается из состояния сна, если его интерфейс настроен на прием запросов пробуждения. Если хост уже активен и настроен на разрешение ответов на входящие пакеты ICMP Echo Request , возвращаемый ответ должен включать ту же полезную нагрузку. Это может использоваться для определения того, что удаленный хост был эффективно разбужен, путем повторения нового запроса с некоторой задержкой, чтобы позволить хосту возобновить свои сетевые службы. Если хост просто спал в активном состоянии с низким энергопотреблением, один запрос пробуждает этот хост ровно настолько, чтобы позволить его службе Echo Reply мгновенно ответить, если эта служба была включена. Хосту не нужно полностью пробуждать все устройства, и он может вернуться в режим низкого энергопотребления после небольшой задержки. Такая конфигурация может использоваться, чтобы не допустить перехода хоста в состояние гибернации с гораздо более длительной задержкой пробуждения после некоторого времени, прошедшего в активном режиме с низким энергопотреблением. [ необходима ссылка ]
Пакет, включающий заголовки IP и ICMP, не должен превышать максимальную единицу передачи сети, в противном случае существует риск фрагментации .
Чтобы провести атаку типа «отказ в обслуживании» , злоумышленник может отправлять запросы ping как можно быстрее, возможно, перегружая жертву запросами ICMP echo. Этот метод называется ping flood . [11]
Запросы ping на несколько адресов ( ping-сканирования ) могут использоваться для получения списка всех хостов в сети.
Первоначальным импульсом для написания PING для 4.2a BSD UNIX послужило мимолетное замечание в июле 1983 г. доктора Дейва Миллса... Я назвал его в честь звука, который издает сонар, вдохновленный всем принципом эхолокации... С моей точки зрения, PING — это не аббревиатура от Packet InterNet Grouper, это аналогия с сонаром. Однако я слышал из вторых рук, что Дейв Миллс предложил такое расширение названия, так что, возможно, мы оба правы.
Каждый хост ДОЛЖЕН реализовать функцию сервера ICMP Echo, которая получает запросы Echo и отправляет соответствующие ответы Echo.