Network / / 2024. 10. 10. 17:11

HoL Blocking, Pipelining, Multiplexing

**Head-of-Line Blocking (HoL Blocking)**은 네트워크에서 데이터 전송의 병목 현상 중 하나로, 대기열에서 맨 앞에 있는 데이터 패킷이 문제로 인해 처리가 지연되면 뒤에 있는 다른 패킷들도 모두 지연되는 현상을 말해. 쉽게 말해 **“줄 맨 앞에 있는 사람이 일을 못 끝내서, 뒤에 있는 사람들도 전부 기다려야 하는 상황”**이야.

 

HoL Blocking이 발생하는 이유

 

주로 TCP/IP 프로토콜이나 스위치(라우터)에서 패킷들이 한 줄로 전송되면서 발생해. 아래와 같은 상황에서 주로 HoL Blocking이 나타나:

 

1. 네트워크 전송 큐:

네트워크 스위치나 라우터는 데이터를 한 번에 여러 개의 포트로 전달하지 못하고, 특정 포트가 막히면 그 포트를 기다리며 나머지 패킷들도 대기해. 줄 맨 앞의 패킷이 처리되지 않으면 뒤에 있는 패킷들도 계속 기다려야 해.

2. TCP 연결:

TCP 연결에서는 순서대로 패킷을 처리해야 해. 만약 첫 번째 패킷이 손실되거나 지연되면 뒤에 있는 패킷들이 먼저 도착해도 처리되지 않고, 앞에 있는 패킷을 기다리며 전체 전송 속도가 느려지게 돼. 이것이 TCP에서의 HoL Blocking이야.

 

HoL Blocking의 문제점

 

성능 저하: 첫 번째 패킷의 지연이나 손실 때문에 전체 데이터 전송이 늦어지면서 전송 속도가 크게 떨어져.

네트워크 병목: 앞에 있는 패킷 하나 때문에 뒤에 있는 패킷들도 처리되지 않아서 전체 시스템의 성능에 영향을 줄 수 있어.

 

HoL Blocking을 해결하기 위한 방법

 

1. HTTP/2와 멀티플렉싱:

HTTP/1.1에서는 하나의 연결에서 한 번에 하나의 요청과 응답을 처리하므로 HoL Blocking이 발생할 수 있어. 하지만 HTTP/2멀티플렉싱이라는 기법을 도입해서, 한 연결에서 여러 요청을 동시에 보낼 수 있어. 이를 통해 각 요청이 독립적으로 처리되기 때문에 HoL Blocking 문제가 줄어들어.

2. TCP 연결의 윈도우 크기 조절:

TCP에서 윈도우 크기를 조절하여 패킷 손실을 줄이고 재전송을 최적화할 수 있어. 패킷이 손실되더라도 네트워크 혼잡을 조절하여 빠르게 회복할 수 있게 도와.

3. UDP 사용:

일부 실시간 애플리케이션(예: 스트리밍, 온라인 게임)은 TCP 대신 UDP를 사용해. UDP는 패킷이 순서대로 도착하지 않아도 바로 처리하기 때문에 HoL Blocking의 영향을 받지 않아. 대신 UDP는 데이터 손실에 대한 복구 메커니즘이 없다는 단점이 있어.

 

요약

 

HoL Blocking은 네트워크에서 줄 맨 앞의 데이터가 문제를 일으키면 뒤에 있는 데이터도 모두 지연되는 현상으로, 주로 TCP 연결이나 네트워크 장치의 전송 큐에서 발생해. 이를 해결하기 위해서는 HTTP/2의 멀티플렉싱, TCP 윈도우 크기 조절, 또는 UDP 같은 프로토콜을 사용하는 방법이 있어.

 

이해하기 쉽게 요약하면, 맨 앞의 데이터가 문제 생겨서 처리가 안 되면 뒤에 있는 데이터도 다 같이 기다려야 하는 현상이라고 보면 돼!


**파이프라이닝(Pipelining)**과 **멀티플렉싱(Multiplexing)**은 네트워크 성능을 개선하기 위한 두 가지 중요한 개념이야. 둘 다 데이터를 효율적으로 전송하기 위한 방법이지만, 작동 방식이 다르고, 각자 사용하는 상황도 달라. 아래에서 각각을 자세히 설명할게.

 

1. 파이프라이닝(Pipelining)

 

파이프라이닝은 HTTP/1.1에서 도입된 기능으로, 하나의 TCP 연결에서 연속된 요청을 순차적으로 보내는 방식이야. 즉, 클라이언트가 하나의 요청을 서버에 보내고 응답을 받기 전에 다음 요청을 보내는 것이 가능해.

 

작동 방식

 

클라이언트는 하나의 요청을 보내고 응답을 기다리는 것이 아니라, 여러 개의 요청을 연달아 보냄.

서버는 요청을 받은 순서대로 응답을 처리하고, 응답도 순차적으로 반환함.

