Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Network] HOL이란 무엇인가요? #66

Open
leejohy-0223 opened this issue Nov 8, 2022 · 1 comment
Open

[Network] HOL이란 무엇인가요? #66

leejohy-0223 opened this issue Nov 8, 2022 · 1 comment
Labels
NETWORK 네트워크 질문

Comments

@leejohy-0223
Copy link
Collaborator

HOL이란 무엇인가요?

키워드

HTTP, TCP

@leejohy-0223 leejohy-0223 added the NETWORK 네트워크 질문 label Nov 8, 2022
@leejohy-0223 leejohy-0223 self-assigned this Nov 8, 2022
@leejohy-0223
Copy link
Collaborator Author

1. HOL Blocking이란?

Head Of Line Blocking의 약자로, 네트워크에서 같은 큐에 있는 패킷이 첫 번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상을 말합니다. 이로 인해 최악의 경우 packet drop이 발생할 수 있습니다.


2. HOL Blocking의 종류

HOL은 HTTP, TCP 레이어에서 각각 발생할 수 있습니다. 요점은 먼저 받은 요청에 대한 응답이 먼저 전송되어야 한다는 것을 의미합니다.

[HTTP HOL Blocking]

우선 HTTP 1.0 → 1.1로 발전함에 따라 추가된 대표 기능은 다음과 같습니다.

  • Persistent : TCP Connection 유지
  • Pipelining : 한꺼번에 여러 요청 가능

이를 통해 한 커넥션에서 클라이언트는 한꺼번에 여러 요청을 보낼 수 있게 되었습니다. 하지만 요청을 보낸 순서대로 응답이 와야한다는 점으로 인해 HOL Blocking이 발생합니다. 아래에서 볼 수 있듯이 대부분 브라우저가 지원하지 않습니다.

image

HTTP 2.0에서는 Multiplexed Stream을 통해 Frame 단위로 요청과 응답을 주고받으며, 이를 사용하면 순서에 상관 없이 받는 쪽에서 조립할 수 있도록 설계되었습니다. 따라서 HTTP 레벨에서의 HOL Blocking은 해결되었습니다.

[TCP HOL]

하지만 앞서 살펴본 솔루션도 결국 TCP에서는 하나의 세그먼트에 불과하며, 세그먼트에도 순서가 부여되어 있습니다. 신뢰성 보장을 위해 중간에 손실된다면 재전송되며, 패킷 순서가 역전되지 않도록 후속 패킷이 대기하게 됩니다. 따라서 궁극적으로는 HTTP 2.0의 스트림을 통해 모든 HOL이 해결되었다고 볼 수 없습니다. 오히려 한 개의 TCP 커넥션으로 다수의 요청을 처리하므로 경우에 따라서는 성능이 나빠질 수 있습니다.


3. 그럼 TCP HOL은 어떻게 해결할 수 있을까?

  • 혼잡 제어 알고리즘을 통해 window 크기(단위 시간 내에 보내는 패킷의 수)를 유동적으로 변경하는 방식으로 개선할 수 있습니다.
  • QUIC(Quick UDP Internet Connections)를 통해 해결할 수 있습니다. TCP가 아닌 UDP 위에서 자체적으로 재전송 제어 메커니즘을 구성한 방식이며 이를 통해 기존 TCP 방식에서 발생하는 HOL Blocking 문제를 극복하였습니다.

4. Reference

@leejohy-0223 leejohy-0223 removed their assignment Nov 8, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
NETWORK 네트워크 질문
Projects
None yet
Development

No branches or pull requests

1 participant