본문 바로가기

개발이야기/servlet container

[linux] netstat 명령어 설명 및 예제


netstat 소개

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

리눅스에서 net-tools의 일부인 netstat은 시대에 뒤쳐진 것으로 간주되며, iproute2의 일부인 ss를 대신 사용하여야 한다.

(위키피디아 발쵀)


netstat 옵션들

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

-r : 라우팅 테이블 확인 및 커넥션되어 있는 포트번호를 확인 

-n : 현재 다른PC와 연결되어 있는 포트번호를 확인

-e : 랜카드에서 송수한 패킷의 용량 및 종류를 확인 

-s : IP, ICMP, UDP프로토콜별의 상태 확인

-t : tcp protocol 

-u : udp protocol 

-p : 프로토콜 사용 Process ID 노출

-c : 1초 단위로 보여줌


netstat 예제 및 설명

$ netstat -antplF
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -   
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      -      
tcp        0      0 127.0.0.1:9050          0.0.0.0:*               LISTEN      -     
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      -   
tcp        0      0 192.168.0.100:44952     144.76.244.204:443      ESTABLISHED 2705/chromium-brows
tcp        0      0 192.168.0.100:49334     66.196.66.212:443       ESTABLISHED 6796/firefox  
tcp        0      0 192.168.0.100:40249     69.171.235.19:443       ESTABLISHED 6796/firefox   

  - Proto : 프로토콜 종류. TCP / UDP / RAW
  - Recv-Q : 해당 process가 현재 받는 바이트 표기
  - Send-Q : 해당 process가 현재 보내는 바이트 표기
  - Local Address : 출발지 주소 및 포트. 자신의 주소 및 포트
  - Foreign Address : 목적지 주소 및 포트
  - State : 포트의 상태 표기.
    => CLOSED
    => CLOSED_WAIT
    => CLOSING
    => ESTABLISHED : 연결 완료
    => FIN_WAIT1
    => FIN_WAIT2
    => LAST_ACK
    => LISTEN :  대기 포트. 포트 open
    => SYN_RECV
    => SYN_SENT
    => TIME_WAIT 
    => UNKNOWN

netstat Tip

Local Address column은 현재 열려있거나 혹은 리스닝하고있는 ip, port를 나타낸다. 만약 해당 ip가 0.0.0.0이라면 all interface를 받는 다는 뜻이며 모든 ip에 대해서 열려있다는 뜻이다. 반대로 127.0.0.1로 되어있다면 loopback이라는 뜻으로 자기자신만 호출가능한 상태를 뜻한다.
$ netstat -antplF
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -  
tcp        0      0 0.0.0.0:9050          0.0.0.0:*               LISTEN      -        
(any ip could connect to 9050 port | only local ip could connect 631 port)

# 127.0.0.1, 127.0.1.1, ::1 (for IPv6) → localhost, the loop back interface - those services can only be contacted from your local machine
# 0.0.0.0:xxx, :::xxx → any local address:port-number - active connections: the IP-address and the port used by that special connection