Наверняка вы сталкивались с ситуацией, когда интернет на компьютере внезапно разрывается, такое поведение можно наблюдать при использовании ADSL модемов, Wifi на большом расстоянии, GSM и других подобных ненадежных технологий. Быстро выяснить есть ли на компьютере интернет можно с помощью утилиты ping.
Однако область ее применения намного шире, ее используют сетевые администраторы для проверки доступности удаленного узла в сети, она применяется в различных скриптах и многих других местах. В этой статье будет рассмотрена команда ping в Linux, мы поговорим о том, как пользоваться утилитой, как она работает, рассмотрим ее опции и возможности.
Утилита ping - простой инструмент для диагностики сети. Она позволяет проверить доступен удаленный хост или нет и все. Для этого утилита проверяет, может ли хост отвечать на сетевые запросы с помощью протокола ICMP. Надеюсь, не нужно говорить, что все данные по сети передаются в виде небольших пакетов. Программа передает небольшой пакет с данными ICMP и ожидает получить обратно пакет ответа, если получает, то считается что удаленный узел доступен. ICMP или Internet Control Message Protocol - это надстройка над протоколом IP, которая используется для передачи служебных сообщений и сообщений и ошибках.
Протокол ICMP может передавать только два типа пакетов - это сообщения с отчетами про ошибки и сообщения запросов. В свою очередь, сообщения запросов делятся на:
Сообщение эхо-запрос;
Сообщение эхо-ответ.
Дальше разберемся, что делает команда ping
. Как только вы отправили запрос ping
удаленному узлу, утилита устанавливает для каждого пакета уникальный идентификатор, а также TTL и время отправки пакета. Если хост доступен, он отправляет ответ, на основе времени отправки утилита может вычислить время прохождения пакета туда и обратно. Затем отправляется следующий пакет. В конце рассчитывается общее количество отправленных и принятых пакетов, процент потерь и другие данные.
Теперь нам осталось немного попрактиковаться. Но перед тем, как мы перейдем к практике давайте рассмотрим синтаксис команды и ее опции. Синтаксис довольно прост:
$ ping [options] host_address
Формат команды ping
очень прост. В качестве адреса узла можно передавать как ip адрес, так и доменное имя. Опции настраивают поведение утилиты. Рассмотрим основные из них:
-4
- использовать только ipv4 (по умолчанию);
-6
- использовать только ipv6;
-A
- адаптивный режим, время между отправками пакета адаптируется к времени передачи и приема пакета, но не меньше чем 200 миллисекунд;
-b
- разрешить ping
широковещательного адреса;
-с
- количество пакетов, которые нужно отправить;
-D
- выводить время в виде UNIX timestamp
;
-f
- режим флуда, в этом режиме пакеты передаются без задержек, может использоваться для совершения DoS атак на отдельные узлы. Количество точек, которые выводит утилита обозначает количество потерянных пакетов;
-i
- интервал в секундах между отправкой пакетов;
-I
- использовать этот сетевой интерфейс для отправки пакетов;
-l
- режим перегрузки, отправляется очень много пакетов и система не следит за ответными пакетами;
-n
- не получать домены для ip адресов;
-r
- игнорировать таблицы маршрутизации и отправить пакет на указанный интерфейс;
-s
- размер одного пакета;
-t
- установить TTL вручную;
-v
- более подробный вывод.
Теперь, когда мы рассмотрели основные параметры команды ping
и ее синтаксис, пришло время практики, дальше поговорим о том, как сделать ping определенного узла в Linux.
Для проверки работоспособности сети часто используется программа ping
любого сайта, который всегда доступен, например, google.com
или еще проще и короче ya.ru
. Вам будет достаточно передать утилите в параметрах этот адрес, она сама найдет ip и сделает все нужное:
$ ping ya.ru
Каждый пакет получил уникальный идентификатор icmp_seq
, количество узлов до целевого узла ttl и время, потраченное на доставку пакета time
. Чтобы остановить ping
нажмите сочетание клавиш Ctrl+C. В конце утилита вывела общую статистику:
packets transmitted
- отправлено пакетов;
received
- получено пакетов;
packet loss
- процент потерянных пакетов;
time
- обще время работы;
rtt min/avg/max/mdev
- минимальное время/среднее время/максимальное время/квадратичное отклонение.
Если выполнение команды ping
не остановить, то пакеты могут отправляться очень долгое время, это создает дополнительную нагрузку на сервер и поэтому не желательно. Вы можете сразу в вызове команды ограничить количество отправляемых пакетов с помощью опции -c
:
$ ping -c 3 ya.ru
Точно так же как мы выполняем ping
для домена, можно указать ip адрес напрямую. Это позволяет проверить есть ли сеть когда неверно настроены серверы DNS. Например:
$ ping -c 3 8.8.8.8
Следующий вид отправки ping
сообщений, это ping
флуд. С помощью таких пакетов можно выполнить нагрузочное тестирование канала или даже заглушить интернет соединение на одной из машин. Но эти функции можно использовать только с правами суперпользователя. Для организации ping флуда укажите опцию -f
:
$ ping -f losst.ru
По умолчанию, в обычном режиме, каждый следующий пакет отправляется, когда получен ответ на предыдущий. Но вы можете сами установить интервал между отправкой пакетов -i
:
$ ping -i 0.2 losst.ru
Здесь программа ping
выполняет так званный, настраиваемый флуд, вы указываете с какой интенсивностью нужно отправлять пакеты. С помощью опции -D
вы можете увидеть Unix Timestamp для каждого сообщения:
$ ping -D losst.ru
Мы рассмотрели что такое команда ping
в Linux, как ее использовать основные параметры и методы применения. Этот очень простой инструмент можно применять для тестирования неполадок сети и их исправления. В этом плане утилита может стать незаменимой.
Примените скидку, вставив промокод в специальное поле при оформлении заказа: