netstat 과 관련하여 글 올립니다.
아시다시피 netstat 은 해당 명령을 수행하는 서버가 다른 시스템과 어떤 서비스 또는 포트로 연결되어 있는지를 확인하는 명령어입니다.
알아두면 매우 유용한 명령어이므로 netstat의 각 상태값에 대한 정의, 옵션 등에 대해 정리합니다.
1. netstat 상태값
state | description |
CLOSED |
완전히 연결이 종료된 상태 |
CLOSING |
흔하지 않으나 주로 확인 메시지가 전송 도중 유실된 상태 |
CLOSE_WAIT |
TCP 연결이 상위 응용프로그램 레벨로부터 연결 종료를 기다리는 상태 Passive Close 하는 쪽에서 프로그램이 소켓을 종료시키는 것을 기다리기 위한 상태. 가령, 소켓 프로그래밍 시 TCP connection 을 close 함수로 명시적으로 끊어주지 않으면 CLOSE_WAIT 상태로 영원히 남을 수 있고 이는 resource leak 으로 이어짐 |
ESTABLISHED |
서버와 클라이언트 간에 세션 연결이 성립되어 통신이 이루어지고 있는 상태(클라이언트가 서버의 SYN을 받아서 세션이 연결된 상태) |
FIN_WAIT1 |
클라이언트가 서버에게 연결을 끊고자 요청하는 상태(FIN을 보낸 상태) |
FIN_WAIT2 |
서버가 클라이언트로부터 연결 종료 응답을 기다리는 상태(서버가 클라이언트로부터 최초로 FIN을 받은 후, 클라이언트에게 ACK을 주었을 때) |
LAST_ACK |
호스트가 원격지 호스트의 연결 종료 요구 승인을 기다리는 상태(서버가 클라이언트에게 FIN을 보냈을 때의 상태) |
LISTEN |
서버의 데몬이 떠 있어서 클라이언트의 접속 요청을 기다리고 있는 상태(Windows에선 LISTENING) |
SYN_SENT |
클라이언트가 서버에게 연결을 요청한 상태 |
SYN_RECEIVED |
서버가 클라이언트로부터 접속 요구(SYN)을 받아 클라이언트에게 응답(SYN/ACK)을 하였지만, 아직 클라이언트에게 확인 메시지(ACK)는 받지 못한 상태 |
TIME_WAIT |
연결은 종결되었지만 (분실되었을지 모를 느린 세그먼트를 위해) 당분간 소켓을 열어놓은 상태. 기본값은 120(초). Active Close 하는 쪽의 마지막 ACK가 유실되었을 때, Passive Close 하는 쪽은 자신이 보낸 FIN에 대한 응답을 받지 못했으므로 FIN을 재전송함. 이 때 TCP는 connection 정보를 유지하고 있고 ACK를 다시 보낼 수 있음 |
2. TCP flag
TCP flag |
description |
SYN |
Synchronization. 세션을 설정하는 데 사용되며 초기에 시퀀스 번호를 임의로 생성하여 보냄. 100% 는 아니지만 대부분 클라이언트 측에서 보내는 flag |
ACK |
Acknowledgement. 받는 사람이 보낸 사람 시퀀스 번호에 TCP 계층에서 길이 또는 데이터 양을 더한 것과 같은 ACK을 보냄. ACK 의 번호와 응답을 통해 보낸 패킷에 대한 손실을 판단하여 재전송하거나 다음 패킷을 전송 |
FIN |
Finish. 세션을 종료시키는 데 사용되며, 보낸 사람이 더 이상 보낼 데이터가 없음을 보여줌 |
RST |
Reset. 재설정을 하는 과정이며, 양방향에서 동시에 일어나는 중단 작업. 비정상적인 세션 연결 끊기에 해당함 |
PSH |
Push. 대화형 트래픽에서 사용되며, 버퍼가 채워지기를 기다리지 않고 데이터를 전달. 데이터는 버퍼링 없이 바로 위 Layer 가 아닌 7 Layer의 응용프로그램으로 바로 전달 |
URG |
Urgent. Urgent pointer 가 유효한 것인지를 나타냄. Urgent pointer 란 전송하는 데이터 중에서 긴급히 전달해야 할 내용이 있을 경우에 사용 |
3. 옵션
option | description |
-a |
모든 연결 및 수신 대기 포트 표시 |
-c |
현재 실행 명령을 매 초마다 실행 |
-l |
listen 하고 있는 포트만 보여줌 |
-i |
네트워크 트래픽 정보 모니터링 |
-t |
tcp로 연결된 포트를 보여줌 |
-u |
ucp로 연결된 포트를 보여줌 |
-n |
주소나 포트 형식을 숫자로 표현 |
-p [프로토콜] |
해당 프로토콜을 사용하고 있는 프로그램명을 보여줌 |
-r |
라우팅 테이블을 보여줌 |
-s |
프로토콜별 통계 정보 |
4. 모드
mode |
description |
Active Open |
connect()를 호출하는 쪽. 즉, SYN 세그먼트를 전송한 쪽. 종종 클라이언트가 되지만, 100% 클라이언트라고 할 수는 없음 |
Passive Open |
accept()를 호출하는 쪽. 일반적으로 서버의 역할. 이 역시 100% 서버라고 단정지을 수 없음 |
Active Close |
close()를 처음 호출한 쪽. FIN 세그먼트를 전송한 쪽. 클라이언트, 서버 관계 없이 어느 쪽이든 다 active close 할 수 있음 |
Passive Close |
FIN 세그먼트를 받는 쪽 |
MSL |
Maximum Segment Lifetime. 세그먼트가 네트워크 내에서 폐기되기 전까지 살아남을 수 있는 시간 |
감사합니다.
'3. OS이야기 > 01. Administration' 카테고리의 다른 글
패스워드 및 패스워드 aging 설정 (0) | 2014.08.29 |
---|---|
사용자 계정생성 및 설정(useradd) (0) | 2014.08.29 |
NIC Bonding 재구성 하기 (0) | 2014.07.31 |
CentOS Minimal 설치 후 X Windows 설치 방법 (0) | 2014.07.30 |
L4 mode 비교 (Proxy vs. DSR) 및 Linux에서 L4모드 변경(Proxy -> DSR) 방법 (0) | 2014.07.29 |