Я думаю, что общие принципы устранения неполадок в сети:
- Узнайте, на каком уровне стека 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
) войдет полный пакет.