- HTTP/2
- 구글에서 HTTP/1.1의 한계를 극복하기 위해 SPDY 프로토콜을 개발함.
- 2015년에 SPDY를 기반으로 HTTP/2를 만들었다.
- 바이너리 포맷 계층
- 애플리케이션 계층과 전송 계층 사이에 바이너리 포맷 계층을 추가한다.
- HTTP1.0은 일반 텍스트 메시지를 전송하고 줄바꿈으로 데이터를 나눴지만 HTTP/2.0은 바이너리 데이터로 변경됨. 더 작은 메세지가 '프레임'으로 캡슐화 되어서 전송됨.
- h2, h2c
- h2c는 TLS를 사용하지 않고 TCP 연결 위에서 직접 HTTP/2를 사용하는 방식이다.
- 개발 환경에서의 디버깅 또는 로컬 테스트를 위해 암호화된 연결을 설정할 필요가 없기 때문에 편리하게 테스트에 이용할 수 있다는 장점, 암호화와 관련된 오버헤드가 없다는 장점이 있다.
- h2는 tls가 장착된 http2이다. 브라우저에서는 HTTPS가 없는 HTTP2는 지원하지 않기 때문에 브라우저에서는 h2만 허용된다.
- 멀티플렉싱
- 단일 TCP 연결의 여러 스트림에서 여러 HTTP 요청과 응답을 '비동기적'으로 보낼 수 있다. 이 방식을 통해 HOL을 해결한다.
- HTTP1.1에서는 병렬요청을 하려면 다중 TCP 연결을 통해서 해야 하고 일반적으로는 TCP 연결 하나당 병렬요청은 불가능 했다.
- 위의 문제를 해결하는 방법으로 HTTP/2.0에서는 리소스를 작은 프레임으로 나누고 이를 스트림으로 프레임을 전달한다. 각각의 프레임은 스트림 ID, 해당 청크의 크기를 나타내는 프레임이 추가되었기 때문에 작게 나눠서 다운로드가 되더라도 결과적으로 응답 데이터에서는 올바른 순서로 재조립할 수 있게 된다.
- 서버푸시
- 서버가 리소스를 클라이언트에 푸시를 할 수 있다. 요청된 html파일과 함께 다른 개체를 별도로 보낼 수 있다. 만약 요청한 html에 css가 포함되어 있다면 별도 요청없이 css를 같이 보낼 수 있다.
- 헤더압축
- HTTP/1.1에는 무거운 헤더가 있었지만 2.0에서는 허프만 인코딩 방법으로 압축시킨다. 똑같은 서버에서 2개의 이미지를 준다고 했을 때 중복되는 헤더는 제외한 채로 보내고 해당 공통 필드로 헤더를 재구성하며 중복되지 않은 헤더 값은 허프만 인코딩 압축 방법으로 압축해서 전송한다.
- *허프만 인코딩: 문자열을 문자 단위로 쪼개 빈도수를 세어 빈도가 높은 정보는 적은 비트 수를 사용해 표현하고, 빈도가 낮은 정보는 비트 수를 많이 사용하여 전체 데이터 표현에 필요한 비트양을 줄이는 알고리즘입니다.
- 우선순위
- 서버에서 원하는 순서대로 우선순위를 정해 리소스를 전달할 수 있다.
- HTTP/3
- HTTP/2는 여전히 TCP를 사용하기 때문에 초기 연결에 대한 RTT로 인해 지연시간이 생기는 문제점이 있었는데 이를 해결한 게 HTTP/3이다.
- TLS1.2, TCP 계층 대신 QUIC(Quick UDP Internet Connections)라는 계층 위에서 돌아가고 UDP 기반으로 동작한다.
- 멀티플렉싱 또한 가능하고 초기 연결 설정시 지연시간 감소라는 특성이 있다.
- HTTP/2 경우 3 - RTT가 필요했다면 QUIC는 1 - RTT만 필요하다는 장점이 있다.
- HTTP/2의 경우 클라이언트와 서버 간의 연결을 맺어 세션을 만드는 데 필요한 핸드셰이크, 암호화 통신을 구축하기 위한 TLS 핸드셰이크가 각각 필요했으나 HTTP/3는 TLS로 암호화통신을 구축할 때의 단 한 번의 핸드셰이크를 활용해 클라이언트와 서버 간의 연결, 암호화 통신 모두 다 구축할 수 있다. 이를 통해 1 - RTT만에 모든 연결을 만들 수 있다.
- 전송된 패킷이 손실 되었다면 수신 측에서 에러를 검출하고 수정하는 방식이며 열악한 네트워크 환경에서도 낮은 패킷손실률을 자랑하는 순방향 오류 수정 메커니즘(FEC, Forward Error Correction)이라는 특징을 가진다.
출처
CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조 - 큰돌
'CS 지식 > 네트워크' 카테고리의 다른 글
브라우저의 캐시 (0) | 2024.08.25 |
---|---|
HTTPS와 TLS - 암호화, 핸드셰이크 (0) | 2024.08.21 |
HTTP/1.0, HTTP/1.1의 차이 (0) | 2024.08.19 |
HTTP 헤더 (0) | 2024.08.19 |
공인 IP, 사설 IP, NAT (0) | 2024.08.19 |