다음을 통해 공유


Pktmon 명령 서식 지정

적용 대상: Windows Server 2022, Windows Server 2019, Windows 10, Azure Stack Hub, Azure, Azure Stack HCI, 버전 21H2 및 20H2

Pktmon(패킷 모니터)은 Windows용 기본 구성 요소 간 네트워크 진단 도구입니다. 패킷 캡처, 패킷 삭제 검색, 패킷 필터링 및 계산에 사용할 수 있습니다. 이 도구는 네트워킹 스택 내에서 가시성을 제공하기 때문에 컨테이너 네트워킹 및 SDN과 같은 가상화 시나리오에서 특히 유용합니다. 패킷 모니터는 Windows 10 및 Windows Server 2019(버전 1809 이상)의 pktmon.exe 명령을 통해 바로 사용할 수 있습니다. 이 항목을 사용하여 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개의 필터가 지원됩니다.

예를 들어 다음 필터 집합은 포트 53의 모든 트래픽뿐만 아니라 IP 주소 10.0.0.10에서 또는 IP 주소로의 모든 ICMP 트래픽을 캡처합니다.

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

필터링 기능

  • 패킷 모니터는 MAC 주소, IP 주소, 포트, EtherType, 전송 프로토콜 및 VLAN ID로 필터링을 지원합니다.

  • 패킷 모니터는 MAC 주소, IP 주소 또는 포트 필터와 관련하여 원본 또는 대상을 구분하지 않습니다.

  • TCP 패킷을 추가로 필터링하기 위해 일치시킬 TCP 플래그의 선택적 목록을 제공할 수 있습니다. 지원되는 플래그는 FIN, SYN, RST, PSH, ACK, URG, ECE 및 CWR입니다.

    • 예를 들어 다음 필터는 IP 주소 10.0.0.10에서 보내거나 받은 모든 SYN 패킷을 캡처합니다.
C:\Test> pktmon filter add -i 10.0.0.10 -t tcp syn
  • 패킷 모니터는 [-e] 플래그가 필터에 추가된 경우 외부 패킷 외에 캡슐화된 내부 패킷에 필터를 적용할 수 있습니다. 지원되는 캡슐화 방법은 VXLAN, GRE, NVGRE 및 IP-in-IP입니다. 사용자 지정 VXLAN 포트는 선택 사항이며 기본값은 4789입니다.

자세한 내용은 pktmon 필터 구문을 참조 하세요.

패킷 및 일반 이벤트 캡처

패킷 모니터는 시작 명령을 사용하여 [-c] 매개 변수를 통해 패킷을 캡처할 수 있습니다. 이렇게 하면 패킷 캡처 및 로깅뿐만 아니라 패킷 카운터도 사용할 수 있습니다. 패킷을 로깅하지 않고 패킷 카운터만 사용하도록 설정하려면 [-o] 매개 변수를 시작 명령에 추가합니다. 패킷 카운터에 대한 자세한 내용은 아래의 패킷 카운터 섹션을 참조하세요.

[--comp] 매개 변수를 통해 모니터링할 구성 요소를 선택할 수 있습니다. NIC만 또는 구성 요소 ID 목록일 수 있으며 기본값은 모든 구성 요소입니다. [--type] 매개 변수를 사용하여 패킷 전파 상태(패킷 삭제 또는 흐름)을 필터링할 수도 있습니다.

패킷 캡처와 함께 패킷 모니터를 사용하면 [-t] 매개 변수를 선언하고 [-p] 매개 변수를 통해 공급자를 지정하여 ETW 및 WPP 이벤트와 같은 일반 이벤트를 캡처할 수 있습니다. "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 형식으로 표시됩니다. 아래 가이드에 따라 텍스트 파일의 출력을 분석하는 방법을 알아봅니다.
  • Wireshark를 사용하여 로그를 pcapng 형식으로 변환하여 분석*
  • 네트워크 모니터를 사용하여 ETL 파일 열기*

참고 항목

*위의 하이퍼링크를 사용하여 Wireshark 및 네트워크 모니터에서 패킷 모니터 로그를 구문 분석하고 분석하는 방법을 알아봅니다.

자세한 내용은 pktmon 형식 구문을 참조 하세요.

패킷 모니터 출력 분석

패킷 모니터는 네트워킹 스택의 각 구성 요소에 의해 패킷의 스냅샷 캡처합니다. 따라서 각 패킷의 스냅샷 여러 개 있습니다(아래 이미지에서 파란색 상자 선으로 표시됨). 이러한 각 패킷 스냅샷 몇 줄(빨간색 및 녹색 상자)으로 표시됩니다. 타임스탬프로 시작하는 패킷 인스턴스에 대한 일부 데이터가 포함된 줄이 하나 이상 있습니다. 바로 뒤에는 구문 분석된 원시 패킷을 텍스트 형식(타임스탬프 없이)으로 표시하기 위해 하나 이상의 줄(아래 이미지에 굵게 표시됨)이 있습니다. 패킷이 녹색 상자의 패킷처럼 캡슐화된 경우 여러 줄일 수 있습니다.

Example of Packet Monitor's txt log output

동일한 패킷의 모든 스냅샷 상관 관계를 지정하려면 PktGroupId 및 PktNumber 값(노란색으로 강조 표시됨)을 모니터링합니다. 동일한 패킷의 모든 스냅샷 공통적으로 이러한 2개의 값이 있어야 합니다. 모양 값(파란색으로 강조 표시됨)은 동일한 패킷의 각 후속 스냅샷 대한 카운터 역할을 합니다. 예를 들어 패킷의 첫 번째 스냅샷(패킷이 네트워킹 스택에 처음 표시됨)에는 모양에 대한 값 1이 있고, 다음 스냅샷 값이 2입니다.

