컴퓨터 공부/기타

[네트워크] netstat 에 대하여 알아보자

나정_ 2013. 2. 7. 22:45


nestat에 대하여 알아보자 


참고: http://docs.oracle.com/cd/E26925_01/html/E25873/ipconfig-142.html


오늘은 nestat 에 대하여 설명하고자 한다. 

필자는 서버 점검을 할때 nestat 명령어를 통하여 네트워크 상태를 확인하고자 사용하는데 

netstat의 다양한 옵션 값을 명확하게 알고 사용한다면 서비스 관리에 유용하게 사용할 수 있을 것이라 생각된다 . 


1. netstat 기능  


netstat 사용 용도는 이러하다. 


- 라우팅 테이블 확인 

- 프로토콜 서비스된 통계 

- 열려져 있는 포트 및 서비스 중인 프로세스들의 상태 정보와  네트워크 연결 상태 


알아 보기 위해 사용한다. 


* 라우팅 테이블 : 라우터나 기타 다른 인터네트워킹 장치에 저장되어있는 데이터베이스로서 네트웍 상의 특정 목적지까지의 경로를 계속적으로 저장하기 위해 사용됨 



2. netstat 사용법 및 옵션기능 


먼저 사용법은 아래와 같다. 


[사용법]
netstat [-a] [-l] [-r] [-n] [-c] [-p 프로토콜] [-t] [-u]


 [] 쳐져 있는 것들은 netstat의 옵션 값이다 . 



 옵션

기능 

 -a

모든 연결 및 수신 대기 포트를 표시

 -c

현재 실행 명령을 매 초마다 실행  

 -l 

리슨하고있는 포트를 보여줌 

 -t

tcp로 연결된 포트를 보여줌  

 -u 

udp로 연결된 포트를 보여줌 

 -n

주소나 포트 형식을 숫자로 표현 

 -p [ 프로토콜 ] 

해당 프로세스를 사용하고 있는 프로그램이름을 보여줌  

-r 

라우팅 테이블을 보여준다.  



3. 자주사용하는 netstat 사용법 (예제) 


1. 네트워크 연결상태 


netstat -an 


LISTEN 된 포트와 그렇지 않은 포트를 확인할 때 아래와 같이 사용함 






* proto : 현재 사용한 프로토콜

* local address : 사용자 컴퓨터의 호스트 네임 또는 ip와 포트번호

* foreign addess : 사용자와 접속되어있는 사이트, 컴퓨터의 호스트 네임 또는 ip 와 포트번호 

* state : 접속 상태 ( 맨 하단에 자세하게 설명되어있음) 



2. 프로토콜 서비스된 통계 


netstat -p[프로토콜] 




3.  라우팅 테이블 확인 


netstat -ar 








4. state 값 알아보기 



상태 

내용 

 LISTEN

요청을 받을 수 있도록 연결 요구를 기다리는 상태

즉, 포트가 열려있음 

WINDOWS에는  LISTENING으로 나타남 

 ESTABLISHED

서로 연결되어있는 상태  ( SYN -> SYN/ACK -> ACK ) 가 완료된 상태 

SVN_SENT

클라이언트가 서버에게 SYN패킷을 보낸 후 연결을 요청한 상태

 SVN_RECV

서버가 클라이언트의 SYN패킷으로 서비스를 요청 받은 후에 이에대한 응답으로 SYN/ACK패킷을 보내고 클라이언트에게 ACK를 받기를 기다리는 상태 

 TIME_WAIT

 연결은 종료되었으나 원격의 우신보장을 위해 기다리고 있는 상태

 CLOSE_WAIT

원격의 연결 요청을 받고 연결이 종료되길 기다리는 상태 

 LAST_ACK

연결이 종료되었고 승인을 기다리는 상태 

 CLOSED

완전히 연결이 종료된 상태  


5. 참고자료 


* connection 


* close 



추가 : 곧바로 close 되는 것이 아니라 time wait 상태를 거치고 일정 시간(1분~4분)동안 유지한다. 

그 이유는 TCP는 신뢰성을 보장해 주기위한 프로토콜로서 연결시에도 종료시에도 복잡한 과정을 거쳐 서로가 CLOSE된 것을 확인하고자 그렇게 만들엇다.  


만일 시스템에 설정된 양보다 많은 CLOSE 요청이 들어온다면 TIME_WAIT하는 세션들이 필요이상으로 많아진다. 

그럴때는 


1. tcp_timewait 수치를 확인하고 변경해준다. 

일반적으로 대량 요청이 발생한다면 10초 정도로 맞춰주는 것이 권장값이다. 



재부팅시에도 이 값을 유지하고 싶다면

 

/etc/sysctl.conf 에

 

net.ipv4.tcp_fin_timeout = 10 

을 적어주면 재부팅시에도 timewait 수치 값을 유지할 수 있다. 


2. 재부팅해준다. (강제로 연결을 다 끈어버리는 듯)


찾아본 바에 의하면 2가지 방법이 있는 듯하다.