Сети ЭВМ и телекоммуникации / Лабораторные работы / 4 Сетевая утилита ping
Утилита ping используется для проверки соединения с другими компьютерами в сети TCP/IP на уровне протокола IP при помощи отправки сообщений с эхо-запросом по протоколу ICMP. Ping — это основная TCP/IP команда, используемая для устранения неполадки в соединении, проверки возможности доступа и разрешения имен:
ping [-t] [-a] [-n счетчик] [-l размер] [-f] [-i TTL] [-v тип] [-r счетчик] [-s счетчик] [<-j список_узлов | -k список_узлов>] [-w интервал] [имя_конечного_компьютера].
-t задает для команды ping отправку сообщений с эхо-запросом к точке назначения до тех пор, пока команда не будет прервана
-a задает разрешение обратного имени по IP-адресу назначения
-n счетчик задает число отправляемых сообщений с эхо-запросом
-l размер задает длину (в байтах) поля данных в отправленных сообщениях с эхо-запросом
-f задает отправку сообщений с эхо-запросом с флагом «Don’t Fragment» в IP-заголовке
-i TTL задает значение поля TTL (Time To Live – время жизни пакета) в IP- заголовке
-v тип задает значение поля типа службы (TOS) в IP- заголовке
-r счетчик задает параметр записи маршрута (Record Route) в IP- заголовке
-s счетчик задает штамп времени в IP- заголовке
-j список_узлов задает использование параметра свободной маршрутизации в IP-заголовке с набором промежуточных точек назначения, указанным в списке_узлов
-k список_узлов задает использование параметра строгой маршрутизации в IP-заголовке с набором промежуточных точек назначения, указанным в списке_узлов
-w интервал задает время ожидания получения сообщения с эхо-ответом. Интервал по умолчанию равен 4000 (4 секунды).
имя_конечного_компьютера задает точку назначения, идентифицированную IP-адресом или именем узла.
Поскольку работа этой команды строиться на использовании протокола ICMP, прежде всего подробно рассмотрим его:
ICMP — (Internet Control Message Protocol) протокол управляющих сообщений Интернета.
Протокол был разработан для обеспечения необходимой функциональности стека TCP/IP на сетевом уровне как дополнение к IP. Он используется маршрутизаторами для передачи сообщений о нештатных ситуациях в работе сети и тестирования соединений. Протоколом ICMP определено несколько типов сообщений. Каждое ICMP-сообщение вкладывается в IP-пакет, т.е. IP обеспечивает транспорт ICMP пакетов, точно также как он транспортирует данные более высокого уровня. Тем не менее ICMP протокол выполняет функции сетевого уровня как и IP. Это является одной из особенностей TCP/IP по сравнению с эталонной моделью OSI. Универсальными для ICMP пакетов являются первые три поля общей длиной 32 бита. Далее используются подзаголовки, отличающиеся для пакетов различных типов:
Содержание сообщения (зависит от значений полей «Код» и «Тип»)
Тип определяет а код уточняет функцию ICMP-сообщения. Утилита ping использует только два типа ICMP-сообщений:
ICMP-сообщение
Описание сообщения
Эхо запроса (ping-запрос).
Полное ICMP-сообщения для эхо-запроса и отклика имеет вид:

Поля идентификатор (процесса, отправившего запрос) и номер по порядку (увеличивающийся на 1 при посылке каждого следующего пакета) служат для сопоставления запросов и откликов. Поле данные служит для записи информации, возвращаемой отправителю. При выполнении процедуры ping эхо-запрос посылается адресату с записанной в поле данных временной меткой. Если адресат активен, он принимает IP-пакет с этим эхо-запросом, меняет адрес отправителя и получателя в заголовке IP-пакета местами и посылает его обратно. ЭВМ-отправитель, восприняв этот отклик, может сравнить временную метку, записанную им в пакет, с текущим показанием внутренних часов и определить время распространения пакета. Необходимо понимать, что время распространения ICMP-запроса в общем случае не равно времени распространения отклика. Это связано не только с возможными изменениями в канале. В общем случае маршруты их движения могут быть различными. Размер поля данные не регламентирован и определяется предельным размером IP-пакета.
Как мы видим, ICMP протокол дополняет возможности IP получением отклика на запрос и возможностью контроля времени обмена пакетами. Все остальные функции утилиты ping реализуются средствами самого IP протокола, поэтому познакомимся с ними подробнее.
Общая структура IP – пакета представлена на приведенной схеме:

