Ping. Повторение – мать (м)учения.

Если где-то что-то не работает, то мы чаще всего пробуем это что-то попинговать. Наверное, сегодня каждый умеет «пинговать». Или не умеет? Понимаете ли вы результаты команды ping? Можете ли вы ответить на, казалось бы, простые вопросы:

  1. Что значит буква M или U в ответ на ping?
  2. Почему первый ответ приходит, как правило, с большей задержкой?
  3. Видели ли вы отрицательный ping?
  4. Как пропинговать несколько адресов сразу?

Для начала определимся, что ping – это не протокол, это команда, программа, написанная Майком Муусом и которая по его словам является главным достижением его жизни. Это, наверное, самый распространенный диагностический инструмент, используемых в сетях передачи данных. С помощью ping возможны следующие процедуры:

  • Доступность сетевого узла по ip адресу и доменному имени
  • Работоспособность DNS сервера
  • Качество каналов связи на основе количества потереннях пакетов и значениях задержек.
  • И т.д.

Буквально один абзац о том, что все знают. Программа Ping использует протокол icmp (спецификация ICMP находится в RFC 792). В протоколе ICMP существует несколько типов сообщений для разных управляющих функций, а также дополнительные коды к типам. Практически все они приведены в табличке, но полную информацию вы найдете тут .

Тип Описание Запрос Ошибка
0 echo-reply (Эхо-отклик) *
3 destination unreachable (назначение недоступно)
code 0 = net unreachable (сеть)
1 = host unreachable (хост)
2 = protocol unreachable (протокол)
3 = port unreachable (порт)
4 = fragmentation needed and DF set (необходима фрагментация, но выставлен бит «не фрагментировать»)
5 = source route failed (маршрутизация от источника не работает)
*
4 source-quench (подавление потока) *
5 redirect (перенаправление)
code 0 = redirect datagrams for the network (в сеть)
1 = redirect datagrams for the host (к хосту)
2 = redirect datagrams for the type of service and network (для типа сервиса и сети)
3 = redirect datagrams for the type of service and host (для типа сервиса и хоста)
*
6 alternate-address *
8 Echo (Эхо-запрос) *
9 router-advertisement (объявление маршрутизатора) *
10 router-solicitation (поиск маршрутизатора) *
11 time-exceeded (время истекло)
code 0 = time to live exceeded in transit (для передачи)
1 = fragment reassembly time exceeded (для повторной сборки)
*
12 parameter-problem (ошибки параметров) *
13 timestamp-request (запрос временной метки) *
14 timestamp-reply (ответ временной метки) *
15 information-request (информационный запрос) *
16 information-reply (информационный ответ) *
17 mask-request (запрос маски адреса) *
18 mask-reply (ответ маски адреса) *

 

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

 

А теперь ответим на вопросы, которые поставлены в начале статьи.

Вопрос №1: Что значит буква M или U в ответ на ping?

После выполнения стандартной команды ping 192.168.0.123 в ответ мы чаще всего получаем точку (.) или восклицательный знак (!). А бывают и другие символы:

Символ Описание
! Получен ответ (echo-reply)
. Время ожидания истекло (echo-reply).
U Пункт назначения недостижим (destination unreachable error PDU)
Q Сдерживание источника Source quench (destination too busy).
M Невозможность фрагментирования (Could not fragment.)
? Тип пакеты неизвестен (Unknown packet type).
& Время жизни пакета истекло. Packet lifetime exceeded.

 


 

Рассмотрим несколько примеров:

Пример №1:

ping-example1

R1#ping 192.168.0.2

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/4 ms

! – Ура! Ура! Ура! ответ получен!

Пример №2:

ping-example2

R1#ping 192.168.0.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.2, timeout is 2 seconds:
…..
Success rate is 0 percent (0/5)

. – обычно это потеря пакета.

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

R1#ping
Protocol [ip]:
Target IP address: 192.168.0.2
Repeat count [5]:
Datagram size [100]:
Timeout in seconds [2]: 30
Extended commands [n]:
Sweep range of sizes [n]:

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.2, timeout is 30 seconds:
!!!!!

Пример №3:

ping-example3

R1#ping 192.168.0.2

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.2, timeout is 2 seconds:
U.U.U
Success rate is 0 percent (0/5)

Вполне вероятно, что на R2 (192.168.0.2) запрещен пинг, например таким акссес-листом:

R2(config)#access-list 100 deny icmp any any

Или другая ситуация:

R1#ping 10.10.10.10

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.10.10.10, timeout is 2 seconds:
U.U.U
Success rate is 0 percent (0/5)

Хотя 10.10.10.10 (R3) совсем не виноват, а проблема в промежуточном R2:

Маршрутизатор R2 знает маршрут к адресу 10.10.10.10, но на машрутизаторе R2 выключен интерфейс:
Router3#show ip interface brief
FastEthernet0/0 192.168.0.2 YES manual up up
FastEthernet0/1 10.10.10.1 YES manual administratively down down

Ну и чтобы окончательно превратить данную статью в шпаргалку с табличками, приведу значения ответов ping ipv6:

Символ Описание
! Each exclamation point indicates receipt of a reply.
. Each period indicates that the network server timed out while waiting for a reply.
? Unknown error.
@ Unreachable for unknown reason.
A Administratively unreachable. Usually, this output indicates that an access list is blocking traffic.
B Packet too big.
H Host unreachable.
N Network unreachable (beyond scope).
P Port unreachable.
R Parameter problem.
T Time exceeded.
U No route to host.

 

Вопрос №2. Почему первый ответ приходит, как правило, с большей задержкой? Или бывает так, что первый ответ совсем не приходит?
Пример №1:

R1#ping ya.ru
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 213.180.204.3, timeout is 2 seconds:
.!!!!

Тут всё просто: маршрутизатор тратит дополнительное время на запрос к DNS серверу, таймаут icmp при этом истек и в первом ответе на ping мы получили точку.
Пример №2:

C:\Users\user>ping 192.168.133.66
Обмен пакетами с 192.168.133.66 с 32 байтами данных:
Ответ от 192.168.133.66: число байт=32 время=57мс TTL=56
Ответ от 192.168.133.66: число байт=32 время=4мс TTL=56
Ответ от 192.168.133.66: число байт=32 время=3мс TTL=56
Ответ от 192.168.133.66: число байт=32 время=3мс TTL=56

В этом примере при запуске ping хост не находи записи о данном узле в своей arp таблице, поэтому инициирует arp запрос, на что уходит дополнительное время.

Вопрос №3. Как пропинговать определенные узлы в вашей сети? Учитесь писать простейшие скрипты через Tcl:

R1#tclsh
R1(tcl)#foreach address {
+>(tcl)#192.168.0.2
+>(tcl)#172.24.0.3
+>(tcl)#192.168.0.4
+>(tcl)#10.10.10.6
+>(tcl)#10.10.10.7
+>(tcl)#} { ping $address repeat 10 size 1500
+>(tcl)#}
Type escape sequence to abort.
Sending 10, 1500-byte ICMP Echos to 192.168.0.2, timeout is 2 seconds:
!!!!!!!!!!
Success rate is 100 percent (10/10), round-trip min/avg/max = 4/4/4 ms
Type escape sequence to abort.
Sending 10, 1500-byte ICMP Echos to 172.24.0.3, timeout is 2 seconds:
!!!!!!!!!!
Success rate is 100 percent (10/10), round-trip min/avg/max = 4/4/4 ms
Type escape sequence to abort.
Sending 10, 1500-byte ICMP Echos to 192.168.0.4, timeout is 2 seconds:
……….
Success rate is 0 percent (0/10)
Type escape sequence to abort.
Sending 10, 1500-byte ICMP Echos to 10.10.10.6, timeout is 2 seconds:
!!!!!!!!!!
Success rate is 100 percent (10/10), round-trip min/avg/max = 1/1/4 ms
Type escape sequence to abort.
Sending 10, 1500-byte ICMP Echos to 10.10.10.7, timeout is 2 seconds:
!!!!!!!!!!
Success rate is 100 percent (10/10), round-trip min/avg/max = 1/3/4 ms
R1(tcl)#tclquit
R1#

