구독해서 새 게시물에 대한 알림을 받으세요.

비동기 QUIC 및 HTTP/3를 쉽게 만들 수 있습니다. tokio-quiche가 이제 오픈 소스입니다

2025-11-06

5분 읽기
이 게시물은 English日本語로도 이용할 수 있습니다.

본 콘텐츠는 사용자의 편의를 고려해 자동 기계 번역 서비스를 사용하였습니다. 영어 원문과 다른 오류, 누락 또는 해석상의 미묘한 차이가 포함될 수 있습니다. 필요하시다면 영어 원문을 참조하시기를 바랍니다.

우리는 약 6년 전에 Rust로 작성된 오픈 소스 QUIC 구현인 quiche를 발표했습니다. 오늘 Cloudflare에서는 키시와 Rust Tokio 비동기 런타임을 결합하여 실전에서 검증된 비동기 QUIC 라이브러리인 tokio-quiche의 오픈 소스화를 발표합니다. tokio-quiche는 Apple iCloud 비공개 릴레이에서 Cloudflare의 프록시 B와 차세대 Oxy 기반 프록시를 구동하여 짧은 대기 시간과 높은 처리량으로 초당 수백만 건의 HTTP/3 요청을 처리합니다. tokio-quiche도 Cloudflare Warp의 MASQUE 클라이언트를 구동하여 WireGuard 터널을 QUIC 기반 터널과 h3i의 비동기 버전으로 대체합니다.

quiche는 sans-io 라이브러리로 개발되었습니다. 즉, 사용자가 IO를 수행하는 방법에 대한 가정을 하지 않고 QUIC 전송 프로토콜을 처리하는 데 필요한 상태 머신을 구현한다는 의미입니다. 즉, 그리스만 충분하다면 누구나 키시를 통한 IO 통합을 작성할 수 있습니다! 여기에는 UDP 소켓에서 연결하거나 수신하여 모든 네트워크 정보를 quiche에 공급하는 동안 해당소켓에서 UDP 데이터그램 송수신을 관리하는 작업이 수반됩니다. 이 통합이 비동기적으로 이루어져야 한다는 점을 감안할 때, 비동기 Rust 런타임과 통합하면서 이 모든 작업을 수행해야 합니다. tokio-quiche를 사용하면 이러한 모든 작업이 자동으로 수행되며 그리스가 필요하지 않습니다.

진입 장벽 낮추기

원래 tokio-quiche는 Oxy의 HTTP/3 서버의 코어로만 사용되었습니다. 하지만 tokio-quiche를 독립 라이브러리로 만들려면 MASQUE를 사용할 수 있는 HTTP/3 클라이언트가 필요했습니다. 우리의 Zero Trust 팀과 개인정보 보호 팀에서 WARP와 개인정보 보호 프록시를 통해 각각 데이터를 터널링하기 위해 MASQUE 클라이언트가 필요했고, 우리는 동일한 기술을 사용하여 클라이언트와 서버를 모두 구축하고 싶었습니다.

Cloudflare는 가능한 한 많은 이해관계자와 메모리 안전 QUIC 및 HTTP/3 구현을 공유하기 위해 키시를 오픈 소스로 공개했습니다. 그 당시 우리의 초점은 많은 유형의 소프트웨어에 통합되고 널리 배포될 수 있는 로우 레벨의 무작위 설계였습니다. 우리는 다양한 클라이언트와 서버에 키시를 배포하여 이러한 목표를 달성했습니다. 하지만 sans-io 라이브러리를 애플리케이션에 통합하는 과정은 오류가 발생하기 쉽고 시간이 많이 소요됩니다. tokio-quiche에서의 목표는 필요한 코드의 대부분을 직접 제공하여 진입 장벽을 낮추는 것입니다.

