nestat : 네트워크 상태 모니터링
- 라우팅테이블 확인
- 프로토콜 서비스된 통계
- 포트 프로세스들 상태정보
- 네트워크 연결 상태
netstat 옵션
옵션 | 기능 |
a | 모든연결 및 수신대기 포트 |
c | 초단위 실행 |
l | LISTEN하고 있는 포트 |
t | TCP 연결된 포트 |
u | UTP 연결된 포트 |
n | 주소나 포트 형식을 숫자로 표현 |
p [프로토콜] | 해당프로세스를 사용하고 있는 프로그램이름 |
r | 라이팅 테이블 |
netstat -ant
- 22,13306 port 대해 상태 LISTEN 되어있어서 연결 가능함
- 22 port에 대해 6개 연결 되어 있고 13306 port에 대해 2개 연결되어 있음
netstat 상태 정보
상태 | 내용 | 비고 |
LISTEN | port Open 상태 연결 요청 대기상태 | windows LISTENING |
SVN_SENT | 클라이언트가 서버에게 연결 요청 상태 | SNY 패킷을 보냄 |
SYN_RECV | 원격으로 부터 연결 요청을 받은 상태 | 요청을 받아 SYN+ACK 신호로 응답은 한 상태 ACK는 받지 못했다. SYN_RECV가 많을 경우 TCP SYN 플러딩(Flooding) 공격 의심 |
ESTABLISHED | 서로 연결 되어 있는 상태 | (SYN–> SYN/ACK –> ACK) |
TIME_WAIT | 연결종료 | |
CLOSE_WAIT | 연결이 종료 되길 기다리는 상태 | |
LAST_WAIK | 연결이 종료 후 승인대기 상태 | |
CLOSED | 연결종료 된 상태 | |
FIN_WAIT1 | 소켓이 닫히고 연결이 종료되고 있는 상태 | 서버의 응답은 받을 수 있다. |
FIN_WAIT2 | 클라이언트가 서버으로 부터 연결 종료 기다리는 상태 | |
CLOSING | 연결은 종료되었으나 전송도중 데이타가 분실된 상태 | |
UNKNOWN | 소켓의 상태를 알 수 없음 |
TCP 정상 연결
순서 | TCP (클라이언트) | Segment | TCP (서버) |
1 | CLOSED | LISTEN | |
2 | SYN-SENT | SEQ=1000, SYN | SYN-RECEIVED |
3 | ESTABLISHED | SEQ=2000, ACK=1001,SYN ACK | SYN-RECEIVED |
4 | ESTABLISHED | SEQ=1001, ACK=2001,ACK | ESTABLISHED |
5 | ESTABLISHED | SEQ=1001, ACK=2001,ACK DATA | ESTABLISHED |
Backlog 는 2. SNY+ACK 보낼때 Backlog 큐에 저장 , 3. ACK 올때 Backlog 큐에서 제거
TCP 정상 종료
순서 | TCP (클라이언트) | Segment | TCP (서버) |
1 | ESTABLISHED | ESTABLISHED | |
2 | (Close) | ||
FIN-WAIT-1 | SEQ=1000, ACK=2000,FIN ACK | CLOSE-WAIT | |
3 | FIN-WAIT-2 | SEQ=2000, ACK=1001,ACK | CLOSE-WAIT |
4 | (Close) | ||
TIME-WAIT | SEQ=2001, ACK=1001,FIN ACK | LAST-WAIT | |
5 | TIME-WAIT | SEQ=1001, ACK=2002,ACK | CLOSED |
6 | CLOSED |
FIN_WAIT1, FIN_WAIT2, CLOSE_WAIT 3개 상태는 연결 종료를 위해 서로간에 신호를 주고 받는 과정
close 과정에서 바로 종료 되는 것이 아니라 time wait상태 거치고 약 1~4분동안 유지 한다.
유지 하는 이유는 TCP는 신뢰성을 보장 하기 위해 서로 CLOSE 확인후 종료 한다.
tcp_timewait 수치는 Default 60초 이며 권장 수치는 10초 이다
sysctl -a | grep .tcp_fin_timeoutnet.ipv4.tcp_fin_timeout = 60sysctl -w net.ipv4.tcp_fin_timeout = 10 |
출처: https://experiences.tistory.com/14 [IT경험]