- n0 ekibinin geliştirdiği noq, Rust ile yazılmış genel amaçlı bir QUIC uygulaması olup multipath ve NAT traversal desteği sunuyor
- Mevcut iroh’un Quinn tabanlı mimari sınırlarını aşmak için bağımsız bir kod tabanına geçilerek geliştirildi
- QUIC Multipath, NAT Traversal, Address Discovery, QLog genişletmeleri, WeakConnectionHandle gibi çeşitli özellikler içeriyor
- iroh v0.96 itibarıyla prodüksiyon ortamında kullanılıyor ve picoquic ile birlikte çalışabilirlik testleri de tamamlandı
- Gelecekte QUIC çalışma grubu ve Quinn ekibiyle iş birliği sürdürülerek, Rust tabanlı ağ uygulamaları geliştiricileri için temel bir teknoloji haline getirilmesi planlanıyor
noq duyurusu
- noq, n0 ekibinin geliştirdiği genel amaçlı bir QUIC uygulaması olup multipath ve NAT traversal özelliklerini destekliyor
- iroh v0.96’dan itibaren aktarım katmanı olarak kullanılıyor ve yalnızca iroh ile sınırlı kalmadan genel amaçlarla da değerlendirilebiliyor
Quinn’den noq’a geçiş
- iroh daha önce QUIC’i Quinn tabanında kullanıyordu; ancak NAT traversal ve yol değiştirme gibi QUIC dışından ele alınması gereken karmaşık işlevler çok fazlaydı
- Bu yapısal kısıtlar nedeniyle dışarıdan değişiklik yapmak zor olduğundan Quinn’in hard fork’u yapılmasına karar verildi
- Quinn ile iş birliği sürdürülürken, iroh’un özel gereksinimlerini karşılamak için bağımsız bir kod tabanı üzerinden ilerleme yönüne geçildi
noq’un başlıca özellikleri
-
QUIC Multipath
- QUIC Multipath spesifikasyonu eksiksiz uygulanarak, iroh’un röle ve doğrudan yolları (IPV4, IPV6) QUIC’in birinci sınıf yol kavramı içinde birleştirildi
- Her yol için tıkanıklık kontrolü durumu korunuyor ve en uygun yol seçilebiliyor
- Önceden iroh yolları QUIC’in altında manipüle ediyordu; artık bunu QUIC’in kendisi tanıyor ve yönetiyor
- iroh dışındaki genel kullanım senaryolarında da kullanılabilecek genel amaçlı bir multipath uygulaması olarak tasarlandı
-
QUIC NAT Traversal
- QUIC NAT traversal taslağı yorumlanarak uygulandı ve prodüksiyon düzeyinde kararlılığa sahip ilk örnek olarak anılıyor
- Yüz binlerce iroh cihazında gerçek kullanımda test edildi
- NAT hole punching doğrudan QUIC katmanında yapıldığından tıkanıklık denetleyicisi ve kayıp algılama daha doğru çalışıyor
-
QUIC Address Discovery
- iroh v0.32’den beri QUIC Address Discovery(QAD) kullanılıyor
- STUN yerine QUIC bağlantısı üzerinden istemcinin genel IP adresi öğreniliyor
- Şifreli paket iletimi sayesinde protokol katılaşması önleniyor ve gizlilik koruması güçleniyor
-
QLog genişletmeleri
- QLog standart taslağı temel alınarak QUIC bağlantısındaki çeşitli olaylar kaydediliyor
- Öncekine kıyasla çok daha fazla olay destekleniyor ve multipath ile ilgili olaylar da eklenmiş durumda
- qvis gibi görselleştirme araçlarıyla uyumlu ve çoklu yol paket akışını gösteren bir görüntüleyici prototipi de sunuluyor
-
WeakConnectionHandle
- Bağlantıyı elde tutmadan, gerektiğinde Connection nesnesine yükseltilebilen bir tür
std::sync::Weak benzeri olsa da Arc kullanmak gerekmiyor
- bağlantı yöneticisi gibi yapılarda faydalı şekilde kullanılabiliyor
Prodüksiyon kullanımı ve birlikte çalışabilirlik
- noq, iroh v0.96 itibarıyla prodüksiyon ortamında kullanılıyor
- Yalnızca kendi multipath uygulamasıyla değil, picoquic ile de birlikte çalışabilirlik testleri tamamlandı
Gelecek planları
- noq’un uzun vadeli bir temel teknoloji olarak geliştirilmesi planlanıyor
- NAT traversal iyileştirmeleri ve multipath tabanlı performans optimizasyonu üzerinde çalışılacak
- QUIC çalışma grubu ve Quinn ekibiyle iş birliği sürdürülecek
- QUIC uygulamaları, P2P aktarım ve çeşitli ağ ortamlarında çalışan uygulamalar geliştirenlerle iş birliği genişletilecek
- Rust tabanlı QUIC multipath uygulamasını doğrudan deneyebilmek için dokümantasyon ve örnek kod sunulacak
Iroh’a genel bakış
- Iroh, “dial-any-device” ağ kütüphanesi olup protokol birleşimleriyle esnek ağ yapılandırmasını destekliyor
- Yüz binlerce cihazda hâlihazırda çalışıyor ve açık kaynak olarak yayımlanıyor
- Dokümantasyon, kod ve Discord kanalı üzerinden projeye katılım mümkün
1 yorum
Hacker News görüşleri
Bu başlıkta Iroh ekibinin fork yapmaya karar verme sürecini karşılıklı saygıyla tartışmasını görmek güzeldi
Ayrıca dahili değişiklikleri yeniden upstream'e geri göndermenin ne kadar zor olduğunu da iyi gösteriyor. Kendi değişikliklerini incelemeye açmak için yüzlerce küçük PR'a bölmeye vakitlerinin olmadığını söylediler. Bir şirket açısından bu fazla büyük bir zaman yatırımı
Yine de ana projeyle ve implementasyon ayrıntılarıyla yakın kalmalarını umuyorum. Yeterince istikrara kavuştuktan sonra küçük parçalar yerine büyük bloklar halinde birleştirme de mümkün olabilir gibi görünüyor
iroh, kişisel uygulamaları hızlıca geliştirme çağında iyi konumlanmış bir ürün gibi görünüyor
Bunu kullanarak bir “app relay” yapmak istiyordum. Kullanıcının ekstra ayar yapmadan kendi ağındaki uygulama ya da verilere uzaktan erişebilmesini sağlayan bir zero-config OSS çözümü tasarlıyorum. Bu, Tailscale gibi ağ relay çözümlerinden farklı
n0 ekibini gerçekten seviyorum. P2P dosya aktarımı için onların sendme CLI aracını sık kullanıyorum
noq/iroh'nin QUIC paketlerini relay etme biçimini merak ediyordum. QUIC'i takip etmek zor olduğu için, relay'in hangi paketi nereye göndereceğini nasıl bildiğini ya da QUIC'i başka bir protokolün içine sarıp sarmalamadığını merak ettim
Pratikte QUIC datagram'larını WebSocket içine sararak iletiyor. Header'da hedef EndpointId (ed25519 açık anahtarı) yer alıyor ve handshake üzerinden gönderen EndpointId de doğrulanıyor
Yani aslında QUIC datagram'larını HTTPS over TCP üzerinden tünelliyor. Çifte şifreleme söz konusu ama UDP'nin engellendiği ortamlarda da çalışıyor ve normal trafik gibi görünmesi için tasarlanmış
iroh ekibi hâlâ yüksek hızda ilerliyor
Hafta sonunda zaman ayırıp iroh ile Nebula benzeri bir overlay ağ kurmayı planlıyorum
QUIC gibi yaklaşımlar hâlâ bağlantı sürekliliğini taşıma durumuna sıkı sıkıya bağlı tutan bir yapı
Oturum kimliğini taşıma katmanından tamamen ayırıp, taşıma başarısızlığını sadece kurtarılabilir bir olay haline getirmenin mümkün olup olmadığını düşünüyorum. QUIC'in ötesine geçen pratik bir sistem görmüş olan var mı merak ediyorum
noq kod parçasına bakıyorum
Yakın zamanda duyurulan iroh'nin özel taşıma özelliği ile ilgili haber de ilginç
Ayrıntılar için iroh 0.97.0 blog yazısına bakabilirsiniz
Acaba nQUIC'e baktınız mı? Noise'u Noq ile entegre etmek ilginç olabilir
noq (ve onun temelindeki Quinn), kendi “Session” trait'ini implemente etmenize izin veriyor; böylece TLS ya da nQUIC arasında istediğinizi seçebiliyorsunuz
tsoding'in Noq'u ile karıştırmamak lazım. Onun adı “Not Coq”tan geliyor