리눅스에서 netstat 명령어를 통해 네트워크 연결, 라우팅 테이블, 인터페이스 통계 등을 빠르게 조회할 수 있다.
조회 결과를 통해 네트워크 문제를 진단하고, 활성 네트워크 연결 확인, 라우팅 테이블 표시, 네트워크 인터페이스 통계 모니터링 등을 수행할 수 있다.
명령어 기본 문법
netstat <옵션>
netstat명령어 옵션 리스트-a : 오픈 포트 및 연결된 모든 네트워크 표시 -t : TCP 프로토콜 연결만 표시 -u : UDP 프로토콜 연결만 표시 -n : IP 주소와 포트를 숫자 형식으로 표시 (기본은 도메인 이름 및 서비스 이름으로 표시) -l : 연결 대기 중인 소켓만 출력 (서버가 클라이언트 연결을 기다리는 상태) -p : 네트워크 연결에 해당하는 프로세스 ID와 프로세스 이름 표시 -r : 라우팅 테이블 표시 -i : 패킷 통계를 포함한 네트워크 인터페이스 정보 표시 -s : 프로토콜별 통계 정보 표시 (패킷 수, 오류 및 충돌 등의 네트워크 통계를 TCP, UDP, ICMP별로 표시)
netstat 명령어는 사용 옵션에 따라 출력되는 값이 다르다.
✅ 옵션 없이 명령어 단독 사용
일반적으로
netstat명령어는 옵션 없이 단독으로 사용하는 경우가 거의 없다. (유의미한 정보를 확인X)출력 결과는 두 부분으로 나뉜다.
- Active Internet connections (w/o servers) : 서버를 제외한 활성화된 인터넷 연결 상태 확인.
- Proto : 연결에 사용된 프로토콜
- Recv-Q : 수신 대기열의 데이터 크기로, 수신 후 아직 처리되지 않은 데이터를 의미 (단위 : bytes)
- Send-Q : 전송 대기열의 데이터 크기로, 전송을 위해 대기 중인 데이터를 의미 (단위 : bytes)
- Local Address : 연결된 로컬 IP 주소 및 포트
- Foreign Address : 연결된 원격 IP 주소 및 포트
- State : 연결 상태
- LISTEN : 포트 연결 수신 대기 상태
- ESTABLISHED : 연결 활성화 후, 데이터 전송/수신 중인 상태
- TIME_WAIT : 연결 종료 후, 잠시 대기 중인 상태
- CLOSE_WAIT : 상대방의 연결 종료 요청을 받았지만, 아직 전송할 데이터가 있는 상태
- Active UNIX domain sockets (w/o servers) : 서버를 제외한 UNIX 도메인 소켓 상태 확인.
UNIX 도메인 소켓은 네트워크 연결이 아닌, 같은 시스템 내에서 프로세스 간 통신을 위한 소켓이다. 즉, 네트워크 연결이 아닌 로컬 프로세스 간의 통신을 위한 개념이다.
- Proto : 연결된 포트(UNIX 도메인 소켓)
- RefCnt : 참조 카운트로 소켓이 사용하는 프로세스의 수
- Flags : 소켓의 특정 상태 or 옵션을 표시
- Type : 소켓 타입
- State : 소켓 상태
- I-Node : 소켓의 고유 식별자
- Path : 소켓의 파일 경로 (경로가 없는 경우 익명 소켓의 가능성이 높음)
✅ -r 옵션 사용
-r 옵션을 사용하면, IP 라우팅 테이블을 확인할 수 있다. (Kernel IP routing table)
라우팅 테이블은 패킷이 목적지까지 전송되는 경로를 결정하는 데 필요한 정보를 담고 있다.
- Destination : 목적지 네트워크 주소 (default : 기본 경로/게이트웨이)
- Gateway : 게이트웨이 IP 주소, 패킷이 전달될 중간 라우터 주소 (로컬 네트워크의 경우 네트워크가 필요 없으므로
0.0.0.0으로 표시)- Genmask : 서브넷 마스크 (서브넷 마스크가 특정되지 않는 경우
0.0.0.0으로 표시)- Flags : 라우팅 엔트리의 상태 표시
- U : 해당 경로가 활성화된 상태
- G : 해당 경로가 게이트웨이를 통해 전달되어야 하는 상태
- UG : 해당 경로 활성화 + 게이트웨이를 통해 전달되어야 하는 상태
- MSS : 최대 세그먼트 크기(TCP 연결에서 전송할 수 있는 최대 데이터 크기, 헤더를 제외한 데이터 크기, 기본값은 0)
- Window : TCP 창 크기 (데이터 전송 시 한 번에 전송할 수 있는 데이터양, 기본값은 0)
- irtt : 초기 왕복 시간 (데이터 전송 후, 응답받는 데 걸리는 시간)
- Iface : 네트워크 인터페이스 (패킷이 전달될 인터페이스)
✅ -i 옵션 사용
-i 옵션을 사용하면, 네트워크 인터페이스 통계를 확인할 수 있다. (Kernel Interface table)
시스템의 네트워크 인터페이스 상태와 각 인터페이스에 대한 전송/수신 통계, 에러, 드롭된 패킷 등의 정보를 제공한다.
- Iface : 네트워크 인터페이스의 이름
- MTU : 네트워크 인터페이스에서 전송할 수 있는 최대 전송 단위 (단위 : bytes)
- RX-OK : 정상적으로 수신된 패킷의 수 (오류 없이 정상적으로 수신)
- RX-ERR : 수신 오류가 발생한 패킷의 수
- RX-DRP : 수신 중 드롭된 패킷의 수 (오버플로우 등의 이유로 드롭 발생)
- RX-OVR : 수신 중 오버런된 패킷의 수 (수신 버퍼가 가득 차서 더 이상 패킷을 처리할 수 없을 때 발생, 네트워크 부하가 주 원인)
- TX-OK : 정상적으로 전송된 패킷의 수 (오류 없이 정상적으로 전송)
- TX-ERR : 전송 중 오류가 발생한 패킷의 수
- TX-DRP : 전송 중 드롭된 패킷의 수
- TX-OVR : 전송 중 오버런된 패킷의 수 (송신 버퍼가 가득 차서 더 이상 패킷을 전송할 수 없을 때 발생)
- Flg : 인터페이스의 상태를 나타내는 플래그
- B : 브로드캐스트 지원
- M : 멀티캐스트 지원
- R : 인터페이스 작동 중
- U : 인터페이스 활성화 상태
- P : Promiscuous Mode 활성화 (네트워크에 전송되는 모든 패킷을 수신)
- L : 루프백 인터페이스(localhost), 외부 네트워크와의 연결 없이 시스템 내에서 네트워크 통신 가능
- S : 정적 IP 주소 사용
- D : 동적 IP 주소 사용
✅ -t -u -l -n -p 옵션 사용
TCP, UDP 프로토콜을 사용하고, LISTEN 상태(포트 연결 수신 대기 상태)인 네트워크 연결을 숫자 형식으로 변환 후, 네트워크 연결에 해당하는 프로세스 ID와 프로세스 이름을 표시
- PID/Program : 프로세스 ID와 해당 프로세스의 프로그램 이름 표시
- name : 프로그램 실행 경로 표시
netstat 명령어는 옵션에 따라 출력 유형이 달라진다.