Ping udp пакетами windows

Содержание
  1. Как на самом деле работает Ping?
  2. ИТ База знаний
  3. Полезно
  4. Навигация
  5. Серверные решения
  6. Телефония
  7. Корпоративные сети
  8. Курс по сетям
  9. Руководство по команде grep в Linux
  10. Рекурсивно найти слово в файлах и папках Linux
  11. 15 примеров CURL в Linux
  12. Перейти на Linux? Попробуйте его сначала!
  13. Управление пакетами в Debian-подобных операционных системах
  14. Как использовать команду sudo в Linux
  15. Как обновить ядро Linux в CentOS 7
  16. 15 примеров команды PING для диагностики сети
  17. Для чего используется команда PING?
  18. Как работает команда PING?
  19. Можно ли использовать PING с прокси-сервером?
  20. Ping IPv6 адресов
  21. Ping конкретного порта
  22. Ping с выводом времени
  23. Ping всех устройств в указанной подсети
  24. Как завершить команду PING?
  25. Завершение работы команды по счетчику
  26. Где расположена утилита PING?
  27. Проверка задержки командой PING
  28. Поиск идеального значения MTU
  29. Ping на 2-ом уровне OSI (использование arping)
  30. Ping по имени узла
  31. Ping маршрута (traceroute)
  32. Запустить команду если ping вернул ошибку
  33. Установление размера пакета ping
  34. Отключение команды ping
  35. Заключение
  36. Полезно?
  37. Почему?

Как на самом деле работает 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 и кабельную систему.

Уровень, стоящий над уровнем сетевого доступа, уровень межсетевого взаимодействия, больше всего похож на уровень 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. Адресная информация ассоциируется с ним только после того, как сделан вызов сокета (для тех, кто хочет знать, это роль «связывающей» функции»). Так что, заметьте, возможно назначить сокет и незаметно ассоциировать адресную информацию с ним.

Читайте также:  Устранение неполадки центра обновления windows

Есть три часто встречающихся вида сокетов: 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), это была временная отметка, используемая в расчете полного времени при получении эхо-отклика.

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

Задумайтесь над этим на минуту. Если у вас одновременно выполняются две копии программы 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).

ИТ База знаний

Курс по Asterisk

Полезно

— Узнать IP — адрес компьютера в интернете

— Онлайн генератор устойчивых паролей

— Онлайн калькулятор подсетей

— Калькулятор инсталляции IP — АТС Asterisk

— Руководство администратора FreePBX на русском языке

— Руководство администратора Cisco UCM/CME на русском языке

— Руководство администратора по Linux/Unix

Серверные решения

Телефония

FreePBX и Asterisk

Настройка программных телефонов

Корпоративные сети

Протоколы и стандарты

Популярное и похожее

Курс по сетям

Руководство по команде grep в Linux

Рекурсивно найти слово в файлах и папках Linux

15 примеров CURL в Linux

Перейти на Linux? Попробуйте его сначала!

Управление пакетами в Debian-подобных операционных системах

Как использовать команду sudo в Linux

Как обновить ядро Linux в CentOS 7

Еженедельный дайджест

15 примеров команды PING для диагностики сети

10 минут чтения

Благодаря Linux, у нас есть очень много инструментов облегчающих администрирование и диагностику сети. В этом плане команда PING является одним из самых полезных инструментов для системных и сетевых администраторов.

Читайте также:  Аналог potplayer для windows

Обучайся в Merion Academy

Пройди курс по сетевым технологиям

Начать

Сама базовая возможность этой утилиты – определить доступен ли тот или иной хост. Тем не менее в этом материале мы приведем примеры расширенных возможностей этой команды в системе Linux.

Для чего используется команда PING?

Команда ping один из базовых инструментов для работы с сетью. Наряду с проверкой доступности удаленного хоста, эта команда даёт возможность выполнять и другие диагностические задачи в том числе:

  • измерение времени за которое общаются два хоста;
  • выявление IP адреса конкретного хоста, как в локальной сети, так и в глобальной
  • она может быть частью bash скрипта для автоматической проверки сетевого устройства
  • проверка связи с конкретным устройством.

Как видно, эта команда очень необходима для администрирования сети и серверов.

Как работает команда PING?

Принцип работы команды Ping прост: она посылает серию пакетов маленького размера на указанное устройство.

Для тестирования устройства может быть использован либо IP-адрес, либо имя хоста. После отправки пакета, утилита проверяет и измеряет время ответа целевого устройства.

Как вы могли предположить, время ответа зависит от нескольких условий в том числе географическое расположение или устройств, расположенных между источником и целевым устройством.

