반응형

이 문서는 https://docs.google.com/document/d/1gY9-YNDNAB1eip-RTPbqphgySwSNSDHLq9D5Bty4FSU/edit 를 번역한 문서입니다. 오역 및 의역이 매우 많을 가능성이 있습니다. :)

QUIC란?

QUIC (Quick UDP Internet Connections) Google에서 개발한 새로운 인터넷 전송 프로토콜 입니다.

QUIC는 사용자들은 거의 또는 전혀 변경하지 않으면서, 최신 웹 애플리케이션에서 발생하는 수많은 전송 계층과 응용 계층 문제를 해결합니다. QUIC는 TCP+TLS+HTTP2와 비슷하지만 UDP위에 구현됩니다. 자체적으로 만들어진 프로토콜인 QUIC를 사용하면 레거시 클라이언트와 미들박스에 의해 방해받는 기존의 프로토콜로는 불가능한 혁신을 가능케 할 수 있습니다.

QUIC over TCP+TLS+HTTP2의 주요 이점들:

연결 설정 대기 시간
혼잡 제어 개선
Head-of-line blocking(HOL blocking)문제 없이 멀티플렉싱
전진 에러 수정(FEC)
연결 마이그레이션

연결 설정

연결 설정에 대해 자세히 알고 싶다면 QUIC Crypto design 문서를 참조하세요. 간단히, 페이로드를 보내기 위해 1~3번의 왕복이 필요한 TCP+TLS와 비교해서 QUIC의 handshake는 자주 왕복을 필요로 하지 않습니다.

처음으로 QUIC 클라이언트가 서버에 접속할때, 클라이언트는 반드시 handshake를 완료하는데 필요한 정보를 얻기 위해 1 왕복 handshake를 수행해야 합니다. 클라이언트가 inchoate(empty) client hello(CHLO)를 보내면, 서버는 소스 주소 토큰과 서버 인증서를 포함하여 클라이언트가 진행하는데 필요한 정보를 rejection(REJ)와 함께 보냅니다. 다음번에 클라이언트가 CHLO를 전송하면, 이전 연결의 캐시 된 자격 증명을 사용하여 암호화된 요청을 즉시 서버에 보낼 수 있습니다.

혼잡 제어

QUIC는 플러그형 혼잡 제어를 가지고 있으며, TCP보다 혼잡제어 알고리즘에 더 많은 정보를 제공합니다. 현재, Google의 QUIC는 TCP Cubic의 재 구현을 사용하고 있으며 대안적인 접근법을 실험하고 있습니다.

많은 정보의 예는 원본과 재전송된 각 패킷이 새로운 시퀸스 번호를 전달한다는 것입니다. 이를 통해 QUIC 전달자는 원본에 대한 ACK과 재전송을 위한 ACK을 구별할 수 있으며 TCP의 재전송 모호 문제를 피할 수 있습니다. 또한 QUIC ACK는 패킷 수신과 전송 확인 사이의 지연을 단조롭게 전달하고 단조롭게 증가하는 시퀀스 번호와 함께 전달합니다. 이를 통해 정확한 왕복 시간을 계산할 수 있습니다.

마지막으로, QUIC의 ACK 프레임은 최대 256 NACK 범위를 지원하므로, QUIC는 TCP(SACK포함)보다 순서 재 지정에 더 탄력적이며, 재 지정 또는 손실이 있을때 더 많은 바이트를 망에 보관 가능합니다. 클라이언트와 서버 모두 각자가 수신 한 패킷을 정확하게 파악할 수 있습니다.

멀티플렉싱

TCP+HTTP2가 갖는 큰 문제중 하나는 head-of-line blocking(HOL blocking) 문제입니다. 애플리케이션은 TCP 연결을 바이트 스트림으로 간주합니다. TCP 패킷이 손실되면, 해당 HTTP2 연결 스트림은 패킷이 재 전송되어 상대방이 수신 할 때까지 계속 진행할 수 없습니다. 이러한 스트림에 대한 데이터가있는 패킷이 도착하여 버퍼에서 대기중인 경우에도 마찬가지입니다.

QUIC는 멀티플렉싱 동작을 위해 처음부터 디자인 되었기 때문에, 개별 스트림에 대한 데이터를 가지고 있는 손실 패킷은 일반적으로 특정 스트림에만 영향을 미칩니다. 각 스트림 프레임은 도착시 해당 스트림으로 전달 할 수 있으므로, 손실이 없는 스트림은 재구성될 수 있고 애플리케이션에서 진행될 수 있습니다.

전진 에러 수정(FEC)

재전송을 기다리지 않고 손실된 패킷을 복구하기 위해, QUIC는 FEC 패킷으로 패킷 그룹을 보완할 수 있습니다. RAID-4와 유사하게 FEC 패킷은 FEC 그룹의 패킷들의 패리티를 포함합니다. 그룹 내의 패킷 중 하나가 손실되면, 그 패킷의 내용은 FCE 패킷과 그룹 내부에 남아있는 패킷들로부터 복구할 수 있습니다. 전송자는 특정 시나리오(예시: 요청의 시작과 끝)를 최적화하기 위해 FEC 패킷을 보낼지 여부를 결정할 수 있습니다.

연결 마이그레이션

QUIC 연결은 클라이언트에서 임의로 생성된 64bit 연결 ID로 식별됩니다. 반대로 TCP 연결은 송신 주소, 송신 포트, 수신 주소, 수신 포트라는 4개의 튜플로 식별됩니다. 이것은 만약 클라이언트의 IP주소가 바뀌거나(예시: Wi-Fi 범위를 벗어나서 데이터 모드로 전환)또는 포트(NAT box가 손실되어 포트를 리바인딩 하는 경우)가 바뀌는 경우 활성화 된 TCP 연결은 더 이상 유효하지 않습니다. QUIC 클라이언트가 IP를 변경하게 되면, 새로운 IP 주소에서 이전 연결 ID를 사용하여 진행중인 요청을 방해받지 않을 수 있습니다.

'Network > QUIC' 카테고리의 다른 글

QUIC FAQ  (0) 2017.06.03

+ Recent posts