Поделиться через


Форматирование команды Pktmon

Монитор пакетов (Pktmon) — это встроенное средство межкомпонентной сети диагностика для Windows. Его можно использовать для отслеживания пакетов, обнаружения удаления пакетов, фильтрации пакетов и подсчета. Это средство особенно полезно в сценариях виртуализации, таких как сеть контейнеров и SDN, так как она обеспечивает видимость в сетевом стеке. Монитор пакетов доступен в поле с помощью команды pktmon.exe в Windows 10 и Windows Server 2019 (версия 1809 и более поздние версии). С помощью этого раздела вы узнаете, как понять синтаксис pktmon, форматирование команд и выходные данные. Полный список команд см . в синтаксисе pktmon.

Быстрое начало работы

Чтобы приступить к работе в универсальных сценариях, выполните следующие действия.

  1. Определите тип пакетов, необходимых для записи, например определенные IP-адреса, порты или протоколы, связанные с пакетом.

  2. Проверьте синтаксис, чтобы применить фильтры записи и применить фильтры для пакетов, определенных на предыдущем шаге.

    C:\Test> pktmon filter add help
    C:\Test> pktmon filter add <filters>
    
  3. Запустите запись и включите ведение журнала пакетов.

    C:\Test> pktmon start -c
    
  4. Воспроизведение диагностики проблемы. Счетчики запросов, чтобы подтвердить наличие ожидаемого трафика и получить высокоуровневое представление о том, как трафик передается на компьютере.

    C:\Test> pktmon counters
    
  5. Остановите запись и получите журналы в формате txt для анализа.

    C:\Test> pktmon stop
    C:\Test> pktmon etl2txt <etl file>
    

Сведения об анализе выходных данных txt см. в разделе "Анализ выходных данных монитора пакетов".

Фильтры записи

Настоятельно рекомендуется применять фильтры перед началом записи пакетов, так как устранение неполадок подключения к конкретному месту назначения упрощается при фокусе на одном потоке пакетов. Запись всего сетевого трафика может сделать выходные данные слишком шумным для анализа. Чтобы сообщить о пакете, он должен соответствовать всем условиям, указанным по крайней мере в одном фильтре. Одновременно поддерживаются до 32 фильтров.

Например, следующий набор фильтров будет записывать любой трафик ICMP из IP-адреса 10.0.0.10, а также любой трафик через порт 53.

C:\Test> pktmon filter add -i 10.0.0.10 -t icmp
C:\Test> pktmon filter add -p 53

Возможность фильтрации

  • Монитор пакетов поддерживает фильтрацию по MAC-адресам, IP-адресам, портам, EthereumType, протоколу транспорта и идентификатору виртуальной ЛС.

  • Монитор пакетов не будет отличаться от источника или назначения, когда речь идет о MAC-адресе, IP-адресе или фильтрах портов.

  • Чтобы дополнительно отфильтровать TCP-пакеты, можно указать необязательный список флагов TCP для сопоставления. Поддерживаемые флаги: FIN, SYN, RST, PSH, ACK, URG, ECE и CWR.

    • Например, следующий фильтр захватывает все пакеты SYN, отправленные или полученные IP-адресом 10.0.0.10:
C:\Test> pktmon filter add -i 10.0.0.10 -t tcp syn
  • Монитор пакетов может применить фильтр к инкапсулированным внутренним пакетам, помимо внешнего пакета, если флаг [-e] был добавлен в любой фильтр. Поддерживаемые методы инкапсуляции — VXLAN, GRE, NVGRE и IP-адрес. Настраиваемый порт VXLAN является необязательным, а по умолчанию — 4789.

Дополнительные сведения см . в синтаксисе фильтра pktmon.

Сбор пакетов и общих событий

Монитор пакетов может записывать пакеты с помощью параметра [-c] с помощью команды запуска. Это позволит включить запись пакетов и ведение журнала, а также счетчики пакетов. Чтобы включить счетчики пакетов только без ведения журнала пакета, добавьте параметр [-o] в команду start. Дополнительные сведения о счетчиках пакетов см. в разделе счетчиков пакетов ниже.

