Noq: n0의 새로운 Rust 기반 QUIC 구현체

6 days ago 8

  • n0 팀이 개발한 noqRust로 작성된 범용 QUIC 구현체로, 멀티패스NAT 트래버설을 지원
  • 기존 iroh의 Quinn 기반 구조 한계를 해결하기 위해 독립 코드베이스로 전환해 개발됨
  • QUIC Multipath, NAT Traversal, Address Discovery, QLog 확장, WeakConnectionHandle 등 다양한 기능을 포함
  • iroh v0.96부터 프로덕션 환경에서 사용 중이며, picoquic과의 상호운용성 테스트도 완료
  • 향후 QUIC 워킹그룹 및 Quinn 팀과 협력을 지속하며, Rust 기반 네트워크 애플리케이션 개발자를 위한 기반 기술로 발전 예정

noq 발표

  • noq는 n0 팀이 개발한 범용 QUIC 구현체로, 멀티패스(multipath)NAT 트래버설 기능을 지원
  • iroh v0.96부터 전송 계층으로 사용되고 있으며, iroh에 한정되지 않고 일반적인 용도로 활용 가능

Quinn에서 noq로의 전환

  • iroh는 기존에 Quinn을 기반으로 QUIC을 사용했으나, NAT 트래버설과 경로 전환 등 QUIC 외부에서 처리해야 하는 복잡한 기능이 많았음
  • 이러한 구조적 제약으로 인해 외부 수정이 어려워 Quinn의 하드 포크를 결정
  • Quinn과의 협력은 유지하면서, 독립 코드베이스를 통해 iroh의 특수한 요구사항을 충족시키는 방향으로 전환

noq의 주요 기능

  • QUIC Multipath

    • QUIC Multipath 사양을 완전 구현해, iroh의 릴레이 및 직접 경로(IPV4, IPV6)를 QUIC의 1급 경로 개념으로 통합
    • 각 경로별 혼잡 제어 상태를 유지하며 최적의 경로 선택 가능
    • 기존에는 iroh가 QUIC 아래에서 경로를 조작했으나, 이제는 QUIC 자체가 이를 인식하고 관리
    • iroh 외의 일반적인 용도에도 사용할 수 있는 범용 멀티패스 구현체로 설계
  • QUIC NAT Traversal

    • QUIC NAT 트래버설 초안을 자체 해석해 구현했으며, 프로덕션 수준의 안정성을 갖춘 최초 사례로 언급
    • 수십만 대의 iroh 장치에서 실전 테스트를 거침
    • NAT 홀펀칭을 QUIC 계층에서 직접 수행해 혼잡 제어기와 손실 감지가 더 정확하게 작동
  • QUIC Address Discovery

    • iroh v0.32부터 QUIC Address Discovery(QAD) 를 사용
    • STUN 대신 QUIC 연결을 통해 클라이언트의 공인 IP 주소를 학습
    • 암호화된 패킷 전송으로 프로토콜 경직화 방지 및 개인정보 보호 강화
  • QLog 확장

    • QLog 표준 초안 기반으로 QUIC 연결의 다양한 이벤트를 기록
    • 기존보다 훨씬 많은 이벤트를 지원하며, 멀티패스 관련 이벤트도 추가
    • qvis와 같은 시각화 도구와 호환되며, 다중 경로 패킷 흐름을 표시하는 뷰어 프로토타입도 제공
  • WeakConnectionHandle

    • 연결을 유지하지 않으면서 필요 시 Connection 객체로 승격할 수 있는 타입
    • std::sync::Weak과 유사하지만 Arc를 사용하지 않아도 됨
    • 연결 관리자 등에서 유용하게 활용 가능

프로덕션 적용 및 상호운용성

  • noq는 iroh v0.96부터 프로덕션 환경에서 사용 중
  • 자체 멀티패스 구현뿐 아니라 picoquic과의 상호운용성 테스트도 완료

향후 계획

  • noq를 장기 기반 기술로 발전시킬 예정
  • NAT 트래버설 개선 및 멀티패스 기반 성능 최적화 추진
  • QUIC 워킹그룹 및 Quinn 팀과의 협력 지속
  • QUIC 구현, P2P 전송, 다양한 네트워크 환경에서 동작하는 애플리케이션 개발자와의 협업 확대
  • Rust 기반 QUIC 멀티패스 구현을 직접 사용해볼 수 있도록 문서 및 예제 코드 제공

Iroh 개요

  • Iroh는 “dial-any-device” 네트워킹 라이브러리로, 프로토콜 조합을 통한 유연한 네트워크 구성을 지원
  • 수십만 대의 장치에서 이미 운영 중이며, 오픈소스로 공개
  • 문서, 코드, Discord 채널을 통해 프로젝트 참여 가능

Read Entire Article