Незаменимым инструментом для администрирования сети является команда Ping в Linux. Возможно, вы уже использовали ping
ранее для базовой диагностики, но что делает эта команда?
Команда ping
отправляет запросы протокола управления сообщениями Интернета (ICMP) на удаленные или локальные хосты и ожидает ответа. Отсутствие ответа может указывать на проблему с соединением или с самими хостами.
Продолжайте читать и исследуйте практические способы использования команды ping в Linux!
Предварительные условия
Этот учебник будет практическим демонстрационным. Если вы хотите следовать за нами, убедитесь, что у вас есть компьютер с Linux и интернет-соединением. В этом учебнике используется компьютер с Ubuntu 20.04.
Также убедитесь, что вы уже открыли сеанс терминала на своем компьютере с Linux.
Проверка подключения к локальной сети
Представьте, что вы разрабатываете веб-приложение. Тест завершается неудачей, когда вы пытаетесь получить доступ к приложению через адрес обратной петли хоста (127.0.0.1). Прежде чем начать отчаянно решать проблему приложения, убедитесь, что протокол TCP/IP работает внутренне с помощью команды ping
.
Адреса обратной петли по умолчанию – 127.0.0.1 и 0:0:0:0:0:0:0:1 (или ::1) для IPv4 и IPv6 соответственно.
Чтобы проверить подключение к адресу обратной петли, выполните следующую команду ping
, за которой следует адрес обратной петли в терминале. Эта команда демонстрирует самое базовое использование команды ping
в Linux.
Если адрес обратной петли работает правильно, вы должны увидеть аналогичный вывод, как на скриншоте ниже.

В качестве альтернативы, пингуя имя хоста localhost
, вы должны получить тот же результат, потому что оно разрешается в адрес обратной петли по умолчанию.

Чтобы завершить выполнение команды ping
, нажмите CTRL+C
в терминале. В противном случае команда ping будет выполняться непрерывно.
Примечание: Не нажимайте CTRL+Z для остановки команды ping. Это приведет к остановке команды, но процесс останется запущенным в фоновом режиме.

Понимание вывода команды Ping в Linux
Прежде чем двигаться дальше, вы бы получили выгоду от явного понимания вывода, а не только его интерпретации как “работает”. Обратитесь к изображению ниже и расшифровке значений, которая следует за ним.

- A (
bytes
) – Shows the ICMP echo request (packet) size in bytes. - B (
from
) – Shows the target host’s IP addressfrom
where theping
command receives the response. - C (
icmp_seq
) – Indicates the order of packet transmission. As you can see, ping sends the ICMP requests in sequence. The value showsicmp_seq=N
, whereN
is the order number. - D (
TTL
) – Shows the ICMP request’s Time-To-Live (TTL) value. The default value is 64, which means that the request can only live up to a maximum of 64 hops and will expire after. The maximum value possible is 255. - E (
time
) – The total time (milliseconds) elapsed the request reached the destination and circled back to the source. This value is also known as the Round Trip Time (RTT). Notice that thetime
values are less than 0.1 milliseconds in this example since the target is the same machine. Thetime
value increases naturally when theping
destinations are remote or have an internet address. - F (
statistics
) – Shows the summary and statistics of theping
command results. The summary shows the number of packets transmitted and received, packet loss percentage, and the total time. The bottom line shows the minimum, average (mean value), maximum, and standard deviation of the total RTT.
Принудительное использование версии протокола Интернета
Команда ping по умолчанию использует IPv4. Но что если вы тестируете совместимость вашего приложения с IPv6? Чтобы заставить команду ping использовать IPv6, вы должны указать опцию -6 в вашей команде ping в Linux, как показано в коде ниже.
Как видно ниже, ответ показывает, что ответ поступил от адреса обратной связи IPv6 (::1).

Вместо опции -6 опция -4 заставляет ping использовать IPv4. Но поскольку ping по умолчанию использует IPv4, обычно нет необходимости указывать опцию -4.
Ограничение количества ответов
В предыдущих примерах вам приходилось нажимать CTRL+C, чтобы завершить команду ping, потому что в противном случае она выполнялась бесконечно.
Опция -c позволяет указать количество ответов, которые команда ping получает, прежде чем она остановится. Зачем использовать эту опцию? В некоторых случаях вам может потребоваться проверить, как ваша система реагирует на 10, 100, 1000 пакетов ICMP и так далее.
Запустите следующую команду, чтобы отправить пять пакетов ICMP на целевой хост. Замените 5 на количество ICMP-ответов, которые вы хотите получить, прежде чем остановиться.
Как видно ниже, команда ping остановилась после пятого запроса (icmd_seq=5), и вам не нужно было нажимать CTRL+C для ее завершения.

Настройка интервала запросов
Предположим, вы хотите проверить сетевое соединение между двумя устройствами, и у одного из них низкая пропускная способность. В этом случае вы можете увеличить интервал между каждым запросом, чтобы второе устройство имело достаточно времени для обработки текущего пакета ICMP.
Команда ping
по умолчанию отправляет следующий ICMP-запрос через одну секунду после завершения предыдущего. Чтобы изменить задержку, вы должны указать параметр -i
, за которым следует значение задержки в секундах.
Например, выполните следующую команду ping
, чтобы отправить пять ICMP-запросов с интервалом в две секунды между запросами.
Еще один пример: выполните следующую команду ping
, чтобы отправить пять ICMP-запросов с интервалом в полсекунды между каждым запросом.
Сравнение результатов обеих команд с разными интервалами показывает разницу между общими значениями time
.

