💡 요약 정리
netstat 명령어는 네트워크 연결 상태, 라우팅 테이블, 인터페이스 상태 등을 보여주는 명령어입니다.
- Active Internet connections(인터넷 연결 상태)과 Active UNIX domain sockets(도메인 소켓 연결 상태)으로 나뉘어 표시됩니다.
netstat -na 옵션으로 현재 시스템의 모든 네트워크 연결 목록을 확인할 수 있습니다.
1. 주요 옵션
| 옵션 | 설명 |
|---|
-n | 호스트명, 포트명을 lookup하지 않고 그대로 IP, Port번호로 보여준다. |
-a | 모든 네트웍 상태를 보여준다. |
-l | LISTEN 상태인 서비스 포트를 보여준다. |
-t | TCP 프로토콜만 보여준다. |
-u | UDP 프로토콜만 보여준다. |
-p | 해당 포트 를 사용하는 프로그램과 프로세스ID(PID)를 보여준다. |
-r | 라우팅 테이블 출력 |
-s | 프로토콜별(IP, ICMP, TCP, UDP 등)로 통계를 보여준다. |
-c | 1초 단위로 결과값을 연속적으로 보여준다. |
2. Active Internet connections 항목
프로토콜, 수신큐와 송신큐 그리고 각각의 IP, Port 정보를 표시합니다.
TCP의 경우 State 정보도 표시되게 됩니다.
2-1. TCP state 설명
| State | 설명 |
|---|
| LISTEN | 서버의 데몬이 떠서 접속 요청을 기다리는 상태 |
| SYS-SENT | 로컬의 클라이언트 어플리케이션이 원격 호스트에 연결을 요청한 상태 |
| SYN_RECEIVED | 서버가 원격 클라이언트로부터 접속 요구를 받아 클라이언트에게 응답을 하였지만 아직 클라이언트에게 확인 메시지는 받지 않은 상태 |
| ESTABLISHED | 3 Way-Handshaking 이 완료된 후 서로 연결된 상태 |
| FIN-WAIT1,2 | 서버에서 연결을 종료하기 위해 클라이언트에게 종결을 요청하고 회신을 받아 종료하는 과정의 상태 |
| CLOSE-WAIT | 서버에서 연결을 종료하기 위해 클라이언트에게 종결을 요청하고 회신을 받아 종료하는 과정의 상태 |
| CLOSING | 흔하지 않지만 주로 확인 메시지가 전송도중 분실된 상태 |
| TIME-WAIT | 연결은 종료되었지만 분실되었을지 모를 느린 세그먼트를 위해 당분간 소켓을 열어두고 있는 상태 |
| CLOSED | 완전히 종료 |
3. Active UNIX domain sockets 항목
- 프로토콜이 unix로 표시되며, RefCnt로 해당 소켓을 프로세스가 참조한 횟수를 표시합니다.
- Flags는 일반적으로 ACC 상태로 표시되는데 ACC는 소켓이 연결이 되어 있지 않는 상태를 나타내며, 소켓이 연결이 되어 있는 경우 공백으로 표시됩니다.
- Type은 보통 DGRAM(Datagram)과 STREAM으로 표시됩니다.
- State와 I-node, 소켓 파일의 절대 경로를 표시해 줍니다.
3-1. 도메인 소켓 연결 상태
| State | 설명 |
|---|
| FREE | 소켓이 할당되지 않았음 |
| LISTENING | 소켓이 연결 요청을 기다리는 중 |
| CONNECTING | 소켓 연결이 활성화되어 짐 |
| CONNECTED | 소켓이 연결되어 있음 |
| DISCONNECTING | 소켓 연결이 종료됨 |
| 공백 | 소켓이 어떠한 프로세스와도 연결되어 있지 않음 |
| UNKNOWN | 이 상태는 발생하지 않는다. |
4. 유용한 netstat 사용 예
| 명령어 | 설명 |
|---|
netstat -na --ip | tcp/udp의 세션 목록 표시 |
netstat -na | grep ESTABLISHED | wc -l | 활성화된 세션수 확인 |
netstat -nap | grep :80 | grep ESTABLISHED | wc -l | 80포트 동시 접속자수 |
netstat -nltp | LISTEN 중인 포트 정보 표시 |
netstat -r | 서버의 라우팅 테이블 출력 |