Netsh를 이용한 네트워크 이벤트 추적

Netsh를 이용한 네트워크 이벤트 추적

윈도우에서는 기본적으로 내장된 Netsh를 이용하여 네트워크 인터페이스, 윈도우 방화벽 등 다양한 윈도우 설정을 돕는 CLI 도구로써, 운영체제 스크립트 작업 경험이 있는 엔지니어에게는 익숙한 도구이다.

이외에도 Netsh로 가능한 작업이 하나 더 있는데 그것은 바로 네트워크 패킷 캡처라 할 수 있다.

Trace 옵션을 통해 사용 가능하며 사용 가능한 옵션은 다음과 같다.

capture=yes/no: 추적 이벤트에 추가로 패킷 캡처를 사용할지 여부 지정

report=yes/no: 추적 파일과 함께 보충 보고서를 생성할지 여부 지정

persistent=yes/no: netsh trace stop을 실행할 때까지 다시 부팅하더라도 추적 세션을 계속 진행할지 여부 지정

maxSize=250MB: 최대 추적 파일 크기 지정, 0=최대값 없음

fileMode=circular: 최대 크기 지정시 최대 크기에 도달하면 순환 모드로 기존 파일을 지운다.

overwrite= yes/no: 기존 추적 출력 파일을 덮어쓸지 여부 지정

correlation= yes/no: 관련 이벤트를 서로 연관시키고 그룹화할지 여부 지정

traceFile=%LOCALAPPDATA%\Temp\NetTraces\NetTrace.etl: 출력 파일 위치 지정

Netsh를 통해 이용 가능한 제공자를 확인하고자 한다면 명령 프롬프트(Cmd.exe)에서 아래와 같은 명령을 사용하면 된다. Netsh의 네트워크 패킷 캡처는 ETW를 이용하므로, Lonman과 유사한 방식으로 사용이 가능하다.

제공자
netsh trace show providers시나리오

netsh trace show scenarios

위 명령을 실행하게 되면 아래와 같이 사용 가능한 제공자를 확인할 수 있다.

[그림] Netsh에서 제공하는 제공자 리스트

위 제공자들을 통해 관련 네트워크 이벤트 추적이 가능하며, 이중 우리가 사용할 기능인 패킷을 캡쳐하는 기능도, 별도의 도구를 설치하지 않고도 패킷 캡쳐 기능을 아래와 같이 활성화하면, 패킷 캡쳐가 가능하다.

// 패킷 캡쳐 시작
netsh trace start capture=yes// 중지

netsh trace stop

이렇게 수집된 데이터는 Xperfview를 통해서는 패킷 정보 확인이 어려우며, 마이크로소프트에서 제공하는 패킷 분석도구인 Netmon(Network Monitor)을 통해서 확인할 수 있다.

Netmon의 File 메뉴를 통해 Netsh를 통해 수집한 파일을 열어보자. 그러면, 아래와 같은 전체 공통 파서(Parsers)가 필요하다며 패킷 정보가 정상적으로 보이지 않는다.

[그림] 파서가 맞지 않아 정보가 제대로 보이지 않는다

이를 Tool 메뉴의 Option을 통해 아래와 같이 Windows로 파서 프로파일을 변경해주면, 정상적으로 패킷을 확인할 수 있다.

↓파서 변경 후 아래와 같이 패킷 정보를 정상적으로 확인할 수 있다.

[그림] 파서 변경 후 정상적인 패킷 분석이 가능하다

이후 기본적으로 제공하는 패킷 필터링은 물론, ETW의 특성을 이용한 네트워크 이벤트 추적 전용 필터 메뉴를 통해 조금 더 특화된 필터링을 구사할 수 있다.

[그림] ETW만의 특수 필터링을 사용할 수 있다

추가로 Netsh에는 TCP 설정 관련 기능의 활성화/비활성화가 가능한데 이 옵션들은 윈도우 네트워크 성능에 영향을 준다(http://support.microsoft.com/kb/912222/ko 참고).

[그림] 네트워크 인터페이스 기능 확인

아래 값들은 응용 서비스(MSSQL, Exchange 등)를 서비스할 때 일반적인 성능 튜닝 값으로서 비활성화시 안정성을 기대할 수 있지만, 사용하는 서비스에 따라 기능이 필요할 수 있으므로, 테스트 이후 적용 여부에 대해 검토하는 것이 좋다(http://support.microsoft.com/kb/948496/ko, http://support.microsoft.com/kb/951037/ko 참고).

netsh interface tcp set global chimney=disabled
네트워크에서 데이터 패킷 처리 일부를 CPU가 아닌 NIC에서 처리해주는 기능으로, 해당 내용을 비활성화하여 CPU가 처리하도록 변경할 수 있다. 트래픽이 많이 발생하는 경우 네트워크를 중단 시킬 수가 있으므로 비활성화하여 CPU가 처리하도록 한다.netsh interface tcp set global rss=disabled

수신측 상태를 미리 계산하여 조정하는 기능으로, 대용량 파일 복사시 처리량 계산을 위해 지체되는 현상이 발생할 수 있다. 이를 비활성화하면, RSS(Receive-Side Scaling) 네트워크 인터페이스의 패킷에 대한 수신 처리를 CPU와 함께 처리 하지 않도록 한다.

netsh interface tcp set global autotuninglevel=disabled

수신 자동 조정으로 비활성화시 복사 등의 등의 명령을 진행할 때 수행 전 파일 정보, 디스크 용량, 예상 시간 산출하기 위한 소요 시간을 단축시킬 수 있다.

netsh interface tcp set global netdma=disabled

TCP/IP에 NetDMA(PCI 버스의 DMA(Direct Memory Access))의 사용 유무를 지정할 수 있다. NetDMA를 비활성화하여, 본 기능 사용으로 인한 문제점 발생을 최소화한다.

[내용] 네트워크 성능 튜닝

Facebook Comments

Leave A Reply

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.