Моделирование атаки типа “Флуд”
A ping flood is a type of Denial of Service (DoS) attack in which the attacker attempts to overwhelm a targeted device with ICMP packets. The attack aims to overwhelm the targeted machine to respond to so many requests that it becomes overloaded and unavailable to legitimate users.
Вы можете моделировать флуд-атаку, чтобы проверить, как ваша система реагирует на атаку. Но не волнуйтесь, симуляция флуд-пинга контролируется, и вы можете остановить ее в любое время, нажав CTRL+C.
Выполните следующую команду на своем локальном компьютере, чтобы увидеть, сколько запросов ваше устройство может обрабатывать в секунду. Параметр -f
означает отправку нескольких пакетов пинга быстро и без произвольных ограничений.
Замените “localhost” на IP-адрес или имя хоста приложения, которое вы хотите протестировать. Этот пример моделирует флуд-пинг только на локальном хосте. Дайте команде пинга работать примерно пять секунд, а затем нажмите CTRL+C
, чтобы завершить ее.
Команда ping -f требует, чтобы вы были пользователем root или имели привилегии sudo.
Как видно ниже, команда ping смогла отправить и получить 124,685
ICMP-пакетов за 4276
миллисекунд с 0%
потери пакетов. Довольно неплохо, да? Но в реальной жизни вы обязательно столкнетесь с потерей пакетов. Потеря пакетов неизбежна, потому что сеть не идеальна.

Проверка подключения к Интернету
Каждый ведь как-то пользуется интернетом, верно? Предположим, вы пытаетесь загрузить веб-сайт в своем браузере, но время загрузки страницы кажется медленным. Этот симптом указывает на то, что разрешение DNS работает, но что-то влияет на скорость сети.
Диагностика проблемы без сторонних инструментов включает использование команды ping
. Использование команды такое же, как при тестировании подключения к локальной сети. Но вместо того, чтобы направить запрос на адрес обратной связи, вы бы указали общедоступный IP-адрес или веб-адрес.
Запустите нижеуказанную команду, чтобы проверить доступность внешнего общедоступного веб-сайта. Замените adamtheautomator.com на другой веб-адрес, как вам угодно.
Сразу же вы заметите, что значение времени относительно выше, чем при пинге локального хоста. Это увеличение времени обусловлено тем, что целевой адрес adamtheautomator.com находится не на том же хосте и даже не в той же сети.
В предыдущих шагах ваша команда ping была успешной, но в реальной жизни бывают моменты, когда команда ping не удается по многим возможным причинам.
Вот некоторые общие ошибки и способы их устранения.
- Недоступен целевой хост – Эта ошибка означает, что к целевому хосту нет маршрута. Эта ошибка может возникнуть, если хост или домен недоступен.
- Время запроса истекло – Эта ошибка означает, что запрос к целевому хосту занял слишком много времени (более 4 секунд или 4000 миллисекунд), и соединение истекло. Эта ошибка может возникнуть, если целевой хост слишком загружен для ответа, если брандмауэр блокирует соединение или если есть проблемы с сетевым оборудованием (кабель, маршрутизатор и т. д.).
- Неизвестный хост – Эта ошибка означает, что DNS не может преобразовать имя хоста в IP-адрес. Убедитесь, что вы вводите правильное имя хоста. Если вы подозреваете, что ваш маршрутизатор может работать неправильно, попробуйте перезапустить его.
- Истекло время ожидания TTL в транзите – Эта ошибка означает, что ICMP-запрос истек до достижения цели. Ваш пакет ping уменьшается до нуля (0) до достижения целевого хоста. В большинстве случаев причиной этой ошибки может быть неправильная конфигурация вашей таблицы маршрутизации. Рассмотрите возможность проверки вашей таблицы маршрутизации, чтобы выявить проблему.
В случае, если вы этого не знали: игроки называют пинг своим соединением с игровым сервером в игровом сообществе. Низкий пинг означает более отзывчивое соединение, особенно в быстрых играх. Высокий пинг указывает на менее отзывчивое соединение и может делать игру медленной.
Некоторые поставщики услуг Интернета (ISP) вместо сообщения об ошибке возвращают страницу поиска, когда вы пытаетесь подключиться к веб-сайту, который не существует. В результате вы можете получить ложноположительный результат, потому что вместо ошибки вы получаете ответ.
Сохранение результата выполнения Ping в файл
Большинство команд, если не все, возвращают результаты только на экран, и команда ping
в Linux не исключение. В терминале Linux есть встроенные операторы перенаправления вывода, которые позволяют перенаправлять вывод в файл.
Эти операторы перенаправления следующие:
символ (>
), который перезаписывает содержимое файла, и;
символ (>>
), который добавляет вывод к существующему содержимому.
Но зачем вам нужно сохранять результаты ping в файл? Прежде всего для ведения записей и последующего анализа с использованием текстового редактора или парсера логов.
Вы также можете использовать программу электронных таблиц для создания графика, показывающего, как меняется время ping со временем.
Выполните следующую команду, чтобы сохранить результат выполнения ping в файл. Эта команда записывает все стандартные выводы команды ping
в файл с именем log.txt на диске.
Пока выполняется команда ping
, вы заметите, что на экране нет вывода.
Теперь откройте файл log.txt в текстовом редакторе, таком как nano
. Или отобразите содержимое файла, выполнив команду cat
.


Заключение
На этом уроке вы узнали, как использовать команду ping Linux с различными практическими примерами. Вы также узнали, как сохранить вывод ping в файл на диске, чтобы вы могли проанализировать его позже.
На этом этапе у вас должно быть хорошее представление о том, как работает команда ping и как она может быть полезна. Но прежде чем вы отправитесь пинговать все подряд, есть несколько правил, которые вы должны включить в ваши группы безопасности, чтобы разрешить трафик ICMP.
Спасибо за чтение и счастливого обучения!