HTTP / 2에서 멀티플렉싱은 무엇을 의미합니까?


답변:


221

간단히 말해서 멀티플렉싱을 사용하면 브라우저가 동일한 연결에서 한 번에 여러 요청을 시작하고 순서에 관계없이 요청을받을 수 있습니다.

이제 훨씬 더 복잡한 대답에 대해 ...

웹 페이지를로드 할 때 HTML 페이지를 다운로드하면 CSS, JavaScript, 이미지로드 등이 필요하다는 것을 알 수 있습니다.

HTTP / 1.1에서는 HTTP / 1.1 연결에서 한 번에 하나만 다운로드 할 수 있습니다. 따라서 브라우저는 HTML을 다운로드 한 다음 CSS 파일을 요청합니다. 반환되면 JavaScript 파일을 요청합니다. 반환되면 첫 번째 이미지 파일을 요청합니다 ... 등등. HTTP / 1.1은 기본적으로 동기식입니다. 요청을 보내면 응답을받을 때까지 중단됩니다. 이것은 브라우저가 요청을 시작하고 응답을 기다린 다음 다른 요청을 시작하고 응답을 기다릴 때 대부분의 시간을 브라우저가별로하지 않음을 의미합니다. 많은 JavaScript는 브라우저가 많은 처리를 수행해야하지만 이는 다운로드되는 JavaScript에 따라 다르므로 최소한 처음에는 HTTP / 1.1로 상속 된 지연으로 인해 문제가 발생합니다. 일반적으로 서버는

따라서 오늘날 웹의 주요 문제 중 하나는 브라우저와 서버간에 요청을 보낼 때 네트워크 대기 시간입니다. 수십 또는 수백 밀리 초에 불과할 수 있습니다.별로 보이지 않을 수도 있지만, 웹 브라우징에서 가장 느린 부분을 합산하고 종종 가장 느린 부분입니다. 특히 웹 사이트가 더 복잡해지고 추가 리소스 (가져 오는대로)와 인터넷 액세스가 필요하기 때문입니다. 모바일을 통해 증가하고 있습니다 (광대역보다 지연 시간이 느림).

예를 들어 HTML이 자체적으로로드 된 후 웹 페이지를로드해야하는 10 개의 리소스가 있다고 가정 해 보겠습니다 (100 개 이상의 리소스가 일반적이기 때문에 오늘날의 표준에 따르면 매우 작은 사이트이지만 간단하게 유지하고 다음과 같이 진행합니다). 예). 그리고 각 요청이 인터넷을 통해 웹 서버로 이동하는 데 100ms가 걸리고 양쪽 끝의 처리 시간이 무시할 만하다고 가정 해 보겠습니다 (간단 함을 위해이 예에서는 0이라고합시다). 각 리소스를 전송하고 한 번에 하나씩 응답을 기다려야하므로 전체 사이트를 다운로드하는 데 10 * 100ms = 1,000ms 또는 1 초가 걸립니다.

이 문제를 해결하기 위해 브라우저는 일반적으로 웹 서버에 대한 다중 연결 (일반적으로 6 개)을 엽니 다. 이는 브라우저가 동시에 여러 요청을 실행할 수 있다는 것을 의미합니다. 이는 훨씬 더 좋지만 여러 연결을 설정하고 관리해야하는 복잡성을 감수해야합니다 (브라우저와 서버 모두에 영향을 미침). 이전 예를 계속하고 4 개의 연결이 있다고 가정하고, 단순성을 위해 모든 요청이 동일하다고 가정하겠습니다. 이 경우 요청을 4 개의 모든 연결로 분할 할 수 있으므로 2 개는 3 개의 리소스를 가져오고 2 개는 2 개의 리소스를 사용하여 완전히 10 개의 리소스 (3 + 3 + 2 + 2 = 10)를 얻습니다. 이 경우 최악의 경우는 3 라운드 시간 또는 300ms = 0.3 초입니다. 이는 좋은 개선입니다. 그러나이 간단한 예에는 이러한 여러 연결을 설정하는 비용이 포함되어 있지 않습니다.

