В наши дни сети настолько распространены, что большинство из нас считают само собой разумеющимся, что компьютер на одной стороне комнаты может связываться с компьютером на другой стороне комнаты, а тем более с другой стороной мира. Когда все работает так, как задумано, сеть — это то, что делает возможными Интернет, облако, совместное использование файлов, потоковую передачу мультимедиа, удаленное администрирование, печать и многое другое. Когда что-то идет не так, иногда бывает сложно диагностировать. Одним из наиболее фундаментальных инструментов диагностики сетевого подключения является команда ping.
Если вы не можете подключиться к компьютеру в локальной сети или к серверу в Интернете, вы можете пропинговать его. Ping отправляет пакет протокола управляющих сообщений Интернета (ICMP) на IP-адрес назначения. ICMP изначально является рудиментарным форматом, используемым в основном для диагностики: это, по сути, сигнал запроса и ответа.
Процесс устранения неполадок начинается из дома. Сначала проверьте связь со своим компьютером, чтобы убедиться, что у вас работает сетевой стек. Компьютер, на котором вы работаете, также называется локальным хостом (localhost), и ему назначен специальный IP-адрес для разговора с самим собой: 127.0.0.1.
Команда ping понимает имя хоста localhost, его короткий IP-адрес просто 0.
Вы можете контролировать количество отправляемых сигналов с помощью опции -c (as in count).
$ ping 0 -c1 PING 0 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.069 ms --- 0 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.069/0.069/0.069/0.000 ms
После того, как вы установили, что ваш локальный сетевой стек запущен и работает, вы можете пропинговать свой маршрутизатор. Адрес маршрутизатора обычно начинается с 192.168 или 10. Точный IP-адрес зависит от конфигурации вашего маршрутизатора.
Остановить выполнение пинга можно с помощью Ctrl + C.
$ ping 192.168.0.1 PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. From 192.168.0.100: icmp_seq=2 Redirect Host(New nexthop: 192.168.0.1) From 192.168.0.100: icmp_seq=3 Redirect Host(New nexthop: 192.168.0.1) From 192.168.0.100: icmp_seq=4 Redirect Host(New nexthop: 192.168.0.1) From 192.168.0.100: icmp_seq=5 Redirect Host(New nexthop: 192.168.0.1) ^C
Если вы можете подключиться к маршрутизатору, это означает, что ваше проводное или беспроводное соединение работает.
А как насчет других хостов в моей сети? Вы можете пинговать все виды устройств. Не все гарантированно ответят (некоторые устройства отбрасывают пакеты ICMP), но многие это делают. Например, я могу пропинговать свой принтер:
<span class="co4">$ </span><span class="kw2">ping</span> 192.168.0.4
Проверка связи за пределами вашей сети
Помимо проверки работы домашней сети, вы также можете выйти в «большой мир» за пределами вашего маршрутизатора. Не всем серверам разрешено получать ICMP, а тем более отвечать на него. Тем не менее, некоторые из них работают, и жизненно важный сервер для работы в Интернете — это DNS-сервер.
Адрес DNS-сервера Google относительно легко запомнить, и он отвечает на эхо-запросы:
$ ping -c 2 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=53.3 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=116 time=53.5 ms --- 8.8.8.8 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 53.304/53.424/53.544/0.120 ms
Когда сайт явно исчез, вы можете проверить сеть DNS, чтобы узнать, каков адрес ее хост-сервера, а затем проверить связь с этим сервером. По крайней мере, так вы узнаете не работает хост или просто проблема с веб-сервером.
Например, вы безуспешно пытаетесь перейти на example.com. Сначала найдите IP-адрес с помощью команды host:
$ host example.com example.com has address 93.184.216.34 example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946 example.com mail is handled by 0
А затем пингуйте хост сайта по IP:
<span class="co4">$</span> <span class="kw2">ping</span> 93.184.216.34 <span class="re5">-c</span> <span class="nu0">1</span>
Ping и IPv6
Ping работает как по IPv4, так и по IPv6. Явное использование только одного из них можно принудительно применить, указав -4 или -6.
Размер пакета
Вы можете изменить размер отправляемых ICMP-пакетов с помощью параметра -s. Размер пакета по умолчанию составляет 56, что в сочетании с 8-байтовым заголовком преобразуется в 64 байта данных ICMP. Эта команда отправляет 43 байта:
<span class="co4">$ </span><span class="kw2">ping</span> <span class="re5">-s</span> <span class="nu0">35</span> <span class="re5">-c</span> <span class="nu0">5</span> 8.8.8.8
Вы можете распечатать временную метку перед каждым отчетом ping в вашем терминале с опцией -D:
$ ping -D 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. [1634013430.297468] 64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=53.3 ms [1634013431.298738] 64 bytes from 8.8.8.8: icmp_seq=2 ttl=116 time=53.1 ms
Время пинга
Вы можете изменить временной интервал между эхо-запросами, используя параметр -i. Команда меняет интервал ping на две секунды:
<span class="co4">$ </span><span class="kw2">ping</span> <span class="re5">-i</span> <span class="nu0">2</span>
Вы также можете остановить пинг через определенное время (в секундах) с помощью опции -w:
<span class="co4">$ </span><span class="kw2">ping</span> <span class="re5">-w</span> <span class="nu0">6</span>
Варианты
Есть много реализаций ping. В пакете iputils есть команда ping, в Busybox есть команда ping, еще одна — от BSD и других. Есть даже графический интерфейс для ping: Gping доступен для Linux, macOS и Windows. Дополнительную информацию о gping можно найти на Github.
Научитесь пинговать
Команда ping проста, но она может быть глазами и ушами на обширном пространстве вашей сети. В следующий раз, когда у вас возникнут проблемы с подключением, позвольте ping быть вашим первым инструментом.