Я думаю, загальними принципами усунення несправностей у мережі є:
- Дізнайтеся, на якому рівні стеку 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, багатоадресна передача, 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
), увійде повний пакет.