Отладка сетевых проблем с помощью tcpdump

06.05.2024
Рис. 1: Показаны доступные интерфейсы с использованием tcpdump

Системные администраторы регулярно сталкиваются с сетевыми проблемами при развертывании и обслуживании программных приложений на серверах Linux. Решение этих проблем может быть сложным и отнимать много времени из-за нескольких факторов, включая сложность приложений, параллельные процессы и службы, запущенные на сервере, или даже наличие нескольких процессов, которые выполняются одновременно на одном процессоре.

Мы обсудим один из самых мощных инструментов для решения сетевых проблем: tcpdump. Но прежде чем мы приступим к отладке, мы должны сначала понять основы сети. Начнем с модели TCP/IP.

 

Модель TCP/IP

Модель TCP/IP (сокращение от Transmission Control Protocol/Internet Protocol) объединяет четыре различных протокола, развернутых в сетях. Эти протоколы представляют собой четыре уровня в модели TCP/IP:

  • Прикладной уровень: Самый верхний уровень модели TCP/IP; он позволяет пользователям взаимодействовать со службами в сети.
  • Транспортный уровень: Третий уровень в модели TCP/IP; как следует из названия, этот уровень отвечает за передачу пакетов данных между сетями источника и назначения.
  • Уровень Интернета: Второй уровень в модели; он отвечает за обработку любых ошибок, которые могут возникнуть во время передачи данных от источника к получателю в сети.
  • Уровень сетевого интерфейса: Самый низкий уровень в режиме TCP/IP; он обрабатывает связь между компьютерами и сетевой системой через протоколы, такие как Ethernet, и аппаратные устройства, такие как маршрутизаторы.

 

Шаги по отладке

Когда дело доходит до сложных сетевых проблем, рассмотрите возможность разбиения шагов, чтобы лучше понять процесс отладки.

Изолировать и сузить проблемы

Начните с понимания проблемы. Отладка усложняется из-за внутренней сложности сетей и приложений, использующих сетевые системы. Вам нужно точно определить уровень, на котором возникает проблема, и вам нужно понять ее механизм — когда и в каком контексте это происходит.

Например, один из ваших тестировщиков заметил, что загрузка файла из приложения теперь занимает примерно на 20% больше времени: время загрузки увеличилось с обычных 30 секунд до 36 секунд. Это сильный индикатор того, что где-то в сети действительно есть проблема.

В этом сценарии, чтобы изолировать и сузить проблему, вам следует сначала дважды проверить скорость сетевого интернет-соединения. Если скорость сети в порядке, вам следует исключить другие проблемы, такие как перегрузка сети, программные ошибки или проблемы безопасности.

Сформулируйте гипотезу

Далее вам следует разработать рабочую теорию о том, что стоит за сетевой проблемой. Продолжая приведенный выше пример, есть много потенциальных причин увеличения времени загрузки.

В гипотетическом сценарии команда системного администрирования настроила виртуальную частную сеть (VPN) для тестовой среды веб-приложения. При загрузке файла напрямую с компьютера, использующего применяемую сеть VPN, вы не сталкиваетесь с какими-либо проблемами с производительностью. Однако они возникают при запуске автоматического тестирования загрузки файлов в кластере AWS. Это указывает на проблему с конфигурацией кластера AWS здесь.

Копни глубже и найди доказательства

После проверки пары и использования tcpdump для отладки сети вы обнаруживаете потерю пакета данных при загрузке файла из кластера AWS. Причиной является расстояние: текущий кластер AWS находится в регионе us-east-2, тогда как локальный VPN настроен в Сингапуре.

Кроме того, есть ненужные запросы туда и обратно. Каждый запрос на загрузку отправляется из кластера AWS через общедоступный Интернет, за которым следует локальный VPN; затем он обрабатывается Kong (API gateway) перед окончательным перенаправлением в кластер AWS, где настроена служба загрузки.

Решить проблему

Измените домен из вашего теста автоматизации на внутренний домен настройки в том же кластере AWS — это позволит запросу на загрузку напрямую поступать к запущенной службе в кластере (вместо прохождения через VPN и последующего возврата обратно в кластер). Время загрузки из кластера AWS теперь должно занимать всего 20 секунд.

 

Зачем использовать tcpdump?

Отправленные и полученные сетевые пакеты предоставляют много информации о сетевой системе, которая может помочь нам в устранении сетевых проблем. Команда tcpdump это мощный инструмент, который собирает и анализирует эти сетевые пакеты.

Если вы застряли во время отладки, несмотря на то, что перепробовали множество различных инструментов, tcpdump может выполнить эту работу. Он поставляется с различными полезными возможностями, от отображения доступных сетевых интерфейсов до анализа захваченных пакетов, относящихся к определенному файлу.

Например, мы можем получить список сетевых интерфейсов, доступных в системе, выполнив:

 tcpdump -D

 

Рис. 1: Показаны доступные интерфейсы с использованием tcpdump

 

Затем мы можем перехватывать пакеты данных, проходящие через сетевой интерфейс eth0, и сохранять их в файл.

sudo tcpdump -w test.pcap -i eth0

 

Рис. 2. Захват сетевых пакетов, проходящих через eth0 интерфейс

Далее, чтобы подробно просмотреть данные, полученные из сохраненного файла test.pcap, мы выполним следующее:

tcpdump -r test.pcap

 

Рис. 3. Считывание данных сетевых пакетов из test.pcap файла с помощью tcpdump

 

TCP-флаги

Флаги TCP показывают текущее состояние TCP-соединения и помещаются в заголовок TCP. Например, чтобы проверить, завершил ли запрос отправку данных на сервер, мы можем выполнить фильтрацию по флагу FIN в заголовке TCP. Обычно используются следующие флаги:

  • SYN: Он инициирует запрос на сетевое подключение.
  • ACK: Используется для подтверждения того, что определенное действие в сети одобрено.
  • RST: Это показывает, что соединение было прервано из-за того, что сервисная сеть отключена или больше не принимает никаких запросов.
  • FIN: Это указывает на завершение запроса.

 

Преимущества использования расширенных фильтров tcpdump

Флаги TCP полезны для устранения неполадок в сети. Однако реализация инструмента для сбора флагов TCP сложна и требует много работы. К счастью, tcpdump поставляется с мощной функцией фильтрации, которая позволяет легко находить пакеты с определенным TCP-флагом или комбинацией TCP-флагов. Более того, мы даже можем фильтровать пакеты по IP-адресу, сетевому протоколу или источнику.

Например, мы можем фильтровать TCP-пакеты по IP хоста:

tcpdump -r test.pcap host 169.254.169.123

 

Рис. 4: tcpdump фильтрация сетевых пакетов по IP-адресу их хоста

 

В качестве альтернативы мы можем фильтровать только готовые пакеты:

tcpdump -r test.pcap “tcp[tcpflags] & (tcp-syn)!=0”

 

Рис. 5: tcpdump Опция фильтрации для TCP-флага, отображающая только готовые пакеты

 

Заключение

Устранение неполадок в сети может быть сложной и отнимающей много времени задачей. В этой статье мы обсудили распространенные проблемы, с которыми системные администраторы сталкиваются в сетевых системах, и продемонстрировали, как использование tcpdump передовых методов, таких как фильтрация TCP-флагов, может ускорить процесс отладки.

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Редактор: AndreyEx

Рейтинг: 0 (0 голосов)
Если статья понравилась, то поделитесь ей в социальных сетях:

Оставить комментарий

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

Это может быть вам интересно


Загрузка...

Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала