네트워크

HTTP

iksadnorth 2023. 7. 21. 12:02

👣 HTTP/1.0

1개의 연결당 1개의 요청만 처리.
이는 RTT[패킷 왕복 시간]를 증가시켰다.

👣 RTT 증가 대처 방안

1. 이미지 스플리팅
하나의 이미지를 여러 조각으로 잘라서 병렬적으로 다운로드 받는 것
2. 코드 압축
HTML과 같은 코드들의 개행, 띄어쓰기 등등의 무의미한 문자를 없애는 것.
3. 이미지 Base64 인코딩
바이너리 형식의 이미지를 문자열로 변환해 일반 텍스트 기반의 프로토콜에서도 다룰 수 있게 한 방법.
이미지를 위한 별도의 요청을 열지 않아도 되어 RTT를 줄일 수 있다.


👣 HTTP/1.1

TCP는 Handshake로 인해 연결을 맺는 것 자체가 비용이 크기 때문에
Keep-alive 옵션을 이용해서 1 번의 연결로 n 번의 요청, 응답을 가능하게 했다.
Http/1.0 라고 해서 Keep-alive가 없던 것은 아니지만 
Http/1.1 에서는 이것을 기본 옵션으로 설정했다는 차이가 있다.

👣 HOL Blocking [Head Of Line Blocking]

하나의 연결로 요청, 응답을 주고 받는 것이므로
먼저 요청했던 Request의 전송이 늦어지면 이 후 보낼 데이터의 전송이 늦춰지는 현상.

아래 그림으로 비유하면 피자, 샐러드, 음료수 순으로 주문했을때,
주문했던 순서 그대로 '오래걸리는 피자'를 줘야지만 '샐러드', '음료수'를 내놓는 것으로 생각할 수 있다.


👣 HTTP/2

다중화와 압축을 통해 웹 통신의 성능과 효율성을 향상시키는 프로토콜
HTTP/2는 HTTPS 위에서 동작함. HTTP/2를 사용하기 위해 HTTPS 설정을 해야 한다.

👣 멀티플렉싱

여러 개의 스트림을 사용해 송수신.
HTTP 메시지를 바이너리 형태의 프레임으로 나누고 이를 전송 후 받은 쪽에서 다시 조립한다.
요청과 응답이 동시에 이루어지니 하나의 연결에 여러 요청과 응답이 뒤섞여 있다.

👣 헤더 압축

1번의 연결로 여러 개의 요청을 보내게 되는데,
중복 Header를 검출하고 중복된 Header는 index값만 전송하고
중복되지 않은 Header정보의 값은 허프만 코딩 압축 알고리즘
으로 인코딩 처리 하여 전송한다.

 

👣 서버 푸시

클라이언트가 요청하지 않아도 서버가 알아서 필요한 리소스를 푸시해줌.


👣 HTTPS

HTTPS는 SSL/TLS 계층을 넣은 신뢰성을 높인 HTTP 요청이다.

👣 SSL/TLS

아래 게시물에 설명해놓음.

 

SSL/TLS

👣 개요 SSL은 초기 버전으로 차후 TLS로 명칭이 변경되었으나 보통 SSL/TLS라고 부른다. SSL은 Client와 Server가 통신할 때, 제 3자가 도청하지 못하도록 변조를 하는 방법이다. 👣 CA 등록 TLS Handshake를

ikadnorth.tistory.com

👣 HTTPS 구축 방법

1. 직접 CA에서 인증키를 받아 구축.
2. 서버 앞단에 HTTPS를 제공하는 로드밸런서를 이용.
3. 서버 앞단에 HTTPS를 제공하는 CDN을 이용.


👣 HTTP/3

이전 버전의 HTTP와 달리 TCP 위에서 작동하는 것이 아닌 QUIC 계층 위에서 작동.
QUIC 계층은 UDP를 기반으로 작동한다.

👣 QUIC 프로토콜 - L4

QUIC는 TCP, UDP 프로토콜과 같이 Transport Layer에 속하는 프로토콜이다.
구글에 의해 개발되었고 TCP의 Handshake에 의한 느린 RTT, UDP의 비신뢰성이라는 
단점을 보완한 프로토콜이다.

아래 사진에 의하면
TCP + TLS를 위해 1 RTT + 2 RTT를 소비해 총 3 RTT를 소비한다고 한다.
하지만,
QUIC를 위해서는 오직 1 RTT만 소비한다고 한다.

이것이 가능한 이유는 
TCP+TLS는 데이터를 보내기 전에 연결과 암호화에 필요한 정보를 교환하고 유효성을 검사한 뒤에 데이터를 교환하지만,
QUIC은 묻지도 따지지도 않고 그냥 데이터부터 주고 받기 때문이라고 한다.

👣 QUIC 프로토콜 장점

1. 멀티 플랙싱 지원
HTTP/1.1의 HOL Blocking을 보완하기 위해 멀티 플랙싱 지원

2. 0-RTT 지원
첫 통신은 무조건 1-RTT를 통해 신뢰성을 확보해야 하지만,
이미 서로 신뢰를 확보한 상태라면 0-RTT로 통신할 수 있게 지원.

3. Client IP가 변경되도 Connect ID로 연결 유지
모바일 시대가 도래하며 사람의 위치가 변하면 IP가 변동될 우려가 크다.
그 때마다 Handshake를 하는 것이 아니라 최초 연결 과정 중 미리 저장했던 Connect ID를 사용하면
추가적인 Handshake없이 통신할 수 있게 함.

'네트워크' 카테고리의 다른 글

TCP Handshake  (0) 2023.07.21
SSL/TLS  (0) 2023.07.21
IP  (0) 2023.07.21
네트워크 기기  (0) 2023.07.20
TCP/IP 4 계층  (0) 2023.07.20