RTCQuicTransport Yakınınızdaki Bir Kaynak Denemesine Geliyor (Chrome 73)

Nasıl yani?

RTCQuicTransport, yeni bir web platformudur QUIC kullanarak uzaktaki eşlerle rastgele veri alışverişine izin veren API protokolü. Eşler arası kullanım alanlarına yönelik olduğundan Bağımsız bir RTCIceTransport üzerinden eşler arası bağlantı kurulmasını sağlayan API ICE Veriler güvenilir ve sıralı bir şekilde aktarılır (aşağıdaki bölüme bakın) sipariş edilmemiş ve güvenilir olmayan teslimat) olabilir. Genel olduğundan, Oyunlar, dosya aktarımları, medya aktarımı, mesajlaşma vb.

Neden?

Güçlü bir alt düzey veri taşıma API'si, uygulamaları (ör. gerçek zamanlı iletişim) internette yeni şeyler yapmak için kullanılır. API'yi temel alarak iş arkadaşlarınızla yapabileceklerinizin sınırlarını zorlayarak, kendi çözümlerinizi (ör. özel bit hızı ayırma düğmelerinin kilidinin açılması) kullanılabilir. İçinde Kodlanmış medyaya yönelik daha fazla destek, işletmenizle kurduğunuz etkileşimin kontrol olanağı sunan bir görüntülü iletişim uygulamasıdır. WebRTC’nin NV çabası daha alt düzey API'lere geçmektir. Bu şekilde erkenden denemeler yapmak da değerlidir.

Neden QUIC?

Gerçek zamanlı iletişimler için QUIC protokolü tercih edilir. Bu özellik, UDP'nin UDP'nin üzerinde olduğundan, yerleşik şifreleme, tıkanıklık kontrolü vardır ve başkan yardımcısı olun. RTCQuicTransport, ile çok benzer yetenekler sunar. RTCDataChannel API'sını; ancak taşıma olarak SCTP yerine QUIC'yi kullanır protokolü. RTCQuicTransport bağımsız bir API olduğundan, gerçek zamanlı medya içeriklerini içeren RTCPeerConnection API'sinin ek yükünü yığını.

Nasıl mı?

Genel API'ye genel bakış

API'de 3 ana özetleme bulunur: RTCIceTransport, RTCQuicTransport ve RTCQuicStream.

API mimarisini gösteren RTCQuicTransport diyagramı

RTCIceTransport

ICE, internet üzerinden eşler arası bağlantılar kuran bir protokoldür. günümüzde WebRTC'de kullanılmaktadır. Bu nesne, reklam öğelerini temel alan ICE bağlantısı olabilir. QUIC bağlantısı için paket aktarımı olarak kullanılır. RTCQuicTransport, bunu oluşturucusunda alır.

RTCQuicTransport

QUIC bağlantısını temsil eder. QUIC bağlantısı kurmak ve QUIC akışları oluşturabilirsiniz. Ayrıca QUIC bağlantısıyla ilgili istatistikleri de gösterir seviyesinde olmalıdır.

RTCQuicStream

Uzak tarafta veri okumak ve yazmak için kullanılır. Akışları taşıma emin olmanız gerekir. Aynı kaynaktan birden fazla akış oluşturulabilir RTCQuicTransport ve veriler bir akışa yazıldığında bir uzaktan toplu taşımada “onquicstream” etkinliği. Akışlar, aynı QUIC bağlantısındaki farklı verileri ayırt edebilirsiniz. Yaygın örnekler ayrı akışlar genelinde ayrı dosyalar, veya ayrı akışlardaki farklı medya türlerini görmenizi sağlar. RTCQuicStream'ler hafiftir, bir QUIC bağlantısı üzerinden çoğulanır ve diğer RTCQuicStream'lerin başında engel olmamasına neden olmaz.

Bağlantı Kurulumu

Aşağıda, eşler arası QUIC bağlantısı oluşturmaya yönelik bir örnek verilmiştir. RTCPeerConnection gibi, RTCQuicTransport API de bir bağlantı parametrelerini müzakere etmek için güvenli sinyal kanalı, dahil olmak üzere mevcut tüm koruma özelliklerinden yararlanabilirsiniz. RTCIceTransport, ICE ile anlaşma yapıyor parametrelerini (ufrag ve şifre) ve RTCIceCandidate'ları içerir.

API mimarisini gösteren RTCQuicTransport diyagramı

Müşterinin bakış açısı:

const iceTransport = new RTCIceTransport();
const quicTransport = new RTCQuicTransport(iceTransport);
// Signal parameters, key and candidates.
signalingChannel.send({
  iceParams: iceTransport.getLocalParameters(),
  quicKey: quicTransport.getKey(),
});
iceTransport.onicecandidate = e => {
  if (e.candidate) {
    signalingChannel.send({candidate: e.candidate});
  }
};

// When remote parameters are signaled, start connection.
signalingChannel.onMessage = async ({iceParams, candidate}) => {
  if (iceParams) {
    iceTransport.start(iceParams);
    quicTransport.connect();
  } else if (candidate) {
    iceTransport.addRemoteCandidate(candidate);
  }
};

Sunucunun bakış açısı:

const iceTransport = new RTCIceTransport();
const quicTransport = new RTCQuicTransport(iceTransport);
// Signal parameters, key and candidates.
signalingChannel.send({
  iceParams: iceTransport.getLocalParameters(),
});
iceTransport.onicecandidate = e => {
  if (e.candidate) {
    signalingChannel.send({candidate: e.candidate});
  }
};