Вы можете выбрать компоненты для мониторинга с помощью параметра [--comp] . Он может быть только сетевым адаптером или списком идентификаторов компонентов, и по умолчанию используется для всех компонентов. Вы также можете фильтровать по состоянию распространения пакетов (удаленным или потоку пакетов) с помощью параметра [-type] .

Наряду с записью пакетов монитор пакетов позволяет записывать общие события, такие как события ETW и WPP, объявляя параметр [-t] и указывая поставщиков через параметр [-p] . Используйте "pktmon stop" для остановки всей коллекции данных.

Например, следующая команда захватывает пакеты только сетевых адаптеров:

C:\Test> pktmon start -c --comp nics

Следующая команда записывает только удаленные пакеты, передаваемые через компоненты 4 и 5, и регистрируют их:

C:\Test> pktmon start -c --comp 4,5 --type drop

Эта команда будет записывать пакеты и события журнала из поставщика Microsoft-Windows-TCPIP:

C:\Test> pktmon start --capture --trace -p Microsoft-Windows-TCPIP

Возможность ведения журнала пакетов

  • Монитор пакетов поддерживает несколько режимов ведения журнала:

    • Циклический: новые пакеты перезаписывают самые старые при достижении максимального размера файла. Это режим ведения журнала по умолчанию.
    • Многофайловый файл: создается новый файл журнала при достижении максимального размера файла. Файлы журнала последовательно нумеруются: PktMon1.etl, PktMon2.etl и т. д. Примените этот режим ведения журнала, чтобы сохранить все журналы, но будьте осторожны с использованием хранилища. Примечание. Используйте метку времени создания файла каждого файла журнала в качестве указания определенного интервала времени в записи.
    • В режиме реального времени: пакеты отображаются на экране в режиме реального времени. Файл журнала не создается. Чтобы остановить мониторинг, используйте ctrl+C.
    • Память: события записываются в циклический буфер памяти. Размер буфера указывается с помощью параметра [-s] . Содержимое буфера записывается в файл журнала после остановки записи. Используйте этот режим ведения журнала для очень шумных сценариев, чтобы записать огромный объем трафика в очень короткий период времени в буфере памяти. При использовании других режимов ведения журнала некоторый трафик может потеряться.
  • Укажите, сколько пакетов нужно регистрировать с помощью параметра [-p] . Регистрировать весь пакет каждого пакета независимо от его размера, задав этот параметр равным 0. Значение по умолчанию — 128 байт, которое должно содержать заголовки большинства пакетов.

  • Укажите размер файла журнала с помощью параметра [-s] . Это будет максимальный размер файла в циклический режим ведения журнала, прежде чем монитор пакетов начнет перезаписывать старые пакеты с более новыми. Это также будет максимальный размер каждого файла в режиме ведения журнала с несколькими файлами, прежде чем монитор пакетов создает новый файл для записи следующих пакетов. Этот параметр также можно использовать для задания размера буфера для режима ведения журнала памяти.

Дополнительные сведения см. в разделе о начальном синтаксисе pktmon.

Анализ пакетов и форматирование

Монитор пакетов создает файлы журналов в формате ETL. Существует несколько способов форматирования ETL-файла для анализа:

  • Преобразуйте журнал в текстовый формат (параметр по умолчанию) и проанализируйте его с помощью средства текстового редактора, например TextAnalysisTool.NET. Данные пакетов будут отображаться в формате TCPDump. Следуйте приведенному ниже руководству, чтобы узнать, как проанализировать выходные данные в текстовом файле.
  • Преобразование журнала в формат pcapng для анализа с помощью Wireshark*
  • Открытие файла ETL с помощью сетевого монитора*

Примечание.

*Используйте приведенные выше гиперссылки, чтобы узнать, как анализировать и анализировать журналы монитора пакетов в Wireshark и сетевом мониторе.

Дополнительные сведения см . в синтаксисе формата pktmon.

Анализ выходных данных монитора пакетов

Монитор пакетов записывает моментальный снимок пакета каждым компонентом сетевого стека. Соответственно, будет несколько моментальных снимков каждого пакета (представлено на изображении ниже линиями синего поля). Каждый из этих моментальных снимков пакетов представлен несколькими строками (красными и зелеными прямоугольниками). Существует по крайней мере одна строка, содержащая некоторые данные о экземпляре пакета, начиная с метки времени. Сразу после этого есть по крайней мере одна строка (полужирная на рисунке ниже), чтобы отобразить проанализированный необработанный пакет в текстовом формате (без метки времени); Это может быть несколько строк, если пакет инкапсулирован, например пакет в зеленом поле.

