← 질문 목록
#3깊이 0
TCP 연결을 끊을 때 TIME_WAIT 상태가 필요한 이유는?
답변 연습
내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요
마지막 ACK가 유실될 수 있기 때문이다. 먼저 닫는 쪽이 잠시 남아 있어야 상대의 재전송을 받아줄 수 있다.
- 1. 능동 종료에서 수동 종료로: FIN. 보낼 것은 다 보냈다
- 2. 수동 종료에서 능동 종료로: ACK. 알겠다
- 3. 수동 종료에서 능동 종료로: FIN. 나도 다 보냈다
- 4. 능동 종료에서 수동 종료로: 마지막 ACK. **이게 유실되면 상대는 FIN을 다시 보낸다**
4-way handshake의 마지막에서 능동 종료 측은 상대의 FIN에 ACK를 보낸다. 이 ACK가 유실되면 상대는 FIN을 재전송한다. 이때 소켓이 이미 사라졌다면 응답할 주체가 없어 상대는 연결을 정상 종료하지 못한다.
두 번째 이유는 이전 연결의 지연 패킷이다. 같은 포트 조합으로 새 연결이 곧바로 열리면 뒤늦게 도착한 옛 패킷이 새 연결의 데이터로 섞일 수 있다. TIME_WAIT은 그 시간을 벌어준다.
표준의 대기 기준은 2MSL이다. TIME_WAIT이 많다는 사실만으로 장애는 아니다.
그 호스트가 능동 종료를 많이 했다는 뜻이다. 실제 문제는 같은 목적지로 나갈 로컬 임시 포트나 연결 추적 자원이 모자랄 때 생긴다.
먼저 상태별 연결 수, 로컬 포트 범위, 반복되는 목적지 4-tuple, 누가 먼저 닫는지 확인한다. 짧은 연결이 원인이면 keep-alive와 연결 풀로 재사용률을 높인다.
SO_REUSEADDR나 대기 시간을 줄이는 설정은 포트 고갈의 보편적인 해결책이 아니다. 오래된 패킷을 새 연결에서 막는 안전 여유도 줄일 수 있다.
추천 꼬리질문
관련 질문
- TCP 연결은 어떤 상태를 지나 닫히는가?네트워크종료 시 지나는 상태 흐름을 알아야 그중 TIME_WAIT의 필요성 논의가 읽힌다
- TCP 연결 종료는 왜 대개 네 번 주고받는가?네트워크4-way 종료 흐름을 알아야 마지막 ACK 유실 대비인 TIME_WAIT 이유가 읽힌다
- TIME_WAIT 포트 고갈은 어떻게 진단하는가?네트워크TIME_WAIT의 의미와 목적을 알아야 포트 고갈 진단이 읽힌다
- TCP 연결에서 RST 패킷은 어떤 상황에 전송되는가?네트워크둘 다 TCP 연결 종료 국면의 상태·패킷 처리를 다룬다
- 커넥션 풀을 사용하는 이유는 무엇인가?데이터베이스