R1#tclsh – входим в режим Tcl shell
Пишем небольшой скрипт, перечисляя все интересующие нас ip адреса.
R1(tcl)#tclquit – выходим из режима. Будьте внимательны: ctrl+Z – не поможет вам выйти:

R1#tclsh
R1 (tcl)#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1 (config)#^Z
R1# <<–––– Вы все еще в режиме tclsh!!

Вопрос №4. Видели ли вы отрицательный пинг? Это не относится к cisco. Вернее может сложиться такая ситуация, при которой вы с рабочего места, к примеру, с системой Debian будете пинговать один из интерфейсов вашего маршрутизатора ciscoи увидите нечто подобное:

64 bytes from 192.168.0.1: icmp_seq=6233 ttl=53 time=545.493 ms
64 bytes from 192.168.0.1: icmp_seq=6234 ttl=53 time=776.093 ms
64 bytes from 192.168.0.1: icmp_seq=6235 ttl=53 time=-705.731 ms
64 bytes from 192.168.0.1: icmp_seq=6236 ttl=53 time=52.549 ms

В свое время я «голову сломал», решая данную проблему. Проблема эта связана с технологией AMD Cool’n’Quiet (AMD dual cores), а также некоторых Intel multi core processors. Причина: неправильная синхронизация ядер в многоядерной архитектуре. Решение данной проблемы можно найти здесь.

 

Ну и напоследок, предлагаю вам немного раскинуть мозгами и решить такую задачку: что будет если, находясь на маршрутизаторе, попробовать пропинговать network (сетевой), а также broadcast (бродкастовый) адреса одной из directly connected сетей.

Итак, домашка:

Выполнить команды и проанализировать результаты:

R1#ping 172.16.1.0
R1#ping 172.16.1.255
R1#ping 255.255.255.255

 


 

P.S. А вдруг кто-то не знает?
Команда ping 8.8.8.8 repeat 1000 будет пинговать DNS сервер корпорации Google 1000 раз. Прекратить это безобразие можно следующей комбинацией клавиш:
Ctrl+Shift+6 key, а после X key

UPD:

P.S.№2 По просьбам трудящихся добавляем описание расширенной настройки ping

R1#ping

Protocol [ip]:

Target IP address: 192.168.1.1

Repeat count [5]: 10

Datagram size [100]:

Timeout in seconds [2]:

Extended commands [n]: y

Source address or interface: 192.168.2.2

Этот адрес является источником (IP-адрес или имя интерфейса)

Typeofservice [0]:

Тип обслуживания (ToS).

Set DF bit in IP header? [no]: yes

Включение бита DF

Validate reply data? [no]:

Необходимо ли выполнять проверку

Datapattern [0xABCD]:

Настройка шаблонов данных в полезной нагрузке пакета

Loose, Strict, Record, Timestamp, Verbose[none]:

Дополнительные параметры IP-заголовка.

Sweep range of sizes [n]: y

Настройка размеров отправляемых эхо-пакетов

Sweep min size [36]:

Sweep max size [18024]:

Sweep interval [1]:

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

Sending 179890, [36..18024]-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:

Packet sent with a source address of 192.168.1.1

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Кстати, именно настройка sweep size помогает определить mtu:

  1. Задаете sweep min size и max size.
  2. Определяете sweep interval=1.
  3. Обязательно устанавливаете бит DF, который запретит фрагментацию пактов.
  4. Начинаете пинговать. С каждым последующим пакетом размер увеличивается на 1 байт. Когда вы увидите последний «успешный пинг», тогда с легкостью определите размер MTU

Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Hide me
Получать регулярно свежие материалы, лабораторные и вебинары
Email Имя
Show me