Пример выходных данных журнала txt монитора пакетов

Для сопоставления всех моментальных снимков одного и того же пакета отслеживайте значения PktGroupId и PktNumber (выделены желтым цветом); Все моментальные снимки одного пакета должны иметь эти 2 значения в общем. Значение внешнего вида (выделено синим цветом) выступает в качестве счетчика для каждого последующего моментального снимка одного пакета. Например, первый моментальный снимок пакета (где пакет впервые появился в сетевом стеке) имеет значение 1 для внешнего вида, следующий моментальный снимок имеет значение 2 и т. д.

Каждый моментальный снимок пакета имеет идентификатор компонента (подчеркнут в приведенном выше изображении), обозначающий компонент, связанный с моментальным снимком. Чтобы разрешить имя компонента и параметры, найдите этот идентификатор компонента в списке компонентов в нижней части файла журнала. Часть таблицы компонентов показана на рисунке ниже с выделением "Компонент 1" желтым цветом (это компонент, в котором был записан последний моментальный снимок выше). Компоненты с 2 краями будут сообщать 2 моментальных снимка на каждом краю (например, моментальные снимки с внешним видом 3 и внешний вид 4, например на изображении выше).

В нижней части каждого файла журнала список фильтров представлен, как показано на рисунке ниже (выделено синим цветом). Каждый фильтр отображает указанные параметры (Протокол ICMP в приведенном ниже примере) и нули остальных параметров.

Пример выходных компонентов журнала txt монитора пакетов

Для удаленных пакетов слово "drop" отображается перед любой из строк, представляющих моментальный снимок, в котором был удален пакет. Каждый удаленный пакет также предоставляет значение dropReason. Этот параметр dropReason предоставляет краткое описание причины удаления пакетов; Например, несоответствие MTU, отфильтрованная виртуальная локальная сеть и т. д.

Пример удаленного журнала пакетов

Счетчики пакетов

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

  • Счетчики упорядочивается стеками привязки с сетевыми адаптерами в верхней части и протоколами в нижней части.
  • Tx/Rx: счетчики разделены на два столбца для направления отправки (Tx) и получения (Rx).
  • Ребра: распространение пакетов отчетов компонентов при пересечении границы компонента (edge). Каждый компонент может иметь один или несколько ребер. Драйверы минипорта обычно имеют один верхний край, протоколы имеют один нижний край, а драйверы фильтров имеют верхние и нижние края.
  • Drops: счетчики удаления пакетов передаются в той же таблице.

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

Пример счетчика пакетов с идеальным потоком

В следующем примере в столбце "Счетчик" отображаются раскрывающийся список. Получите причину последнего удаления для каждого компонента, запрашивая данные счетчиков в формате JSON с помощью счетчиков pktmon --json или анализа выходного журнала, чтобы получить более подробные сведения.

Пример счетчика пакетов с удаленным пакетом

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

Дополнительные сведения см . в синтаксисе счетчиков pktmon.

Макет сетевого стека

Изучите макет сетевого стека с помощью списка pktmon команды.

Пример макета сетевого стека

В команде показаны сетевые компоненты (драйверы), упорядоченные привязками адаптеров.

Типичная привязка состоит из следующих элементов:

  • Одна сетевая карта (сетевая карта)
  • Несколько (возможно, ноль) драйверов фильтров
  • Один или несколько драйверов протокола (TCP/IP или другие)

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

Примечание.

Идентификаторы не являются постоянными и могут изменяться во время перезагрузки и при перезапуске драйвера монитора пакетов.

Некоторые идентификаторы, отображаемые в выходных данных монитора пакетов, могут не отображаться в списке компонентов. Это связано с агрегированием некоторых компонентов в один идентификатор, чтобы упростить выбор и отображение этих компонентов. Чтобы найти исходные идентификаторы для этих компонентов, используйте список pktmon --json и найдите свойство SecondaryId в выходных данных.

Дополнительные сведения см . в синтаксисе списка pktmon.