본문 바로가기
개발/Linux

[Linux] netstat 명령어로 네트워크 상태 확인하기(+ TCP 상태 전이)

by zuzuu 2021. 12. 29.
반응형

서버를 운영하다보면 네트워크 상태를 확인해야할 일이 생긴다.. 운영이 아니더라도 개발자라면 할일이 생기는..

 

netstat란?

전송 제어 프로토콜, 라우팅 테이블, 수많은 네트워크 인터페이스, 네트워크 프로토콜 통계를 위한 네트워크 연결을 보여주는 명령 줄 도구이다. (위키백과 : https://ko.wikipedia.org/wiki/Netstat)

 

  • 사용방법

netstat [옵션] [ | grep 포트번호 or 서비스 명]

 

  • 옵션

-l (listen) : 연결 가능한 상태
-n (number port) : 포트 넘버
-t (tcp) : tcp
-u (udp) : udp
-p : 프로그램 이름 / PID
-a : 모두
-i : 이더넷 카드별 정상/에러/드랍 송수신 패킷 수 확인
-r : 라우팅 테이블
-s : 네트워크 통계

netstat --help를 치면 위에서 설명한 옵션의 자세한 정보를 볼 수 있다.

 

  • 예제

- netstat -an | grep 포트번호 : 특정 포트의 사용 상태 확인

 

-netstat -lnt : tcp LISTEN 포트가 모두 출력

 

- netstat -lntp : LISTEN 포트 + PID/프로그램명 모두 출력

- netstat -nap :  연결을 기다리는 목록 출력

 

 

  • netstat 상태값
상태  설명
CLOSED 연결이 완전히 종료된 상태
CLOSING 흔하지 않으나 주로 확인 메시지가 전송 도중 유실된 상태
CLOSE_WAIT TCP 연결이 상위 응용프로그램 레벨로부터 연결 종료를 기다리는 상태
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 소켓의 상태를 알 수 없음

 


 

  • TCP 상태전이 다이어그램

 

TCP 상태전이 다이어그램 (출처:kakao tech 블로그)

client가 close()를 실행한 이후부터 설명해 보자면 (서버가 먼저 close를 수행할 수 있음)

1. client가 FIN를 보내고 FIN_WAIT1상태로 대기한다.

2. 서버는 CLOSE_WAIT 상태를 바꾸고 응답 ACK를 전달하고, 해당 포트에 연결되어 있는 어플리케이션에서 CLOSE()를 요청한다

3. ACK를 받은 클라이언트는 상태를 FIN_WAIT2로 변경한다.

4. CLOSE() 요청을 받은 서버는 종료 프로세스를 진행하고 FIN을 클라이언트에게 보내 LAST_ACK상태로 바꾼다

5.FIN을 받은 클라이언트는 ACK를 서버에 다시 전송하고 TIME_WAIT으로 상태를 바꾼다. TIME_WAIT에서 일정시간이 지나면 CLOSED된다. ACK를 받은 서버도 포트르 CLOSED로 닫는다.

 

 

 

 

CLOSE_WAIT & TIME_WAIT 최종 분석

트래픽이 많은 웹 서비스를 운영하다보면 CPU는 여유가 있지만 웹서버가 응답을 제대로 처리하지 못하고 먹통이 되는 경우를 종종 보게 됩니다. 여러가지 이유가 있겠지만, 이 글에서는 가장 대

tech.kakao.com

 

 

 

728x90
반응형

댓글