Версия – четырехбитовое поле, значение которого для IPv4 равно 4
Длина заголовка — это количество 32-битных слов в заголовке, включая любые опции. Минимально допустимое значение в отсутствии опций – 5. Так как это 4-битное поле, оно ограничивает размер заголовка в 15 32-битных слов или 60 байт, тем самым накладывая ограничение на длину поля опций.
Тип сервиса — 8 бит описание качества сервиса. Используются следующие значения:
биты 0-2 — преимущество — параметр, определяющий приоритет трафика (большему значению соответствует больший приоритет);
бит 3 — задержка: 0 — нормальная, 1 — малая;
бит 4 — пропускная способность: 0 — нормальная, 1 — высокая;
бит 5 — надежность: 0— нормальная, 1 — высокая;
биты 6-7 — резерв.
Полная длина — содержит полную длину IP датаграммы в байтах. Благодаря этому полю и полю длины заголовка, мы знаем, с какого места начинаются данные в IP датаграмме и их длину. Так как это поле состоит из 16 бит, максимальный размер IP датаграммы составляет 65535 байт.
Идентификация — уникально идентифицирует каждую датаграмму, отправленную хостом. Значение, хранящееся в поле, обычно увеличивается на единицу с посылкой каждой датаграммы.
Флаги — 3 бита — управляющие флаги:
бит 0 — резерв, должен быть нулевым;
бит 1 — DF (Don‘t Fragment — запрет фрагментирования): 0 — дейтаграмму можно фрагментировать, 1 — нельзя;
бит 2 — MF (More Fragments — будут еще фрагменты): 0 — последний фрагмент, 1 — не последний.
Смещение фрагмента -13 бит — местоположение фрагмента в дейтаграмме (смещение в 8-байтных блоках). Первый фрагмент имеет нулевое смещение.
Времени жизни — содержит максимальное количество пересылок (маршутизаторов), через которые может пройти датаграмма. Это поле ограничивает время жизни датаграммы. Значение устанавливается отправителем (как правило 32 или 64) и уменьшается на единицу каждым маршрутизатором, который обрабатывает датаграмму. Когда значение в поле достигает 0, датаграмма удаляется,
Протокол – указывает какой протокол отправил данные через IP. Для ICMP это 1.
Контрольная сумма заголовка – циклическая контрольная сумма только полей заголовка
IP адрес источника
IP адрес назначения
Опции — список дополнительной информации переменной длины, при необходимости дополняемые нулями до длины, кратной 32 битам. В качестве опций могут указываться: запись маршрута (каждый маршрутизатор, который обрабатывает пакет, добавляет свой IP адрес), временная марка (Каждый маршрутизатор записывает свой IP адрес и временную марку, места в списке опций хватает только на четыре такие пары), свободная маршрутизация от источника (Отправитель указывает список IP адресов, через который должна пройти IP датаграмма, однако датаграмма может также пройти через другие маршрутизаторы между любыми двумя адресами, указанными в списке), жесткая маршрутизация от источника (Отправитель указывает точный путь, по которому должна пройти IP датаграмма. Если маршрутизатор обнаруживает, что следующая пересылка, указанная в маршрутизации от источника, не является непосредственно подключенной сетью, возвращается ошибка «маршрутизация от источника невозможна»). Эти опции используются редко и не все маршрутизаторы поддерживают все опции.
Данные – данные более высокого уровня. То-есть в нашем случае ICMP пакет.
Когда IP уровень получает IP датаграмму, которую необходимо отправить, он определяет, на какой локальнй интерфейс отправляется датаграмма (или маршрутизируется), и запрашивает интерфейс, чтобы тот сообщил размер своего MTU. IP сравнивает MTU с размером датаграммы и, если необходимо, осуществляет фрагментацию. Фрагментация может быть осуществлена как на отправляющем хосте, так и на промежуточном маршрутизаторе.
Когда IP датаграмма фрагментирована, она не собирается вновь до тех пор, пока не достигнет конечного пункта назначения. (Для некоторых других сетевых протоколов процесс повторной сборки отличается от описанного выше, при этом повторная сборка осуществляется на маршрутизаторе следующей пересылки, а не в конечном пункте назначения.) На уровне IP сборка осуществляется в конечном пункте назначения. Это сделано для того, чтобы сделать фрагментацию и повторную сборку прозрачной для транспортных уровней (TCP и UDP), хотя это может вести к некоторой потере производительности. Существует вероятность, что фрагмент датаграммы будет снова фрагментирован (возможно даже несколько раз). Информации, которая содержится в IP заголовке вполне достаточно для фрагментации и повторной сборки.
Вернемся снова к IP заголовку и рассмотрим, какие поля используются в процессе фрагментации. Поле идентификации содержит значение уникальное для каждой отправленной IP датаграммы. Это значение копируется в каждый фрагмент конкретной датаграммы. В поле флагов один бит означает, что «дальше следуют еще фрагменты» (more fragments). Этот бит устанавливается в единицу для каждого фрагмента, кроме последнего. Поле смещения фрагмента (fragment offset) содержит смещение этого фрагмента от начала исходной датаграммы. Когда датаграмма фрагментируется, поле полной длины каждого фрагмента изменяется, так чтобы соответствовать размеру фрагмента.
Один из битов в поле флагов называется «не фрагментировать» (don’t fragment). Если этот бит установлен в единицу, IP не будет фрагментировать датаграмму. Вместо этого датаграмма уничтожается, а отправителю посылается ICMP ошибка «фрагментация необходима». Такое ICMP сообщение имеет в заголовке тип 3 код 4.
Изучив протокол ICMP и формат IP пакета вернемся к команде ping и рассмотрим подробно её работу. При запуске без параметров утилита выводит уже приведенную выше справку
ping [-t] [-a] [-n число] [-l размер] [-f] [-i TTL] [-v TOS] [-r число] [-s число] [<-j список_узлов | -k список_узлов>] [-w интервал] [имя_конечного_компьютера].
Задает для команды ping отправку сообщений с эхо-запросом к точке назначения до тех пор, пока команда не будет прервана. Для прерывания команды и вывода статистики нажмите комбинацию CTRL-BREAK. Для прерывания команды ping и выхода из нее нажмите клавиши CTRL-C. Внимание: <Ctrl-Break> не прерывает процесс, а выводит текущую статистику!
Задает разрешение обратного имени по IP-адресу назначения. В случае успешного выполнения выводится имя соответствующего узла;
-n счетчик
Задает число отправляемых сообщений с эхо-запросом. По умолчанию – 4. Увеличение количества запросов бывает необходимо для контроля надежности и устойчивости работы сервера. Чем выше качество канала, тем меньше разброс по времени ответов;
-l размер
Задает длину (в байтах) поля данных в отправленных сообщениях с эхо-запросом без учета длины заголовка. По умолчанию размер IP пакета с вложенным ICMP запросом минимальной длины — 32 байта. Манипулируя этим значением, можно выяснить зависимость: скорость доставки – размер дейтаграммы. Если размер дейтаграммы превысит некоторую критическую величину (определяемую каждым промежуточным узлом самостоятельно), дейтаграмма фрагментируется на несколько пакетов подходящего размера, каждый из которых добирается до конечной точки маршрута самостоятельно, а на узле назначения они вновь собираются в исходную дейтаграмму;
Задает отправку сообщений с эхо-запросом с флагом «Don’t Fragment» в IP-заголовке, установленном на 1. Сообщения с эхо-запросом не фрагментируются маршрутизаторами на пути к месту назначения. Если хотя бы один из промежуточных узлов не может обрабатывать пакеты таких размеров, он удаляет дейтаграмму и посылает отправителю уведомление что требуется фрагментация, но установлена пометка, ее запрещающая. Возможна ситуация, когда некоторые узлы не посылают такого уведомления, молча уничтожая пакет или же фрагментируют дейтаграмму вопреки запрету. Вкупе с ключом –l, задающим длину дейтаграммы, запрет фрагментации ключом –f, позволяет определить максимальный размер нефрагментируемых пакетов. Этот параметр полезен для устранения проблем, возникающих с максимальным блоком данных для канала (Maximum Transmission Unit);
-i TTL
задает значение поля TTL (сокращенно TTL – Time To Live (время жизни)) пакета посылаемых дейтаграмм, измеряемое количеством узлов, которые может проследовать пакет (по умолчанию 128). Максимальное значение TTL — 255. Каждый промежуточный узел уменьшает значение TTL на единицу и, когда оно достигает нуля, пакет уничтожается с посылкой отправителю соответствующего уведомления. Это обстоятельство позволяет отслеживать маршрут путешествия пакетов.
-v тип
Задает значение поля типа службы (TOS – Type Of Service) в IP-заголовке для отправляемых сообщений с эхо-запросом. Тип сервиса указывает предпочтительный вид обслуживания – минимальная задержка, максимальная пропускная способность, максимальная надежность, минимальные издержки на пересылку или обычная, неприоритетная, пересылка. Предпочтение может быть отдано только одному типу приоритета. Тип сервиса задается одним из следующих десятичных чисел. Как легко увидеть, каждому значению соответствует свой бит:
Допустимые типы сервиса в поле TOS
минимальные издержки на пересылку
максимальная надежность доставки
максимальная пропускная способность
Хотя не все маршрутизаторы анализируют поле TOS, прикладные программы могут манипулировать полем TOS по своему усмотрению, выбирая значение, соответствующее специфике своей работы. Например, telnet-клиенты, ICQ и чаты очень чувствительны к задержкам, ftp клиентам задержки не страшны, – была бы хорошей пропускная способность, и т.д. Если промежуточные узлы игнорируют содержимое поля TOS, никакого выигрыша не получается и высокоприоритетные пакеты (например, от ICQ) обрабатываются с той же скоростью, что и пакеты, скажем, от почтового сервера, не критичные к скорости доставки. Использование ping с ключом –v позволяет выяснить, поддерживается ли TOS на данном маршруте и, если имеется несколько альтернативных маршрутов, выбрать из них наиболее подходящий.
-r счетчик
Задает параметр записи маршрута (Record Route) в IP-заголовке для записи пути, по которому проходит сообщение с эхо-запросом и соответствующее ему сообщение с эхо-ответом. Каждый переход в пути использует параметр записи маршрута. По возможности значение счетчика задается равным или большим, чем количество переходов между источником и местом назначения. Параметр счетчик имеет значение от 1 до 9. Не все маршртузаторы поддерживают такую возможность. Ping с ключом –r, позволяет отслеживать маршрут пересылки пакетов и могла бы полностью заменить собой утилиту tracert, если бы не ограничения, налагаемые размером IP-заголовка на максимальное количество запоминаемых адресов – их умещается всего девять, и более длинные пути отслеживать этим способом невозможно.
-s счетчик
Указывает вариант штампа времени Интернета (Internet Timestamp) в заголовке IP для записи времени прибытия сообщения с эхо-запросом и соответствующего ему сообщения с эхо-ответом для каждого перехода. Параметр счетчик имеет значение от 1 до 4. По общепринятым соглашениям временная метка представляет собой четырехбайтовое поле, содержащее число миллисекунд, истекших с начала полуночи всеобщего скоординированного времени.
-j список_узлов
Указывает для сообщений с эхо-запросом использование параметра свободной маршрутизации в IP-заголовке с набором промежуточных точек назначения, указанным в списке_узлов. При свободной маршрутизации последовательные промежуточные точки назначения могут быть разделены одним или несколькими маршрутизаторами. Максимальное число адресов или имен в списке узлов — 9. Список узлов — это набор IP-адресов (в точечно-десятичной нотации), разделенных пробелами.
-k список_узлов
Указывает для сообщений с эхо-запросом использование параметра строгой маршрутизации в IP-заголовке с набором промежуточных точек назначения, указанным в списке_узлов. При строгой маршрутизации следующая промежуточная точка назначения должна быть доступной напрямую (она должна быть соседней в интерфейсе маршрутизатора). Максимальное число адресов или имен в списке узлов равно 9. Список узлов — это набор IP-адресов (в точечно-десятичной нотации), разделенных пробелами. Если узел не может передать пакет напрямую, он уничтожает его и посылает отправителю соответствующее уведомление: маршрутизация от источника невозможна.
Свободная или жесткая маршрутизации применимы для исследования маршрутов движения пакетов в достаточно сложных сетях в целях оптимизации этих маршрутов. В настоящее время подобные проблемы решаются маршрутизаторами самостоятельно и данные опции используются крайне редко.
-w интервал
Определяет в миллисекундах время ожидания получения сообщения с эхо-ответом, которое соответствует сообщению с эхо-запросом. Если сообщение с эхо-ответом не получено в пределах заданного интервала, то выдается сообщение об ошибке «Request timed out» — “Превышен интервал ожидания для запроса”. Интервал по умолчанию равен 4000 (4 секунды).
имя_конечного_компьютера
Задает точку назначения, идентифицированную IP-адресом или именем узла.
Отображает справку в командной строке.
Практичесое использование.
Можно узнать, работает ли сервер. Например, системный администратор может узнать завис ли только веб-сервер или на сервере глобальные проблемы.
Можно узнать, есть ли связь с сервером. Например, о проблеме с настройкой DNS серверов можно узнать, задав в ping сначала доменное имя, а потом IP-адрес.
Можно узнать скорость соединения, так как ping показывает сколько запросов удалось выполнить в секунду. Так же можно узнать качество канала, посмотрев сколько ответов не пришло.
Пингование осуществляется в режиме максимального приоритета канала, поэтому к неумеренному использованию, приводящему к задержкам менее приоритетного трафика, провайдеры относятся неодобрительно.
Возможна ситуация, когда ping к некоторому серверу не проходит, какая бы задержка ни была выбрана, но все сервисы (почта или web) работают нормально. Это объясняется использованием администратором сервера межсетевого экрана, блокирующего либо эхо-запросы, либо эхо-отклики, либо и то и другое вместе. Возможен также запрет эхо-откликов на самом узеле.
Все эти меры предосторожности объясняются тем, что эхо-посылки имеют более высокий приоритет по сравнению с обычными пакетами и злоумышленники могут перегрузить сервер, направив на него много эхо-запросов.
Вопросы для самопроверки
Что такое ICMP протокол и для чего он используется.
Как взаимодействуют ICMP и IP протоколы
Какие типы IСMP-сообщений использует утилита ping
Содержание ICMP эхо-запроса и отклика. Назначение полей идентификатор, номер по порядку, данные
Структура IP – пакета и поля его заголовка
Фрагментация IP-пакетов. Что это такое, когда и для чего используется.
Параметры утилиты ping
Реализация параметров утилиты в ICMP и IP пакетах
Назначение утилиты ping и варианты её применения
Необходимое оборудование
IBM PC — совместимая ЭВМ с лицензионной операционной системой Windows, подключение к локальной сети, выход в интернет.
1. Воспользовавшись командой ping проверьте доступность одного из компьютеров вашего учебного класса.
2. Воспользовавшись командой ping проверьте доступность сервера www.sgu.ru
3. Воспользуйтесь командой ping с параметром записи маршрута и числом отправляемых сообщений 1 для www.sgu.ru
4. Проделайте то же для любого внешнего www сервера на ваш выбор.
5. Продемонстрируйте использование опции разрешения ip- адреса в доменное имя.
6. Установив параметр «число отправляемых сообщений» равным 2, проверьте прохождение пакетов до выбранного узла при увеличении длины отправляемых пакетов (увеличивая длину пакета каждый раз в 2 раза).
7. Повторите предыдущее задание с установленным флагом запрещения фрагментации. Сопоставьте и объясните результаты.
Отчет о выполнении работы представьте в печатной или электронной форме с представлением копий экранов работы утилиты.
Что такое ping?
Ping — утилита для проверки соединений в сетях на основе TCP/IP, а также обиходное наименование самого запроса. Первоначально словом «ping» (по созвучию) именовали направленный акустический сигнал противолодочных гидролокаторов («асдиков») времён Второй Мировой войны.
Утилита отправляет запросы (ICMP Echo-Request) протокола ICMP указанному узлу сети и фиксирует поступающие ответы (ICMP Echo-Reply). Время между отправкой запроса и получением ответа (RTT, от англ. Round Trip Time) позволяет определять двусторонние задержки (RTT) по маршруту и частоту потери пакетов, то есть косвенно определять загруженность на каналах передачи данных и промежуточных устройствах.
Обычный эхо-запрос имеет длину 64 байта (плюс 20 байт IP-заголовка). По стандарту RFC 791 IPv4 суммарный объем пакета не может превышать 65 535 байт.
В разговорной речи пингом называют также время, затраченное на передачу пакета информации в компьютерных сетях от клиента к серверу и обратно от сервера к клиенту.
Полное отсутствие ICMP-ответов может также означать, что удалённый узел (или какой-либо из промежуточных маршрутизаторов) блокирует ICMP Echo-Reply или игнорирует ICMP Echo-Request.
Программа ping является одним из основных диагностических средств в сетях TCP/IP и входит в поставку всех современных сетевых операционных систем. Функциональность ping также реализована в некоторых встроенных ОС маршрутизаторах, доступ к результатам выполнения ping для таких устройств по протоколу SNMP.
Как на самом деле работает Ping?
Ping – стандартная Internet-программа, которую большинство из нас использует ежедневно. Но вас интересовало, как она работает? Не знаю, как вы, а я начинаю беспокоиться, если не знаю, как на самом деле что-то работает. Назначение этой статьи – решить все затянувшиеся вопросы и поднять ваше понимание на новый уровень. Даже если вы не программист, не пугайтесь! Поверьте, я не собираюсь вам рассказывать, как написать собственную версию ping.
Думаю, вы знаете, по существу, как работает утилита TCP/IP ping. Она посылает ICMP (Internet Control Message Protocol) эхо-запрос на указанный интерфейс в сети и в ответ ожидает получения ICMP эхо-отклика. Таким образом, программа может проверить способность к подключению, измерить время отклика и вывести отчет на наличие проблем.
ICMP – это программный компонент межсетевого взаимодействия TCP/IP; по существу, это компаньон IP (Internet Protocol) на этом уровне. Фактически, ICMP полагается на IP-протокол для перемещения по сети. Если вы наблюдаете данный вид сетевого трафика, скажем, в сети Ethernet, то ваш анализатор протокола зафиксирует блок данных Ethernet, переносящий дейтаграмму IP с сообщением ICMP внутри.
Вникните в проблему: программа ping выполняется на уровне приложений. Так как же она заставляет ICMP проделывать такие фокусы? Может вы вспомните, если раньше изучали TCP/IP, что уровень хост-хост заключен между этими объектами? Обходится ли он? Если да, то как именно? Кто ответственен за форматирование этих сообщений (эхо-запроса и эхо-отклика)?
Когда на эхо–запрос возникают ответы ICMP, отличные от обычного эхо-отклика, как они попадают в программу ping? Последний вопрос может показаться очевидным, но это не так. ICMP-сообщения не содержат адресной информации, позволяющей стеку протокола TCP/IP разглядеть программу, которая получает сообщение. TCP и UDP для этой цели используют номера портов. Так как это работает?
Общая информация
Стек протокола TCP/IP образуется четырехуровневой моделью (см. Рис. 1). Самый нижний уровень, обычно называемый сетевым интерфейсом или уровнем сетевого доступа, аналогичен уровням 1 и 2 модели OSI, физическому и канальному. Он включает носитель данных, соединения, передачу сигналов, физическую адресацию и управление общим доступом к носителю данных. Для большинства из нас это означает Ethernet и кабельную систему.

