Noq: Triển khai QUIC mới của n0 trong Rust
Backend·Hacker News·2 lượt xem

Noq: Triển khai QUIC mới của n0 trong Rust

Noq: n0's new QUIC implementation in Rust

AI Summary

n0 vừa ra mắt `noq`, một thư viện QUIC mã nguồn mở mới viết bằng Rust, hoạt động độc lập hoàn toàn với dự án `quinn`. Lý do cho sự chia tách này là do các vấn đề kiến trúc khi cố gắng tích hợp các tính năng nâng cao như QUIC Multipath và NAT traversal trực tiếp vào lõi QUIC, thay vì xử lý chúng ở tầng logic bên ngoài. Các developer nên chú ý đến `noq` vì đây là một implementation sẵn sàng cho môi trường production, hỗ trợ tốt các draft mới nhất về QUIC Multipath và NAT traversal. `noq` hứa hẹn mang lại khả năng quản lý path tốt hơn và kỹ thuật NAT hole-punching hiệu quả hơn, giúp xây dựng các ứng dụng mạng (network applications) có độ ổn định và hiệu năng cao hơn.

Hôm nay, chúng tôi vui mừng thông báo về noq (“số 0 QUIC”), triển khai QUIC cho mục đích chung của riêng chúng tôi với hỗ trợ truyền tải đa đường và NAT. Đây là lớp vận chuyển đã cung cấp năng lượng cho iroh kể từ...

Hôm nay, chúng tôi vui mừng thông báo noq ("số 0 QUIC"), Triển khai QUIC cho mục đích chung của chúng tôi với hỗ trợ truyền tải đa đường và NAT. Đây là lớp vận chuyển đã cung cấp năng lượng cho iroh kể từ v0.96, mặc dù không hề giới hạn ở usecase của iroh.

Từ soft fork đến hard fork

Nếu bạn đang theo dõi sự phát triển của Iroh, bạn có thể đã đọc lý do tại sao chúng tôi phân tách Quinn vào năm 2024. Phiên bản ngắn: iroh đang phải gánh vác rất nhiều công việc nặng nhọc xung quanh NHANH: chuyển đổi giữa các đường dẫn chuyển tiếp và trực tiếp, quản lý truyền tải NAT, xử lý trạng thái tắc nghẽn. Nhưng bản thân QUIC không có khả năng nhìn thấy bất kỳ điều gì trong số đó. Sự không phù hợp đó đã tạo ra những vấn đề mà chúng tôi không thể khắc phục từ bên ngoài.

Cái nĩa của chúng tôi bắt đầu nhỏ. Chúng tôi muốn theo dõi Quinn ngược dòng một cách chặt chẽ, đóng góp trở lại nếu có thể và giữ mức chênh lệch ở mức tối thiểu. Đó là quyết định đúng đắn vào thời điểm đó. Nhưng khi chúng tôi tiến sâu hơn vào đa đường QUIC, truyền tải NAT và kiến trúc chuyển tiếp như một đường dẫn của riêng chúng tôi, tốc độ phát triển của hai dự án rơi vào các chu kỳ lặp đi lặp lại không khớp nhau. Tất cả những thay đổi liên tục của chúng tôi sẽ dẫn đến gánh nặng xem xét vô lý cho Quinn. người bảo trì. Nhóm n0 muốn thử những thay đổi mang tính cấu trúc sâu hơn đối với việc triển khai QUIC của chúng tôi, và sẽ là không công bằng nếu áp đặt hậu quả của những thay đổi đó lên tất cả người dùng Quinn. Chúng tôi nghĩ rằng một đợt hard fork với cam kết liên tục cộng tác sẽ có ý nghĩa hơn về mọi mặt.

Vậy là chúng tôi đã đi hết chặng đường. Chúng tôi đã giải thích suy nghĩ của mình trong chuỗi vấn đề đa đường Quinn. Đây không phải là sự từ chối Quinn, đây vẫn là một cách thực hiện tuyệt vời. Đó là sự thừa nhận rằng các vấn đề chúng tôi đang giải quyết đủ cụ thể để có một cơ sở mã riêng biệt, với sự hợp tác nơi lợi ích của chúng ta chồng chéo, là con đường lương thiện phía trước.

Có gì trong noq

Tính năng tiêu đề là sự triển khai đầy đủ Thông số kỹ thuật nhiều đường dẫn QUIC . Đây là nơi sự thay đổi kiến trúc thực sự diễn ra, cả bên trong Quinn/noq và để Iroh sử dụng. Trước khi có nhiều đường dẫn, iroh đã quản lý nhiều đường dẫn (chuyển tiếp, IPv4 trực tiếp, IPv6 trực tiếp) như một kiểu khéo léo bên dưới lớp QUIC. Quinn nghĩ rằng nó đang giao tiếp với điểm cuối khác chỉ thông qua một địa chỉ IP trong khi chúng tôi xáo trộn các gói trên bất kỳ đường dẫn nào hoạt động tốt nhất. Giống như NAT nhỏ của riêng Iroh xung quanh Quinn vậy.

Với đa đường, những đường dẫn đó là khái niệm QUIC hạng nhất. Đường dẫn chuyển tiếp là đường dẫn QUIC. Đường dẫn UDP trực tiếp là đường dẫn QUIC. QUIC biết về tất cả chúng, duy trì trạng thái tắc nghẽn trên mỗi đường dẫn, và có thể suy luận về việc nên sử dụng cái nào. Điều này có nghĩa là những cải thiện về độ trễ mà chúng tôi phải thực hiện thông qua việc đặt lại bộ điều khiển tắc nghẽn hiện đã được xử lý một cách chính xác và có hệ thống.

