- HTTP3, QUIC + TLS2022년 07월 25일
- starryeye
- 작성자
- 2022.07.25.:46
TLS(SSL)
TLS에 대해 먼저 알아보고 들어가자
TLS는 하나의 프로토콜이며, 웹 응용 프로그램을 보호하는데 도움을 준다.
(대학교때.. 정보보호론 수업에서 중간자 공격을 방어하는 방법이 바로 TLS이다.)
HTTPS가 바로.. TLS를 적용한 것이다.
<참고>
SSL이 TLS로 발전된 것이며..
SSL3.0을 기반으로 TLS1.0이 만들어 졌다.
현재 SSL은 사용되지 않는다.(추가 버전업 X)
TLS 목표
암호화 : 전송되는 데이터를 제 3자로 부터 보호한다.
인증 : 요청/응답 되는 정보가 요청/응답을 보내는 당사자임을 보장한다.
무결성 : 요청/응답 되는 정보가 위변조 되지 않았는지 확인한다.
TLS 개념
대칭키 암호화 + 비대칭키 암호화를 적용하여 1RTT를 가진다.
비대칭키로만 할순 없나..?
-> 비대칭키의 암/복호화는 비용이 크다
TLS 동작 순서 (TLS 1.2)
파란색 영역은 TCP의 3 way handshaking
노란색 영역은 TLS의 handshaking
TLS handshaking (TLS 1.2)
1. TCP 3 way handshaking 클라이언트의 마지막 ACK와 같이 이루어지는 것 같다..
클라이언트는 서버로 TLS 연결을 위해
클라이언트가 사용 가능한 암호화 프로토콜 정보(TLS 버전, 인증서 검증 알고리즘 등)들을 보낸다.
2. 서버는 클라이언트가 보낸 가능한 암호화 프로토콜 목록을 보고 선택한다.
서버가 가진 SSL인증서를 클라이언트로 보낸다. (내부에 서버의 공개키 적재)
3. 클라이언트는 서버가 보낸 SSL인증서를 인증서 발행 기관(CA)을 통해 검증(복호화)한다.
(대부분의 브라우저에는 공신력 있는 CA정보와 CA가 제공하는 공개키가 내장되어있음)
SSL 인증서를 복호화 하면 서버의 공개키를 얻을 수 있다.
4. 클라이언트는 대칭키를 생성한 후, 서버의 공개키로 암호화 한다.
암호화 된 데이터를 서버로 전송
5. 서버는 암호화된 대칭키를 서버 개인키로 복호화 하여 대칭키를 획득한다.
앞으로의 요청/응답은 해당 대칭키로 암호화/복호화 과정을 거친다.
6. 서버는 클라이언트에 완료되었다고 알림 (handshaking 종료)
TLS 성능
여기까지만 봤을때, TCP + HTTP/2 + TLS 1.2를 사용한다 치면
기본적으로 3 RTT(1 + 2)를 사용하는 것을 알 수 있다.
(2개의 handshaking을 병렬적으로 처리하는 방법은 논외..)
QUIC
QUIC(Quick UDP Internet Connections) 프로토콜에 대해 알아보자.
구글에서 개발한 프로토콜이다.
대표 개념..
1. QUIC은 과거에 한번이라도 연결이 되었었더라면..
Connection ID라는 고유한 패킷 식별자를 통해 handshake 진행 없이 바로 통신한다.
wifi 연결로 인해 클라이언트 IP가 중간에 바뀌어도 지연되지 않는다.
2. HTTP/2는 TLS를 사용해도 되고 안해도 되지만
QUIC은 기본적으로 UDP 기반으로 TLS 1.3를 반드시 사용하도록 하였다.
3. HTTP/2 + TCP 조합에서는 하나의 스트림(커넥션)을 멀티플렉싱하여 사용하기 때문에
중간에 파일 하나가 패킷 로스 발생 한다면 해당 커넥션을 공유하는 전체 파일들이 모두 중단된다.
하지만..
QUIC + HTTP3에서는 Multiplexing이 OS로 넘어왔다 (기존에는 Application)
기존에는 연결당 하나의 스트림이었다면.. 이제는 파일당 하나의 스트림..
따라서..
개별 파일을 구분하여 중간에 패킷 로스 발생하여도 해당 파일의 스트림만 정지되어
다른 파일에 영향가지 않는다.
(QUIC은 여러개의 스트림을 사용한다. 따라서 다른 스트림이라면 패킷 손실에 독립적이다.)
아래는 3번 개념의 참고 자료
프로토콜간 HOL Blocking <참고>
구글은 QUIC에 TLS1.3과 다른 알고리즘을 사용한다고 한다..
IETF는 QUIC에 TLS1.3을 표준으로 사용한다.
이 포스팅에서는 IETF 표준으로 포스팅하겠다.
QUIC 성능
TCP + HTTP/2 + TLS 1.2기반의 통신은..
많은 RTT가 발생한다. (최초 연결때.. 3RTT)
(HTTP/2 + TLS 1.3은 생각하지말자..)하지만 QUIC은 최초 연결시 1-RTT 이다.
TLS 1.2 -> 1.3으로 업그레이드 되며 1RTT만 걸리고
UDP 통신(비연결성)이므로 0RTT라서 최종 1RTT 이다.
(과거에 연결 해봤다면, 0-RTT 모드도 지원)
참고하면 좋음
계층 구조 'Network' 카테고리의 다른 글
HTTP polling, long polling (0) 2022.07.23 HTTP/1.1 vs HTTP/2 (0) 2022.07.22 GSLB, CDN, DNS (0) 2022.07.21 다음글이전글이전 글이 없습니다.댓글