리눅스 - netstat

코린이·2024년 11월 30일

Linux

목록 보기
24/27

📌 netstat(Network Statistics)

리눅스에서 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 명령어 출력 유형

netstat 명령어는 옵션에 따라 출력 유형이 달라진다.

  • Active Internet connections (only servers) : LISTEN 상태만 표시 (연결 대기 중인 포트)
  • Active Internet connections (w/o servers) : ESTABLISHED 상태만 표시 (현재 연결된 포트)
  • Active Internet connections (servers and established) : LISTEN + ESTABLISHED 상태 모두 표시
  • Active UNIX domain sockets (w/o servers) : 서버를 제외한 UNIX 도메인 소켓 상태 확인
  • Kernel IP routing table : 패킷의 목적지, 게이트웨이, 사용 인터페이스 표시
  • Kernel Interface table : 네트워크 인터페이스 상태와 통계 표시

0개의 댓글