각 패킷 스냅샷 스냅샷 연결된 구성 요소를 나타내는 구성 요소 ID(위 이미지에 밑줄이 그어져 있음)가 있습니다. 구성 요소 이름 및 매개 변수를 확인하려면 로그 파일 맨 아래에 있는 구성 요소 목록에서 이 구성 요소 ID를 검색합니다. 구성 요소 테이블의 일부가 아래 이미지에 노란색으로 "구성 요소 1"을 강조 표시합니다(위의 마지막 스냅샷 캡처된 구성 요소였습니다). 가장자리가 2개인 구성 요소는 각 가장자리에서 2개의 스냅샷 보고합니다(예: 위 이미지의 경우 모양 3 및 모양 4가 있는 스냅샷).

각 로그 파일의 맨 아래에 있는 필터 목록은 아래 이미지와 같이 표시됩니다(파란색으로 강조 표시됨). 각 필터는 지정된 매개 변수(아래 예제의 프로토콜 ICMP)와 나머지 매개 변수에 대한 0을 표시합니다.

Example of Packet Monitor's txt log output components

삭제된 패킷의 경우 패킷이 삭제된 스냅샷 나타내는 줄 앞에 "drop"이라는 단어가 나타납니다. 삭제된 각 패킷은 dropReason 값도 제공합니다. 이 dropReason 매개 변수는 패킷 삭제 이유에 대한 간단한 설명을 제공합니다. 예를 들어 MTU 불일치, 필터링된 VLAN 등이 있습니다.

Example of a dropped packet log

패킷 카운터

패킷 모니터 카운터는 로그를 분석할 필요 없이 네트워킹 스택 전체의 네트워킹 트래픽에 대한 높은 수준의 보기를 제공하므로 비용이 많이 들 수 있습니다. 패킷 모니터 캡처를 시작한 후 pktmon 카운터를 사용하여 패킷 카운터를 쿼리하여 트래픽 패턴을 검사합니다 . pktmon 재설정을 사용하여 카운터를 0으로 다시 설정 하거나 pktmon 중지를 사용하여 모두 함께 모니터링을 중지합니다.

  • 카운터는 맨 위에 네트워크 어댑터가 있고 아래쪽에 프로토콜이 있는 바인딩 스택에 의해 정렬됩니다.
  • Tx/Rx: 카운터는 보내기(Tx) 및 수신(Rx) 방향에 대해 두 개의 열로 구분됩니다.
  • 에지: 구성 요소에서 패킷이 구성 요소 경계(에지)를 넘을 때 패킷 전파를 보고합니다. 각 구성 요소에는 하나 이상의 가장자리가 있을 수 있습니다. 미니포트 드라이버에는 일반적으로 단일 상한 가장자리가 있고, 프로토콜에는 단일 하한 가장자리가 있고, 필터 드라이버에는 상하 가장자리가 있습니다.
  • 삭제: 패킷 드롭 카운터가 동일한 테이블에 보고되고 있습니다.

다음 예제에서는 새 캡처가 시작된 다음 , pktmon 카운터 명령을 사용하여 캡처가 중지되기 전에 카운터를 쿼리했습니다. 카운터는 프로토콜 계층에서 실제 네트워크 어댑터까지 시작하여 네트워킹 스택에서 나가는 단일 패킷을 표시하고 응답이 다른 방향으로 돌아오는 것을 보여 줍니다. ping 또는 응답이 누락된 경우 카운터를 통해 이를 쉽게 감지할 수 있습니다.

Example of a packet counter with perfect flow

다음 예제에서는 "카운터" 열 아래에 삭제가 보고됩니다. pktmon 카운터 --json을 사용하여 JSON 형식의 카운터 데이터를 요청하여 각 구성 요소에 대한 마지막 삭제 이유를 검색하거나 출력 로그를 분석하여 자세한 정보를 가져옵니다.

Example of a packet counter with a dropped packet

이러한 예제를 통해 보여 주듯이 카운터는 다이어그램을 통해 많은 정보를 제공할 수 있으며, 이 정보는 간단히 살펴볼 수 있습니다.

자세한 내용은 pktmon 카운터 구문을 참조 하세요.

네트워킹 스택 레이아웃

명령 pktmon 목록을 통해 네트워킹 스택 레이아웃을 검사합니다.

Example of the networking stack layout

이 명령은 어댑터 바인딩으로 정렬된 네트워킹 구성 요소(드라이버)를 보여 줍니다.

일반적인 바인딩은 다음으로 구성됩니다.

  • 단일 NIC(네트워크 인터페이스 카드)
  • 몇 가지(0일 수 있음) 필터 드라이버
  • 하나 이상의 프로토콜 드라이버(TCP/IP 또는 기타)

각 구성 요소는 모니터링을 위해 개별 구성 요소를 대상으로 지정하는 데 사용되는 패킷 모니터 구성 요소 ID로 고유하게 식별됩니다.

참고 항목

ID는 영구적이지 않으며 다시 부팅 시 패킷 모니터의 드라이버가 다시 시작될 때 변경될 수 있습니다.

패킷 모니터의 출력에 표시되는 일부 ID는 구성 요소 목록에 표시되지 않을 수 있습니다. 이는 일부 구성 요소를 더 쉽게 선택하고 표시할 수 있도록 단일 ID로 집계하기 때문입니다. 이러한 구성 요소에 대한 원래 ID를 찾으려면 pktmon 목록 --json을 사용하고 출력에서 SecondaryId 속성을 찾습니다.

자세한 내용은 pktmon 목록 구문을 참조 하세요.