누군가 HTTP / 2와 관련하여 멀티플렉싱과 작동 방식을 설명해 주시겠습니까?
누군가 HTTP / 2와 관련하여 멀티플렉싱과 작동 방식을 설명해 주시겠습니까?
답변:
간단히 말해서 멀티플렉싱을 사용하면 브라우저가 동일한 연결에서 한 번에 여러 요청을 시작하고 순서에 관계없이 요청을받을 수 있습니다.
이제 훨씬 더 복잡한 대답에 대해 ...
웹 페이지를로드 할 때 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) 각 품목이 도착하면 작업을 시작할 수 있음을 의미합니다 ( "오, 내가 생각했던 것만 큼 좋지 않아서 다른 것을 주문하거나 대신 주문할 수 있습니다" ).
물론 우체부 밴의 크기 (대역폭)에 의해 여전히 제한되어 있으므로 그날에 꽉 차면 다음날까지 일부 소포를 분류 사무실에 남겨 두어야 할 수도 있지만, 비교하면 거의 문제가되지 않습니다. 실제로 주문을주고받는 데 지연이 발생합니다. 대부분의 웹 브라우징에는 부피가 큰 패키지가 아닌 작은 글자를 앞뒤로 보내는 것이 포함됩니다.
도움이 되었기를 바랍니다.
Simple Ans ( Source ) :
멀티플렉싱은 브라우저가 여러 요청을 보내고 단일 TCP 연결로 "번들 된"여러 응답을받을 수 있음을 의미합니다. 따라서 DNS 조회 및 핸드 셰이크와 관련된 워크로드는 동일한 서버에서 오는 파일에 대해 저장됩니다.
복잡 / 상세 답변 :
@BazzaDP에서 제공하는 답변을 확인하십시오.
@Juanma Menendez의 대답은 정확하지만 그의 다이어그램은 헷갈 리기 때문에이를 개선하기로 결정하여 종종 합쳐지는 개념 인 멀티플렉싱과 파이프 라이닝의 차이점을 명확히했습니다.
파이프 라이닝 (HTTP / 1.1)
동일한 HTTP 연결을 통해 여러 요청이 전송 됩니다. 응답은 동일한 순서로 수신됩니다. 첫 번째 응답에 많은 시간이 걸리면 다른 응답이 줄을서야합니다. 다른 명령어가 디코딩되는 동안 명령어를 가져 오는 CPU 파이프 링과 유사합니다. 여러 지침이 동시에 비행 중이지만 순서는 유지됩니다.
멀티플렉싱 (HTTP / 2)
동일한 HTTP 연결을 통해 여러 요청이 전송 됩니다. 응답은 임의의 순서로 수신됩니다. 다른 사람을 차단하는 느린 응답을 기다릴 필요가 없습니다. 최신 CPU의 비 순차적 명령 실행과 유사합니다.
개선 된 이미지가 차이점을 명확히 보여주기를 바랍니다.