Я думаю, что общие принципы устранения неполадок в сети:
- Узнайте, на каком уровне стека TCP / IP (или другого стека) возникает проблема.
- Понимать, каково правильное поведение системы и каково отклонение от нормального состояния системы
- Попробуйте выразить проблему в одном предложении или в нескольких словах
- Используя полученную информацию из системы с ошибками, свой собственный опыт и опыт других людей (Google, различные форумы и т. Д.), Попытайтесь решить проблему до успеха (или неудачи)
- Если вы терпите неудачу, спросите других людей о помощи или совете
Что касается меня, я обычно получаю всю необходимую информацию, используя все необходимые инструменты, и стараюсь сопоставить эту информацию с моим опытом. Решение, какой уровень сетевого стека содержит ошибку, помогает обрезать маловероятные варианты. Использование опыта других людей помогает быстро решать проблемы, но часто это приводит к ситуации, когда я могу решить какую-то проблему без ее понимания, и если эта проблема возникнет снова, я не смогу решить ее снова без Интернета.
И вообще, я не знаю, как решить проблемы с сетью. Кажется, что в моем мозгу есть какая-то магическая функция SolveNetworkProblem(information_about_system_state, my_experience, people_experience), которая иногда может вернуть точно правильный ответ, а также может иногда давать сбой (как здесь TCP умирает на ноутбуке с Linux ).
Я обычно использую утилиты из этого набора для отладки сети:
ifconfig(или ip link, ip addr) - для получения информации о сетевых интерфейсах
ping- для проверки, доступен ли целевой компьютер с моей машины. pingтакже может использоваться для базовой диагностики DNS - мы можем пинговать хост по IP-адресу или по имени хоста, а затем решать, работает ли DNS вообще. А потом tracerouteили tracepathили mtrпосмотреть, что там происходит на пути туда.
dig - диагностировать все DNS
dmesg | lessили dmesg | tailили dmesg | grep -i error- для понимания того, что ядро Linux думает о каких-то проблемах.
netstat -antp+ | grep smth- мое самое популярное использование команды netstat, которая показывает информацию о TCP-соединениях. Часто я выполняю некоторую фильтрацию, используя grep. Смотрите также новую ssкоманду (из iproute2нового стандартного набора сетевых инструментов Linux) и lsofкак в lsof -ai tcp -c some-cmd.
telnet <host> <port> - очень полезен для связи с различными TCP-сервисами (например, по протоколам SMTP, HTTP), также мы можем проверить общую возможность подключения к какому-либо TCP-порту.
iptables-save(на Linux) - сбросить полные таблицы iptables
ethtool - получить все параметры сетевой карты (состояние канала, скорость, параметры разгрузки ...)
socat- инструмент швейцарской армии для тестирования всех сетевых протоколов (UDP, multicast, SCTP ...). Особенно полезно (больше, чем telnet) с несколькими -dопциями.
iperf - проверить доступность полосы пропускания
openssl( s_client, ocsp, x509...) для отладки всех вопросов SSL / TLS / PKI.
wireshark - мощный инструмент для захвата и анализа сетевого трафика, который позволяет анализировать и выявлять многие сетевые ошибки.
iftop - показать крупных пользователей в сети / роутере.
iptstate (в Linux) - текущий вид отслеживания соединения брандмауэра.
arp(или новый (Linux) ip neigh) - показать статус ARP-таблицы.
routeили новее (в Linux) ip route- показывать статус таблицы маршрутизации.
strace(или truss, dtraceили в tuscзависимости от системы) - это полезный инструмент, который показывает, какие системные вызовы выполняет проблемный процесс, а также коды ошибок (errno) при сбое системных вызовов. Этой информации часто достаточно для понимания поведения системы и решения проблемы. В качестве альтернативы, использование точек останова в некоторых сетевых функциях gdbпозволяет узнать, когда они сделаны и с какими аргументами.
- исследовать проблемы брандмауэра в Linux:
iptables -nvLпоказывает, сколько пакетов соответствует каждому правилу ( iptables -Zчтобы обнулить счетчики). LOGМишень вставлена в цепочках брандмауэра полезно узнать , какие пакеты достигают их и как они уже были преобразованы , когда они получают там. Для продолжения NFLOG(связанного с ulogd) войдет полный пакет.