우리 제품과 시스템과 상호 작용하고 싶어하는 다른 사람들도 HTTP/3를 채택하지 않는다면, Cloudflare 단독으로는 HTTP/3을 수용하는 것은 무용지물입니다. tokio-quiche 오픈 소싱을 이용하면 Cloudflare 시스템과의 통합이 더욱 간단해지고 업계에서 HTTP의 새로운 표준을 도입하는 데 도움이 됩니다. 저희는 tokio-quiche를 Rust 생태계에 다시 기여함으로써 HTTP/3, QUIC, 새로운 개인 정보 보호 기술의 개발과 사용을 촉진하고자 합니다.

tokio-quiche가 내부적으로 사용된 지 수년이 지났습니다. 이를 통해 우리는 이를 개선하고 실제적인 테스트를 할 시간을 확보하여 수백만 개의 RPS를 처리할 수 있음을 입증했습니다. tokio-quiche는 독립형 HTTP/3 클라이언트나 서버가 되도록 의도된 것이 아니지만, 저수준 프로토콜을 구현하고 향후 더 높은 수준의 프로젝트를 허용합니다. readme에 서버클라이언트 이벤트 루프의 예가 포함되어 있습니다.

바로 액터들입니다

Tokio 는 가장 인기 있는 비동기식 Rust 런타임입니다. 에지에서 실행되는 수십억 개의 비동기 작업을 효율적으로 관리하고 예약하고 실행합니다. Cloudflare에서는 Tokio를 광범위하게 사용하므로 키시를 키슈와 긴밀하게 통합하게 되어 tokio-quiche라는 이름이 붙었습니다. 내부적으로, tokio-quiche는 액터 를 이용하여 QUIC 및 HTTP/3 상태 머신의 다양한 부분을 구동합니다. 행위자는 일반적으로 채널을 통해 전달되는 메시지를 사용하여 외부 세계와 통신하는 내부 상태를 가진 작은 작업입니다.

액터 모델은 개념적 유사성으로 인해 산-io 라이브러리를 비동기화하는 데 사용하기에 훌륭한 추상화입니다. 행위자와 sans-io 라이브러리 모두 독점적으로 액세스하려는 어떤 종류의 내부 상태를 가지고 있습니다. 두 사람 모두 일반적으로 "메시지"를 보내고 받으면서 외부 세계와 상호 작용합니다. Quiche의 "메시지"는 들어오고 나가는 네트워크 데이터를 나타내는 원시 바이트 버퍼입니다. tokio-quiche의 “메시지” 중 하나는 들어오는 UDP 패킷을 설명하는 Incoming 구조입니다. 이러한 유사성으로 인해 sans-io 라이브러리의 비동기화는 새 메시지 또는 IO 대기, 메시지 또는 IO를 sans-io 라이브러리가 이해할 수 있는 것으로 변환, 내부 상태 시스템 발전, 상태 시스템의 출력을 메시지로 번역 또는 마지막으로 메시지 또는 IO를 전송합니다. (Tokio의 액터에 대해 더 많은 논의가 필요하면, 해당 주제에 대한 Alice Rhyl의 훌륭한 블로그 게시물을 확인해보세요.)

tokio-quiche의 주요 행위자는 IO 루프 행위자로, quiche와 소켓 간에 패킷을 이동시킵니다. QUIC는 전송 프로토콜이므로 원하는 모든 애플리케이션 프로토콜을 전송할 수 있습니다. HTTP/3 는 꽤 일반적이지만, DNS over QUIC 와 출시될 Media over QUIC 는 다른 예입니다. 자체 QUIC 응용 프로그램을 생성하는 데 도움이 되는 RFC 도 있습니다! tokio-quiche는 응용 프로그램 프로토콜을 추상화하기 위해 ApplicationOverQuic 특성을 노출합니다. 이 특성은 키시의 메서드와 기본 I/O를 추상화하여 애플리케이션 로직에 집중할 수 있도록 합니다. 예를 들어, Cloudflare의 HTTP/3 디버그 및 테스트 클라이언트인 h3i는 클라이언트 중심의 비 HTTP/3 ApplicationOverQuic 구현에 의해 구동됩니다.