Рисунок 1
Уровень, стоящий над уровнем сетевого доступа, уровень межсетевого взаимодействия, больше всего похож на уровень 3 модели OSI, сетевой уровень. Здесь присутствуют логическая адресация и маршрутизация: то, что способствует коммуникации через границы сетей. Вот здесь и используются IP-протокол и его механизмы, как и ICMP.
ICMP – необходимый компонент любой реализации TCP/IP. Для поставки информации более высокоуровневым протоколам (TCP или UDP), чтобы сделать их надежней, он не используется. Скорее, возможности диагностики сети и обратной связи для тех, кто ответственен за администрирование и работу, предостаявляет ICMP. Посмотрите RFC 792, если вас это действительно заинтересовало.
Над уровнем сетевого доступа находится уровень хост-хост, копирующий уровень 4 модели OSI, транспортный. Мне кажется, он также частично включает в себя часть функций уровня 5, сеансового. Вот где мы можем найти возможности для обмена данными из конца в конец, дополнительную проверку на ошибки и средства для отличения одной программы от другой (используя номера портов). TCP и UDP находятся на этом уровне.
На вершине стека находится прикладной уровень, и здесь мы можем найти реализацию протоколов высокого уровня (таких как SMTP, HTTP и FTP). Здесь также выполняются приложения. Так, что когда вы «пингуете», программа ping должна быть воспринята для функционирования на этом уровне.
Небольшая загадка
Kак мы можем обойти уровень хост-хост, имея ICMP, работающий на межсетевом уровне взаимодействия и программу ping на прикладном? Ответ лежит в понимании того, что мы знаем о raw-сокетах. «Ну а что такое сокет?»,-спросят новички. Теоретически, сокет – конечная точка соединения, которая обычно состоит из IP-адреса и номера порта, идентифицирующих определенные хост и программу. Но программист немного по-другому смотрит на сокет. Для него «сокет» — системная функция, распределяющая ресурсы, благодаря которым программа может взаимодействовать с лежащим под ней стеком протокола TCP/IP. Адресная информация ассоциируется с ним только после того, как сделан вызов сокета (для тех, кто хочет знать, это роль «связывающей» функции»). Так что, заметьте, возможно назначить сокет и незаметно ассоциировать адресную информацию с ним.
Есть три часто встречающихся вида сокетов: stream, datagram, и raw. TCP использует тип stream, а UDP – тип datagram. Raw-сокеты используются любым приложением, если ему необходимо взаимодействовать непосредственно с IP, минуя TCP и UDP. Потребители включают в себя реализации протокола маршрутизации, такие как routed и gated (включающие RIP и OSPF). Здесь же находится и наш друг ping.
При использовании raw-сокетов нужно иметь в виду несколько вещей. Так как вы обманываете средства уровня хост-хост, то обходите механизм адресации программы, схему нумерации портов. Это означает, что программа, задействовавшая raw-сокеты должна просматривать все входящие пакеты, чтобы найти пакеты, предназначенные именно ей.
Что же происходит на самом деле?
Когда начинается выполнение программы ping, она открывает raw-сокет, чувствительный только к ICMP. Это означает две вещи:
• На выходе: посылка эхо запросов ICMP, нужна программа, чтобы форматировать сообщение ICMP. Система предоставит заголовок IP и заголовок Ethernet (обычно).
• На входе: программа должна проверить все входящие сообщения ICMP и выбрать нужные. Ожидаемый вход – ICMP эхо-отклики.
Давайте посмотрим на это с другой стороны.
На противоположной стороне эхо-запросы форматируются способом, показанным на рисунке 2. Тип сообщения всегда кодируется цифрой восемь (8). Поле кода всегда содержит ноль. Контрольная сумма используется для нахождения ошибок. В ее подсчет включаются заголовок сообщения ICMP и его данные. Программа ping выполняет эти подсчеты и заполняет пустоты. Затем идет поле идентификации, содержащее ID (PID) процесса, который идентифицирует выполнение программы ping для операционной системы. Для систем Windows, это поле содержит постоянное значение 256. Следующим идет поле последовательного номера, значение которого начинается с 0 и увеличивается на 1 при каждом отосланном эхо-запросе. После этих необходимых полей следуют необязательные тестовые данные. В реализации ping, которую я тестировал (Slackware Linux), это была временная отметка, используемая в расчете полного времени при получении эхо-отклика.