Например, в локальной проводной сети команда вернет лучший результат по времени, чем в сети с несколькими маршрутизаторами и сетевыми мостами.

Однако, на основе полученной информации утилита будет судить о состоянии целевого устройства.

Синтаксис команды следующий:

Ниже приведены некоторые полезные и часто используемые ключи для этой команды:

  • -c: Позволяет указать количество пакетов для отправки.
  • -s: Позволяет изменять размер пакета по умолчанию.
  • -v: Отображает текущее состояние выполнения команды.
  • -w: Указывает в секундах время завершения команды.
  • -i: Позволяет указать интерфейс, с которого будут идти запросы.

Можно ли использовать PING с прокси-сервером?

Прокси – это сервер или приложение играющее роль посредника для соединения двух хостов в сети. Это своего рода «человек посередине», который отправляет запросы прямо к хосту.

Проблема в том, что команда PING требует прямого соединения между устройствами. Таким образом, команда Ping не может функционировать если перед ним стоит прокси-сервер.

Как вариант, можно воспользоваться сайтами, которые предлагают команду Ping как услугу. С другой стороны, для решения некоторых задач с командой Ping, можно использовать команду curl . Также можно прибегнуть к помощи VPN, который спрячет ваш реальный IP.

Ping IPv6 адресов

По умолчанию, когда запускаем команду PING, мы используем IP версии 4. Однако, с появлением протокола IPv6, все чаще стали встречаться адреса такого формата.

Ядро Linux поддерживает IPv6 начиная с версии 2.2, так что все дистрибутивы Linux поддерживают этот протокол.

Базовый синтаксис таков:

В старых версиях была команда ping6 . В новых дистрибутивах её нет и весь функционал объединен с ping .

Как и при работе с IPv4, ключом –c можем указать число пакетов, для отправки, а ключ –i – определяет интерфейс для исходящих запросов.

Ping конкретного порта

Иногда приходится проверят доступен ли тот или иной порт на проверяемом хосте. К сожалению, команда Ping не имеет такой возможности, но это можно сделать с помощью telnet , который по умолчанию установлен на Linux.

Чтобы проверить доступность порта просто введите следующую команду:

Ping с выводом времени

Хотя команда ping дает много полезной информации, но этого может быть недостаточно. Тем не менее, есть возможность настроить команду так, чтобы она показала дату и время отправки пакета. Это может сделать вывод приятней и полезней для скриптов и логирования.

Для этого достаточно прописать указанную ниже команду. Но вам придется установить пакет ccze .

Как видно из скриншота, команда показывает дату и время отправки каждого пакета.

Ping всех устройств в указанной подсети

Командой Ping можно посылать сигнал всем хостам в сети или подсети. Для этого нужно запустить ping с ключом –b на широковещательный адрес, который заканчивается на 255. Например:

Итак, если хост назначения недоступен, значит либо там блокируются ICMP пакеты, либо есть проблемы с сетью или таблицей маршрутизации.

Как завершить команду PING?

По умолчанию, в системе Linux команда Ping непрерывно посылает пакета на хост. Но если нужная информация получена, то необходимо как-то прервать выполнение команды. Для этого просто нужно нажать комбинацию клавиш CTRL+C .

После этого команда немедленно остановится.

Завершение работы команды по счетчику

Вы можете ограничить число посылаемых пакетов. Например, если поставить число пакетов равным 10, то после отправки указанного числа пакетов выполнение команды прекратится.

Где расположена утилита PING?

В Unix-подобных системах таких, как Linux бинарные файлы обычно располагаются по пути

В этой папке можно найти все множество бинарных файлов, которые мы используем как команды в терминале. В других ОС семейства Linux, они могут быть расположены в:

Проверить это можем командой ls :

На скриншоте видно, что команда ping находится в папке

Другой метод, которым можно найти место расположения команд это which :

На выводе она даст следующую информацию:

Проверка задержки командой PING

Одна из возможностей, предоставляемых командой PING, является возможность измерения времени отклика сети. По-другому это называется задержка или время ожидания.

Чтобы измерить задержку введи указанную команду и обратите внимание на ввыод:

Читайте также:  Вредные обновления для windows

Как вы могли заметить, каждый пакет был отправлен с конкретным временем ответа. В конце же есть строка, которая начинается на:

Второе значение после знака равенства – это время задержки. В нашем случае он равен 6,798.

С помощью этого показателя мы можем определить хосты, связь с которыми хуже и приять соответствующие меры.

Поиск идеального значения MTU

