Часто на работе мне нужно пинговать сервер, чтобы проверить, жив ли он. Иногда я получаю сообщение о том, что хост(имя?) не найден или другие ошибки, которые приводят к отсутствию ответа.
Какая методика существует для диагностики причины этих проблем? Должен ли я сначала проверить целевую машину? Или мою машину и ее брандмауэр? Имеет ли значение, находятся ли машины, отправляющие пинги, в разных доменах? (Я предполагаю, что да, только если есть настройки брандмауэра, которых нужно придерживаться).
Спасибо
решение1
Неудачный пинг означает, что:
- Запрос ping не доходит до целевого хоста
- Ответ на ping не доходит до хоста, отправившего запрос.
Существует множество причин, по которым может произойти любая из этих вещей, большинство из них можно разделить на физические и программные проблемы.
При отладке я начинаю с физического компонента пути передачи данных, то есть с сетевых карт, сетевых кабелей и промежуточных устройств.
Физические проверки
- Сетевой кабель соединяет два хоста. Если два хоста не соединены напрямую кабелем, убедитесь, что отправляющая и принимающая сетевые карты подключены к правильному порту маршрутизатора и/или коммутатора, поскольку их можно настроить для маршрутизации трафика по-разному
Проверка программного обеспечения
- Убедитесь, что сетевые карты на каждой машине распознаются операционной системой. [1]
- Убедитесь, что обе машины имеют действительный IP-адрес, маску подсети, шлюз и конфигурацию сервера имен. [2]
- Убедитесь, что отправляющий и принимающий хосты имеют действительные MAC-адреса (да, у меня уже была такая проблема) [3]
- Убедитесь, что отправляющий и принимающий хосты имеют правильную информацию кэша ARP для своих шлюзов [4]
- Существует вероятность, что отправляющий хост будет иметь запись кэша ARP для принимающего хоста или наоборот. Если такие записи существуют, убедитесь, что они верны, проверив, что IP-адрес сопоставляется с правильным MAC-адресом. Если есть несоответствия, удалите эти записи из кэша ARP
- Убедитесь, что пакеты ping (эхо-запросы ICMP и эхо-ответы ICMP) не блокируются фильтрами на локальных программных брандмауэрах или фильтрами, работающими на устройствах между отправляющим и получающим хостами.
- Если вы используете имя хоста для идентификации принимающего хоста, попробуйте использовать IP-адрес напрямую, так как это устранит проблемы, возникающие в процессе разрешения имен.
При устранении неполадок также следует учитывать сообщение об ошибке, возвращаемое командой ping. Сообщения об ошибках, которые я обычно вижу, включают в себя:
Request Timed Out
Это очень общее сообщение, которое указывает на то, что ответ не был получен в течение периода ожидания. Это может произойти, если хост не смог ответить из-за рабочей нагрузки и ограничений по времени или из-за проблем с подключением или маршрутизацией, описанных выше.
Reply from {host}: Destination network unreachable
Часто {host}
это будет NIC на локальной машине или шлюз машины. Сообщение означает, что не удалось найти маршрут между {host}
хостом и принимающим хостом (я могу ошибаться)
Это ни в коем случае не исчерпывающий список причин, по которым ping может не работать, однако он охватывает многие общие проблемы. Надеюсь, что это поможет кому-то в следующий раз, когда его сеть сломается
Приведенные ниже сноски относятся к системам на базе Windows NT, поскольку именно в этой области у меня есть опыт.
[1] Вы можете проверить, что операционная система имеет действительный драйвер для вашей сетевой карты, проверив наличие любых элементов сетевого контроллера в узле Неизвестные устройства в Диспетчере устройств. Если такой есть, вам нужно найти совместимый драйвер для вашей карты.
Проверьте наличие вашей карты в узле «Сетевой адаптер», если она есть в списке, дважды щелкните по ней и проверьте наличие известных ошибок, перечисленных в разделе «Состояние устройства».
[2] Диалоговое окно конфигурации TCP/IP можно открыть в Vista / Win 7, открыв Network and Sharing Centere -> Изменить параметры адаптера (левая панель) -> щелкните правой кнопкой мыши по интересующему вас адаптеру и выберите Свойства (требуется повышение прав), а затем дважды щелкните по протоколу TCP/IP версии 4 или 6 в зависимости от того, какой протокол вы используете (скорее всего, v4).
[3] запуск ipconfig /all
команды отобразит MAC-адрес, а также IP-адрес, маску подсети, шлюз и серверы имен. MAC-адрес обозначен как Physical Address в выводе
[4] ARP -a
Команда отображает текущую таблицу ARP для хоста.
решение2
Просто чтобы добавить к предыдущемуОтвечать:
Имя хоста не найдено: это указывает на проблему DNS, а не маршрутизации, поэтому вам нужно будет проверить свой DNS-сервер и его связь с устройством, с которого вы отправляете пинг.
Чтобы отследить, насколько далеко заходит ваш ping, попробуйте использовать tracert вместо ping, чтобы увидеть, к какому устройству осуществляется доступ, прежде чем маршрут прервется (это помогает только в том случае, если другое устройство не находится в той же подсети, что и начальное устройство).
решение3
Если вы иногда получаете пинги, а иногда нет, и не можете это подтвердить/перехватить... вот несколько инструментов, которые помогут выявить проблемы с сетью:
Окна: http://www.pingplotter.com/freeware.html путь
Линукс: http://en.wikipedia.org/wiki/MTR_%28software%29
Эти инструменты могут помочь вам определить, что именно на пятом этапе все идет не так, и затем вы сможете устранить неполадки именно на этом этапе.
Иногда в сетях вам нужно найти устройство, которое вызывает медленные ответы, и вы не можете найти его в течение одного пинга. Эти инструменты помогают определить его в серии пингов, сохраняя "счет" и показывая вам график.
Обратите внимание, что пингам иногда также присваивается более низкий приоритет, поэтому медленный пинг не всегда означает плохую сеть.
Помимо отличного и подробного ответа выше, проверьте, что сетевая карта использует правильную скорость соединения:
В Windows вы можете покопаться в графическом интерфейсе в свойствах сети, а в Linux вы используете "ethtool". Если хосты по обе стороны маршрутизатора/коммутатора настроены на 10 Мбит/с и полудуплекс, но маршрутизатор/коммутатор настроен на 100 Мбит/с полный дуплекс, он будет выдавать странные ошибки (например). Это более распространено в новой настройке, чем в устоявшейся системе.
Некоторые из этих ошибок можно увидеть с помощью netstat:
нетстат -S
или постоянно следя за ним, если вы супер-ботаник:
для /L %i в (0,0,0) сделать @cls && netstat -S|find /I "Ошибка" && @ping -n 1 -w 2000 224.0.0.0 >NUL && @cls
Если у вас есть ошибки, это не проблема, однако если с каждой секундой ошибок становится все больше, это, скорее всего, проблема с оборудованием/кабелями/скоростью/дуплексом.
решение4
Если пинг не работает, вот что я делаю:
- Проверьте, что имя преобразуется в правильный IP-адрес — часто проблема возникает не с серверами, а с ноутбуками коллег и т. д.
- Если я уверен, что IP правильный, я использую tracert, чтобы проверить, как далеко я продвинулся.
- Если я не уверен, что сервер, который я пытаюсь пинговать, реагирует на сообщения ICMP, я использую telnet, чтобы открыть порт на сервере и посмотреть, что он мне скажет.
- Я проверяю, может ли мой коллега зайти на сервер со своего ПК.