netstat 명령어

"서버에서 8080 포트가 제대로 열려 있는지 어떻게 확인하나요?", "현재 우리 웹 서버와 연결된 외부 IP 상태를 모니터링하고 싶어요." 리눅스 시스템을 운영하고 관리하다 보면 네트워크 트러블슈팅은 피할 수 없는 숙명과도 같습니다. 서버 통신에 문제가 생겼을 때, 가장 먼저 터미널 창에 입력하게 되는 구원투수가 바로 netstat 명령어입니다. 오늘은 15년 차 시스템 엔지니어의 실무 노하우를 듬뿍 담아, 리눅스 네트워크 상태 확인의 알파와 오메가인 netstat 활용 비법을 완벽하게 정리해 드리겠습니다.

1. netstat 명령어란? (네트워크 상태의 모든 것)

netstat(Network Statistics)은 시스템의 네트워크 연결 상태, 라우팅 테이블, 인터페이스 통계, 마스커레이드 연결, 멀티캐스트 멤버십 등 네트워크 전반에 걸친 방대한 정보를 보여주는 강력한 커맨드라인 도구입니다. TCP/IP 통신 기반의 리눅스 서버에서 트래픽의 흐름을 파악하고, 포트 충돌 여부를 확인하거나, 비정상적인 네트워크 연결(보안 위협 등)을 감지하는 데 필수적으로 사용되는 핵심 툴입니다.

2. 실무에서 100% 활용하는 netstat 핵심 옵션

netstat은 단독으로 쓰이기보다 다양한 옵션을 조합하여 원하는 데이터만 필터링하는 것이 일반적입니다. 수많은 옵션 중, 현업에서 매일같이 사용하는 핵심 옵션들을 정리했습니다.

[표 1] netstat 주요 옵션 및 기능 요약
옵션 설명 및 기능
-a (all) 연결된 모든 소켓(Listening 및 Non-Listening) 상태를 출력합니다.
-n (numeric) 호스트명, 포트명 등의 도메인 리졸빙을 하지 않고 숫자(IP 및 포트 번호)로 바로 출력하여 속도를 높입니다.
-t (tcp) TCP 프로토콜이 적용된 연결만 필터링하여 보여줍니다.
-u (udp) UDP 프로토콜이 적용된 연결만 필터링하여 보여줍니다.
-p (program) 해당 소켓을 사용하고 있는 프로세스 ID(PID)와 프로그램 이름을 출력합니다. (root 권한 필요)
-l (listening) 현재 연결을 대기 중인(LISTEN 상태) 포트만 출력합니다.
-r (route) 서버의 라우팅 테이블(Routing Table) 정보를 출력합니다. (route 명령어와 동일)

네트워크 연결 상태(State) 한눈에 이해하기

netstat 결과를 제대로 해석하려면 출력 결과 중 'State' 열의 의미를 알아야 합니다. 아래의 주요 상태 값들을 숙지하면 서버의 통신 흐름을 완벽히 읽어낼 수 있습니다.

[표 2] TCP 주요 연결 상태(State) 분석
상태(State) 의미 및 상세 설명
LISTEN 서버 데몬이 포트를 열고 클라이언트의 연결 접속을 기다리는 대기 상태입니다.
ESTABLISHED 서버와 클라이언트 간에 물리적, 논리적 연결이 완료되어 데이터 통신이 이루어지고 있는 정상 상태입니다.
TIME_WAIT 연결 종료 후, 남아있을지 모르는 패킷을 위해 잠시 포트를 열어두고 대기하는 상태입니다. (이 상태가 과도하게 많으면 서버 튜닝이 필요합니다)
CLOSE_WAIT 상대방으로부터 연결 종료(FIN)를 받았지만, 로컬 프로세스가 아직 종료 처리를 완료하지 못한 상태입니다. (어플리케이션 버그일 확률이 높음)

3. 상황별 netstat 명령어 실전 활용 (복사해서 바로 쓰세요!)

✅ 1. 현재 서버에서 열려있는 모든 포트와 프로세스 확인 (가장 많이 씀)

웹 서버(Apache, Nginx 등)나 DB(MySQL)를 올렸는데 접속이 안 될 때 가장 먼저 타이핑하는 "마법의 명령어"입니다. tulpn으로 외우시면 편합니다.

$ sudo netstat -tulpn

✅ 2. 특정 포트(예: 80번)를 사용 중인 프로세스 찾기

포트 충돌이 발생했을 때, 도대체 어떤 프로그램이 80번 포트를 쥐고 있는지 grep 명령어로 파이프(|)를 연결하여 찾습니다.

$ netstat -tulpn | grep :80

✅ 3. 현재 접속 중인(ESTABLISHED) IP의 개수 세기

DDoS 공격이 의심되거나 동시 접속자 수를 대략적으로 파악하고 싶을 때 유용합니다.

$ netstat -nt | grep ESTABLISHED | wc -l

4. 팁: 시대의 변화, netstat에서 ss 명령어로의 전환

최근 출시되는 리눅스 배포판(CentOS 7 이상, Ubuntu 18.04 이상 등)에서는 net-tools 패키지(netstat 포함)가 기본 설치되어 있지 않은 경우가 많습니다. 대신 iproute2 패키지에 포함된 ss(Socket Statistics) 명령어의 사용을 권장하고 있습니다. ss 명령어는 커널 공간에서 직접 정보를 가져오기 때문에 연결 수가 많은 서버에서 netstat보다 훨씬 빠르고 시스템 부하가 적습니다.

[표 3] netstat vs ss 명령어 비교 및 대체 매핑
비교 항목 netstat ss
처리 속도 느림 (대규모 트래픽 시 지연 발생) 매우 빠름 (커널 내부 정보 직접 조회)
전체 연결 확인 netstat -a ss -a
열린 포트/프로세스 확인 netstat -tulpn ss -tulpn (거의 동일하게 사용 가능)

마치며: 트러블슈팅의 시작과 끝

리눅스 시스템 관리자에게 netstat 명령어는 단순히 포트를 확인하는 도구를 넘어, 서버의 건강 상태를 진단하는 청진기와 같습니다. 오늘 소개해 드린 netstat -tulpn 명령어 하나만 확실히 외워두셔도, 실무에서 발생하는 웹 서버 접속 불량이나 DB 통신 장애의 원인을 짚어내는 데 큰 도움이 될 것입니다. 또한, 장기적으로는 더 강력한 성능을 자랑하는 ss 명령어의 사용법도 함께 익혀두시길 강력히 권장합니다.

👉 봉봉테크의 리눅스 실무 팁, 어떠셨나요?

서버 관리가 한결 수월해지셨다면 블로그 이웃 추가 및 구독을 부탁드립니다! 현업에서 바로 써먹는 생생한 IT 인프라 노하우를 매주 전해드립니다. 포스팅을 보시고 궁금한 점이나 여러분만의 네트워크 트러블슈팅 노하우가 있다면 아래 댓글로 자유롭게 남겨주세요!

댓글 쓰기

다음 이전