// When remote parameters are signaled, start connection.
signalingChannel.onMessage = async ({iceParams, quicKey, candidate}) => {
  if (iceParams && quicKey) {
    iceTransport.start(iceParams);
    quicTransport.listen(quicKey);
  } else if (candidate) {
    iceTransport.addRemoteCandidate(candidate);
  }
};

Veri Aktarımı

Veri aktarımı, okuma ve görüntüleme için RTCQuicStream API'leri kullanılarak yazılıyor:

RTCQuicStreamReadResult readInto(Uint8Array data);
void write(RTCQuicStreamWriteParameters data);
Promise<void> waitForWriteBufferedAmountBelow(unsigned long amount);
Promise<void> waitForReadable(unsigned long amount);

Arabelleğe alınıyor

waitFor* yöntemlerinin döndürdüğü taahhütler, aşağıdaki durumlarda verilerin arabelleğe alınmasına izin verir. JavaScript meşgul. okuma arabelleği alıcı tarafında dolar. Gönderen tarafta yazma var. arka basınç uygulandığında doldurulabilecek tamponları yazma tarafında da bir waitForWriteBufferedAmountBelow yöntemi bulunur. yazması için arabellekte yer açılmasına izin verir. Daha fazla bilgi için: Geliştiricinin diğer bölümlerinden de yazma/okuma verilerini bulabilirsiniz belgeleri inceleyin.

Siparişsiz/Güvenilir Olmayan Teslimat

RTCQuicStream yalnızca verilerin güvenilir ve sıralı şekilde gönderilmesini destekler. güvenilmez/sırasız teslimat başka yollardan da yapılabilir. Örneğin, sırasız teslimat, ayrı akışlara küçük parçalar halinde veri gönderilebilir çünkü veriler akışlar arasında sıralanmaz. Güvenilir olmayan teslimat için bitiş doğru değerine ayarlanmış küçük veri parçaları gönderebilir ve ardından Zaman aşımı süresinin sonunda akışta reset(). Zaman aşımı verileri kaybetmeden önce kaç tane yeniden iletimin yapılması gerektiği.

Ne zaman?

Kaynak denemesi Chrome 73 sürümünde başlayacak ve kullanıma sunulacaktır ve M75 sürümü dahil. Bundan sonra kaynak denemesi dokunun. Geri bildirim ve ilgi doğrultusunda gerekli değişiklikleri yapacağız API'yi göndermeli, bu API'nin yeni kaynak denemesini uygulamalı veya API'ye son vermeli.

Nerede?

Chrome Tarayıcı, iOS hariç tüm platformlarda kullanılabilir.

Başka bir konu var mı?

Geri bildirim

Kaynak denemesinin ana hedeflerinden biri sizden geri bildirim almaktır. geliştiricilerden bahsedeceğiz. İlgi alanları:

  • Bu API sizin için ne sağlıyor?
  • Bu API, diğer veri taşıma API'lerini nasıl iyileştiriyor? (WebSocket veya WebRTC'nin RTCDataChannel)? Bunu nasıl iyileştirebilir?
  • Performans
  • API ergonomisi

Kaynak deneme sürümüne kaydolun

  1. Kaynağınız için jeton isteyin.
  2. Jetonu sayfalarınıza ekleyin. Bu jetonu kaynağınızdaki sayfalar:
    • Herhangi bir sayfanın başına origin-trial <meta> etiketi ekleyin. Örneğin, aşağıdaki gibi görünebilir: <meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">.
    • Sunucunuzu yapılandırabiliyorsanız jetonu sayfalarda da sağlayabilirsiniz veya Origin-Trial HTTP üstbilgisi kullanarak. Sonuçta ortaya çıkan yanıt başlığı, şuna benzer: Origin-Trial: TOKEN_GOES_HERE

Web Spesifikasyonu

Taslak spesifikasyon, kaynak denemesinde API'nin ilerisine taşındı şunları içerir:

  • WHEREWG akışlarıyla daha yakından uyumlu olan tek yönlü akışlar
  • Yeniden iletimleri devre dışı bırakma
  • (Çok yakında) veri birimleri

Teknik özelliklerin tamamını ve daha fazlasını ( NEWG akış desteği) ile ilgili daha fazla bilgi edinin.

Güvenlik

QUIC el sıkışmasında güvenlik sağlamak için, önceden paylaşılan bir anahtar kullanılarak Şifrelenmiş bir P2P QUIC bağlantısı oluşturmalıdır. Bu anahtarın gizlilik ve bütünlük garantileriyle bant dışı, güvenli bir kanaldır. Anahtarın JavaScript'e açık olacağını unutmayın.

Aktif Saldırı

Yalnızca sertifikanın sinyalini göndermek için bütünlük gerektiren DTLS-SRTP'den farklı olarak Dijital parmak izi, önceden paylaşılan anahtarın sinyalini vermek için bütünlük gerektirir. . PSK'nın güvenliği ihlal edilmişse (ör. sinyaldeki sunucu tarafından anlaşırsa aktif bir saldırgan, ortadaki adam saldırısına neden olabilir olması gerekir.

Mevcut durum

Step Durum
1. Açıklayıcı oluşturun Tamamlandı
**2a. RTCQuicTransport Spesifikasyonu ** **Devam Ediyor**
**2b. RTCIceTransport Spesifikasyonu ** **Devam Ediyor**
**3. Geri bildirim toplama tasarımı tekrarlayın** **Devam Ediyor**
4. Kaynak denemesi Chrome 73'te başlıyor!
5. Başlat Başlatılmadı

Yararlı Bağlantılar