Home TIME_WAIT이 필요한 이유
Post
Cancel

TIME_WAIT이 필요한 이유

TIME_WAIT 이 필요한 이유

TIME_WAIT이 필요한 이유에 대해서 좋은 글을 발견했다. link

이번 포스트에서는 TIME_WAIT 상태가 왜 필요하고, 왜 그렇게 길게 설정되어 있는지 이유를 살펴보자. 만일 TIME_WAIT이 짧다면 아래와 같은 두 가지 문제가 발생한다.

첫 번째는 지연 패킷이 발생할 경우다.

img
이미 다른 연결로 진행되었다면 지연 패킷이 뒤늦게 도달해 문제가 발생한다. 매우 드문 경우이긴 하나 때마침 SEQ까지 동일하다면 잘못된 데이타를 처리하게 되고 데이타 무결성 문제가 발생한다.

두 번째는 원격 종단의 연결이 닫혔는지 확인해야할 경우다.

img

마지막 ACK 유실시 상대방은 LAST_ACK 상태에 빠지게 되고 새로운 SYN 패킷 전달시 RST를 리턴한다. 새로운 연결은 오류를 내며 실패한다. 이미 연결을 시도한 상태이기 때문에 상대방에게 접속 오류 메시지가 출력될 것이다.

따라서 반드시 TIME_WAIT이 일정 시간 남아 있어서 패킷의 오동작을 막아야 한다.

여기서 또 한가지 질문이 생길수 있다. 마지막 FIN 또는 ACK가 계속해서 유실이 일어나서 2MSL 타임을 넘어가면 어떻게 될까? 분약 Client(Active Close)의 경우에는 TIME_WAIT 상태의 2MSL 타임이 지났으므로 CLOSE 상태가 된다. 하지만 Server(Passive Close)입장에서는 LAST_ACK 상태에 무한정 대기하게 된다. 이론적으로는 그렇지만 실제로는 서버가 재전송을 해야하는 횟수등을 정해두고 그 횟수가 넘어가면 연결을 Reset하는 방식으로 해결한다. link

This post is licensed under CC BY 4.0 by the author.

4-way handshake는 왜 4단계를 거쳐야하는가?

Multilevel Queue (MLQ) Scheduling

Comments powered by Disqus.

Trending Tags