인프런 커뮤니티 질문&답변

정재원님의 프로필 이미지
정재원

작성한 질문수

외워서 끝내는 네트워크 핵심이론 - 기초

time_wait 상태에 대해서

해결된 질문

작성

·

163

0

안녕하세요

강의 내용에서 time_wait 상태로 인해서 서버에서 tcp 연결을 끊는 것 보다 클라이언트에서 끊는게 더 효율적이라고 하셨는데 해당 부분에 대한 구체적인 예시를 알면 더 좋을 것 같아 질문을 드립니다.

 

저는 위 말씀을 듣고 tcp 서버에서 먼저 연결을 끊어 서버 소켓 포트에 대해 소켓이 time_wait 상태로 존재하도록 하고 다시 클라이언트가 연결을 하도록 했는데요, 문제 없이 연결이 되었습니다. ss 명령어를 통해서 확인해 봐도, 해당 포트에 대해 LISTEN 상태와 TIME_WAIT 상태가 둘 다 존재하는 상태였고, 해당 time_wait이 분명 존재하는 상황에서도 클라이언트가 계속 연결을 시도하면 연결이 잘 ESTABLISHED 되었습니다.

 

아마 강사님께서 말씀하신 내용은 이 부분이 아니겠지만, 어떠한 부작용(?) 때문에 tcp 연결을 클라이언트에서 끊는게 더 좋고, time_wait 상태도 언제 문제가 되는 상황인지 더 설명을 들으면 좋을 것 같습니다.

 

좋은 강의 감사합니다!

답변 3

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

한 호스트가 동시에 개방할 수 있는 소켓의 개수는 제한이 있습니다. 그리고 서버는 여러 클라이언트의 연결을 동시에 받아야 서비스를 제공 할 수 있습니다. 문제는 TIME_WAIT 상태인 소켓은 시스템에 회수되지 못하고 소켓 1개를 소진한 상태로 유지 된다는 것입니다.

몇 개의 TCP 세션을 가지고 테스트 하는 것은 문제가 없겠으나 수 만개 TCP 세션이 단시간 동안 생기고 사라지고를 반복하는 상황이라면 TIME_WAIT는 매우 심각한 문제로 작용합니다. 특히 게임서버에서 피크 시간에 흔히 벌어지는 일입니다. 이런 문제를 해결하기 위해 부하분산장치(Load balancer)를 사용하기도 합니다.

이런 상황에서 클라이언트 사이트 포트 고갈 문제를 우려해줄 필요는 없겠습니다. 서버는 클라이언트에 비해 최소 수백 배 이상의 부하상태 및 소켓 고갈 속도를 고민해야 합니다. 참고하시기 바랍니다. 😄

정재원님의 프로필 이미지
정재원
질문자

답변 감사합니다!

0

정재원님의 프로필 이미지
정재원
질문자

추가로 질문을 드립니다 (글 수정이 안되네요)
구글링을 해보고 공부를 좀 더 해보니, TIME_WAIT 문제가 발생하는 대부분의 경우는 Client(Load Balancer 가 대표적인 예시 같습니다)에서 빠르게 TCP 요청을 맺고 끊어서 이용 가능한 포트의 개수가 고갈되는 상황 인 것 같습니다. 그래서 오히려 TIME_WAIT문제(클라이언트 포트 고갈 문제)를 해결하는 관점에서 본다면 서버에서 tcp 연결을 active하게 끊는게 맞지 않을까 하는 궁금증이 듭니다.

0

안녕하세요, 인프런 AI 인턴입니다.

정재원님의 TIME_WAIT 상태와 관련된 궁금증에 대해, 비슷한 질문에 대한 기존 답변이 도움이 될 것 같습니다.

  1. TIME_WAIT 시간과 그 목적에 대한 질문에 대한 답변에서는 TCP 연결 종료 과정 중 TIME_WAIT 상태에 관한 설명이 있습니다. 이는 네트워크 프로토콜에서 중요한 개념 중 하나로, TIME_WAIT 상태의 시간과 목적에 대해 설명합니다.

    • TCP 연결 종료 과정 중 Time wait관련 글에서, TIME_WAIT 상태는 일정한 시간(2MSL, Maximum Segment Lifetime)이 지정되어 있으며, 데이터가 늦게 도착할 가능성을 고려하여 소켓이 즉시 재사용되지 않도록 합니다. 또한, 마지막 ACK가 손실될 경우의 종료 과정 문제를 방지하기 위한 목적도 갖습니다.
  2. TCP 연결 종료과정 TIME_WAIT에 대한 질문과 답변은 클라이언트에서 능동적으로 연결을 종료하게 하는 이유와 TIME_WAIT 상태의 존재 의의에 대해 다룹니다.

    • TCP 연결 종료과정 TIME_WAIT 글에서 다루는 것처럼, TIME_WAIT 상태는 시스템이 혼선을 방지하고, 통신 중 발생할 수 있는 간극을 막기 위한 방법입니다. 이 상태에서 시간을 가지고 있음으로써 연결 종료 과정에 대한 부조화 상황을 피할 수 있습니다.

이들 질문과 답변은 TIME_WAIT 상태가 TCP 연결 종료 과정에서 발생하는 이유와 그로 인해 클라이언트 측에서 끊는 것이 권장되는 경우에 대한 일반적인 이해를 제공할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

정재원님의 프로필 이미지
정재원

작성한 질문수

질문하기