컴퓨터에서 인터넷을 사용하면 웹 브라우저, 메신저, 게임, 클라우드 프로그램 등 다양한 애플리케이션이 네트워크를 통해 외부 서버와 통신합니다. 평소에는 이러한 연결을 직접 확인할 일이 많지 않지만 네트워크 문제를 점검하거나 특정 프로그램이 어떤 포트를 사용하는지 확인해야 할 때가 있습니다.
Windows에서는 별도의 네트워크 분석 프로그램을 설치하지 않아도 CMD에서 netstat 명령어를 사용해 현재 컴퓨터의 네트워크 연결 상태를 확인할 수 있습니다.
netstat를 실행하면 현재 연결된 로컬 주소, 외부 IP 주소, 사용 중인 포트, TCP 연결 상태 등을 살펴볼 수 있으며 옵션을 추가하면 수신 대기 중인 포트나 프로세스 ID(PID)와 같은 정보까지 확인할 수 있습니다.
이번 글에서는 Windows CMD에서 netstat 명령어를 사용하는 방법부터 결과를 읽는 방법, LISTENING과 ESTABLISHED의 차이, IP 주소와 포트 번호의 의미, 자주 사용하는 netstat 옵션까지 초보자도 이해할 수 있도록 자세히 알아보겠습니다.
netstat 명령어란?
netstat는 Network Statistics의 의미를 가진 Windows 네트워크 명령어로 이해하면 쉽습니다.
현재 컴퓨터에서 이루어지고 있는 네트워크 연결과 관련된 다양한 정보를 확인할 때 사용합니다.
가장 기본적인 명령어는 다음과 같습니다.
netstat
CMD에서 입력하고 Enter 키를 누르면 현재 활성화된 TCP 연결 등의 정보가 표시됩니다.
환경에 따라 결과에는 다음과 같은 항목이 나타날 수 있습니다.
- Proto
- Local Address
- Foreign Address
- State
처음 netstat를 실행하면 숫자와 주소가 많이 나타나 복잡하게 느껴질 수 있습니다.
하지만 각 열이 무엇을 의미하는지만 이해하면 현재 컴퓨터가 어떤 주소와 통신하고 있으며 해당 연결이 어떤 상태인지 파악하는 데 도움이 됩니다.
Windows CMD에서 netstat 실행하는 방법
먼저 Windows에서 명령 프롬프트를 실행합니다.
작업 표시줄 검색창에 다음과 같이 입력합니다.
cmd
검색 결과에서 명령 프롬프트를 선택합니다.
또는 Windows 키 + R을 눌러 실행 창을 연 다음 cmd를 입력하고 Enter 키를 눌러도 됩니다.
명령 프롬프트가 열리면 다음 명령어를 입력합니다.
netstat
Enter 키를 누르면 현재 네트워크 연결 정보가 표시됩니다.
기본적인 netstat 조회는 일반적으로 관리자 권한 없이도 사용할 수 있습니다. 다만 일부 옵션이나 프로세스 관련 정보를 확인하는 과정에서는 권한에 따라 표시되는 정보가 달라질 수 있습니다.
netstat 결과는 어떻게 읽을까?
Windows에서 netstat를 실행하면 다음과 비슷한 형태의 결과를 볼 수 있습니다.
Proto Local Address Foreign Address State
TCP 192.168.0.10:51000 203.0.113.10:443 ESTABLISHED
위 주소는 설명을 위한 예시입니다.
처음에는 복잡해 보이지만 네 가지 항목만 구분하면 기본적인 결과를 이해할 수 있습니다.
Proto
어떤 네트워크 프로토콜이 사용되고 있는지를 나타냅니다.
대표적으로 TCP 등이 표시됩니다.
Local Address
현재 내 컴퓨터에서 사용하고 있는 IP 주소와 포트를 나타냅니다.
Foreign Address
현재 내 컴퓨터와 통신하는 상대편의 주소와 포트를 나타냅니다.
State
현재 TCP 연결이 어떤 상태인지를 표시합니다.
대표적으로 ESTABLISHED, LISTENING, TIME_WAIT 등의 상태를 볼 수 있습니다.
Local Address란?
Local Address는 현재 컴퓨터 측에서 사용하는 네트워크 주소와 포트를 의미합니다.
예를 들어 다음과 같은 값이 있다고 가정해보겠습니다.
192.168.0.10:51000
여기에서
192.168.0.10
부분은 로컬 IP 주소이며,
51000
부분은 해당 연결에서 사용되는 포트 번호입니다.
즉, IP 주소:포트 번호 형태로 표시되는 것입니다.
네트워크 통신에서는 IP 주소만으로 모든 통신을 구분하는 것이 아니라 포트 번호를 함께 사용해 어떤 연결이나 서비스와 관련되어 있는지 구분합니다.
Foreign Address란?
Foreign Address는 내 컴퓨터가 통신하고 있는 상대편의 네트워크 주소를 나타냅니다.
예를 들어 다음과 같은 형태입니다.
203.0.113.10:443
여기에서 203.0.113.10은 설명을 위한 외부 IP 주소 예시이며 443은 상대편에서 사용되는 포트를 나타냅니다.
웹 브라우저, 메신저, 게임, 클라우드 프로그램 등 인터넷을 사용하는 여러 프로그램을 실행하면 다양한 외부 주소와의 연결이 netstat 결과에 나타날 수 있습니다.
따라서 netstat를 실행했을 때 외부 주소가 여러 개 표시되는 것 자체는 이상한 현상이 아닙니다.
포트 번호란 무엇일까?
netstat 결과를 제대로 이해하려면 포트(Port) 개념을 알아두는 것이 좋습니다.
IP 주소가 네트워크에서 장치를 구분하는 주소라면 포트는 해당 장치에서 이루어지는 여러 통신을 구분하는 번호라고 이해할 수 있습니다.
예를 들어 웹 서비스에서는 흔히 다음과 같은 포트 번호를 접할 수 있습니다.
80 → HTTP에서 일반적으로 사용
443 → HTTPS에서 일반적으로 사용
하지만 netstat를 보면 50000번대처럼 처음 보는 높은 숫자의 포트도 많이 나타납니다.
이는 운영체제가 클라이언트 측 네트워크 연결을 위해 임시 포트를 사용하는 경우가 있기 때문입니다.
따라서 처음 보는 포트 번호가 표시됐다는 이유만으로 문제가 있다고 판단해서는 안 됩니다.
ESTABLISHED는 무엇을 의미할까?
netstat에서 가장 자주 볼 수 있는 상태 중 하나가 **ESTABLISHED**입니다.
이는 TCP 연결이 설정되어 양쪽이 통신할 수 있는 상태임을 나타냅니다.
예를 들어 웹 브라우저로 사이트에 접속하거나 네트워크 프로그램이 외부 서버와 연결된 상태라면 관련 연결이 ESTABLISHED로 나타날 수 있습니다.
따라서 ESTABLISHED 연결이 여러 개 있다고 해서 비정상적인 것은 아닙니다.
요즘 사용하는 프로그램은 하나의 프로그램에서도 여러 서버와 동시에 통신할 수 있기 때문에 웹 브라우저만 실행해도 여러 네트워크 연결이 생성될 수 있습니다.
LISTENING은 무엇을 의미할까?
LISTENING 역시 netstat에서 중요한 상태입니다.
LISTENING은 특정 로컬 포트에서 들어오는 TCP 연결 요청을 받을 준비가 된 상태를 의미합니다.
예를 들어 컴퓨터에서 특정 네트워크 서비스를 실행하고 있다면 해당 서비스가 사용하는 포트가 LISTENING 상태로 나타날 수 있습니다.
하지만 LISTENING 상태의 포트가 있다고 해서 그 포트가 무조건 인터넷 전체에 공개되어 있다는 의미는 아닙니다.
실제 외부 접근 가능 여부는 Windows 방화벽, 공유기 설정, 네트워크 인터페이스 바인딩, NAT 및 기타 네트워크 구성에 따라 달라질 수 있습니다.
따라서 LISTENING은 우선 “이 컴퓨터에서 해당 포트가 연결 요청을 기다리고 있다”는 의미로 이해하는 것이 좋습니다.
TIME_WAIT는 오류일까?
netstat를 실행하면 TIME_WAIT라는 상태도 자주 볼 수 있습니다.
처음 보면 연결이 비정상적으로 멈춰 있는 것처럼 느껴질 수 있지만 TIME_WAIT 자체는 정상적인 TCP 동작 과정에서 나타날 수 있습니다.
TCP 연결이 종료된 이후에도 일정 시간 동안 관련 상태를 유지하는 과정이 존재하기 때문입니다.
특히 웹 브라우징처럼 짧은 네트워크 연결이 많이 생성되고 종료되는 환경에서는 TIME_WAIT 항목이 여러 개 나타날 수 있습니다.
따라서 TIME_WAIT가 보인다는 이유만으로 네트워크 오류라고 판단하면 안 됩니다.
CLOSE_WAIT는 무엇일까?
CLOSE_WAIT도 netstat에서 볼 수 있는 TCP 상태 중 하나입니다.
이는 상대편에서 연결 종료를 시작했고 로컬 애플리케이션 측에서 연결을 완전히 정리하는 과정과 관련된 상태입니다.
일시적으로 몇 개가 나타나는 것만으로 문제라고 단정할 수는 없습니다.
다만 특정 프로그램과 관련된 CLOSE_WAIT 연결이 비정상적으로 많이 쌓이고 계속 유지된다면 해당 애플리케이션의 연결 처리 상태 등을 추가로 살펴볼 필요가 있을 수 있습니다.
초보자라면 개별 상태 하나만 보고 결론을 내리기보다 어떤 프로그램이 해당 연결을 사용하고 있는지와 상태가 계속 유지되는지를 함께 확인하는 것이 좋습니다.
netstat -a로 모든 연결과 수신 포트 확인하기
netstat에서 자주 사용하는 옵션 중 하나가 -a입니다.
netstat -a
이 옵션을 사용하면 활성 TCP 연결뿐 아니라 수신 대기 중인 TCP 및 UDP 포트와 관련된 정보를 폭넓게 확인할 수 있습니다.
기본 netstat보다 더 많은 항목이 나타날 수 있기 때문에 현재 컴퓨터에서 어떤 네트워크 연결과 대기 상태가 존재하는지 확인하고 싶을 때 유용합니다.
결과가 많다면 필요한 포트나 상태를 중심으로 살펴보는 것이 좋습니다.
netstat -n으로 주소를 숫자로 확인하기
netstat는 상황에 따라 주소나 포트 정보를 이름 형태로 변환해서 보여줄 수 있습니다.
빠르게 숫자 형태의 주소와 포트를 확인하려면 -n 옵션을 사용할 수 있습니다.
netstat -n
이 옵션은 주소와 포트 번호를 숫자 형태로 표시합니다.
네트워크 연결을 분석할 때는 숫자 형태가 오히려 명확한 경우가 많습니다.
특히 IP 주소와 정확한 포트 번호를 그대로 확인하고 싶다면 -n 옵션이 유용합니다.
netstat -o로 PID 확인하기
특정 네트워크 연결이 어떤 프로세스와 관련되어 있는지 확인하려면 PID(Process ID)를 알아야 할 때가 있습니다.
이때 사용할 수 있는 옵션이 -o입니다.
netstat -o
결과에 PID 항목이 추가되어 각 TCP 연결과 관련된 프로세스 ID를 확인할 수 있습니다.
PID는 Windows에서 실행 중인 각각의 프로세스를 식별하기 위한 번호입니다.
PID를 확인한 뒤 tasklist 같은 명령어나 Windows 작업 관리자를 이용하면 어떤 프로그램과 관련된 프로세스인지 추가로 확인할 수 있습니다.
netstat -ano 명령어가 많이 사용되는 이유
실제로 Windows 네트워크 문제를 확인할 때 자주 볼 수 있는 조합이 다음 명령어입니다.
netstat -ano
-a, -n, -o 옵션을 함께 사용하는 방식입니다.
이를 통해 전체적인 연결 및 수신 상태를 숫자 주소로 확인하면서 PID까지 함께 표시할 수 있습니다.
예를 들어 특정 포트가 어떤 프로세스에서 사용되고 있는지 찾아야 할 때 매우 유용합니다.
다만 netstat -ano는 활용 범위가 넓기 때문에 별도의 심화 글에서 특정 포트 검색 → PID 확인 → 실제 프로그램 찾기 순서로 자세히 알아보는 것이 좋습니다.
특정 포트만 확인하는 방법
netstat 결과가 너무 많다면 Windows의 findstr 명령어와 조합해 특정 포트와 관련된 결과를 찾아볼 수 있습니다.
예를 들어 8080 포트와 관련된 줄을 확인하고 싶다면 다음과 같은 형식을 사용할 수 있습니다.
netstat -ano | findstr :8080
여기에서 | 기호는 앞 명령어의 출력 결과를 다음 명령어로 전달하는 파이프 기능에 사용됩니다.
즉,
netstat -ano
결과 중에서
:8080
문자열이 포함된 줄을 findstr로 찾아보는 것입니다.
개발 프로그램이나 로컬 서버를 실행할 때 “이미 해당 포트를 사용 중이다”라는 문제가 발생하면 이런 방법으로 해당 포트와 관련된 PID를 확인하는 데 도움을 받을 수 있습니다.
특정 PID의 프로그램 확인하기
netstat를 통해 PID를 확인했다면 어떤 프로세스인지 알아볼 수 있습니다.
예를 들어 PID가 1234라고 가정하면 다음과 같은 형식을 사용할 수 있습니다.
tasklist /FI "PID eq 1234"
실제 사용할 때는 1234 대신 자신이 확인한 PID를 입력해야 합니다.
이를 이용하면 포트 → PID → 프로세스 순서로 추적할 수 있습니다.
다만 시스템 프로세스나 서비스와 관련된 항목을 발견했다고 해서 의미를 정확히 모르는 상태에서 강제로 종료하는 것은 권장하지 않습니다.
프로세스를 종료하기 전에 해당 프로그램의 역할과 종료했을 때 발생할 영향을 먼저 확인해야 합니다.
netstat -e로 Ethernet 통계 확인하기
-e 옵션을 이용하면 Ethernet과 관련된 통계 정보를 확인할 수 있습니다.
netstat -e
환경에 따라 송수신된 바이트나 패킷 등의 통계를 확인할 수 있습니다.
단순히 현재 연결된 IP와 포트를 찾는 목적이라면 자주 사용할 필요는 없지만 네트워크 인터페이스에서 처리된 데이터 통계를 확인해야 할 때 참고할 수 있습니다.
netstat -s로 프로토콜 통계 확인하기
프로토콜별 통계를 확인하려면 -s 옵션을 사용할 수 있습니다.
netstat -s
TCP, UDP, IP 등과 관련된 다양한 통계가 표시될 수 있습니다.
기본적인 네트워크 문제 해결보다 조금 더 자세한 정보를 확인할 때 사용할 수 있는 옵션입니다.
처음 netstat를 공부한다면 우선 -a, -n, -o부터 익힌 뒤 필요할 때 -e, -s 등의 옵션을 살펴보는 것이 좋습니다.
netstat 옵션을 직접 확인하는 방법
현재 Windows 환경에서 사용할 수 있는 netstat 옵션을 확인하려면 다음 명령어를 입력합니다.
netstat /?
도움말에는 사용할 수 있는 옵션과 기본적인 설명이 표시됩니다.
CMD 명령어를 익힐 때는 인터넷에서 찾은 명령어를 그대로 복사하는 것보다 Windows에서 제공하는 도움말을 함께 확인하는 습관을 들이는 것이 좋습니다.
특히 여러 옵션을 조합할 때 각각의 옵션이 어떤 기능을 수행하는지 알고 사용하는 것이 중요합니다.
netstat로 인터넷 사용 프로그램을 전부 알 수 있을까?
netstat를 이용하면 현재 네트워크 연결과 PID 등의 정보를 확인할 수 있지만 결과만 보고 모든 프로그램의 목적을 바로 알 수 있는 것은 아닙니다.
하나의 프로그램이 여러 서버에 연결할 수도 있고 운영체제의 백그라운드 서비스도 네트워크를 사용할 수 있습니다.
웹 브라우저 역시 여러 탭이나 서비스 때문에 많은 연결을 생성할 수 있습니다.
따라서 모르는 IP 주소가 나타났다는 이유만으로 악성 프로그램이라고 판단해서는 안 됩니다.
필요하다면 PID를 통해 실제 프로세스를 확인하고 프로그램의 설치 경로나 디지털 서명, 공식 정보 등을 추가로 확인하는 방식으로 접근하는 것이 좋습니다.
netstat는 언제 사용하면 좋을까?
netstat는 다음과 같은 상황에서 활용할 수 있습니다.
현재 네트워크 연결을 확인하고 싶을 때
컴퓨터가 어떤 외부 주소와 TCP 연결을 맺고 있는지 확인할 수 있습니다.
특정 포트가 사용 중인지 확인할 때
개발 서버나 프로그램 실행 과정에서 특정 포트가 이미 사용 중인지 확인하는 데 활용할 수 있습니다.
수신 대기 중인 포트를 확인할 때
LISTENING 상태의 TCP 포트를 살펴볼 수 있습니다.
연결과 관련된 PID를 확인할 때
-o 옵션을 사용하면 해당 연결과 관련된 프로세스 ID를 확인할 수 있습니다.
네트워크 문제를 분석할 때
ping이나 tracert와는 다른 관점에서 현재 컴퓨터의 연결 상태를 살펴볼 수 있습니다.
ping, tracert, nslookup, netstat의 차이
지금까지 CMD 네트워크 명령어를 공부했다면 각 명령어의 역할을 구분해두는 것이 중요합니다.
ipconfig
내 컴퓨터의 IP 주소와 기본적인 네트워크 설정을 확인합니다.
ping
특정 네트워크 대상과 통신 가능한지와 왕복 응답 등을 확인합니다.
tracert
목적지까지 거치는 네트워크 경로를 추적합니다.
nslookup
DNS 서버에 도메인 정보를 질의합니다.
netstat
현재 컴퓨터의 네트워크 연결, 주소, 포트와 TCP 상태 등을 확인합니다.
즉, netstat는 외부 목적지의 경로를 추적하는 도구라기보다 현재 내 컴퓨터에서 이루어지고 있는 네트워크 연결을 살펴보는 도구라고 이해하면 쉽습니다.
netstat 결과를 볼 때 주의할 점
netstat를 처음 사용하면 수많은 외부 IP와 포트가 나타나기 때문에 보안 문제가 발생한 것처럼 느껴질 수 있습니다.
하지만 정상적인 Windows 환경에서도 여러 프로그램과 시스템 서비스가 네트워크를 사용합니다.
따라서 다음 사항을 기억하는 것이 좋습니다.
첫째, 모르는 IP 주소가 있다고 바로 악성 연결로 판단하지 않습니다.
둘째, LISTENING 포트가 있다고 무조건 외부 인터넷에 공개된 것은 아닙니다.
셋째, TIME_WAIT가 여러 개 있다고 그 자체로 오류라고 판단하지 않습니다.
넷째, 의심되는 연결이 있다면 IP 주소 하나만 보는 것이 아니라 PID와 실제 프로세스를 함께 확인합니다.
다섯째, 정체를 모르는 시스템 프로세스를 무작정 종료하지 않습니다.
netstat는 네트워크 상태를 확인할 수 있는 도구이지 결과를 자동으로 위험 또는 안전으로 판정해주는 보안 프로그램은 아닙니다.
netstat 명령어 핵심 정리
기본 네트워크 연결 확인:
netstat
전체 연결 및 수신 상태 확인:
netstat -a
주소와 포트를 숫자로 표시:
netstat -n
PID 표시:
netstat -o
자주 사용하는 옵션 조합:
netstat -ano
특정 포트 검색:
netstat -ano | findstr :8080
netstat 도움말 확인:
netstat /?
처음 사용하는 경우에는 기본 netstat로 출력 구조를 익힌 뒤 -a, -n, -o 옵션이 각각 어떤 정보를 추가하거나 변경하는지 하나씩 확인하는 것이 좋습니다.
마무리
Windows의 netstat 명령어는 현재 컴퓨터에서 이루어지고 있는 네트워크 연결을 확인하고 로컬 IP, 외부 IP, 포트 번호, TCP 연결 상태와 PID 등을 살펴볼 수 있는 유용한 CMD 네트워크 도구입니다.
처음에는 결과가 복잡해 보이지만 Local Address, Foreign Address, State의 의미를 먼저 이해하면 훨씬 쉽게 읽을 수 있습니다.
특히 TCP 상태에서는 ESTABLISHED는 연결이 설정된 상태, LISTENING은 연결 요청을 기다리는 상태라는 차이를 기억해두면 좋습니다.
또한 netstat -ano를 활용하면 네트워크 연결과 포트뿐 아니라 PID까지 함께 확인할 수 있어 특정 포트를 사용하는 프로그램을 추적할 때 유용합니다.
다만 netstat에 모르는 IP나 포트가 표시됐다는 이유만으로 악성 프로그램이라고 판단해서는 안 됩니다. 실제 문제를 확인하려면 PID와 프로그램 정보를 함께 살펴보고 현재 시스템과 네트워크 환경을 종합적으로 확인해야 합니다.
netstat의 기본 사용법을 익혔다면 다음 단계에서는 arp 명령어를 이용해 로컬 네트워크에서 확인된 IP 주소와 MAC 주소의 대응 정보를 살펴보는 방법을 알아보겠습니다.