HTTP / 2를 사용하면 동일한 요청에 여러 요청을 보낼 수 있습니다.연결-따라서 위와 같이 여러 연결을 열 필요가 없습니다. 따라서 브라우저는 "이 CSS 파일 내놔. 자바 스크립트 파일 내놔. Gimme image1.jpg. Gimme image2.jpg ... Etc."라고 말할 수 있습니다. 하나의 단일 연결을 완전히 활용합니다. 이것은 무료 연결을 기다리는 요청의 전송을 지연시키지 않는 명백한 성능 이점이 있습니다. 이러한 모든 요청은 인터넷을 통해 (거의) 병렬로 서버로 전달됩니다. 서버는 각각에 응답 한 다음 돌아 오기 시작합니다. 사실 웹 서버가 어떤 순서로든 응답하고 다른 순서로 파일을 보내거나 요청 된 각 파일을 조각으로 나누고 파일을 함께 섞을 수 있기 때문에 이보다 훨씬 더 강력합니다.헤드 오브 라인 차단 문제). 그런 다음 웹 브라우저는 모든 조각을 다시 모으는 작업을 수행합니다. 가장 좋은 경우 (대역폭 제한이 없다고 가정-아래 참조) 10 개의 요청이 거의 동시에 동시에 실행되고 서버에서 즉시 응답하면 기본적으로 1 회 왕복 또는 100ms 또는 0.1 초가 있습니다. 10 개의 리소스를 모두 다운로드하십시오. 그리고 이것은 HTTP / 1.1에 대해 다중 연결이 가진 단점이 없습니다! 이는 또한 각 웹 사이트의 리소스가 증가함에 따라 훨씬 더 확장 가능합니다 (현재 브라우저는 HTTP / 1.1에서 최대 6 개의 병렬 연결을 열지 만 사이트가 더 복잡 해짐에 따라 확장되어야합니까?).

이 다이어그램 은 차이점을 보여 주며 애니메이션 버전도 있습니다 .

참고 : HTTP / 1.1에는 여러 요청을 한 번에 보낼 수도 있는 파이프 라이닝 개념이 있습니다. 그러나 전체적으로 요청 된 순서대로 반환되어야했기 때문에 개념적으로 유사하더라도 HTTP / 2만큼 좋은 곳은 없습니다. 이것은 브라우저와 서버 모두에서 너무 잘 지원되지 않아 거의 사용되지 않는다는 사실은 말할 것도 없습니다.

아래 주석에서 강조된 한 가지는 대역폭이 여기서 우리에게 미치는 영향입니다. 물론 인터넷 연결은 다운로드 할 수있는 양에 따라 제한되며 HTTP / 2는이를 해결하지 않습니다. 따라서 위의 예에서 설명한 10 개의 리소스가 모두 대용량 인쇄 품질 이미지 인 경우에도 여전히 다운로드 속도가 느립니다. 그러나 대부분의 웹 브라우저에서 대역폭은 대기 시간보다 문제가 적습니다. 따라서 이러한 10 개의 리소스가 웹 사이트에서 매우 일반적으로 사용되는 것처럼 작은 항목 (특히 CSS 및 JavaScript와 같은 텍스트 리소스로 압축 할 수 있음) 인 경우 대역폭은 실제로 문제가되지 않습니다. HTTP / 2는 문제를 해결하려고합니다. 이것이 HTTP / 1.1에서 또 다른 해결 방법으로 연결이 사용되는 이유이기도합니다. 예를 들어 모든 CSS는 종종 하나의 파일로 결합됩니다.HTTP / 2에서의 안티 패턴 -완전히 없애는 것에 반대하는 주장도 있지만).