MTU (Maximum Transmission Unit) это максимальный размер пакета, который может быть передан по сети.

Сегодня, в целях безопасности, в сетях создаются препятствия для работы MTU. Но большинство локальных сетей на основе Ethernet использует MTU размером 1500 байт.

Если нужно найти самый подходящий размер MTU с помощью команды Ping, следует определить начальное значение и уменьшать его до тех пор, пока прекратятся ошибки. Если значение большое, мы получим следующую ошибку:

Чтобы сделать это запустите следующую команду:

В нашем случае, значение размера пакета слишком большое. Поэтому уменьшаем его до 1472 байтов.

Если получите другое сообщение, начальное значение должно быть уменьшено по единице до тех пор, пока не получите требуемый результат.

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

Ping на 2-ом уровне OSI (использование arping)

С помощью команды ping диагностика проводится на основе IP-адреса конкретного узла в сети. Это связано с тем, что команда ping работает на третьем сетевом уровне модели OSI.

С другой стороны, можно использовать другую встроенную в Linux команду – arping . Эта утилита работает так же, как ping, но на втором – канальном уровне модели OSI.

Синтаксис команды следующий:

В результате получите что-то подобное:

Вывод команды показывает размер отправленного пакета, затем MAC адрес узла назначения, а также время ответа.

Отметим, что эта команда не предустановлена на системе Debian и производных.

Ping по имени узла

По умолчанию, команда ping посылает пакеты на узел назначения используя IP адрес или имя узла назначения. Также нужно отметить, что большинство реализаций утилиты ping на Linux не разрешают DNS в обратном направлении.

Например, если мы запустим команду ping, указав IP адрес, он вернёт только IP узла. И наоборот, если параметром передадим имя узла, то команда вернет его IP адрес. Посмотрите вывод введя команду ниже:

Ping маршрута (traceroute)

Сама по себе команда ping не показывает пути от источника к узлу назначения. Но это было бы очень кстати в том случае, когда узел назначения не отвечает, чтобы определить где именно теряется связь.

Команда tracert (Windows) или traceroute работают аналогично ping. Преимуществом этой команды является то, что он показывает весь путь следования пакета от источника до узла назначения.

В принципе traceroute посылает тот же ICMP пакет, что и Ping. Но в случае traceroute, в отличии от ping начально значение TTL пакета выставляется равным единице. Пакет доходит до первого узла по пути к узлу назначения. Устройство уменьшает TTL на одну единицу и если получается нуль, то возвращает сообщение об ошибке истечения времени пакета. В сообщение так же содержится IP адрес и имя хоста. Отправитель получает данное сообщение. Если оно не от узла назначения, то посылает второй пакет с TTL на один больше предыдущего. И так до тех пор, пока не получит ответ от узла назначения. Для получения пути нужно ввести команду:

Запустить команду если ping вернул ошибку

Представьте, что вам нужно получить оповещение если узел назначения перестал отвечать на запросы команды ping. Для этого нужно включить команду ping в bash скрипт и прописать нужные команды. Например, скрипт ниже позволяет вам проверить отвечает ли узел на запросы ping:

Установление размера пакета ping

По умолчанию, размер пакетов ICMP равен 56 байтам. Это позволяет не влиять на работу сети во время проверки. Но при необходимости можно изменять это значение. Для этого достаточно запустить команду ping с ключом –s и требуемым размером. Например:

Если нужно установить значение пакета равным 100 байтам, нужно прописать команду ниже:

Отключение команды ping

Если вы обслуживаете сеть, то вам может быть необходимо отключить ответ на ping запросы в любое время. Это можно сделать как временно, так и постоянно, в зависимости от ваших нужд. Для временного отключения команды ping нужно ввести команду ниже от имени root-а:

Она выключить возможно ответа на ICMP запросы до перезагрузки системы. Но если нужно навсегда отключить эту возможность, то придется отредактировать файл

и добавить следующую строку:

Сохраните файл и, для применения изменений введите команду:

Заключение

В этом материале мы рассмотрели, как команда ping работает в системе Linux. Ping одна из самых легких команд. Она позволяет лицам, ответственным в обеспечении нормально работы сети, выявлять проблемы и устранять их.

Обучайся в Merion Academy

Пройди курс по сетевым технологиям

Начать

Полезно?

Почему?

😪 Мы тщательно прорабатываем каждый фидбек и отвечаем по итогам анализа. Напишите, пожалуйста, как мы сможем улучшить эту статью.

😍 Полезные IT – статьи от экспертов раз в неделю у вас в почте. Укажите свою дату рождения и мы не забудем поздравить вас.

Оцените статью