HTTP
애플리케이션 계층으로서 웹 서비스 통신에 사용된다.
1. HTTP/1.0
- 한 연결당 하나의 요청 처리 -> RTT 증가
- 서버로부터 파일을 가져올 때마다 TCP 의 3-way handshake 계속해서 열어야 함.
cf). RTT : 패킷이 목적지에 도달하고 나서 다시 출발지로 돌아오기까지 걸리는 시간이며 패킷 왕복 시간
RTT의 증가를 해결하기 위한 방법
- 이미지 스플리팅 : 많은 이미지를 다운로드받게 되면 과부하가 걸리기 때문에 많은 이미지가 합쳐 있는 하나의 이미지를 다운로드받고, 이를 기반으로 background-image 의 position 을 이용하여 이미지를 표기하는 방법
- 코드 압축 : 코드를 압축해서 개행 문자, 빈칸을 없애서 코드의 크기를 최소화하는 방법
- 이미지 Base64 인코딩 : 이미지 파일을 64진법으로 이루어진 문자열로 인코딩하는 방법
2. HTTP/1.1

- 매번 TCP 연결을 하는 것이 아니라 한 번 TCP 초기화를 한 이후에 keep-alive 라는 옵션으로 여러 개의 파일을 송수신 가능함.
HOL Blocking
네트워크에서 같은 큐에 있는 패킷이 그 첫번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상
무거운 헤더 구조
HTTP/1.0의 헤더에는 쿠키 등 많은 메타데이터가 들어 있고 압축이 되지 않아 무거웠다.
3. HTTP/2
SPDY 프로콜에서 파생된 HTTP/1.x 보다 지연 시간을 줄이고 응답 시간을 더 빠르게 할 수 있으며 멀티플렉싱, 헤더 압축, 서버 푸시, 요청의 우선순위 처리를 지원
멀티플렉싱

- 여러개의 스트림을 사용하여 송수신함.
- 단일 연결을 사용하여 병렬ㄹ로 여러 요청을 받을 수 있고 응답을 줄 수 있다.
- HOL Blocking 해결 가능
헤더 압축
- 허프만 코딩 : 문자열을 문자 단위로 쪼개 빈도수를 세어 빈도가 높은 정보는 적은 비트 수를 사용하여 표현하고, 빈도가 낮은 정보는 비트 수를 많이 사용하여 표현해서 전체 데이터의 표현에 필요한 비트양을 줄인다.
- 허프만 코딩 압축 알고리즘을 사용하는 HPACK 형식을 가짐
서버 푸시
- 클라이언트 요청없이 서버가 바로 리소스를 푸시할 수 있다.
3. HTTPS
- HTTP/2 는 HTTPS 위에서 동작한다.
- 애플리케이션 계층과 전송 계층 사이에 신뢰 계층인 SSL/TLS 계층을 넣은 신뢰할 수 잇는 HTTP 요청
SSL/TLS
전송 계층에서 보안을 제공하는 프로토콜이다. 클라이언트와 서버가 통신할 때 SSL/TLS 를 통해 제 3자가 메시지를 도청하거나 변조하지 못하도록 합니다.
Handshake 를 통해 보안 세션을 생성하고 이를 기반으로 상태 정보 등을 공유한다.
HTTPS 구축 방법
- 직접 CA에서 구매한 인증키를 기반으로 서비스 구축
- 서버 앞단의 HTTPS를 제공하는 로드밸런서를 둔다.
- 서버 앞단에 HTTPS를 제공하는 CDN을 둔다.
4. HTTP/3

TCP 위에서 돌아가는 HTTP/2 와는 달리 QUIC 이라는 계층 위에서 돌아가며 TCP 기반이 아닌 UDP 기반으로 돌아간다.
초기 연결 설정 시 지연 시간 감소
- QUIC 는 TCP를 사용하지 않기 때문에 통신을 시작할 때 번거로운 3-way handshake 과정을 거치지 않아도 된다.
- 첫 연결 설정에 1-RTT 만 소요된다. 클라이언트가 서버에 어떤 신호를 한번 주고, 서버도 거기에 응답하기만 하면 바로 본 통신을 시작할 수 있다.
- 순방향 오류 수정 메커니즘으로 전송한 패킷이 손실되었다면 수신 측에서 에러를 검출하고 수정하는 방식을 가지고 있으며, 열악한 네트워크 환경에서도 낮은 패킷 손실률이 된다.