HTTP는 Application Layer로 웹 서비스 통신에 사용됩니다.
HTTP는 HTTP/1.0부터 HTTP/3까지 발전해왔습니다.
HTTP/1.0
HTTP/1.0은 한 연결당 하나의 요청을 처리하도록 설계하였습니다. 이는 서버로부터 요청의 응답을 받을 때 마다 3-Way-Handshake 과정을 거쳐야하기에 굉장히 시간이 오래걸렸습니다.
이를 해결하기위해 이미지 스플리팅, 코드압축, Base64와 같이 용량을 줄이는 방식을 많이 사용하였습니다.
HTTP/1.1
매번 TCP 연결을 하는 것이 아니라 한번 TCP 초기화를 한 이후 Keep-Alive라는 옵션을 통해 여러개의 파일을 송/수신할 수 있게 바뀌었습니다.
하지만 요청할 리소스 양에 비례해 대기시간이 길어지는 단점은 해결되지 않았습니다. 또한 헤더에 쿠키등 많은 메타데이터가 들어있어 무거웠습니다.
HOL Blocking
네트워크에서 같은 큐안에 있는 나보다 먼저 처리 될 패킷에 의해 지연될 때 발생하는 성능 저하 현상을 말합니다.
예를들어 이미지가 느리게 받아지고 파일이 빨리 받아진다 가정하면 이미지 뒤에 처리 될 파일같은경우 이미지가 처리될 때 까지 기다려야 된다는 이야기입니다.
HTTP/2
HTTP/1.x보다 지연 시간을 줄이고 응답 시간을 빠르게 할 수 있으며 멀티플렉싱, 헤더 압축, 서버 푸시, 요청의 우선순위를 처리하는 프로토콜입니다.
멀티플렉싱
여러 개의 스트림을 사용하여 송/수신하는 것입니다. 특정 스트림의 패킷이 손실되었다 하더라도 해당 스트림만 영향을 미치고 다른 스트림은 정상동작 할 수 있습니다.
또한 메시지를 독립된 프레임으로 조각내어 송/수신한 이후 다시 조립하며 데이터를 주고 받습니다. 이를 통해 단일 연결을 사용하여 병렬로 여러 요청을 받을 수 있고 응답을 줄 수 있습니다. 이는 HOL Blocking 문제를 해결 할 수 있게 해주었습니다.
헤더 압축
HTTP/1.x는 헤더를 압축하지 못해 크기가 컸습니다. 이를 HPACK 압축 형식으로 압축하였습니다.
서버 푸시
HTTP/1.x는 클라이언트가 서버에 요청을 해야만 응답이 올 수 있었다면, HTTP/2은 클라이언트 요청 없이 서버가 바로 리소스를 푸시할 수 있습니다.
HTTPS
HTTP/2는 HTTPS 위에서 동작합니다. HTTPS는 Application Layer와 Transport Layer 사이 신뢰 계층인 SSL/TLS 계층을 집어 넣어 신뢰성을 보장한 요청입니다.
SSL/TLS
SSL은 Secure Socket Layer의 약자로 버전이 올라가며 TLS로 명칭이 변경되었습니다.
Transport Layer에서 보안을 제공하는 프로토콜입니다. 클라이언트와 서버가 통신할 때 제 3자가 메시지를 도청하거나 변조하지 못하도록 합니다.
보안세션을 기반으로 데이터를 암호화하는데 보안세션이 만들어질 때 인증 매커니즘, 키 교환 알고리즘, 해싱 알고리즘이 사용됩니다.
HTTP/3
HTTP/3은 TCP 위에서 동작하는 HTTP/2와는 달리 QUIC라는 계층 위에서 돌아가며 UDP 기반으로 돌아갑니다.
둘의 차이는 여기서 참고해주세요.
[Network] TCP / UDP
TCP Transmission Control Protocol의 약자로 전송을 제어하는 프로토콜입니다. 주로 신뢰성있는 데이터 전송을 하기위해 사용하며, IP와 함께 사용하는데 IP가 데이터의 전송을 처리한다면 TCP는 패킷의
mirr-coding.tistory.com
초기 연결 설정 시 지연 감소
QUIC는 TCP를 사용하지 않기 때문에 통신을 시작할 때 3-Way-Handshake 과정을 거치지 않아도 됩니다.
QUIC는 순방향 오류 수정 메커니즘이 적용되어 패킷이 손실되어도 수신측에서 에러를 검출해 수정하는 방식으로 낮은 패킷 손실율을 보입니다.
● 참고자료 : 면접을 위한 CS 전공지식 노트 (주홍철 | 길벗출판사)
'Network' 카테고리의 다른 글
[Network] DMZ 존 (0) | 2023.04.09 |
---|---|
[Network] URI, URL, URN (0) | 2023.02.15 |
[Network] 브라우저에 www.naver.com을 입력하면 어떻게 될까? (0) | 2023.01.21 |
[Network] 네트워크 토폴로지 (0) | 2023.01.21 |
[Network] Proxy, CDN, AWS RDS (0) | 2023.01.15 |