FIN_WAIT2????

namola의 이미지

SELECT 로 서버를 만들어서 약 클라이언트는 쓰레드로 1000개정도
생성해서...0.001초로 서버에 접속을 합니다.

클라이언트가 패킷을 보내고 서버는 패킷정보를 검사하여 그에 해당하는 
정보를 가공하여 뿌려줍니다
.
그리고 서버가 먼저 클라이언트를 끊어줍니다.
그리고 패킷도 양호하게 주고 받고 합니다.
그런데...netstat -an 해주니까...ESTABLISHED라고
나오지 않고 FIN_WAIT2로 나옵니다.
그래서 클라이언트 시간 타임을 1초정도 주고 서버에
접속을 하여도 마찬가지 입니다.

이런경우는 어떤경우이지요?

codebank의 이미지

LISTEN        : 현재 열린 포트로 누군가의 접속을 기다리는 상태
ESTABLISHED   : 정상적으로 연결이 된 상태
SYN_SEND      : 로컬의 클라이언트 어플리케이션이 원격 호스트에 연결을 요청한 상태
SYN_RECEIVED  : 서버가 원격 클라이언트로부터 접속 요구를 받아 클라이언트에게 응답을 하였지만
                아직 클라이언트에게 확인 메시지를 받지 않은 상태
FIN-WAIT1     : 소켓이 닫혔고 연결이 종료되기를 기다리는 상태
FIN_WAIT2     : 연결이 닫혔음(접속 종료 신호에 대한 ACK를 받은 상태)
TIME-WAIT     : 소켓이 닫히고 원격 호스트 종료 재전송을 기다림
CLOSE-WAIT    : 원격 호스트가 연결을 종료했음
LAST_ACK      : 원격 연결이 종료되고 소켓이 닫힘
CLOSING       : 흔하지 않지만 주로 확인 메시지가 전송도중 분실된 상태
CLOSED        : 완전히 종료

몇몇자료를 혼합해서 정리했습니다.
FIN_WAIT2라는 메시지가 나오면 연결이 닫힌상태로 보이기는합니다만 서버측에서
처리가 지연되어서 그런게 아닌가 생각이 드네요.(사실 FIN-WAIT1은 종종 보이긴
하지만 FIN-WAIT2가 있다는건 처음 알았네요. :oops: )

------------------------------
좋은 하루 되세요.

errai의 이미지

서버에서 close 한 후에 클라이언트에서도 close()를 호출해 주어야
정상적인 종료상태가 됩니다.
FIN_WAIT2는 클라이언트에서도 close()를 호출하기를 기다리고 있는 상태입니다.

namola의 이미지

감사합니다.
너무나 잘되네요...^^

hekimian의 이미지

stevens 아저씨의 Unix Network Programming 2장에 보면
11개의 TCP 상태전이 그림이 나와있습니다.

참고하십시요.

나를 죽이지 않는 모든 것은 나를 강하게 할 뿐이다.