서버 아키텍처 다이어그램

tokio-quiche는 H3drive라는 HTTP/3 중심 ApplicationOverQuic와 함께 제공됩니다. H3Driver 는 quiche의 HTTP/3 모듈을 이 IO 루프에 연결하여 비동기 HTTP/3 클라이언트 또는 서버의 구성 요소를 제공합니다. 이 드라이버는 키시의 원시 HTTP/3 이벤트를 상위 수준 이벤트와 비동기 본문 데이터 스트림으로 변환하여 여러분이 여기에 현물로 응답할 수 있도록 합니다. H3Driver 는 그 자체로 일반적이므로, 핵심 드라이버의 이벤트에 각각 추가 동작을 쌓는 ServerH3DriverClientH3Driver 변형을 노출합니다.

내부 데이터 흐름

tokio-quiche 내부에서, 우리는 소켓에서 키시로의 데이터 이동을 용이하게 하는 두 가지 중요한 작업이 생성됩니다. 첫 번째는 InboundPacketRouter이며, 소켓의 수신 절반을 소유하고 연결 ID (DCID)별로 연결별 채널에 인바운드 데이터그램을 라우팅합니다. 두 번째 작업인 IoWorker 액터는 앞서 언급한 IO 루프이며 단일 키시 연결을 구동합니다. ApplicationOverQuic 메서드와 키시 호출을 산재하여 IO 상호 작용 전후의 연결을 검사할 수 있습니다.

tokio-quiche를 만드는 것에 대한 더 많은 블로그 게시물이 곧 공개될 예정입니다. 행위자 모델 및 뮤택스, UDP GRO 및 GSO, tokio Task Coop 버짓팅 등을 논의합니다.

다음: QUIC 및 그 이상에 대한 자세한 내용!

tokio-quick는 Tokio의 QUIC 및 HTTP/3 생태계에 Cloudflare가 투자하는 중요한 기반이지만, 여전히 자체 복잡성이 있는 빌딩 블록에 불과합니다. 앞으로는 현재의 Oxy 프록시 및 WARP 클라이언트를 구동하는 것과 동일한 사용하기 쉬운 HTTP 클라이언트 및 서버 추상화를 릴리스할 계획입니다. 개인정보 보호 프록시 고객을 위한 오픈 소스 클라이언트와 tokio-quiche를 사용하여 수백만 RPS를 처리하는 완전히 새로운 서비스를 포함하여 Cloudflare의 QUIC 및 HTTP/3에 대한 더 많은 블로그 게시물을 계속 지켜봐 주세요!

일단은 crates.io에서 tokio-quiche 크레이트 를 살펴보고 GitHub에서 소스 코드 를 확인하여 여러분만의 QUIC 애플리케이션을 구축해 보세요. 단순 에코 서버, DNS-over-QUIC 클라이언트, 사용자 지정 VPN, 기능을 갖춘 HTTP 서버일 수 있습니다. 우리를 대담하게 이겨낼 수 있을까요?

Cloudflare에서는 전체 기업 네트워크를 보호하고, 고객이 인터넷 규모의 애플리케이션을 효과적으로 구축하도록 지원하며, 웹 사이트와 인터넷 애플리케이션을 가속화하고, DDoS 공격을 막으며, 해커를 막고, Zero Trust로 향하는 고객의 여정을 지원합니다.

어떤 장치로든 1.1.1.1에 방문해 인터넷을 더 빠르고 안전하게 만들어 주는 Cloudflare의 무료 애플리케이션을 사용해 보세요.

더 나은 인터넷을 만들기 위한 Cloudflare의 사명을 자세히 알아보려면 여기에서 시작하세요. 새로운 커리어 경로를 찾고 있다면 채용 공고를 확인해 보세요.
ProtocolsQUICHE개인정보 보호

X에서 팔로우하기

Cloudflare|@cloudflare

관련 게시물