Рисунок 2
Что касается прибывающих ICMP-сообщений, то задача ping немного усложняется. Так как ping использует raw-сокет ICMP, то программе предоставляются копии всех входящих ICMP-сообщений, кроме особых случаев, когда входящие эхо-запросы формируются другими людьми, «пингующими» нас (последние контролируются системой). Это означает, что ping видит не только ожидаемые эхо-отклики, когда они приходят, но также и такие сообщения, как «Получатель недоступен» (Destination Unreachable), «Источник остановлен» (Source Quench), и «Время ожидания превышено» (Time Exceeded). (На рисунке 3 показаны сообщения ICMP всех типов.)

Рисунок 3
Задумайтесь над этим на минуту. Если у вас одновременно выполняются две копии программы ping, то каждая из них будет эхо-отклики другой и другие неприятные сообщения (nastygram)
Каждая копия программы должна идентифицировать сообщения, значимые для нее. Кто думает, что для этого используется поле PID (идентификации), тот абсолютно прав.
А как программа ping справляется с этим в Windows, если у нее нет PID? Вы меня поймали. Звучит как тема для будущей статьи. К этому вопросу мы еще вернемся.
Интересно, что сообщения, входящие в ping, остаются с нетронутым IP-заголовком. Таким образом, программа имеет доступ к таким важным параметрам, как «время жизни» (TTL) и «рассчитанное время возврата» (если такая опция включена).
На этой стадии, у вас должно быть практически полное понимание цикла процессов, связанных с ping.
Повторим основные моменты:
• При инициализации программы ping, она открывает raw-сокет ICMP и может напрямую обращаться к IP, минуя TCP и UDP.
• Ping форматирует ICMP-сообщение типа 8, эхо-запрос и посылает его (используя функцию «sendto») на желаемый адрес назначения. Система предоставляет IP-заголовок и конверт (envelope) канального уровня.
• При получении ICMP-сообщений, у ping есть возможность проверить каждый пакет и выбрать нужное
• Обычное поведение – брать ICMP-сообщения типа 0, эхо-отклики, у которых значение поля идентификатора совпадает с PID программы.
Ping использует временную метку в области данных эхо-отклика чтобы вычислить полное (туда-обратно) время. Он также сообщает о времени жизни TTL из IP-заголовка отклика.
• Когда что-то идет не так, ping может сообщать о ICMP-сообщениях других типов, появляющихся на входе. Такие сообщения включают в себя «Получатель недоступен» (Destination Unreachable) и «Время ожидания превышено» (Time Exceeded).
Какой протокол использует ping
ping — утилита для проверки соединений в сетях на основе TCP/IP.
Она отправляет запросы (ICMP Echo-Request) протокола ICMP указанному узлу сети и фиксирует поступающие ответы (ICMP Echo-Reply). Время между отправкой запроса и получением ответа (RTT, от англ. Round Trip Time ) позволяет определять двусторонние задержки (RTT) по маршруту и частоту потери пакетов, то есть косвенно определять загруженность на каналах передачи данных и промежуточных устройствах.
Также пингом иногда ошибочно называют время, затраченное на передачу пакета информации в компьютерных сетях от клиента к серверу и обратно от сервера к клиенту. Это время называется лагом (англ. отставание; задержка, запаздывание ) или собственно задержкой и измеряется в миллисекундах. Лаг связан со скоростью соединения и загруженностью каналов на всём протяжении от клиента к серверу.
Полное отсутствие ICMP-ответов может также означать, что удалённый узел (или какой-либо из промежуточных маршрутизаторов) блокирует ICMP Echo-Reply или игнорирует ICMP Echo-Request.
Программа ping является одним из основных диагностических средств в сетях TCP/IP и входит в поставку всех современных сетевых операционных систем. Функциональность ping также реализована в некоторых встроенных ОС маршрутизаторов, доступ к результатам выполнения ping для таких устройств по протоколу SNMP определяется RFC 2925 (Definitions of Managed Objects for Remote Ping, Traceroute, and Lookup Operations).
Так как для отправки ICMP-пакетов требуется создавать raw-сокеты, для выполнения программы ping в unix-системах необходимы права суперпользователя. Чтобы обычные пользователи могли использовать ping в правах доступа файла /bin/ping устанавливают SUID-бит.
Содержание
Этимология
Название происходит от английского названия звука импульса, издаваемого сонаром при отражении импульса от объекта.
Также есть несколько альтернативных толкований:
- PING — акроним «Packet InterNet Grouper (Groper)».
- Ping — часть названия игры пинг-понг. Это толкование подразумевает, что компьютеры обмениваются сигналами аналогично тому, как игроки в пинг-понг отбивают друг другу мяч.
- Pong — иногда так называют ответ (ICMP Echo-Reply) полученный благодаря удачно выполненной команде ping.
История
Программа была написана Майком Мууссом (англ. Mike Muuss ), учёным Исследовательской Лаборатории Баллистики (англ. Ballistics Research Lab ) США в декабре 1983 года.
Практическое использование
- Можно узнать, работает ли сервер. Например, системный администратор может узнать завис ли только веб-сервер или на сервере глобальные проблемы.
- Можно узнать, есть ли связь с сервером. Например, проблемы с настройкой DNS серверов на машине можно узнать, задав в ping сначала доменное имя, а потом IP-адрес.
- Можно узнать скорость соединения, так как ping показывает сколько запросов удалось выполнить в секунду. Так же можно узнать качество канала, посмотрев сколько ответов не пришло. Это часто используется игроками в сетевые игры, потому что качество связи для них очень важно.
- Пингование осуществляется в режиме максимального приоритета канала, поэтому к неумеренному использованию, приводящему к задержкам менее приоритетного трафика, провайдеры относятся неодобрительно.
Примеры
UNIX системы
Послать 3 пакета с интервалом в 5 секунд, сопровождая получение откликов звуковыми сигналами
Windows
Ссылки
Wikimedia Foundation . 2010 .
Полезное
Смотреть что такое «Ping» в других словарях:
Ping — is a computer network tool used to test whether a particular host is reachable across an IP network; it is also used to self test the network interface card of the computer, or as a speed test. It works by sending ICMP “echo request” packets to… … Wikipedia
Ping An — Insurance Unternehmensform Aktiengesellschaft ISIN CNE1000003X6 Unternehmenssitz … Deutsch Wikipedia
Ping — steht für: Tonimpuls eines aktiven Sonars Ping (Datenübertragung), ein in der Datenübertragung verwendetes Computerprogramm Ping (Fluss), ein Fluss in Nordthailand Ping (Telefon Lockanrufe), dadurch sollen Angerufene zu teuren Rückrufen verleitet … Deutsch Wikipedia
PING — [Abk. für Packet Internet Groper, dt. »Internetpaketgrapscher«], ein Programm, mit dem die Erreichbarkeit eines Computers im Internet oder einem sonstigen Netzwerk getestet werden kann. Dazu schickt es ein Signal an den Zielrechner und zeigt an … Universal-Lexikon
Píng — Ping Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. Ping peut désigner : En informatique : le logiciel ping permettant d’envoyer une requête ICMP Echo d’un ordinateur à un autre, Ping, l’une… … Wikipédia en Français
Ping An — Pour les articles homonymes, voir Pingan. Ping an (en sinogrammes simplifiés 平安 ; en sinogrammes traditionnels 平安 ; en pinyin Píng ān ; littéralement « la paix ») est un village situé dans la région de Longsheng, à… … Wikipédia en Français
ping — [pɪŋ] verb [transitive] COMPUTING 1. to send a signal in order to find out if another computer is connected to a network or the Internet 2. informal to send a message to someone by computer: • If you see any major problems with this, ping me. * * … Financial and business terms
Ping’an — is the name of at least four towns in China, including.* Ping an in Sichuan Province, about 60 km east of Chengdu.* Ping an in Jilin Province, about 210 km northwest of Changchun.* Ping an in Liaoning Province, about 70 km south of Shenyang.*… … Wikipedia
Ping’er — (Chinese: 平兒; Pinyin: Píng ér; literally Peace ) is a major character in the novel Dream of the Red Chamber. She is Wang Xifeng s chief maid and personal assistant/consultant. Being the chief consultant of the household manager, Ping er wields… … Wikipedia
Ping Wu — est un personnage du manga Gunnm Last Order. Ping Wu est découvert pour la première fois dans Gunnm Last Order Tome 3, juste après l arrivée de Gally sur Jéru. Il est toujours accompagné de son compagnon , nommé Keil, qui est sa main gauche .… … Wikipédia en Français