← 질문 목록
#350깊이 0

TCP 연결에서 CLOSE_WAIT 상태가 쌓이는 원인은 무엇인가?

네트워크

애플리케이션이 상대방의 종료 요청을 받고도 소켓을 닫지 않았기 때문이다. TCP 표준에서 CLOSE_WAIT는 상대의 FIN 패킷을 받아 시작되는 수동 종료 상태다.

  • ESTABLISHED

    • CLOSE_WAIT

      상대방의 FIN 패킷 수신

  • CLOSE_WAIT

    • LAST_ACK

      애플리케이션이 close() 호출

  • LAST_ACK

    • CLOSED

      상대방의 ACK 패킷 수신

OS는 FIN 패킷을 받으면 상대에게 ACK를 즉시 보낸다. 그리고 소켓 상태를 CLOSE_WAIT로 바꾼다. 하지만 애플리케이션이 close() 함수를 부르는 것은 별개의 과정이다. 예외 처리에서 소켓을 닫지 않거나 커넥션 풀 반환을 누락하면 소켓이 이 상태에 영구히 남는다.

CLOSE_WAIT가 쌓이면 파일 디스크립터 자원이 빠르게 고갈된다. 자원이 바닥나면 새로 들어오는 통신 요청을 더 이상 처리할 수 없다. OS 설정으로는 해결할 수 없으며 애플리케이션 소스 코드의 소켓 반환 로직을 수정해야 한다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

TCP 연결에서 CLOSE_WAIT 상태가 쌓이는 원인은 무엇인가?