netstat란?

netstat(network statistics) 명령은 네트워크 상태를 표시하는 데 사용됩니다.
이 명령은 성능 측정보다는 문제점 판별에 더 많이 사용되어 왔습니다.
그러나 netstat 명령을 사용하여 네트워크의 트래픽 양을 판별하면 성능 문제가 네트워크
과잉으로 인한 것인지 여부를 판단할 수 있습니다.

netstat 명령은 구성된 네트워크 인터페이스의 트래픽에 관한 정보, 즉 다음과 같은 정보를 표시합니다.

  • 소켓과 연관된 프로토콜 제어 블록의 주소 및 모든 소켓의 상태
  • 통신 서브시스템에서 수신, 전송 및 삭제된 패킷의 수
  • 인터페이스당 누적 통계
  • 라우트 및 해당 상태

netstat 옵션

  • -a(all) : 모든 연결 및 수신 대기 포트 확인
  • -b : 각 연결 또는 수신 대기 포트를 만드는데 관련된 실행 프로그램을 표시한다.
  • -c : 현재 실행 명령을 매 초마다 실행한다.
  • -e : 이더넷 통계 표시(s 옵션과 함께 사용)
  • -i : 이더넷 카드별 정상/에러/드랍 송수신 패킷 수 확인
  • -l(listen) : 연결 가능한 상태 포트 확인
  • -s : 프로토콜별 네트워크 통계 표시
  • -t(tcp) : TCP로 연결된 포트 확인
  • -u(udp) : UDP로 연결된 포트 확인
  • -n(number port) : 주소나 포트 형식을 숫자로 표현
  • -p(process) : 해당 프로세스를 사용하고 있는 ID 확인
  • -r(routing table) : 네트워크상의 특정 목적지까지의 거리와 가는 방법등을 명시하고 있는 라우팅 테이블 확인

netstat 명령사용


netstat 명령은 활성 연결에 대한 다양한 네트워크 관련 데이터 구조의 내용을 표시합니다.
  • netstat -in 명령
    이 netstat 기능은 구성된 모든 인터페이스의 상태를 표시합니다.
  • netstat -i -Z 명령
    netstat 명령은 netstat -i 명령의 모든 통계 계수기를 0으로 지웁니다.
  • netstat -I 인터페이스 간격
    이 netstat 기능은 지정된 인터페이스에 대한 통계를 표시합니다.
  • netstat -a 명령
    netstat -a 명령은 모든 소켓의 상태를 표시합니다.
  • netstat -M 명령
    netstat -M 명령은 네트워크 메모리의 클러스터 풀 통계를 표시합니다.
  • netstat -v 명령
    netstat -v 명령은 작동 상태의 CDLI(Common Data Link Interface) 기반 장치 드라이버 각각에 대한 통계를 표시합니다.
  • netstat -p 프로토콜
    netstat -p 프로토콜은 프로토콜 변수에 대해 지정된 값(udp, tcp, sctp,ip, icmp)에 대한 통계를 보여줍니다. 이때 이 값은 잘 알려진 프로토콜 이름이거나 프로토콜에 대한 별명입니다.
  • netstat -s
    netstat -s 명령은 각 프로토콜에 대한 통계를 보여줍니다. 반면 netstat -p 명령은 지정된 프로토콜에 대한 통계를 보여줍니다.
  • netstat -s -s
    문서화되지 않은 -s -s 옵션은 netstat -s 출력에서 값이 0이 아닌 행만 보여주므로, 오류 수를 확인하기 쉽습니다.
  • netstat -s -Z
    netstat 명령은 netstat -s 명령의 모든 통계 계수기를 0으로 지웁니다.
  • netstat -r
    성능과 관련된 또 다른 옵션은 발견된 PMTU(Path Maximum Transmission Unit)를 표시하는 것입니다. netstat -r 명령을 사용하면 이 값을 표시할 수 있습니다.
  • netstat -D
    -D 옵션을 사용하면 통신 서브시스템의 각 계층으로 들어오고 나가는 패킷 수를 각 계층에서 삭제된 패킷 수와 함께 볼 수 있습니다.

netstat 상태값

LOSED 완전히 연결이 종료된 상태
CLOSING흔하지 않으나 주로 확인 메세지가 전송 도중 유실된 상태
CLOSE_WAITTCP연결이 상위 응용프로그램 레벨로부터 연결 종료를 기다리는 상태
ESTABLISHED서버와 클라이언트 간에 세션 연결이 성립되어 통신이 이루어지고 있는 상태 (클라이언트가 서버의 SYN을 받아서 세션이 연결된 상태)
FIN_WAIT1클라이언트가 서버에게 연결을 끊고자 요청하는 상태 (FIN을 보낸 상태)
FIN_WAIT2서버가 클라이언트로부터 연결 종료 응답을 기다리는 상태 (서버가 클라이언트로부터 FIN 받은 후, 클라이언트에게 ACK 보냈을 때)
LAST_ACK호스트가 원격지 호스트의 연결 종료 요구 승인을 기다리는 상태 (서버가 클라이언트에게 FIN을 보냈을 때)
LISTEN서버의 데몬이 떠 있어서 클라이언트의 접속 요청을 기다리고 있는 상태
SYN_SENT클라이언트가 서버에게 연결을 요청한 상태
SYN_RECEIVED서버가 클라이언트로부터 접속 요구(SYN)를 받아 클라이언트에게 응답 (SYN/ACK)하였지만, 아직 클라이언트에게 확인 메세지 (ACK)는 받지 못한 상태
TIME_WAIT연결은 종료되었지만 당분간 소켓을 열어놓은 상태, 약 1분정도이며 시간이 지나면 사라짐
UNKNOWN소켓의 상태는 알 수 없음