- noq do đội ngũ n0 phát triển là một triển khai QUIC đa dụng được viết bằng Rust, hỗ trợ multipath và NAT traversal
- Được phát triển bằng cách chuyển sang codebase độc lập để giải quyết các giới hạn của kiến trúc dựa trên Quinn trước đây trong iroh
- Bao gồm nhiều tính năng như QUIC Multipath, NAT Traversal, Address Discovery, mở rộng QLog, WeakConnectionHandle
- Đã được sử dụng trong môi trường production từ iroh v0.96, đồng thời đã hoàn tất kiểm thử khả năng tương tác với picoquic
- Trong tương lai, dự án sẽ tiếp tục hợp tác với QUIC Working Group và đội ngũ Quinn, đồng thời phát triển thành công nghệ nền tảng cho các nhà phát triển ứng dụng mạng dựa trên Rust
Công bố noq
- noq là một triển khai QUIC đa dụng do đội ngũ n0 phát triển, hỗ trợ multipath và NAT traversal
- Từ iroh v0.96, nó được dùng làm tầng truyền tải và có thể được sử dụng cho mục đích chung chứ không chỉ giới hạn trong iroh
Chuyển từ Quinn sang noq
- Trước đây iroh sử dụng QUIC dựa trên Quinn, nhưng có nhiều tính năng phức tạp như NAT traversal và chuyển đổi đường đi phải được xử lý bên ngoài QUIC
- Do các ràng buộc về cấu trúc này khiến việc sửa đổi từ bên ngoài trở nên khó khăn, nhóm đã quyết định thực hiện hard fork của Quinn
- Trong khi vẫn duy trì hợp tác với Quinn, nhóm đã chuyển sang hướng đáp ứng các yêu cầu đặc thù của iroh thông qua codebase độc lập
Các tính năng chính của noq
-
QUIC Multipath
- Triển khai đầy đủ đặc tả QUIC Multipath, tích hợp đường relay và đường trực tiếp (IPV4, IPV6) của iroh thành khái niệm đường đi hạng nhất trong QUIC
- Duy trì trạng thái kiểm soát tắc nghẽn cho từng đường đi để có thể chọn đường tối ưu
- Trước đây iroh thao tác đường đi ở bên dưới QUIC, nhưng giờ QUIC tự nhận biết và quản lý việc này
- Được thiết kế như một triển khai multipath đa dụng có thể dùng cho cả các mục đích ngoài iroh
-
QUIC NAT Traversal
- Tự diễn giải và triển khai bản thảo QUIC NAT traversal, được nhắc tới như trường hợp đầu tiên đạt độ ổn định ở mức production
- Đã trải qua kiểm thử thực tế trên hàng trăm nghìn thiết bị iroh
- Thực hiện NAT hole punching trực tiếp ở tầng QUIC để bộ điều khiển tắc nghẽn và phát hiện mất gói hoạt động chính xác hơn
-
QUIC Address Discovery
- Từ iroh v0.32 đã sử dụng QUIC Address Discovery (QAD)
- Thay vì STUN, hệ thống học địa chỉ IP công cộng của client thông qua kết nối QUIC
- Truyền gói tin được mã hóa giúp tránh protocol ossification và tăng cường bảo vệ quyền riêng tư
-
QLog mở rộng
- Ghi lại nhiều sự kiện khác nhau của kết nối QUIC dựa trên bản thảo tiêu chuẩn QLog
- Hỗ trợ nhiều sự kiện hơn trước rất nhiều, đồng thời bổ sung cả các sự kiện liên quan đến multipath
- Tương thích với các công cụ trực quan hóa như qvis, đồng thời cũng cung cấp nguyên mẫu trình xem hiển thị luồng gói tin đa đường
-
WeakConnectionHandle
- Một kiểu dữ liệu có thể nâng cấp thành đối tượng Connection khi cần mà không phải giữ kết nối sống
- Tương tự
std::sync::Weak nhưng không cần dùng Arc
- Có thể được sử dụng hữu ích trong trình quản lý kết nối và các thành phần tương tự
Áp dụng trong production và khả năng tương tác
- noq đã được sử dụng trong môi trường production từ iroh v0.96
- Không chỉ có triển khai multipath nội bộ, dự án còn hoàn tất kiểm thử khả năng tương tác với picoquic
Kế hoạch sắp tới
- Dự kiến phát triển noq thành công nghệ nền tảng dài hạn
- Thúc đẩy cải tiến NAT traversal và tối ưu hiệu năng dựa trên multipath
- Tiếp tục hợp tác với QUIC Working Group và đội ngũ Quinn
- Mở rộng hợp tác với các nhà phát triển triển khai QUIC, truyền tải P2P và ứng dụng hoạt động trong nhiều môi trường mạng khác nhau
- Cung cấp tài liệu và mã ví dụ để có thể trực tiếp sử dụng triển khai QUIC multipath dựa trên Rust
Tổng quan về Iroh
- Iroh là thư viện mạng “dial-any-device”, hỗ trợ cấu hình mạng linh hoạt thông qua việc kết hợp các giao thức
- Đã được vận hành trên hàng trăm nghìn thiết bị và được phát hành dưới dạng mã nguồn mở
- Có thể tham gia dự án thông qua tài liệu, mã nguồn và kênh Discord
1 bình luận
Ý kiến trên Hacker News
Thật vui khi thấy trong chuỗi này đội ngũ Iroh thảo luận về quá trình quyết định fork theo cách tôn trọng lẫn nhau
Điều đó cũng cho thấy việc đưa các thay đổi nội bộ trở lại upstream khó đến mức nào. Họ nói rằng họ không có thời gian để tách các thay đổi của mình thành hàng trăm PR nhỏ để được review. Từ góc độ công ty, đó là một khoản đầu tư thời gian quá lớn
Dù vậy, vẫn mong họ giữ dự án gốc và chi tiết triển khai gần nhau. Sau khi đủ ổn định, có lẽ cũng sẽ có thể gộp theo từng khối lớn thay vì từng phần nhỏ
iroh có vẻ là một sản phẩm được định vị rất tốt cho thời đại xây dựng ứng dụng cá nhân thật nhanh
Tôi muốn thử dùng nó để tạo một “app relay”. Tôi đang hình dung một giải pháp OSS zero-config cho phép người dùng truy cập từ xa vào ứng dụng hoặc dữ liệu trong mạng riêng của họ mà không cần thiết lập riêng. Nó khác với các network relay như Tailscale
Tôi thực sự thích đội ngũ n0. Tôi hay dùng sendme CLI của họ để chuyển file P2P
Tôi tò mò noq/iroh relay các gói QUIC như thế nào. QUIC vốn khó theo dõi, vậy relay làm sao biết phải gửi gói nào đi đâu, hay là họ bọc QUIC trong một giao thức khác
Trên thực tế, nó truyền các QUIC datagram được bọc trong WebSocket. Header có chứa EndpointId đích (public key ed25519), và thông qua handshake, EndpointId của phía gửi cũng được xác thực
Nói cách khác, đây là kiểu tunnel QUIC datagram qua HTTPS over TCP. Dù bị mã hóa hai lớp, nó vẫn hoạt động trong môi trường chặn UDP và được thiết kế để trông giống lưu lượng thông thường
Đội ngũ iroh vẫn đang phát triển với tốc độ rất nhanh
Tôi định dành thời gian cuối tuần để thử dựng một mạng overlay kiểu Nebula bằng iroh
Những cách tiếp cận như QUIC vẫn là kiểu cấu trúc gắn chặt tính liên tục của kết nối vào trạng thái truyền tải
Tôi đang suy nghĩ liệu có thể tách hoàn toàn session identity khỏi transport layer để việc transport thất bại chỉ còn là một sự kiện có thể phục hồi hay không. Không biết có ai từng thấy hệ thống thực tế nào đi xa hơn QUIC chưa
Tham khảo đoạn mã noq
Tin tức gần đây về tính năng custom transport mới công bố của iroh cũng rất thú vị
Có thể xem chi tiết trong bài blog iroh 0.97.0
Có ai đã xem qua nQUIC chưa? Tích hợp Noise vào Noq có vẻ sẽ khá thú vị
noq (và Quinn, nền tảng của nó) có thể triển khai trait “Session” riêng, nên có thể chọn TLS hoặc nQUIC tùy ý
Không nên nhầm với Noq của tsoding, cái tên đó lấy từ “Not Coq”