Webrtc SCTP kullanıyor mu?
WebRTC veri kanallarını kullanma
Özet
Bu kılavuzda, bir akran bağlantısına veri kanalının nasıl ekleneceğini inceleyeceğiz, bu da keyfi verileri güvenli bir şekilde değiştirmek için kullanılabilecek. Bir veri kanalı oluşturacağına bakacağız ve otomatik ve manuel müzakere seçeneklerini tartışacağız.
Anahtar noktaları
1. SCTP taşımacılığı, akran bağlantısında rtcdatachannels için veri iletmek ve almak için kullanılır.
2. RTCPeerConnection Arayüzü, SCTP adlı salt okunur bir özelliğe sahiptir, bu da kullanılan SCTP aktarımını tanımlayan bir RTCSCTPTransport nesnesi döndürür.
3. RTCPeerConnection arabirimindeki CreateTaCHannel () yöntemi, yeni bir veri kanalı oluşturmak için kullanılır.
4. Otomatik müzakere, RTCPeerConnection’ın veri kanalının müzakere ve oluşturulmasını ele almasını sağlar.
5. Manuel müzakere, müzakere edilen mülkün doğru olarak ayarlanmış bir RTCDATACHANNEL nesnesi oluşturulmasını ve ardından bağlantıyı bant dışında müzakere etmeyi içerir.
6. Veri kanalı üzerinden gönderilebilen maksimum mesaj boyutu, rtcsctptransport nesnesinin MaxMessageSize özelliği kullanılarak belirlenebilir.
7. WebRTC bileşenleri, RTCDataChannel üzerinden iletilen verileri güvence altına almak için şifreleme kullanır.
8. WebRTC veri kanallarının özellikleri WebRTC’de bulunabilir: Tarayıcılarda Gerçek Zamanlı İletişim Spesifikasyonu.
9. WebRTC veri kanallarının uyumluluğu tarayıcılar arasında değişir.
10. Sayfayla ilgili sorunları düzenleme veya raporlama için ek kaynaklar ve seçenekler “Ayrıca bkz.” Bölümünde bulunabilir.
Sorular ve cevaplar
- WebRTC veri kanallarında ACK bloklarının amacı nedir?
ACK blokları, gönderenlere, teslim edilen paketlerde bir boşluk olsa bile, belirli paketlerin yeniden kiralanması gerekmediğini bildirmek için kullanılır. Örneğin, TSN 100, 102, 103 ve 104’ü olan veri parçaları teslim edilirse, ancak kümülatif TSN ACK 100 ise, ACK blokları TSN’lerin 102, 103 ve 104’ün yeniden kiralanması gerekmediğini belirtmek için kullanılabilir. - RTCPeerConnection Arabiriminin SCTP özelliği ne yapar??
SCTP özelliği, akran bağlantısında RTCDataChannels için veri iletmek ve almak için kullanılan SCTP aktarımını açıklayan bir RTCSCTPTransport nesnesi döndürür. SCTP müzakere edilmediyse, değer boş. - WebRTC’de bir veri kanalı nasıl oluşturulabilir??
RTCPeerConnection arabiriminde CreateTaCHannel () yöntemi kullanılarak bir veri kanalı oluşturulabilir. Bu yöntem, yeni oluşturulan veri kanalını temsil eden bir RTCDataChannel nesnesi döndürür. - Otomatik müzakere ile manuel müzakere arasındaki fark nedir?
Otomatik müzakerede RTCPeerConnection, veri kanalının müzakere ve oluşturulmasını işler. CreateTACHannel () yöntemi, müzakere edilen mülk için bir değer belirtmeden veya yanlış değeri ile çağrılır. Manuel müzakerede, veri kanalı müzakere edilen mülkün True olarak ayarlanmasıyla oluşturulur ve müzakere bir web sunucusu veya başka yollar kullanılarak bant dışı yapılır. - Bir veri kanalı üzerinden gönderilebilen maksimum mesaj boyutu nasıl belirlenebilir??
Maksimum mesaj boyutu, RTCPeerConnection tarafından kullanılan SCTP aktarımını temsil eden RTCSCTPTransport nesnesinin MaxMessageSize özelliğine erişilerek belirlenebilir. - Bir rtcdatachannel üzerinden iletilen veriler otomatik olarak sabitlendi?
Evet, bir RTCDataChannel’de iletilen tüm veriler, Datagram Taşıma Katmanı Güvenliği (DTLS) kullanılarak otomatik olarak sabitlenir. WEBRTC bileşenlerinin, verilerin güvenliğini sağlamak için şifreleme kullanması gerekmektedir. - WebRTC veri kanallarının özellikleri nerede bulunabilir?
WebRTC veri kanallarının özellikleri WebRTC’de bulunabilir: Tarayıcılar spesifikasyonunda gerçek zamanlı iletişim, özellikle DOM-RTCPeerConnection-SCTP bölümü. - WebRTC veri kanallarının tarayıcılardaki uyumluluğu nedir?
WebRTC veri kanallarının uyumluluğu farklı tarayıcılar arasında değişebilir. Hedef tarayıcılar ve sürümler için uyumluluğu test etmek ve sağlamak önemlidir. - WebRTC veri kanallarıyla ilgili bazı ek kaynaklar nelerdir??
GitHub’daki sayfayı düzenleyebilir, içerik sorunlarını rapor edebilir veya GitHub’daki kaynak kodu görüntüleyebilirsiniz. Bu seçenekler aşağıdaki “Ayrıca bkz.” Bölümünde bulunabilir.WebRTC veri kanallarını kullanma
Kümülatif TSN ACK’dan sonra alınan TSN’leri ACK blokları . Bu, teslim edilen paketlerde bir boşluk varsa kullanılır. İzin vermek’TSN 100, 102, 103 ve 104 ile veri parçaları deyin. Kümülatif TSN ACK 100 olurdu, ancak ACK blokları, gönderen göndereni söylemek için kullanılabilir’102, 103 veya 104’ü yeniden göndermeniz gerekiyor .
RTCPeerConnection: SCTP özelliği
Salt okunur SCTP RTCPeerConnection Arayüzündeki Özellik, SCTP verilerinin gönderildiği ve alındığı SCTP aktarımını açıklayan bir RTCSCTPTRANSPORT döndürür. SCTP müzakere edilmediyse, bu değer boş .
SCTP taşımacılığı, akran bağlantısında herhangi bir RTCDataChannel s için veri iletmek ve almak için kullanılır.
Değer
RTCPeerConnection tarafından veri kanallarını iletme ve alma için kullanılan SCTP aktarımını tanımlayan bir RTCSCTPTRANSPORT nesnesi veya SCTP müzakeresi gerçekleşmediyse null.
Örnek
const peerconnection = yeni Rtcpeerconnection(); const kanal = peerconnection.yaratılan("Benim verim"); kanal.üstüne gelmek = (etkinlik) => kanal.Göndermek("Mesaj Gönderme"); >; kanal.onmessage = (etkinlik) => konsol.kayıt(etkinlik.veri); >; // Gönderilebilecek en büyük mesaj boyutunu belirleyin const SCTP = peerconnection.SCTP; const maxMessageSize = SCTP.maxMessageSize;
Spesifikasyonlar
Şartname WebRTC: Tarayıcılarda gerçek zamanlı iletişim
# Dom-Rtcpeerconnection-sctpTarayıcı Uyumluluğu
BCD tabloları yalnızca tarayıcıda yükleniyor
Ayrıca bakınız
Bu sayfada bir içerik sorunu buldum?
- GitHub’daki sayfayı düzenleyin.
- İçerik sorununu bildirin.
- Github’daki kaynağı görüntüleyin.
Bu sayfa en son 25 Nisan 2023’te MDN Katkıda bulunanlar tarafından değiştirildi.
Daha iyi bir internet için planınız.
WebRTC veri kanallarını kullanma
Bu kılavuzda, bir akran bağlantısına veri kanalının nasıl ekleneceğini inceleyeceğiz, bu da daha sonra rasgele verileri güvenli bir şekilde değiştirmek için kullanılabilecek; yani, dilediğimiz her türlü veri, seçtiğimiz herhangi bir biçimde.
Not: Tüm WebRTC bileşenlerinin şifreleme kullanması gerektiğinden, bir RTCDataChannel’e iletilen veriler Datagram taşıma katmanı güvenliği kullanılarak otomatik olarak sabitlenir (DTLS). Daha fazla bilgi için aşağıdaki güvenliğe bakın.
Bir Veri Kanalı Oluşturma
RTCDataChannel tarafından kullanılan temel veri aktarımı iki yoldan biriyle oluşturulabilir:
- Webrtc’nin taşımayı oluşturmasına ve sizin için uzak eşine duyurmasına izin verin (bir veri akanlığı etkinliği almasına neden olarak). Bu kolay yoldur ve çok çeşitli kullanım durumları için çalışır, ancak ihtiyaçlarınız için yeterince esnek olmayabilir.
- Veri aktarımını müzakere etmek için kendi kodunuzu yazın ve yeni kanala bağlanması gereken diğer eşlere sinyal vermek için kendi kodunuzu yazın.
Bu vakaların her birine bakalım, ilkinden başlayarak, en yaygın olanı.
Otomatik müzakere
Genellikle, akran bağlantısının sizin için RTCDataChannel bağlantısını müzakere etmesine izin verebilirsiniz. Bunu yapmak için ara
CreateatAchannel (), müzakere edilen mülk için bir değer belirtmeden veya mülkün yanlış değeri ile belirtilmeden . Bu, sizin için müzakereleri işlemek için RTCPeerConnection’ı otomatik olarak tetikleyerek uzak akranın bir veri kanalı oluşturmasına ve ikisini ağ boyunca birbirine bağlamasına neden olacaktır.
RTCDataChannel nesnesi derhal createatachannel () ile döndürülür; RTCDataChannel’e gönderilecek açık etkinliğin izleyerek bağlantının ne zaman başarılı bir şekilde yapıldığını söyleyebilirsiniz .
izin vermek datacannel = pc.yaratılan("MyApp Kanalı"); datacannel.addeventListener("açık", (etkinlik) => başlangıç(datacannel); >);
Manuel müzakere
Veri kanalı bağlantısını manuel olarak müzakere etmek için, öncelikle RTCPeerConnection’da CreateTACHAnnel () yöntemini kullanarak yeni bir RTCDataChannel nesnesi oluşturmanız gerekir, bu da müzakere edilen bir mülkiyeti true olarak belirleyen seçeneklerde belirtir . Bu, kanalı sizin adınıza müzakere etmeye çalışmaması için akran bağlantısına işaret eder.
Ardından, bir web sunucusu veya başka yollar kullanarak bağlantıyı bant dışında müzakere edin. Bu işlem, uzak eşe, aynı kimliği kullanarak, müzakere edilen mülkle de true olarak ayarlanmış olan kendi RTCDATACHANNEL’i oluşturması gerektiğini göstermelidir . Bu, RTCPeerConnection’daki iki nesneyi birbirine bağlar .
izin vermek datacannel = pc.yaratılan("MyApp Kanalı", müzakere edilmiş: doğru, >); datacannel.addeventListener("açık", (etkinlik) => başlangıç(datacannel); >); RequestRemotechannel(datacannel.İD);
Bu kod snippet’inde, kanal müzakere ile ayarlanmış olarak oluşturulur, ardından yerel kanalla aynı kimliğe sahip bir uzak kanal oluşturmak için müzakereyi tetiklemek için RequestRemotechannel () adlı bir işlev kullanılır.
Bunu yapmak, farklı özellikleri kullanarak her eşle veri kanalları oluşturmanızı ve kimlik için aynı değeri kullanarak kanallar oluşturmanızı sağlar .
Tamponlama
WebRTC veri kanalları, giden verilerin arabelleğini destekliyor. Bu otomatik olarak işlenir. Tamponun boyutunu kontrol etmenin bir yolu olmasa da, şu anda ne kadar veri arabelleğe alındığını öğrenebilirsiniz ve arabelleğin kuyruklu verilerde düşük çalışmaya başladığında bir olayla bildirilmeyi seçebilirsiniz. Bu, belleği aşırı kullanmadan veya kanalı tamamen batırmadan her zaman göndermeye hazır verilerin olmasını sağlayan verimli rutinler yazmayı kolaylaştırır.
Mesaj boyutu sınırlarını anlamak
Bir ağ üzerinden iletilen herhangi bir veri için boyut kısıtlamaları vardır. Temel düzeyde, ayrı ağ paketleri belirli bir değerden daha büyük olamaz (kesin sayı ağa ve kullanılan taşıma katmanına bağlıdır). Uygulama düzeyinde – yani, kullanıcı aracısının kodunuzun üzerinde çalıştığı WebRTC’yi uygulaması dahilinde – WebRTC uygulaması, ağın taşıma katmanındaki maksimum paket boyutundan daha büyük mesajları desteklemek için özellikleri uygular.
Bu şeyleri karmaşıklaştırabilir, çünkü çeşitli kullanıcı aracıları için boyut sınırlarının ne olduğunu ve daha büyük bir mesaj gönderildiğinde veya alındığında nasıl yanıt verdiklerini bilmediğiniz için. Kullanıcı temsilcileri akış kontrol iletim protokolü (SCTP) verilerini işlemek için aynı temel kitaplığı paylaşsa bile, kütüphanenin nasıl kullanıldığı için varyasyonlar olabilir. Örneğin, hem Firefox hem de Google Chrome, SCTP’yi uygulamak için USRSCTP kütüphanesini kullanıyor, ancak bir RTCDataChannel üzerindeki veri aktarımının kütüphaneyi nasıl çağırdığı ve hatalara tepki verdikleri farklılıklar nedeniyle başarısız olabileceği durumlar var.
Firefox’u çalıştıran iki kullanıcı bir veri kanalında iletişim kurarken, mesaj boyutu sınırı, Firefox ve Chrome’un iletişim kurduğundan çok daha büyüktür, çünkü Firefox, Chrome’un birden fazla SCTP mesajında büyük mesajlar göndermek için artık kullanımdan kaldırılmış bir teknik uygular,. Chrome bunun yerine, tamamlandığına inandığı bir dizi mesaj görecek ve bunları birden fazla mesaj olarak alıcı RTCDataChannel’e teslim edecek.
16 KIB’den küçük mesajlar endişe duymadan gönderilebilir, çünkü tüm büyük kullanıcı aracıları bunları aynı şekilde ele alır. Bunun ötesinde, işler daha karmaşıklaşıyor.
Büyük mesajlarla ilgili endişeler
Şu anda, 64 KIB’den büyük mesajlar için RTCDATACHANNEL kullanmak pratik değildir (tarayıcı çapraz veri alışverişini desteklemek istiyorsanız 16 KIB). Sorun, bir RTCDataChannel’e veri göndermek ve almak için kullanılan protokol olan SCTP’nin başlangıçta sinyal protokolü olarak kullanılmak üzere tasarlanmış olması gerçeğinden kaynaklanmaktadır. Mesajların nispeten küçük olması bekleniyordu. Ağ katmanının MTU’sundan daha büyük mesajlar için destek, MTU’dan daha büyük olması gereken mesajların sinyal vermesi durumunda neredeyse sonradan düşünülmüş olarak eklendi. Bu özellik, mesajın her bir parçasının ardışık sıra numaralarına sahip olmasını gerektirir, bu nedenle aralarında yer alan başka bir veri olmadan birbiri ardına iletilmeleri gerekir.
Bu sonunda bir sorun haline geldi. Zamanla, çeşitli uygulamalar (WebRTC’yi uygulayanlar dahil) daha büyük ve daha büyük mesajları iletmek için SCTP kullanmaya başladı. Sonunda, mesajlar çok büyük hale geldiğinde, kritik sinyal mesajları da dahil olmak üzere, bu veri kanalındaki diğer tüm veri transferlerini engellemek için büyük bir mesajın iletilmesinin mümkün olduğu anlaşıldı.
Bu, tarayıcılar daha büyük mesajları desteklemek için mevcut standardı düzgün bir şekilde desteklediğinde bir sorun haline gelecektir-bir dizinin tek bir yük olarak ele alınması gereken bir mesajın sonuncusu olduğunu belirten kayıt sonu (EOR) bayrağı. Bu Firefox 57’de uygulanır, ancak henüz Chrome’da uygulanmamıştır (bkz. Chromium Hatası 7774). EOR desteği yerinde olduğunda, RTCDATACHANNEL yükleri çok daha büyük olabilir (resmi olarak 256 KIB’e kadar, ancak Firefox’un uygulaması bunları 1 GIB’de kapatır). 256 KIB’de bile, bu acil trafiği ele almada belirgin gecikmelere neden olacak kadar büyük. Daha da büyürseniz, operasyonel koşullarınızdan emin değilseniz, gecikmeler savunulamaz olabilir.
Bu sorunu çözmek için yeni bir sistem Akış Zamanlayıcıları (Genellikle “SCTP NDATA spesifikasyonu” olarak adlandırılır), WebRTC veri kanallarını uygulamak için kullanılan akışlar da dahil olmak üzere farklı akışlarda gönderilen mesajları birbirine ayırmayı mümkün kılmak için tasarlanmıştır. Bu teklif hala IETF taslak formunda, ancak uygulandıktan sonra, aslında boyut sınırlamaları olmayan mesajlar göndermeyi mümkün kılacaktır, çünkü SCTP katmanı her kanalın verilerinin geçme fırsatına sahip olmasını sağlamak için temel alt mesajları otomatik olarak serpiştirecektir.
NDATA için Firefox desteği uygulanma sürecindedir; Genel kullanım için kullanılabilir hale gelmesini izlemek için Firefox Bug 1381145’e bakın. Chrome ekibi, Chrome Bug 5696’da NDATA desteğini uygulamalarını izliyor.
Not: Bu bölümdeki bilgilerin çoğu, kısmen Lennart Grahl tarafından yazılan WebRTC’nin Veri Kanalı Mesaj Boyutu Sınırlamaları Blog yazısına dayanmaktadır. Orada biraz daha ayrıntıya giriyor, ancak tarayıcılar güncellendikçe, bazıları güncel olabilir. Buna ek olarak, zaman geçtikçe, özellikle EOR ve NDATA desteği büyük tarayıcılara tam olarak entegre edildiğinde daha fazla olacak.
Güvenlik
WebRTC kullanılarak aktarılan tüm veriler şifrelenmiştir. RTCDATACHANNEL durumunda, kullanılan şifreleme, taşıma katmanı güvenliğine (TLS) dayanan Datagram Taşıma Katmanı Güvenliği (DTLS) ‘dir. TLS her HTTPS bağlantısını güvence altına almak için kullanıldığından, bir veri kanalına gönderdiğiniz tüm veriler, kullanıcının tarayıcısı tarafından gönderilen veya alınan diğer veriler kadar güvenlidir.
Daha temel olarak, WebRTC iki kullanıcı aracısı arasında eşler arası bir bağlantı olduğundan, veriler asla web veya uygulama sunucusundan geçmez. Bu, verilerin ele geçirilmesi için fırsatları azaltır.
Bu sayfada bir içerik sorunu buldum?
- GitHub’daki sayfayı düzenleyin.
- İçerik sorununu bildirin.
- Github’daki kaynağı görüntüleyin.
Bu sayfa en son 25 Nisan 2023’te MDN Katkıda bulunanlar tarafından değiştirildi.
Webrtc SCTP kullanıyor mu?
О э э с сне
М з з рарегистрировали подозрительный тик, исходящий из Вашей сий. С п с о ы ы с п п с xм ы с с ы xм ы ы с с о x ыи с с ои от от от оз пе пе от от оз он оны от оны онныы онныы онн вы, а н, а нбн Вы,. Поч yatırıl?
Эта страница отображается в тех случаях, когда автоматическими системами Google регистрируются исходящие из вашей сети запросы, которые нарушают Условия использования. Сраница перестанет отображаться после того, как эи запросы прекратяттся. До эого момента дл Ekim ил исползования служб Google нобходим çar.
Источником запросов может служить вредоносное ПО, подключаемые модули браузера или скрипт, настроенный на автоматических рассылку запросов. Если вы используете общий доступ в Интернет, проблема может быть с компьютером с таким же IP-адресом, как у вас. Обратитесь к своемtern. Подробнее.
Проверка по со может luV пе появляться, ео е Вводия, оожо Вы воде сн ыыыые ае iri ае ае iri ае ае iri пе ае iri ае ае iri пе ае iri пе ае iri пе ае iri пе ае ае ае ае iri пе аотототыыыыыыыыыыыететет ]p anauma аете keluma емами, или же водите запросы очень часто.
Veri iletişimi #
Webrtc’den ne alacağım’S veri iletişimi? #
WebRTC, veri iletişimi için veri kanalları sağlar. İki akran arasında 65.534 veri kanalını açabilirsiniz. Bir veri kanalı datagram tabanlıdır ve her birinin kendi dayanıklılık ayarları vardır. Varsayılan olarak, her veri kanalı sipariş teslimatını garanti etti. Bir medya arka planından WebRTC’ye yaklaşıyorsanız, veri kanalları savurgan görünebilir. HTTP veya WebSockets kullanabildiğimde neden bu alt sisteme ihtiyacım var? Veri kanallarıyla gerçek güç, bunları sıralanmamış/kayıplı teslimat ile UDP gibi davranacak şekilde yapılandırabilmenizdir. Bu düşük gecikme ve yüksek performanslı durumlar için gereklidir. Geri basıncını ölçebilir ve yalnızca ağınızın desteklediği kadar gönderdiğinizden emin olabilirsiniz.
O nasıl çalışır? #
WebRTC, RFC 4960’da tanımlanan Akış Kontrol Şanzıman Protokolünü (SCTP) kullanır. SCTP, TCP veya UDP’ye alternatif olarak tasarlanan bir taşıma katmanı protokolüdür. WebRTC için bunu DTLS bağlantımızın üzerinden geçen bir uygulama katmanı protokolü olarak kullanıyoruz. SCTP size akarsu verir ve her akış bağımsız olarak yapılandırılabilir. WebRTC veri kanalları etraflarında sadece ince soyutlamalardır. Dayanıklılık ve sipariş etrafındaki ayarlar hemen SCTP aracısına aktarılır. Veri kanallarının SCTP’nin yapabileceği bazı özellikleri var’T Express, kanal etiketleri gibi. WebRTC’nin RFC 8832’de tanımlanan Veri Kanalı Kuruluş Protokolünü (DCEP) kullandığını çözmek için. DCEP, kanal etiketini ve protokolünü iletmek için bir mesaj tanımlar.
DCEP #
DCEP’nin yalnızca iki mesajı vardır Data_channel_open ve data_channel_ack . Açılan her veri kanalı için uzaktan kumanda bir ACK ile yanıt vermelidir.
Data_channel_open #
Bu mesaj, bir kanal açmak isteyen WebRTC ajanı tarafından gönderilir.
Paket Biçimi #
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Mesaj Türü | Kanal Türü | Öncelik | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Güvenilirlik Parametresi | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Etiket Uzunluğu | Protokol Uzunluğu | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \ \ / Label / \ \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \ \ / Protocol / \ \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Mesaj tipi #
Mesaj türü 0x03’ün statik bir değeridir .
Kanal Türü #
- Data_channel_resiable (0x00) – hiçbir mesaj kaybolmaz ve sırayla gelecektir
- Data_channel_reliable_unordered (0x80) – Hiçbir mesaj kaybolmaz, ancak sıradan gelebilirler.
- Data_channel_partial_reliable_rexmit (0x01) – İstenen miktarları denedikten sonra mesajlar kaybolabilir, ancak sırayla ulaşacaklar.
- Data_channel_partial_reliable_rexmit_unordered (0x81) – İstenen miktarları denedikten sonra mesajlar kaybolabilir ve sıradan gelebilir.
- Data_channel_partial_reliable_timed (0x02) – Dondurmazlarsa mesajlar kaybolabilir’T istenen zamana varırlar, ancak sırayla gelecekler.
- Data_channel_partial_reliable_timed_unordered (0x82) – Don’larsa mesajlar kaybolabilir’istenen zamana varır ve sıradan gelebilir.
Öncelik #
Veri kanalının önceliği. Öncelikle daha yüksek bir önceliğe sahip veri kanalları planlanacak. Büyük düşük öncelikli kullanıcı mesajları, daha yüksek öncelikli kullanıcı mesajlarının gönderilmesini geciktirmez.
Güvenilirlik parametresi #
Veri kanalı türü data_channel_partial_resiable ise, sonekler davranışı yapılandırır:
- Rexmit – Gönderenin vazgeçmeden önce mesajı kaç kez yeniden göndereceğini tanımlar.
- Zamanlanmış – Gönderenin vermeden önce mesajı ne kadar süreyle yeniden göndereceğini tanımlar.
Etiket #
Veri kanalının adını içeren UTF-8 kodlu bir dize. Bu dize boş olabilir.
Protokol #
Bu boş bir dize ise, protokol belirtilmemiş. Boş olmayan bir dize ise, “WebSocket subprotocol adı kayıt defteri”, RFC 6455’te tanımlanmıştır.
Data_channel_ack #
Bu mesaj, bu veri kanalının açıldığını kabul etmek için WebRTC aracısı tarafından gönderilir.
Paket Biçimi #
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Mesaj Türü | +-+-+-+-+-+-+-+-+
Akış Kontrolü Şanzıman Protokolü #
SCTP, WebRTC veri kanallarının arkasındaki gerçek güçtür. Veri kanalının tüm bu özelliklerini sağlar:
- Çoğaltma
- TCP benzeri yeniden iletim mekanizması kullanarak güvenilir teslimat
- Kısmi güvenilirlik seçenekleri
- Tıkanıklıktan kaçınma
- Akış kontrolü
SCTP’yi anlamak için üç kısımda keşfedeceğiz. Amaç, bu bölümden sonra SCTP’nin derin ayrıntılarını kendi başınıza hata ayıklamak ve öğrenecek kadar bileceksiniz.
Kavramlar #
SCTP, özellik zengin bir protokoldür. Bu bölüm sadece SCTP’nin WebRTC tarafından kullanılan kısımlarını kapsayacaktır. SCTP’de WebRTC tarafından kullanılmayan özellikler arasında çoklu hol ve yol seçimi.
Yirmi yılı aşkın bir gelişme ile SCTP’nin tam olarak kavraması zor olabilir.
Dernek #
Dernek, bir SCTP oturumu için kullanılan terimdir. İletişim kurarken iki SCTP ajanı arasında paylaşılan durumdur.
Canlı Yayınlar #
Bir akış, kullanıcı verilerinin iki yönlü bir dizisidir. Bir veri kanalı oluşturduğunuzda aslında sadece bir SCTP akışı oluşturuyorsunuz. Her SCTP ilişkisi, akışların bir listesi içerir. Her akış farklı güvenilirlik türleriyle yapılandırılabilir.
WebRTC yalnızca akış oluşturma konusunda yapılandırmanıza izin verir, ancak SCTP aslında yapılandırmayı istediğiniz zaman değiştirmeye izin verir.
Datagram tabanlı #
SCTP verileri datagram olarak çerçeveler, bayt akışı olarak değil. Veri göndermek ve almak TCP yerine UDP kullanmak gibi geliyor. Yapmazsın’Bir akış üzerinden birden çok dosyayı aktarmak için ekstra kod eklemeniz gerekiyor.
SCTP mesajları yok’UDP gibi boyut sınırları var. Tek bir SCTP mesajı birden çok gigabayt olabilir.
Parçalar #
SCTP protokolü parçalardan oluşur. Birçok farklı parça türü var. Bu parçalar tüm iletişim için kullanılır. Kullanıcı verileri, bağlantı başlatma, tıkanıklık kontrolü ve daha fazlası parçalar yoluyla yapılır.
Her SCTP paketi, bir parça listesi içerir. Yani bir UDP paketinde, farklı akışlardan mesaj taşıyan birden fazla parçaya sahip olabilirsiniz.
Şanzıman Sırası Numarası #
İletim Sırası Numarası (TSN), veri parçaları için küresel bir benzersiz tanımlayıcıdır. Bir kullanıcının göndermek istediği tüm mesajları taşıyan bir veri yastığıdır. TSN önemlidir, çünkü bir alıcının paketlerin kaybolup kaybolmadığını veya sıralanmadığını belirlemesine yardımcı olur.
Alıcı eksik bir TSN fark ederse,’t Verileri yerine getirilene kadar kullanıcıya verin.
Akış Tanımlayıcısı #
Her akışın benzersiz bir tanımlayıcısı vardır. Açık bir kimliğe sahip bir veri kanalı oluşturduğunuzda, aslında akış tanımlayıcısı olarak SCTP’ye aktarılır. Eğer yapmazsan’t akış tanımlayıcısının sizin için seçildiği bir kimlik geçirin.
Yük Protokolü Tanımlayıcı #
Her veri yastığı ayrıca bir yük protokolü tanımlayıcısına (PPID) sahiptir. Bu, ne tür verilerin değiştirildiğini benzersiz bir şekilde tanımlamak için kullanılır. SCTP’nin birçok PPID’si var, ancak WebRTC sadece aşağıdaki beşi kullanıyor:
- Webrtc DCEP (50) – DCEP mesajları.
- Webrtc String (51) – Datachannel String Mesajları.
- Webrtc Binary (53) – Datachannel İkili Mesajlar.
- Webrtc String Boş (56) – 0 uzunluğunda datachannel dize mesajları.
- Webrtc Binary Boş (57) – 0 uzunluğunda dataşnel ikili mesajlar.
Protokol #
SCTP protokolü tarafından kullanılan bazı parçalar aşağıdadır. Bu kapsamlı bir gösteri değil. Bu, durum makinesinin mantıklı olması için yeterli yapı sağlar.
Her yığın bir tip alanla başlar. Bir parça listesinden önce, bir başlığınız da olacak.
Veri Yasağı #
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Tür = 0 | Ayrılmış | U | B | E | Uzunluk | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| TSN | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Akış Tanımlayıcısı | Akış Sırası Numarası | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Yük Protokolü Tanımlayıcı | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\ / kullanıcı verileri / \ \ \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Veri yığını, tüm kullanıcı verilerinin nasıl değiştirildiğidir. Veri kanalı üzerinden bir şey gönderdiğinizde, bu şekilde değiştirilir.
Bu, sıralanmamış bir paket ise ayarlanır. Akış sırası numarasını görmezden gelebiliriz.
B ve E başlangıç ve bitiş bitleridir. Bir veri yastığı için çok büyük bir mesaj göndermek istiyorsanız, ayrı paketlerde gönderilen birden fazla veri parçasına parçalanması gerekir. B ve E bit ve sekans numaraları ile SCTP bunu ifade edebilir.
- B = 1, E = 0 – Parçalanmış bir kullanıcı mesajının ilk parçası.
- B = 0, E = 0 – Parçalanmış bir kullanıcı mesajının orta parçası.
- B = 0, E = 1 – Parçalanmış bir kullanıcı mesajının son parçası.
- B = 1, E = 1 – Çıkarılmamış mesaj.
TSN, iletim sırası numarasıdır. Bu veri yastığı için küresel benzersiz tanımlayıcı. 4.294.967.295 parçadan sonra bu 0’a sarılacak. TSN, parçalanmış bir kullanıcı mesajındaki her yığın için arttırılır, böylece alıcının orijinal mesajı yeniden yapılandırması için alınan parçaların nasıl sipariş edileceğini bilir.
Stream tanımlayıcı, bu verilerin ait olduğu akış için benzersiz tanımlayıcıdır.
Akış Sırası Numarası, her kullanıcı mesajını arttıran ve veri mesajı yığın başlığına dahil olan 16 bit bir sayıdır. 65535 mesajdan sonra bu 0’a sarılacak. Bu numara, 0 olarak ayarlanmışsa, alıcıya iletimin mesaj sırasına karar vermek için kullanılır. TSN’ye benzer şekilde, akış sırası numarası hariç, her bir mesaj için yalnızca bir bütün olarak arttırılır ve her bir veri yastığı değil.
Yük Protokolü Tanımlayıcı, bu akıştan akan veri türüdür. WebRTC için, DCEP, String veya ikili olacak.
Kullanıcı verileri gönderdiğiniz şeydir. WebRTC veri kanalı üzerinden gönderdiğiniz tüm veriler, bir veri yastığı ile iletilir.
Init Chunk #
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Tür = 1 | Yığın bayrakları | Yığın uzunluğu | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Etiket başlat | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Reklamı yapılan alıcı pencere kredisi (A_RWND) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Giden Akış Sayısı | Gelen akışların sayısı | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| İlk TSN | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\ / isteğe bağlı / değişken uzunluk parametreleri / \ \ \ \ \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Init Chunk, bir ilişki kurma sürecini başlatır.
Başlatma etiketi çerez üretimi için kullanılır. Çerezler ortadaki adam ve hizmetin korunması için kullanılır. Devlet Makinesi bölümünde daha ayrıntılı olarak açıklanmaktadır.
SCTP için reklamı yapılan alıcı pencere kredisi kullanılır’Slinik kontrolü. Bu, alıcının bu dernek için ne kadar büyük bir tampon tahsis ettiğini bildirir.
Giden/Gelen Akışların Sayısı, bu aracının kaç akışını desteklediğine dair uzaktan kumandayı bilgilendirir.
İlk TSN, yerel TSN’yi başlatmak için rastgele bir uint32’dir.
İsteğe bağlı parametreler, SCTP’nin protokole yeni özellikler getirmesine izin verir.
Çuval yığın #
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type = 3 | Yığın bayrakları | Yığın uzunluğu | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Kümülatif TSN ACK | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Reklamı yapılan alıcı pencere kredisi (A_RWND) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ACK Bloklarının Sayısı = N | Yinelenen tsns sayısı = x | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| GAP ACK BLOK #1 Başlangıç | GAP ACK Block #1 End | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / / \ . \ / /+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| GAP ACK BLOK #N START | Gap Ack Block #n End | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| TSN 1 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / / \ . \ / /+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Yinelenen tsn x | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Çuval (Seçici Teşekkür) Yığın, bir alıcının bir göndereni nasıl bilgilendirdiği bir paket aldı. Bir gönderen bir TSN için bir çuval alana kadar, söz konusu veri yığınını yeniden satacaktır. Bir çuval, TSN’yi güncellemekten daha fazlasını yapar.
Kümülatif TSN ACK Alınan en yüksek TSN.
Reklamı yapılan alıcı pencere kredi alıcı arabelleği boyutu. Daha fazla bellek mevcutsa alıcı oturum sırasında bunu değiştirebilir.
Kümülatif TSN ACK’dan sonra alınan TSN’leri ACK blokları . Bu, teslim edilen paketlerde bir boşluk varsa kullanılır. İzin vermek’TSN 100, 102, 103 ve 104 ile veri parçaları deyin. Kümülatif TSN ACK 100 olurdu, ancak ACK blokları, gönderen göndereni söylemek için kullanılabilir’102, 103 veya 104’ü yeniden göndermeniz gerekiyor .
Yinelenen TSN, gönderene aşağıdaki veri parçalarını bir kereden fazla aldığını bildirir.
Kalp atışı yığın #
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Tür = 4 | Yığın bayrakları | Kalp atışı uzunluğu | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\ / kalp atışı bilgileri tlv (değişken-uzunluk) / \ \ \ \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Kalp atışı yığını, uzaktan kumandanın hala yanıt verdiğini iddia etmek için kullanılır. Eğer olursan yararlı’herhangi bir veri parçası göndermek ve bir NAT eşlemesini açık tutmanız gerekir.
İptal #
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type = 6 | Ayrılmış | T | Uzunluk | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / / \ sıfır veya daha fazla hata nedenleri \ / / / / /- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Bir iptal yığınını aniden kapatır. Bir taraf bir hata durumuna girdiğinde kullanılır. Bağlantıyı incelikle bitirmek kapatma yığınını kullanır.
Kapatma yığını #
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Tür = 7 | Yığın bayrakları | Uzunluk = 8 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Kümülatif TSN ACK | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Kapatma yığını SCTP Derneği’nin zarif bir şekilde kapatılmasına başlar. Her ajan, gönderdiği son TSN’nin uzaktan kumandasını bilgilendirir. Bu, hiçbir paketin kaybolmamasını sağlar. Webrtc değil’T SCTP Derneği’nin zarif bir şekilde kapatılması. Zarifçe işlemek için her veri kanalını kendiniz yıkmanız gerekir.
Kümülatif TSN ACK, gönderilen son TSN’dir. Her iki taraf, bu TSN ile veri yığınını alana kadar sonlandırmamayı bilir.
Hata yığın #
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Tür = 9 | Yığın bayrakları | Uzunluk | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\ / bir veya daha fazla hata nedeni / \ \ \ \ \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Uzak SCTP aracısına ölümcül olmayan bir hata oluştuğunu bildirmek için bir hata yığını kullanılır.
İleri TSN Chunk #
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Tür = 192 | Bayraklar = 0x00 | Uzunluk = değişken | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Yeni Kümülatif TSN | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Stream-1 | Akış Sırası-1 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+++++++++-+-+-++++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+++++++++++-+-+-+-+yaratı +-+-+-+-+-+| Stream-N | Akış Sırası-N | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
İleri TSN yığın küresel TSN’yi ileriye taşıyor. SCTP bunu yapar, böylece yapmadığınız bazı paketleri atlayabilirsiniz’artık umursamıyor. İzin vermek’S Gönderdiğinizi söyle 10 11 12 13 14 15 ve bu paketler sadece hepsi geldiğinde geçerlidir. Bu veriler de gerçek zamanlı hassastır, bu yüzden geç gelirse’T Yararlı.
12 ve 13’ü kaybederseniz 14 ve 15 göndermek için bir neden yok ! SCTP bunu başarmak için ileri TSN yığınını kullanır. Alıcıya 14 ve 15 aren’artık teslim edilecek.
Yeni Kümülatif TSN Bu, bağlantının yeni TSN’si. Bu TSN’den önceki herhangi bir paket korunmayacak.
Akış ve Akış Sırası, akış sırası numarası numarasını önümüzde atlamak için kullanılır. Bu alanın önemi için veri yastığına geri dönün.
Devlet Makinesi #
Bunlar SCTP devlet makinesinin bazı ilginç kısımları. Webrtc değil’t SCTP durum makinesinin tüm özelliklerini kullanın, bu nedenle bu parçaları hariç tuttuk. Ayrıca, onları kendi başlarına anlaşılabilir hale getirmek için bazı bileşenleri de basitleştirdik.
Bağlantı Kuruluşu Akışı #
Init ve Init ACK parçaları, her bir eşin yeteneklerini ve yapılandırmalarını değiştirmek için kullanılır. SCTP, iletişim kurduğu akranları doğrulamak için el sıkışma sırasında bir çerez kullanır. Bu, el sıkışmasının ele geçirilmemesini sağlamak ve DOS saldırılarını önlemek için.
İnit ack yığını çerezi içerir. Çerez daha sonra kurabiye yankısı kullanarak yaratıcısına iade edilir . Çerez doğrulaması başarılı olursa çerez ACK gönderilir ve veri parçaları değiştirilmeye hazırdır.
Bağlantı Yırtılması Akışı #
SCTP kapatma yığını kullanıyor. Bir ajan bir kapatma yığını aldığında, istenen kümülatif TSN ACK’yı alana kadar bekleyecektir . Bu, bir kullanıcının bağlantı kayıplı olsa bile tüm verilerin teslim edildiğinden emin olmasını sağlar.
Keep-Client Mekanizması #
SCTP, bağlantıyı canlı tutmak için kalp atışı isteğini ve kalp atışı ACK parçalarını kullanıyor. Bunlar yapılandırılabilir bir aralıkta gönderilir. SCTP ayrıca paketin olmadığı takdirde üstel bir geri çekilir’t geldi.
Kalp atışı yığını da bir zaman değeri içerir. Bu, iki ilişkinin iki ajan arasındaki yolculuk süresini hesaplamasına izin verir.