모든 요청이 같은 연결을 공유하지만, 응답도 순서대로 오기 때문에 뒤의 요청이 먼저 처리되지 못해. 만약 첫 번째 응답이 늦어지면 뒤의 응답들도 함께 지연되며, 이때 Head-of-Line Blocking 문제가 발생할 수 있어.

 

장점

 

이전 요청의 응답을 기다리지 않고 다음 요청을 보낼 수 있어서 연속적인 요청 처리 속도가 빨라짐.

서버와 클라이언트 간의 연결을 반복해서 새로 맺지 않으므로 연결 지연 시간이 줄어듦.

 

단점

 

Head-of-Line Blocking 문제가 발생할 수 있음. 즉, 첫 번째 응답이 느리면 나머지 요청의 응답도 함께 지연됨.

서버의 응답이 순차적으로 와야 하므로, 처리 속도가 빠른 요청도 느린 요청을 기다려야 함.

 

HTTP/1.1에서의 파이프라이닝 문제

 

HTTP/1.1에서는 파이프라이닝이 기본으로 비활성화되어 있어. 이건 브라우저들이 파이프라이닝을 제대로 지원하지 않았고, 일부 네트워크 환경에서 비효율적일 수 있기 때문이야. 그래서 HTTP/2의 멀티플렉싱이 등장하게 돼.

 

2. 멀티플렉싱(Multiplexing)

 

멀티플렉싱HTTP/2에서 도입된 방식으로, 하나의 TCP 연결에서 여러 개의 요청과 응답을 동시에 처리할 수 있는 방법이야. 파이프라이닝과 달리, 요청과 응답이 독립적으로 처리되기 때문에 Head-of-Line Blocking 문제가 발생하지 않아.

 

작동 방식

 

클라이언트는 하나의 TCP 연결을 통해 여러 개의 요청을 보낼 수 있어, **각 요청은 개별적인 “스트림”**으로 처리돼.

요청과 응답은 동시에 처리될 수 있으며, 각 스트림이 서로 독립적이어서 한 요청의 응답이 지연되더라도 다른 요청의 응답에 영향을 주지 않음.

요청의 순서와 관계없이 응답이 먼저 도착할 수 있음.

 

장점

 

Head-of-Line Blocking 문제가 발생하지 않음. 각 스트림이 독립적이기 때문에 특정 요청이 느리더라도 다른 요청은 빠르게 처리됨.

하나의 TCP 연결로 여러 요청과 응답을 병렬적으로 처리하므로, 네트워크 자원을 효율적으로 사용할 수 있음.

요청을 압축해서 보내는 헤더 압축과 함께 사용하면, 네트워크 대역폭 사용량도 절감됨.

 

단점

 

TCP 연결이 하나뿐이기 때문에, 네트워크가 혼잡하거나 패킷 손실이 발생하면 여러 요청에 영향을 미칠 수 있어.

클라이언트와 서버 모두 HTTP/2를 지원해야 멀티플렉싱을 사용할 수 있어. 하지만 최신 브라우저와 서버는 대부분 HTTP/2를 지원함.

 

파이프라이닝 vs. 멀티플렉싱

 

파이프라이닝 (HTTP/1.1) 멀티플렉싱 (HTTP/2)
작동 방식 여러 요청을 순차적으로 보내고, 순차적으로 응답 받음 여러 요청을 동시에 보내고, 응답도 병렬로 처리함
응답 처리 응답이 순서대로 도착해야 함 응답이 순서와 상관없이 먼저 도착할 수 있음
문제점 Head-of-Line Blocking 발생 가능 Head-of-Line Blocking 문제 해결
지원 프로토콜 HTTP/1.1 HTTP/2
장점 요청을 기다리지 않고 여러 요청을 보낼 수 있음 하나의 연결에서 다수의 요청을 병렬 처리, 효율적
단점 첫 번째 응답이 느리면 뒤의 응답도 지연됨 TCP 연결 하나에 의존하므로, 네트워크 혼잡 시 영향을 받을 수 있음

 

요약

 

파이프라이닝HTTP/1.1에서 도입된 방법으로, 여러 요청을 연속적으로 보내는 방식이지만 응답이 순서대로 와야 해서 Head-of-Line Blocking 문제가 발생할 수 있어.

멀티플렉싱HTTP/2에서 도입된 방법으로, 하나의 연결에서 여러 요청을 동시에 처리할 수 있어 응답 순서와 상관없이 빠르게 처리될 수 있고, Head-of-Line Blocking 문제도 해결돼.

 

멀티플렉싱은 현대 웹 기술에서 널리 사용되고 있으며, 특히 브라우저가 많은 리소스(이미지, CSS, JavaScript 등)를 동시에 요청할 때 성능을 크게 향상시켜줘.

'Network' 카테고리의 다른 글

HTTP Header, CDN 캐싱 전략, Cache-Control  (3) 2024.10.15
Https 프로토콜  (3) 2024.09.27
CORS, WebSocket, 그리고 Base64  (6) 2024.09.27
Http 프로토콜  (5) 2024.09.27
UDP 소켓 프로그래밍  (0) 2024.09.26
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유