Оригинальный автор(ы) | Майк Муусс |
---|---|
Разработчик(и) | Различные разработчики открытого и коммерческого ПО |
Первоначальный выпуск | 1983 ( 1983 ) |
Платформа | Кроссплатформенный |
Тип | Команда |
Лицензия | Общедоступный , BSD , GPL , MIT |
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, выглядит следующим образом.
Компенсировать | Октет | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Октет | Кусочек | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
0 | 0 | Версия (4) | МГП (5) | DSCP (0) | ECN (0) | Общая длина | |||||||||||||||||||||||||||
4 | 32 | Идентификация | Флаги | Смещение фрагмента | |||||||||||||||||||||||||||||
8 | 64 | Время Жить | Протокол (1) | Контрольная сумма заголовка | |||||||||||||||||||||||||||||
12 | 96 | Исходный адрес | |||||||||||||||||||||||||||||||
16 | 128 | Адрес назначения |
20 | 160 | Тип (0) | Код (0) | Контрольная сумма | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
24 | 192 | Идентификатор | Порядковый номер | ||||||||||||||||||||||||||||||
28 | 224 | (Полезная нагрузка) | |||||||||||||||||||||||||||||||
32 | 256 | ||||||||||||||||||||||||||||||||
⋮ | ⋮ |
Большинство систем Linux используют уникальный идентификатор для каждого процесса ping, а порядковый номер — это увеличивающееся число в этом процессе. Windows использует фиксированный идентификатор , который различается в разных версиях Windows, и порядковый номер , который сбрасывается только во время загрузки.
Эхо -ответ возвращается в виде:
20 | 160 | Тип (8) | Код (0) | Контрольная сумма | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
24 | 192 | Идентификатор | Порядковый номер | ||||||||||||||||||||||||||||||
28 | 224 | (Полезная нагрузка) | |||||||||||||||||||||||||||||||
32 | 256 | ||||||||||||||||||||||||||||||||
⋮ | ⋮ |
Пакет ICMP, передаваемый с помощью IPv6, выглядит следующим образом.
Компенсировать | Октет | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Октет | Кусочек | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
0 | 0 | Версия (6) | Класс трафика | Метка потока | |||||||||||||||||||||||||||||
4 | 32 | Длина полезной нагрузки | Следующий заголовок (58) | Предел прыжков | |||||||||||||||||||||||||||||
8 | 64 | Исходный адрес | |||||||||||||||||||||||||||||||
12 | 96 | ||||||||||||||||||||||||||||||||
16 | 128 | ||||||||||||||||||||||||||||||||
20 | 160 | ||||||||||||||||||||||||||||||||
24 | 192 | Адрес назначения | |||||||||||||||||||||||||||||||
28 | 224 | ||||||||||||||||||||||||||||||||
32 | 256 | ||||||||||||||||||||||||||||||||
36 | 288 |
40 | 320 | Тип (128) | Код (0) | Контрольная сумма | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
44 | 352 | Идентификатор | Порядковый номер | ||||||||||||||||||||||||||||||
48 | 384 | (Полезная нагрузка) | |||||||||||||||||||||||||||||||
52 | 416 | ||||||||||||||||||||||||||||||||
⋮ | ⋮ |
Большинство систем Linux используют уникальный идентификатор для каждого процесса ping, а порядковый номер — это увеличивающееся число в этом процессе. Windows использует фиксированный идентификатор , который различается в разных версиях Windows, и порядковый номер , который сбрасывается только во время загрузки.
Эхо -ответ возвращается в виде:
40 | 320 | Тип (129) | Код (0) | Контрольная сумма | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
44 | 352 | Идентификатор | Порядковый номер | ||||||||||||||||||||||||||||||
48 | 384 | (Полезная нагрузка) | |||||||||||||||||||||||||||||||
52 | 416 | ||||||||||||||||||||||||||||||||
⋮ | ⋮ |
Полезная нагрузка пакета обычно заполнена символами 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.