실제 예를 들면 : 택배를 위해 상점에서 10 개의 품목을 주문해야한다고 가정합니다.

  • 하나의 연결이있는 HTTP / 1.1은 한 번에 하나씩 주문해야하며 마지막 항목이 도착할 때까지 다음 항목을 주문할 수 없음을 의미합니다. 모든 것을 처리하는 데 몇 주가 소요된다는 것을 이해할 수 있습니다.

  • 다중 연결이있는 HTTP / 1.1은 이동 중에 동시에 (제한된) 수의 독립 주문을 가질 수 있음을 의미합니다.

  • 파이프 라이닝을 사용하는 HTTP / 1.1은 10 개의 항목을 기다리지 않고 차례로 요청할 수 있지만 요청한 특정 순서로 모두 도착한다는 것을 의미합니다. 그리고 한 품목의 재고가 없으면 나중에 주문한 품목을 받기 전에 기다려야합니다. 나중에 해당 품목이 실제로 재고가 있더라도! 이것은 조금 더 좋지만 여전히 지연 될 수 있으며 어쨌든 대부분의 상점이 이러한 주문 방식을 지원하지 않는다고 가정 해 봅시다.

  • HTTP / 2는 지연없이 특정 순서로 항목을 주문할 수 있음을 의미합니다 (위와 유사). 상점은 준비된대로 배송하므로 요청한 것과 다른 순서로 도착할 수 있으며 항목을 분할하여 해당 주문의 일부가 먼저 도착할 수도 있습니다 (위보다 훨씬 좋음). 궁극적으로 이것은 1) 전체적으로 모든 것을 더 빨리 얻고 2) 각 품목이 도착하면 작업을 시작할 수 있음을 의미합니다 ( "오, 내가 생각했던 것만 큼 좋지 않아서 다른 것을 주문하거나 대신 주문할 수 있습니다" ).

물론 우체부 밴의 크기 (대역폭)에 의해 여전히 제한되어 있으므로 그날에 꽉 차면 다음날까지 일부 소포를 분류 사무실에 남겨 두어야 할 수도 있지만, 비교하면 거의 문제가되지 않습니다. 실제로 주문을주고받는 데 지연이 발생합니다. 대부분의 웹 브라우징에는 부피가 큰 패키지가 아닌 작은 글자를 앞뒤로 보내는 것이 포함됩니다.

도움이 되었기를 바랍니다.


8
멋진 설명. 예는 내가 이것을 얻는 데 필요한 것입니다. 따라서 HTTP / 1.1에서는 응답이 올 때까지 대기하고 다음 요청을 발송하는 사이에 시간 낭비가 있습니다. HTTP / 2는이를 수정합니다. 감사합니다.
user3448600

1
하지만 가혹하다고 생각합니다. 대역폭에 대한 부분을 추가해달라고 요청했을 수도 있습니다.이 작업은이 토론을 마친 후에 수행 할 것입니다. 그러나 IMHO 대역폭은 웹 브라우징 (적어도 서구에서는)만큼 큰 문제가 아닙니다. 그리고 HTTP / 2는 대기 시간을 개선합니다. 대부분의 웹 사이트는 많은 작은 리소스로 구성되며 다운로드 할 대역폭이 있어도 (자주 사용하는 것처럼) 네트워크 지연으로 인해 속도가 느려집니다. 대역폭이 큰 리소스의 문제가됩니다. 대용량 이미지 및 기타 리소스가있는 웹 사이트가 여전히 대역폭 한도에 도달 할 수 있다는 데 동의합니다.
배리 폴라드

1
HTTP는 이러한 보장을 제공하지 않으므로 주문을 강제하는 데 사용해서는 안됩니다. HTTP / 2를 사용하면 배달 우선 순위를 제안 할 수 있지만 주문은 제안 할 수 없습니다. 또한 JavaScript 자산 중 하나가 캐시되었지만 다른 자산이 캐시되지 않은 경우 HTTP는 우선 순위에도 영향을 미치지 않습니다. 대신 async 또는 defer ( growthwiththeweb.com/2014/02/async-vs-defer-attributes.html ) 또는 require.js와 같은 라이브러리 의 적절한 사용과 결합 된 HTML의 순서를 사용해야합니다 .
Barry Pollard

1
훌륭한 설명. 감사!
hmacias 19

2
HTTP / 1.1은 텍스트 스트림이고 HTTP / 2는 패킷 기반이기 때문입니다. 패킷이 아닌 HTTP / 2에서 프레임이라고합니다. 따라서 HTTP / 2에서 각 프레임은 프레임의 인터리빙을 허용하는 스트림에 태그를 지정할 수 있습니다. HTTP / 1.1에는 헤더와 본문에 대한 일련의 텍스트 줄이라는 개념이 없습니다. 자세한 내용은 여기 : stackoverflow.com/questions/58498116/…
Barry Pollard

