🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    해결됨

안녕하세요 네트워크 관련 질문드립니다.

23.08.12 22:22 작성 23.08.12 22:22 수정 조회수 395

0

안녕하세요

좋은 강의 감사드립니다.

네트워크 관련 몇가지 질문 드립니다.

첫번째로 TIME_WAIT 상태에 대한 질문 드립니다.

연결을 끊는 입장(Active Closer)에서 TIME_WAIT이 발생하는 이유로

Active Closer가 FIN과정 중 마지막으로 ACK를 보냈을때 패킷이 유실될 경우를 대비해서 생기는 것으로 이해해도 될까요?

패킷이 유실될 경우 Passive Closer가 다시 FIN을 보내고 Active Closer는 TIME_WAIT상태이므로 소켓이 남아 있기에 다시 ACK를 보내고,, 이렇게 이해하고 있습니다.

 


두번째로 Keep alive에 대한 질문 드립니다.

HTTP/1.0+에서는 Keep-Alive 헤더를 사용하여 Keep Alive기능이 사용되었지만, HTTP/1.1 부터는 스펙 자체에 Persistent Connection 개념이 도입되어 헤더가 필요없이 기능이 활성화 되어 있다고 이해하고 있습니다.

강의 내용 중 나오는 keepalive_timeout 설정 파라미터가 HTTP/1.1 스펙 이라고 소개된 부분은 HTTP/1.1 스펙을 사용하는 nginx의 설정값인 부분으로 이해해도 될까요?

keep alive 개념 이해는 되지만 실제 구현에 대한 이해가 부족한 상태여서 약간 헷갈리는 부분이라 질문 드립니다,,

답변 1

답변을 작성해보세요.

1

첫 번째 질문은, TIME_WAIT소켓이 왜 필요할까 라는 이야기로 연결이 되는데요, 예시로 든 상황을 방어하기 위함도 맞습니다. 자세한 내용은 https://docs.likejazz.com/time-wait/ 을 참고 하시면 됩니다.

TIME_WAIT 소켓이 없다면, 그리고 그 시간이 짧다면 패킷의 유실 혹은 비정상적인 지연 도착에 대해 대비할 수가 없게 되기 때문에 안정적인 네트워크 통신을 위해서 연결이 끊어질 경우 충분한 시간을 두고 정리하기 위함이라고 이해 하시면 됩니다.

사실 TIME_WAIT 소켓이 몇 초나 살아 남느냐, 빨리 없어지게 할 수 없느냐 라는 것보다 더 중요한 건 왜 TIME_WAIT 소켓이 생기는 걸까 입니다. 연결을 먼저 끊는 쪽에서 TIME_WAIT 소켓이 생기기 때문에 불필요하게 먼저 연결을 끊는 것은 아닐까, 연결을 유지 시킬 순 없을까, 연결을 유지 시킨다면 TCP 커넥션을 불필요하게 맺고 끊는 작업을 하지 않아도 되기 때문에 성능이 향상 되지 않을까 라고 고민을 시작해 볼 필요가 있습니다. 물론 연결을 무조건 적으로 유지하는 것도 좋은 선택은 아니기 때문에 불필요한 이라는 단어가 있는 것 처럼 워크로드와 통신 방식을 충분히 이해 해야 합니다.

두 번째 질문은, HTTP 버전과 Connection 헤더 및 Keep-Alive 동작으로 연결이 되는데요, 말씀 하신 것처럼 HTTP/1.0 에서는 Connection:Keep-Alive 라고 명시를 해야 연결이 유지되고 HTTP/1.1 에서는 별도로 Connection 헤더를 기입하지 않아도 기본적으로 연결이 유지 됩니다. 그래서 nginx의 keepalive_timeout 설정 파라미터가 동작하는 경우는 아래와 같이 두 가지 경우 입니다.

  1. HTTP/1.0 에서 Connection:Keep-Alive를 명시 했을 때

  2. HTTP/1.1에서 별도의 Connection 헤더를 기입하지 않았거나, Connection: close로 명시하지 않았을 때

다만 강의 내용 중에 nginx의 keepalive_timeout을 HTTP/1.1 의 스펙이라고 소개한 부분은 오해의 소지가 있을 수 있겠네요. HTTP/1.0 이어도 Connection: Keep-Alive로 명시 했다면 동작 합니다. HTTP/1.0과 HTTP/1.1 에서의 기본적인 커넥션 관리 방식이 차이를 설명하기 위해서 였습니다. 이 부분은 강의 노트에도 명시해 두겠습니다. 감사합니다.

그리고 HTTP 커넥션 관리와 관련된 자세한 내용은 https://developer.mozilla.org/en-US/docs/Web/HTTP/Connection_management_in_HTTP_1.x 을 참고 하시면 됩니다.

hyukjuner님의 프로필

hyukjuner

질문자

2023.08.13

답변 감사합니다.

명확하게 이해 되었습니다.

감사합니다!

채널톡 아이콘