개발자로서 살아남기

서버 개발자로서 살아남기 - netstat 명령어에 대해

코드 살인마 2021. 12. 30. 00:47
728x90

개요

서버 신입개발자로서 선배에게 업무를 배워가던 도중 서버를 실행하고 admin으로 서버에 대한 정보를 확인하는 과정에서 문제가 발생하였다. 문제를 같이 해결하던 도중 선배가 말하길 '앞으로 문제가 발생할 경우 터미널창과 netstat 명령어을 쓸일이 많을 것이다.'라는 얘기를 하였다.
기존에 진행했던 프로젝트는 하나의 서버와 하나의 클라이언트만 다뤄봤기 때문에 '클라가 안되면 연결 안됬나보다~' 라고 쉽게 생각하였다. 그러나 회사에 오니 많은 서버, DB, 사내 프로그램 등 상당히 많은 것들이 얽혀있었고, netstat 명령어에 대한 공부와 정리를 해야겠다는 생각이 들었다.

netstat의 정의

netstat(network statistics)는 전송 제어 프로토콜, 라우팅 테이블, 수많은 네트워크 인터페이스(네트워크 인터페이스 컨트롤러 또는 소프트웨어 정의 네트워크 인터페이스), 네트워크 프로토콜 통계를 위한 네트워크 연결을 보여주는 명령 줄 도구이다. OS X, 리눅스, 솔라리스, BSD를 포함한 유닉스 계열 운영 체제와 윈도우 XP, 윈도우 비스타, 윈도우 7, 윈도우 8, 윈도우 10을 포함한 윈도우 NT 기반 운영 체제에서 이용이 가능하다.
네트워크의 문제를 찾아내고 성능 측정으로서 네트워크 상의 트래픽의 양을 결정하기 위해 사용된다.

들어가기전 정보

127.0.0.1 : localhost라고도 하며 자신의 컴퓨터를 의미한다.

 

0.0.0.0 : 모든 local address를 받을 수 있다는 의미

 

TCP state를 알기전에 3 way-handshaking을 먼저 안다면 더욱 이해하기 쉽다.

 

LISTEN : 접속 요청을 기다리는 상태

 

SYN-SENT : 로컬의 클라이언트 어플리케이션이 원격 호스트에 연결을 요청한 상태

 

SYN_RECEIVED : 서버가 원격 클라이언트로부터 접속 요구를 받아 클라이언트에게 응답을 하였지만 아직 클라이언트에게 확인 메시지는 받지 않은 상태

 

ESTABLISHED : 3 way-handshaking 이 완료된 후 서로 연결된 상태

 

FIN-WAIT1, CLOSE-WAIT, FIN-WAIT2 : 서버에서 연결을 종료하기 위해 클라이언트에게 종결을 요청하고 회신을 받아 종료하는 과정의 상태

 

CLOSING : 흔하지 않지만 주로 확인 메시지가 전송도중 분실된 상태

 

TIME-WAIT : 연결은 종료되었지만 분실되었을지 모를 느린 세그먼트를 위해 당분간 소켓을 열어두고 있는 상태

CLOSED : 완전히 종료

옵션

-a : 현재 다른 PC와 연결(ESTABLISHED)되어 있거나 대기(LISTENING)중인 모든 포트 번호를 확인

-n : 현재 다른 PC와 연결(ESTABLISHED)되어 있는 것들만 보여줌, 주소를 IP로 표시

-t : tcp 프로토콜

-u : udp 프로토콜

-p : pid와 program 명 표시

-l : 연결 가능한 상태

자세한 내용은 -help에 나온다.

netstat 자주쓰는 조합

참고로 서버가 Linux인 경우를 가정한 것이다. 윈도우의 경우 사용하지 못하는 명령어가 많다.

ex) grep 등

또한, - argment 순서는 상관없다. 의미만 알면 된다. ex) -na 나 -an이나 같은 뜻

netstat -na : 컴퓨터와 연결되었던 혹은 연결을 기다리는 목록을 IP주소로 보여줌
netstat -nap : 연결을 기다리는 목록과 프로그램을 보여준다
netstat -an | grep 포트번호 : 특정 포트가 사용 중에 있는지 확인
netstat -nlpt or -tnlp : TCP listening 상태의 포트와 프로그램을 보여준다

사용예시

listen 중인 포트를 찾고자 할때

  • - netstat –anp | grep -i listen

80포트를 찾고자 할때

  • netstat -anp | grep :80

현재 80포트의 동시 접속자 수

  • netstat -nap | grep :80 | grep -i establishged | wc -l

8080 포트를 사용중인지 확인

  • netstat -ntlp | grep :8080

REFERENCE

선발투수
[ 네트워크 쉽게 이해하기 22편 ] TCP 3 Way-Handshake & 4 Way-Handshake[Mind Net]
netstat 명령어를 통한 네트워크 상태 확인 방법