4

Simple Ans ( Source ) :

멀티플렉싱은 브라우저가 여러 요청을 보내고 단일 TCP 연결로 "번들 된"여러 응답을받을 수 있음을 의미합니다. 따라서 DNS 조회 및 핸드 셰이크와 관련된 워크로드는 동일한 서버에서 오는 파일에 대해 저장됩니다.

복잡 / 상세 답변 :

@BazzaDP에서 제공하는 답변을 확인하십시오.


1
이것은 http 1.1에서도 파이프 라이닝을 사용하여 달성 할 수 있습니다. HTTP2에 다중화의 주요 목적은 주문 방식으로 응답을 기다릴하지 않는 것입니다
Dhairya Lakhera

4

HTTP 2.0의 멀티플렉싱은 단일 연결을 사용하여 여러 요청과 응답을 병렬로 전달하여이 프로세스에서 많은 개별 프레임을 생성하는 브라우저와 서버 간의 관계 유형입니다.

멀티플렉싱은 엄격한 요청-응답 의미 체계에서 벗어나 일대 다 또는 다 대다 관계를 가능하게합니다.

HTTP1 VS HTTP2 교환 프로세스


HTTP / 2 멀티플렉싱 예제에는 실제로 멀티플렉싱이 표시되지 않습니다. 다이어그램의 시나리오는 HTTP / 1.1에 도입 된 HTTP 파이프 라이닝을 보여줍니다.
ich5003 19-06-29

@ ich5003 단일 연결을 사용하기 때문에 다중화입니다. 그러나 하나의 요청에 대해 여러 응답을 보내는 경우가 여기에 표시되지 않는 것도 사실입니다.
Juanma Menendez 19

1
내가 말하려는 것은 위에 표시된 시나리오도 HTTP 파이프 라이닝을 사용해서 만 달성 할 수 있다는 것입니다.
ich5003 19

여기에서 혼란의 원인은 오른쪽 다이어그램의 요청 / 응답 순서라고 생각합니다. HTTP / 1.1에서 파이프 라이닝하여 달성 할 수있는 HTTP / 2의 특수한 다중화 사례를 표시합니다. 다이어그램의 응답 순서가 요청 순서와 다를 경우 혼동이 발생하지 않습니다.
raiks

4

멀티플렉싱 요청

HTTP / 2는 단일 TCP 연결을 통해 병렬로 데이터에 대한 여러 요청을 보낼 수 있습니다. 이것은 하나의 서버에서 웹 파일을 비동기 적으로 다운로드 할 수 있기 때문에 HTTP / 2 프로토콜의 가장 진보 된 기능입니다. 대부분의 최신 브라우저는 TCP 연결을 하나의 서버로 제한합니다. 이렇게하면 추가 왕복 시간 (RTT)이 줄어들어 최적화없이 웹 사이트로드 속도가 빨라지고 도메인 분할이 불필요 해집니다.

여기에 이미지 설명 입력


1

@Juanma Menendez의 대답은 정확하지만 그의 다이어그램은 헷갈 리기 때문에이를 개선하기로 결정하여 종종 합쳐지는 개념 인 멀티플렉싱과 파이프 라이닝의 차이점을 명확히했습니다.

파이프 라이닝 (HTTP / 1.1)

동일한 HTTP 연결을 통해 여러 요청이 전송 됩니다. 응답은 동일한 순서로 수신됩니다. 첫 번째 응답에 많은 시간이 걸리면 다른 응답이 줄을서야합니다. 다른 명령어가 디코딩되는 동안 명령어를 가져 오는 CPU 파이프 링과 유사합니다. 여러 지침이 동시에 비행 중이지만 순서는 유지됩니다.

멀티플렉싱 (HTTP / 2)

동일한 HTTP 연결을 통해 여러 요청이 전송 됩니다. 응답은 임의의 순서로 수신됩니다. 다른 사람을 차단하는 느린 응답을 기다릴 필요가 없습니다. 최신 CPU의 비 순차적 명령 실행과 유사합니다.

개선 된 이미지가 차이점을 명확히 보여주기를 바랍니다.

표준 HTTP / 1.1 흐름 / 파이프 라이닝 / 멀티플렉싱

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.