작성
·
211
0
열두번째 강의 netstat(2)dptj 5:56부근에 close_wait는 애플리케이션 이상 동작이라고 설명을 해주셨는데, 이 부분이 잘 이해되지 않습니다.
client로 부터 fin 패킷을 받아서 close_wait이 되는걸로 이해했는데, 이게 왜 이상동작일까요?
답변 1
1
네. FIN 패킷을 받아서 CLOSE_WAIT
상태가 되고 CLOSE
로 넘어가야 하는게 정상 입니다. 그리고 그 과정은 아주 빠르게 이뤄지기 때문에 실제로 netstat
명령을 입력 하면 거의 볼 수가 없어야 합니다.
그래서 CLOSE_WAIT
상태가 netstat
명령에 보인다는 건 모종의 이유로 소켓을 닫지 못하고 CLOSE
상태로 변경되지 않는다는 의미이고, 이 때의 원인이 애플리케이션 이상 동작일 경우가 가장 큽니다.
https://tech.kakao.com/2016/04/21/closewait-timewait/ 문서를 보시면 CLOSE_WAIT
를 재현하는 소스 코드가 있으니 그걸 보시면 훨씬 더 잘 이해하실 수 있을 겁니다. FIN
패킷을 받고 CLOSE_WAIT
상태가 된 후 소켓을 닫고 CLOSE
가 되어야 하는데 그 중간에 sleep()
이 있어서 프로세스가 잠자기 상태로 들어가고 이로 인해 소켓을 닫지 못하게 되는거죠.
그래서 CLOSE_WAIT
가 많다는 건 애플리케이션의 이상 동작으로 네트워크 소켓을 제대로 닫지 못하고 있다는 것을 의미 합니다.