IP 주소가 바뀌어도 공개 키로 상대를 찾아내는 연결 방법
네트워크 환경이 바뀌어도 상대 기기를 계속 찾아내 데이터를 주고받는 장면을 상상해 보세요. iroh는 IP 주소 대신 공개 키를 식별자로 사용해 두 기기 사이의 가장 빠른 경로를 찾아 유지하는 라이브러리입니다. 직접 연결이 불가능하면 공개된 중계 서버로 넘어가 연결을 이어줍니다.
공개 키로 상대를 찾아내는 원리
기존 인터넷은 IP 주소가 자주 바뀌어 연결이 끊기기 쉽습니다. iroh는 IP 주소 대신 공개 키를 사용해 연결을 시도합니다. 가장 빠른 경로인 직접 연결을 위해 NAT 관통(hole-punching)을 시도하며, 실패하면 공개된 중계 서버로 넘어갑니다. 이 과정에서 연결 속도를 지속적으로 측정해 최적의 상태를 유지합니다.
QUIC 기반의 전송 구조
iroh는 noq를 사용해 QUIC 연결을 설정합니다. 이를 통해 인증된 암호화와 동시 스트림 처리, 데이터그램 전송을 지원합니다. 헤드 오브 라인 블로킹(head-of-line blocking) 문제를 피할 수 있어 여러 데이터를 동시에 주고받을 때 한 부분의 지연이 전체 전송을 막지 않습니다.
준비된 프로토콜 활용
직접 프로토콜을 만들지 않고도 기존 모듈을 활용할 수 있습니다. iroh-blobs는 BLAKE3 기반 콘텐츠 주소 방식으로 기가바이트에서 테라바이트 규모까지 파일 전송을 지원합니다. iroh-gossip은 일반 스마트폰 수준의 자원으로도 작동하는 발행-구독 오버레이 네트워크를 구축합니다. iroh-docs는 iroh-blobs 데이터를 관리하는 최종 일관성(final consistency) 키-값 저장소입니다.
Rust 중심의 사용법과 저장소 구성
Rust에서 cargo add iroh로 설치한 후, 연결하는 쪽과 받는 쪽에서 엔드포인트를 바인딩하고 스트림을 열면 됩니다. 저장소는 코어 라이브러리, 중계 서버 구현, 공통 타입, DNS 서버 구현으로 나뉩니다. 중계 서버 코드는 공개 중계 서버 운영에 사용되며, 사용자도 직접 실행할 수 있습니다.
사용 전 확인 사항
네트워크 환경에 따라 직접 연결이 실패하고 중계 서버를 거칠 수 있으므로, 지연 시간과 대역폭 요구 사항을 고려해야 합니다. 라이선스는 Apache 2.0과 MIT 중 선택하여 사용할 수 있습니다. 프로젝트는 N0, INC.에 의해 유지 관리되며, 기여 시 이중 라이선스가 적용됩니다.