Tuy nhiên, việc triển khai đa đường là chung chung, nó không chỉ phục vụ iroh. Nó nhằm mục đích triển khai đầy đủ Thông số đa đường QUIC, cho bất kỳ mục đích nào. Tuy nhiên, việc triển khai vẫn còn non trẻ, vì vậy nếu bạn cần thêm API từ nó, hãy cho chúng tôi biết.

Chúng tôi đã triển khai cách diễn giải của riêng mình về bản dự thảo truyền tải QUIC NAT . Theo hiểu biết của chúng tôi, chúng tôi là người đầu tiên thực hiện việc này một cách mạnh mẽ và ở cấp độ sản xuất. Truyền tải NAT nổi tiếng là khó khăn, làm cho nó phù hợp với đầy đủ các hành vi của NAT trong tự nhiên là một vấn đề khó khăn, và chúng tôi đã thử nghiệm phương pháp tiếp cận của mình trên hàng trăm nghìn thiết bị đang chạy iroh. Mặc dù đây chưa phải là thông số kỹ thuật đã được giải quyết nhưng chúng tôi sẽ tiếp tục lặp lại.

Thể hiện trực tiếp việc đục lỗ truyền tải NAT dưới dạng hoạt động ở cấp độ QUIC, hơn là điều gì đó xảy ra bên dưới nó, sạch hơn và đáng tin cậy hơn, bởi vì nó làm cho bộ điều khiển tắc nghẽn QUIC nhận biết được nó và cho phép phát hiện tổn thất tốt hơn.

iroh đã và đang sử dụng triển khai Khám phá địa chỉ QUIC của chúng tôi (QAD) kể từ phiên bản iroh 0.32. QAD sử dụng kết nối QUIC để tìm hiểu về địa chỉ IP công cộng của khách hàng, điều này đã được thực hiện trước đây bằng cách sử dụng STUN. QUIC cho phép mã hóa các gói này mà không phải hy sinh các chuyến đi khứ hồi so với STUN, ngăn chặn việc thiết lập giao thức và tăng cường quyền riêng tư của người dùng.

Qlog là một tiêu chuẩn dự thảo để ghi lại rất nhiều thông tin về các kết nối QUIC. Đây là một công cụ gỡ lỗi tuyệt vời, có các công cụ trực quan hóa như qvis có thể hiển thị luồng gói giữa hai thiết bị ngang hàng.

Trong noq, hỗ trợ qlog đã được mở rộng đáng kể để hỗ trợ nhiều sự kiện khác từ lược đồ ghi nhật ký qlog chính và [định nghĩa sự kiện QUIC]. Ngoài ra, khả năng mở rộng của qlog đã được sử dụng để thêm các sự kiện cho đa đường QUIC. Chúng tôi thậm chí còn có nguyên mẫu trình xem có thể hiển thị các luồng gói trên nhiều đường dẫn.

Mặc dù hầu hết các thay đổi API của noq đều xoay quanh việc hỗ trợ nhiều đường dẫn, chúng tôi cũng đã thêm WeakConnectionHandle. Đây là loại không duy trì kết nối, nhưng có thể được nâng cấp lên đầy đủ Kết nối nếu nó chưa bị hủy. Nó hoạt động rất giống [std::sync::Weak] nhưng không cần phải Arc vì điều đó không phải lúc nào cũng dễ thực hiện.

Điều này có thể hữu ích để xây dựng những thứ như trình quản lý kết nối. Chúng tôi cần điều này trong nội bộ Iroh, chắc chắn có nhiều cách sử dụng tốt hơn.

Đã được sản xuất

noq được xuất xưởng như một phần của iroh v0.96 và đã được đưa vào sản xuất kể từ đó. Nếu bạn đang sử dụng phiên bản mới nhất của iroh thì bạn đã sử dụng noq.

Ngoài việc vận chuyển và thử nghiệm khả năng triển khai đa đường của noq đối với chính nó, chúng tôi cũng đang chạy thử nghiệm khả năng tương tác với picoquic, một trong những cách triển khai tham chiếu được sử dụng trong các sự kiện tương tác của nhóm làm việc QUIC.

Tiếp theo là gì

Chúng tôi coi noq là nền tảng lâu dài. Còn nhiều việc chúng tôi muốn thực hiện hơn nữa, chẳng hạn như cải thiện thêm khả năng truyền tải NAT. Công việc đa đường cũng mở ra khả năng tối ưu hóa hiệu suất mà trước đây không thể thực hiện được. Chúng tôi sẽ tiếp tục hợp tác với nhóm làm việc QUIC và cộng tác với nhóm Quinn trong các lĩnh vực mà chúng tôi quan tâm.

Nếu bạn đang làm việc về triển khai QUIC, truyền tải p2p hoặc các ứng dụng cần chạy trên nhiều điều kiện mạng khác nhau, chúng tôi rất vui được trao đổi. Hãy đến tìm chúng tôi trên Discord hoặc giải quyết vấn đề trên GitHub.

Nếu bạn muốn thử triển khai đa đường QUIC rỉ sét, hãy xem tài liệu về Kết nối noq đa đường.

Iroh là thư viện kết nối mạng quay số trên mọi thiết bị hoạt động. Soạn thảo từ một hệ sinh thái gồm các giao thức được tạo sẵn để có được các tính năng bạn cần hoặc tùy chỉnh hoàn toàn theo cách trừu tượng rõ ràng trên các đường ống câm. Iroh là mã nguồn mở và đã được đưa vào sản xuất trên hàng trăm nghìn thiết bị.
Để bắt đầu, hãy xem tài liệu của chúng tôi, đi sâu vào hoặc trò chuyện với chúng tôi trong discord của chúng tôi kênh.

Tác giả: od0

#discussion