Използване на канали за данни WebRTC

Използване на канали за данни WebRTC

Резюме

В това ръководство ще разгледаме как да добавим канал за данни към партньорска връзка, който след това може да се използва за сигурно обмен на произволни данни. Ще разгледаме как да създадем канал за данни и да обсъдим опциите за автоматично и ръчно договаряне.

Ключови точки

1. SCTP транспортирането се използва за предаване и получаване на данни за RTCDATACHANNELS на партньорската връзка.

2. Интерфейсът RTCPEERCONNECTION има свойство само за четене, наречено SCTP, което връща RTCSCTPTRANSPORT OBERC.

3. Методът CreateAchannel () на интерфейса RTCPEERCONNECTION се използва за създаване на нов канал за данни.

4. Автоматичното договаряне позволява на RTCPEERCONNECTION да се справи с договарянето и създаването на канала за данни.

5. Ръчното преговори включва създаване на RTCDATACHANNEL обект с договореното свойство, зададено на True, и след това договаряне на връзката извън лентата.

6. Максималният размер на съобщението, който може да бъде изпратен по канала за данни, може да бъде определен с помощта на свойството MaxMessagesize на обекта RTCSCTPTRANSPORP.

7. Компонентите на WebRTC използват криптиране, за да защитят данни, предавани през RTCDatachannel.

8. Спецификациите за каналите за данни на WebRTC могат да бъдат намерени в WebRTC: Комуникация в реално време в спецификацията на браузърите.

9. Съвместимостта на каналите за данни на WebRTC варира в различните браузъри.

10. Допълнителни ресурси и опции за редактиране или отчитане на проблемите със страницата можете да намерите в раздела „Виж също“.

Въпроси и отговори

  1. Каква е целта на ACK блокове в каналите за данни на WebRTC?
    ACK блоковете се използват за информиране на подателя, че определени пакети не е необходимо да се възмущават, дори ако има празнина в доставените пакети. Например, ако се доставят парчета с данни с TSNS 100, 102, 103 и 104, но кумулативният TSN ACK е 100, ACK блокове могат да бъдат използвани за показване, че TSNS 102, 103 и 104 не е необходимо да се възмущават.
  2. Какво връща свойството SCTP на интерфейса RTCPEERCONNECTION?
    Свойството SCTP връща RTCSCTPTRANSPORT OBERE, който описва транспорта SCTP, използван за предаване и получаване на данни за RTCDatachannels на партньорската връзка. Ако SCTP не е договорен, стойността е нула.
  3. Как може да се създаде канал за данни в WebRTC?
    Канал за данни може да бъде създаден с помощта на метода CreateAchannel () на интерфейса RTCPEERCONNECTION. Този метод връща RTCDATACHANNEL обект, представляващ новосъздадения канал за данни.
  4. Каква е разликата между автоматичните преговори и ръчните договори?
    При автоматично преговори RTCPeerConnection обработва договарянето и създаването на канала за данни. Методът CreateAchannel () се извиква, без да се посочва стойност за договореното свойство или със стойност на невярно. При ръчни преговори каналът за данни се създава с договореното свойство, зададено на True, а преговорите се извършват извън лентата, като се използва уеб сървър или други средства.
  5. Как може да се определи максималният размер на съобщението, който може да бъде изпратен по канал за данни?
    Максималният размер на съобщението може да бъде определен чрез достъп до свойството MaxMessagesize на обекта RTCSCTPTRANSPORT, който представлява SCTP транспорта, използван от RTCPeerConnection.
  6. Данните, предадени ли са на RTCDatachannel автоматично обезпечени?
    Да, всички данни, предавани на RTCDATACHANNEL, се осигуряват автоматично с помощта на Datagram Transport Layer Security (DTLS). Компонентите на WebRTC са длъжни да използват криптиране, за да се гарантира сигурността на данните.
  7. Къде могат да бъдат намерени спецификациите за канали за данни на WebRTC?
    Спецификациите за каналите за данни на WebRTC могат да бъдат намерени в комуникацията на WEBRTC: в реално време в спецификацията на браузърите, по-специално секцията DOM-RTCPEERCONNECTION SCTP.
  8. Каква е съвместимостта на каналите за данни на WebRTC в браузърите?
    Съвместимостта на каналите за данни WebRTC може да варира в различните браузъри. Важно е да тествате и да се гарантира съвместимост за целевите браузъри и версии.
  9. Какви са някои допълнителни ресурси, свързани с каналите за данни на WebRTC?
    Можете да редактирате страницата на GitHub, да отчитате проблеми със съдържанието или да видите изходния код в GitHub. Тези опции могат да бъдат намерени в раздела „Вижте също“ по -долу.

    Използване на канали за данни WebRTC

    ACK блокира TSN, които са получени след кумулативния TSN ACK . Това се използва, ако има празнина в доставените пакети. Позволявам’s Казват, че се доставят парчета с данни с TSNS 100, 102, 103 и 104. Кумулативният TSN ACK ще бъде 100, но ACK блоковете могат да бъдат използвани, за да се каже на подателя, който не го прави’не трябва да се повтори 102, 103 или 104 .

    RTCPeerConnection: SCTP свойство

    Само за четене SCTP Свойството на интерфейса RTCPeerConnection връща RTCSCTPTRANSPORP, описващ транспорта SCTP, през който се изпращат и получат SCTP данни. Ако SCTP не е договорен, тази стойност е нула .

    SCTP транспортът се използва за предаване и получаване на данни за всеки и всички rtcdatachannel s на партньорската връзка.

    Стойност

    Обект на RTCSCTPTRANSPORT, описващ транспорта SCTP, използван от RTCPeerConnection за предаване и получаване на каналите му за данни или нула, ако SCTP преговарянето не се е случило.

    Пример

    const peerconnection = Ново Rtcpeerconnection(); const канал = peerconnection.Създаденътханел("Mydata"); канал.Onopen = (събитие) =>  канал.Изпратете(„Изпращане на съобщение“); >; канал.onmessage = (събитие) =>  конзола.log(събитие.данни); >; // Определете най -големия размер на съобщението, който може да бъде изпратен const SCTP = peerconnection.SCTP; const maxmessagesize = SCTP.maxmessagesize; 

    Спецификации

    Спецификация
    WebRTC: Комуникация в реално време в браузъри
    # DOM-RTCPEERCONNECTION-SCTP

    Съвместимост на браузъра

    BCD таблиците се зареждат само в браузъра

    Вижте също

    Намерих проблем със съдържанието с тази страница?

    • Редактирайте страницата на GitHub.
    • Докладвайте проблема със съдържанието.
    • Вижте източника на GitHub.

    Тази страница за последно е модифицирана на 25 април 2023 г. от MDN сътрудници.

    Вашият план за по -добър интернет.

    Използване на канали за данни WebRTC

    В това ръководство ще разгледаме как да добавим канал за данни към партньорска връзка, който след това може да се използва за сигурно обмен на произволни данни; тоест всякакъв вид данни, които желаем, във всеки формат, който избираме.

    Забележка: Тъй като всички компоненти на WebRTC са необходими за използване на криптиране, всички данни, предавани на RTCDatachannel, се осигуряват автоматично с помощта на Datagram Transport Layer Security (Dtls). Вижте сигурността по -долу за повече информация.

    Създаване на канал за данни

    Основният транспорт на данни, използван от RTCDatachannel, може да бъде създаден по един от двата начина:

    • Нека WebRTC създава транспорта и го обяви на отдалечения партньор за вас (като го причини да получи събитие в DataChannel). Това е лесният начин и работи за голямо разнообразие от случаи на употреба, но може да не е достатъчно гъвкав за вашите нужди.
    • Напишете свой собствен код, за да договаряте транспорта на данни и напишете свой собствен код, за да сигнализирате на другия партньор, че той трябва да се свърже с новия канал.

    Нека разгледаме всеки от тези случаи, като започнем от първия, който е най -често срещаният.

    Автоматични преговори

    Често можете да позволите на връзката между връстниците да се справят с договарянето на RTCDatachannel връзката за вас. За да направите това, обадете се

    Създаден reativeAchannel (), без . Това автоматично ще задейства RTCPeerConnection, за да се справи с преговорите за вас, което ще накара отдалечения партньор да създаде канал за данни и да свърже двете заедно в мрежата.

    Обектът rtcdatachannel се връща незабавно от създаден reationAchannel (); Можете да разберете кога връзката е направена успешно, като гледате за отвореното събитие, което ще бъде изпратено до RTCDatachannel .

    позволявам Datachannel = настолен компютър.Създаденътханел("MyApp канал"); Datachannel.addeventListener("Отворен", (събитие) =>  Начало емисия(Datachannel); >); 

    Ръчно договаряне

    За ръчно договаряне на връзката на канала за данни, първо трябва да създадете нов RTCDATACHANNEL OBERE, използвайки метода CreateAchannel () на RTCPeerConnection, като посочите в опциите, договорено свойство, зададено на True . Това сигнализира за партньорската връзка, за да не се опитва да договаря канала от ваше име.

    След това договаряйте връзката извън лентата, като използвате уеб сървър или други средства. Този процес трябва да сигнализира на отдалечения партньор, че трябва да създаде свой собствен rtcdatachannel с договорената собственост, също е зададено на True, като се използва същия идентификатор . Това ще свърже двата обекта в RTCPeerConnection .

    позволявам Datachannel = настолен компютър.Създаденътханел("MyApp канал",  договорени: вярно, >); Datachannel.addeventListener("Отворен", (събитие) =>  Начало емисия(Datachannel); >); Requestremotechannel(Datachannel.документ за самоличност); 

    В този фрагмент от код каналът се създава с договаряне, зададено на True, след това функция, наречена Requestremotechannel (), се използва за задействане на договаряне, за създаване на отдалечен канал със същия идентификатор като локалния канал.

    Това, че правите това, ви позволява да създавате канали за данни с всеки партньор, използвайки различни свойства, и да създавате канали декларативно, като използвате една и съща стойност за ID .

    Буфериране

    WebRTC каналите за данни поддържат буфериране на изходящи данни. Това се обработва автоматично. Въпреки че няма начин да контролирате размера на буфера, можете да научите колко данни са буферирани в момента и можете да изберете да бъдете уведомени от събитие, когато буферът започне да работи с данни на опашката. Това улеснява написването на ефективни процедури, които се уверяват,.

    Разбиране на ограниченията за размера на съобщението

    За всякакви данни, които се предават по мрежа, има ограничения за размера. На фундаментално ниво отделните мрежови пакети не могат да бъдат по -големи от определена стойност (точният брой зависи от мрежата и транспортния слой, който се използва). На ниво на приложение – тоест в реализацията на потребителския агент на WebRTC, на което се изпълнява вашият код – реализацията на WebRTC реализира функции за поддържане на съобщения, които са по -големи от максималния размер на пакета на транспортния слой на мрежата.

    Това може да усложнява нещата, тъй като не е задължително да знаете какви са ограниченията на размера за различни потребители и как те реагират, когато се изпраща или получава по -голямо съобщение. Дори когато потребителските агенти споделят същата основна библиотека за обработка на данни за предавателния протокол за контрол на потока (SCTP), все още може да има вариации поради начина, по който се използва библиотеката. Например, както Firefox, така и Google Chrome използват библиотеката на USRSCTP за внедряване на SCTP, но все още има ситуации, в които прехвърлянето на данни на RTCDatachannel може да се провали поради разликите в начина, по който те се обаждат на библиотеката и реагират на грешки, тя се връща.

    Когато двама потребители, работещи с Firefox, комуникират по канал за данни, ограничението на размера на съобщението е много по -голямо, отколкото когато Firefox и Chrome комуникират, тъй като Firefox реализира вече оттеглена техника за изпращане на големи съобщения в множество съобщения на SCTP, което Chrome не прави вече. Вместо това Chrome ще види поредица от съобщения, за които вярва, че са завършени и ще ги достави на приемащия RTCDatachannel като множество съобщения.

    Съобщения, по -малки от 16 KIB, могат да бъдат изпращани без безпокойство, тъй като всички основни потребители се справят по същия начин. Отвъд това нещата се усложняват.

    Притеснения с големи съобщения

    Понастоящем не е практично да се използва rtcdatachannel за съобщения, по-големи от 64 kib (16 kib, ако искате да поддържате обмен на кръстосани браузъри на данни). Проблемът възниква от факта, че SCTP – протоколът, използван за изпращане и получаване на данни на RTCDatachannel – беше първоначално проектиран за използване като протокол за сигнализиране. Очакваше се съобщенията да бъдат сравнително малки. Поддръжката за съобщения, по -големи от MTU на мрежовия слой, беше добавена почти като следствие, в случай че сигнализиращи съобщения, необходими за по -големи от MTU. Тази функция изисква всяко парче от съобщението да има последователни последователни номера, така че те трябва да бъдат предадени един след друг, без други данни, преплитащи се между тях.

    Това в крайна сметка се превърна в проблем. С течение на времето различни приложения (включително тези, които изпълняват WebRTC), започнаха да използват SCTP за предаване на по -големи и по -големи съобщения. В крайна сметка беше осъзнато, че когато съобщенията станат твърде големи, е възможно предаването на голямо съобщение да блокира всички други трансфери на данни по този канал за данни – включително критични сигнални съобщения.

    Това ще се превърне в проблем, когато браузърите правилно поддържат текущия стандарт за поддръжка на по-големи съобщения-знамето на края на рекорда (EOR), който показва кога съобщението е последното в серия, която трябва да се третира като един полезен товар. Това е реализирано в Firefox 57, но все още не е реализирано в Chrome (виж хром бъг 7774). С поддръжката на EOR на място, полезните товари на RTCDatachannel могат да бъдат много по -големи (официално до 256 KIB, но внедряването на Firefox ги ограничава с Gib -Gib). Дори при 256 киб, това е достатъчно голямо, за да предизвика забележими закъснения в обработката на спешен трафик. Ако отидете още по -големи, закъсненията могат да станат несъстоятелни, освен ако не сте сигурни в оперативните си условия.

    За да разреши този проблем, нова система от Планисти на потоци (Обикновено се нарича „Спецификация на SCTP NDATA“) е проектиран да даде възможност за преплитане на съобщения, изпратени в различни потоци, включително потоци, използвани за внедряване на канали за данни на WebRTC. Това предложение все още е във формуляра за проект на IETF, но след като бъде внедрено, ще даде възможност да се изпраща съобщения с по същество ограничения на размера, тъй като SCTP слоят автоматично ще преплита основните подсъдими, за да гарантира, че данните на всеки канал имат възможност да преминат през.

    Поддръжката на Firefox за NDATA е в процес на прилагане; Вижте Firefox Bug 1381145, за да го проследите, че става достъпен за обща употреба. Екипът на Chrome проследява тяхното прилагане на поддръжката на NDATA в Chrome Bug 5696.

    Забележка: Голяма част от информацията в този раздел се основава отчасти на публикацията в блога демистифициране. Той влиза малко по-подробно там, но тъй като браузърите са актуализирани оттогава някои от тях може да са остарели. В допълнение, с течение на времето, това ще стане повече, особено след като поддръжката на EOR и NDATA са напълно интегрирани в основните браузъри.

    Сигурност

    Всички данни, прехвърлени с помощта на WebRTC, са криптирани. В случая на RTCDatachannel, използваното криптиране е сигурността на транспортен слой на Datagram (DTLS), която се основава на сигурността на транспортния слой (TLS). Тъй.

    По-съществено, тъй като WebRTC е партньорска връзка между два потребители, данните никога не преминават през мрежата или сървъра за приложения. Това намалява възможностите за прихващане на данните.

    Намерих проблем със съдържанието с тази страница?

    • Редактирайте страницата на GitHub.
    • Докладвайте проблема със съдържанието.
    • Вижте източника на GitHub.

    Тази страница за последно е модифицирана на 25 април 2023 г. от MDN сътрудници.

    Използва ли webrtc sctp?

    Остар

    Мы -арегистрироли -Подохрильн -Трафик, Исходях Ив Вейх етити. Спомохьщ эtoй strаницы mы смоум опереть, о -аапрус, aneblyерат имно в. Proчemu эto moglos?

    Tа -strathiца Отабраееатс v teх слуяя, kogdа -ъ -ъ -зe- зe- зe- зe- зeeeeeeee, рьо kotorые naruшат. Strания. До -атогомоторна джал -длаунеил -ульованая с ср.

    Ystoчnikom зprossom SыlkU -AprOSOV. Если-В-апольуеет Обхий-доступ В-интерн, Прблема Мохет БыТь С Компьог-ат-тих. Обраттись к от Свеему Сйстемму. Полробн.

    Provера по сонувмо тмор -ъ -рпоятьосьонски, еслиновски – Емами, Или же ваводит -априс -о -сеньо.

    Комуникация на данни #

    Какво да получа от webrtc’s комуникация с данни? #

    WebRTC предоставя канали за данни за комуникация с данни. Между два връстници можете да отворите 65 534 канала за данни. Канал за данни е базиран на datagram и всеки има свои настройки за издръжливост. По подразбиране всеки канал за данни има гарантирана поръчана доставка. Ако се приближите до WebRTC от канали за медийни фонови данни, може да изглежда разточително. Защо имам нужда от цялата тази подсистема, когато можех просто да използвам HTTP или WebSockets? Истинската мощност с каналите за данни е, че можете да ги конфигурирате да се държат като UDP с undorded/загуба доставка. Това е необходимо за ниски латентни и високоефективни ситуации. Можете да измервате обратно налягането и да се уверите, че изпращате само толкова, колкото вашата мрежа поддържа.

    Как работи? #

    WebRTC използва протокола за предаване на потока (SCTP), дефиниран в RFC 4960. SCTP е протокол за транспортен слой, който е бил предназначен като алтернатива на TCP или UDP. За WebRTC го използваме като протокол на слоя на приложения, който работи над нашата DTLS връзка. SCTP ви дава потоци и всеки поток може да бъде конфигуриран независимо. Каналите за данни на WebRTC са просто тънки абстракции около тях. Настройките около издръжливостта и поръчката са току -що предавани точно в агента SCTP. Каналите за данни имат някои функции, които SCTP може’t express, като етикети на канали. За да разрешите, че WebRTC използва протокола за установяване на канал за данни (DCEP), който е дефиниран в RFC 8832. DCEP определя съобщение за комуникация на етикета и протокола на канала.

    DCEP #

    DCEP има само две съобщения DATA_CHANNEL_OPEN и DATA_CHANNEL_ACK . За всеки канал за данни, който е отворен, дистанционното трябва да отговори с ACK.

    Data_channel_open #

    Това съобщение се изпраща от агента WebRTC, който желае да отвори канал.

    Формат на пакета #

     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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Тип съобщение | Тип канал | Приоритет | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Параметър за надеждност | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Дължина на етикета | Протокол дължина | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \ \ / Label / \ \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \ \ / Protocol / \ \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

    Тип съобщение #

    Типът на съобщението е статична стойност 0x03 .

    Тип на канал #

    • Data_channel_relable (0x00) – Не се губят съобщения и ще пристигнат в ред
    • Data_channel_relible_unordered (0x80) – Не се губят съобщения, но те могат да пристигнат извън поръчката.
    • Data_channel_partial_relible_rexmit (0x01) – Съобщенията могат да бъдат загубени след опитва исканото количество пъти, но те ще пристигнат в ред.
    • Data_channel_partial_relible_rexmit_unordered (0x81) – Съобщенията могат да бъдат загубени след опитва заявеното количество пъти и могат да пристигнат извън поръчката.
    • Data_channel_partial_relible_timed (0x02) – Съобщенията могат да бъдат загубени, ако не се качат’t пристигат в искания период от време, но те ще пристигнат в ред.
    • Data_channel_partial_relible_timed_unordered (0x82) – Съобщенията могат да бъдат загубени, ако не са’t пристига в искания период от време и може да пристигне извън поръчката.

    Приоритет #

    Приоритетът на канала за данни. Каналите за данни с по -висок приоритет ще бъдат планирани първо. Големите потребителски съобщения с по-нисък приоритет няма да забавят изпращането на потребителски съобщения с по-висок приоритет.

    Параметър за надеждност #

    Ако типът на канала за данни е data_channel_partial_relable, суфиксите конфигурират поведението:

    • Rexmit – определя колко пъти подателят ще изпрати отново съобщението, преди да се откаже.
    • Време – определя за колко време (в МС) подателят ще изпрати отново съобщението, преди да се откаже.

    Етикет #

    UTF-8-кодиран низ, съдържащ името на канала за данни. Този низ може да е празен.

    Протокол #

    Ако това е празен низ, протоколът е неуточнен. Ако това е неправен низ, той трябва да посочи протокол, регистриран в “Регистърът на имената на WebSocket Subprotocol”, дефинирани в RFC 6455.

    Data_channel_ack #

    Това съобщение се изпраща от агента WebRTC, за да потвърди, че този канал за данни е отворен.

    Формат на пакета #

     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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Тип съобщение | +-+-+-+-+-+-+-+-+ 

    Протокол за предаване на потока #

    SCTP е истинската мощност зад каналите за данни на WebRTC. Той предоставя всички тези характеристики на канала за данни:

    • Мултиплексиране
    • Надеждна доставка с помощта на механизъм за повторно предаване, наподобяващ TCP
    • Опции за частична надеждност
    • Избягване на задръствания
    • Контрол на потока

    За да разберем SCTP, ще го изследваме в три части. Целта е, че ще знаете достатъчно, за да грешите и да научите дълбоките подробности на SCTP самостоятелно след тази глава.

    Концепции #

    SCTP е богат на функция протокол. Този раздел ще покрие само частите на SCTP, които се използват от WebRTC. Характеристиките в SCTP, които не се използват от WebRTC, включват мулти-жилищно и избор на път.

    С над двадесет години разработка SCTP може да бъде трудно да се схване напълно.

    Асоциация #

    Асоциацията е терминът, използван за SCTP сесия. Това е държавата, която се споделя между два агента SCTP, докато те комуникират.

    Потоци #

    Потокът е една двупосочна последователност от потребителски данни. Когато създавате канал за данни, всъщност просто създавате SCTP поток. Всяка SCTP асоциация съдържа списък на потоци. Всеки поток може да бъде конфигуриран с различни типове надеждност.

    WebRTC ви позволява само да конфигурирате при създаването на поток, но SCTP всъщност позволява промяна на конфигурацията по всяко време.

    Datagram, базиран на #

    SCTP рамкира данните като дейтаграми, а не като байтов поток. Изпращането и получаването на данни се чувства като използване на UDP вместо TCP. Не’не трябва да добавите допълнителен код за прехвърляне на няколко файла върху един поток.

    SCTP съобщения Дон’t имат ограничения за размера като UDP. Едното SCTP съобщение може да бъде с множество гигабайти в размер.

    Парчета #

    SCTP протоколът е съставен от парчета. Има много различни видове парчета. Тези парчета се използват за цялата комуникация. Потребителски данни, инициализация на връзката, контрол на задръстванията и други се извършват чрез парчета.

    Всеки SCTP пакет съдържа списък с парчета. Така че в един UDP пакет можете да имате няколко парчета, носещи съобщения от различни потоци.

    Номер на последователност на предаване #

    Номерът на последователността на предаване (TSN) е глобален уникален идентификатор за парчета данни. Чакът от данни е това, което носи всички съобщения, които потребителят желае да изпрати. TSN е важен, защото помага на приемник да определи дали пакетите са изгубени или извън ред.

    Ако приемникът забележи липсващ TSN, той не го прави’t Дайте данните на потребителя, докато не бъде изпълнен.

    Идентификатор на поток #

    Всеки поток има уникален идентификатор. Когато създавате канал за данни с изричен идентификатор, той всъщност е преминал точно в SCTP, тъй като идентификаторът на потока. Ако не’t Прекарайте идентификатора Идентификаторът на потока е избран за вас.

    Идентификатор на протокол за полезен товар #

    Всяка част от данните също има идентификатор на протокол за полезен товар (PPID). Това се използва за уникално идентифициране какъв тип данни се обменят. SCTP има много PPID, но WebRTC използва само следните пет:

    • Webrtc DCEP (50) – DCEP съобщения.
    • WebRTC String (51) – Съобщения на низове на DataChannel.
    • WebRTC двоичен (53) – DataChannel Binary съобщения.
    • Webrtc низ празен (56) – Струнни съобщения на DataChannel с 0 дължина.
    • WebRTC двоичен празен (57) – Двоични съобщения с данни с 0 с дължина 0.

    Протокол #

    По -долу са някои от парчетата, използвани от SCTP протокола. Това не е изчерпателна демонстрация. Това осигурява достатъчно структури, за да има смисъл държавната машина.

    Всяка част започва с полево поле. Преди списък на парчета, вие също ще имате заглавка.

    Памет на данни #

     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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Тип = 0 | Запазено | U | B | E | Дължина | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| TSN | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Идентификатор на потока | Номер на последователността на потока | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Идентификатор на протокол за полезен товар | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \ \ / User Data / \ \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

    Чакът от данни е как всички потребителски данни се обменят. Когато изпращате нещо по канала за данни, така се обменя.

    U битът е зададен, ако това е неподправен пакет. Можем да игнорираме номера на последователността на потока.

    B и E са началните и крайните битове. Ако искате да изпратите съобщение, което е твърде голямо за една част от данни, то трябва да бъде фрагментирано в множество парчета данни, изпратени в отделни пакети. С B и E битови и последователни номера SCTP е в състояние да изрази това.

    • B = 1, e = 0 – първо парче от фрагментирано потребителско съобщение.
    • B = 0, e = 0 – Средно парче от фрагментирано потребителско съобщение.
    • B = 0, e = 1 – Последно парче от фрагментирано потребителско съобщение.
    • B = 1, E = 1 – Незабавно съобщение.

    TSN е номера на последователността на предаване. Това е глобалният уникален идентификатор за този парче данни. След 4,294,967,295 парчета това ще се увие до 0. TSN е увеличен за всеки къс в фрагментирано потребителско съобщение, така че приемникът да знае как да поръча получените парчета за реконструкция на оригиналното съобщение.

    Идентификаторът на потока е уникалният идентификатор за потока, към които принадлежи, към които се принадлежи.

    Номер на последователността на потока е 16-битов номер, увеличен всяко потребителско съобщение и включен в заглавката на парчетата за съобщение за данни. След 65535 съобщения това ще се увива до 0. Този номер се използва за решаване на поръчката за доставка на съобщението до приемника, ако u е зададен на 0. Подобно на TSN, с изключение на номера на последователността на потока се увеличава само за всяко съобщение като цяло, а не на всеки отделен парче от данни.

    Идентификаторът на протокол за полезен товар е типът данни, който преминава през този поток. За webrtc ще бъде DCEP, низ или двоичен.

    Потребителските данни са това, което изпращате. Всички данни, които изпращате чрез WebRTC канал за данни, се предава чрез парче от данни.

    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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Тип = 1 | Флагове на парче | Дължина на парче | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Иницииран маркер | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Кредит на прозореца на рекламиран приемник (A_RWND) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Брой изходящи потоци | Брой входящи потоци | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Първоначален TSN | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \ \ / Optional/Variable-Length Parameters / \ \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

    Init chunk започва процеса на създаване на асоциация.

    Иницииран маркер се използва за генериране на бисквитки. Бисквитките се използват за човек в средата и отказ от защита на услугата. Те са описани по -подробно в секцията на държавната машина.

    Рекламираният кредит на прозореца на приемника се използва за SCTP’S Контрол на задръстванията. Това съобщава колко голям от буфера е разпределил приемникът за тази асоциация.

    Брой изходящи/входящи потоци уведомява дистанционното на това колко потоци поддържа този агент.

    Първоначалният TSN е случаен UINT32 за стартиране на локалния TSN в.

    Незадължителните параметри позволява на SCTP да въведе нови функции в протокола.

    Чувал парче #

     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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Тип = 3 | знамена на парчета | Дължина на парче | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Кумулативен TSN ACK | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Кредит на прозореца на рекламиран приемник (A_RWND) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Брой блокове ACK GAP = N | Брой дублиращи се tsns = x | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| GAP ACK блок №1 Старт | GAP ACK блок №1 Край | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / / / \ \ \ . \ / /+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|-+-+-+-+-+-+-+-+-+-+| GAP ACK Block #N Старт | Gap ack Block #N End | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Дублиращ TSN 1 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / / / \ \ \ . \ / /+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|-+-+-+-+-+-+-+-+-+-+| Дублирани TSN X | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

    Чакът на чувала (селективно потвърждение) е как приемник уведомява подател, че е получил пакет. Докато изпращачът не получи чувал за TSN, той ще изпрати отново въпросния парче данни. Чувачът прави повече от просто актуализиране на TSN.

    Кумулативен TSN ACK най -високият TSN, който е получен.

    Рекламиран размер на приемника на прозореца на прозореца Размер на приемника. Приемникът може да промени това по време на сесията, ако стане повече памет.

    ACK блокира TSN, които са получени след кумулативния TSN ACK . Това се използва, ако има празнина в доставените пакети. Позволявам’s Казват, че се доставят парчета с данни с TSNS 100, 102, 103 и 104. Кумулативният TSN ACK ще бъде 100, но ACK блоковете могат да бъдат използвани, за да се каже на подателя, който не го прави’не трябва да се повтори 102, 103 или 104 .

    Дублирането на TSN информира подателя, че е получил следните парчета данни повече от веднъж.

    Сърцебиен парче #

     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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Тип = 4 | Флагове на парче | Дължина на сърцето | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \ \ / Heartbeat Information TLV (Variable-Length) / \ \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

    Парчето на сърдечния ритъм се използва за отстояване на дистанционното все още реагира. Полезно, ако сте арени’t изпращане на парчета от данни и трябва да се поддържат NAT картографиране отворено.

    Абортирайте парче #

     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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Тип = 6 | Запазено | T | Дължина | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / \ Zero or more Error Causes \ / / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

    Аборт парче рязко изключва асоциацията. Използва се, когато едната страна влезе в състояние на грешка. Грациозно прекратяване на връзката използва парчето за изключване.

    Изключване #

     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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Тип = 7 | Флагове на парче | Дължина = 8 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Кумулативен TSN ACK | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

    Чакът за изключване започва грациозно изключване на асоциацията на SCTP. Всеки агент информира дистанционното за последния TSN, който е изпратен. Това гарантира, че не се губят пакети. Webrtc не’не направи грациозно изключване на асоциацията на SCTP. Трябва сами да разрушите всеки канал за данни, за да се справите грациозно.

    Кумулативният TSN ACK е последният TSN, който е изпратен. Всяка страна знае да не се прекратява, докато не получи парчето с данни с този TSN.

    Грешка #

     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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Тип = 9 | Флагове на парче | Дължина | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \ \ / One or more Error Causes / \ \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

    Използва се за грешка, за да се уведоми отдалеченият SCTP агент, че е възникнала не-фатална грешка.

    Напред TSN парче #

     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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Тип = 192 | Знамена = 0x00 | Дължина = променлива | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Нов кумулативен TSN | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Stream-1 | Последователност на потока-1 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \ / / \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Stream-n | Поточна последователност-n | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

    Напред TSN парчето движи глобалния TSN напред. SCTP прави това, така че можете да пропуснете някои пакети, които не сте’вече не се интересувате. Позволявам’s казват, че изпращате 10 11 12 13 14 15 и тези пакети са валидни само ако всички пристигнат. Тези данни също са чувствителни към реално време, така че ако пристигне късно, не е’t Полезно.

    Ако загубите 12 и 13, няма причина да изпратите 14 и 15 ! SCTP използва напред TSN парче, за да постигне това. Той казва на приемника, че 14 и 15 арени’вече няма да бъде доставен.

    Нов кумулативен TSN Това е новият TSN на връзката. Всички пакети преди този TSN няма да бъдат запазени.

    Последователността на потока и потока се използват за прескачане на номера на последователността на потока напред напред. Обърнете се към парчето за данни за значението на това поле.

    Държавна машина #

    Това са някои интересни части от държавната машина SCTP. Webrtc не’не използвайте всички функции на състоянието на SCTP, така че ние изключихме тези части. Имаме и опрости някои компоненти, за да ги направим разбираеми сами.

    Поток за установяване на връзка #

    Chunks Init и Init ACK се използват за обмен на възможностите и конфигурациите на всеки партньор. SCTP използва бисквитка по време на ръкостискането, за да валидира връстника, с който общува. Това е, за да се гарантира, че ръкостискането не е прихванато и да се предотвратят DOS атаки.

    Init ack phunk съдържа бисквитката. След това бисквитката се връща на своя създател, използвайки ехото на бисквитката . Ако проверката на бисквитките е успешна, се изпраща ACK Cookie и парчетата от данни са готови да бъдат разменени.

    Създаване на връзка

    Връзка Teardown Flow #

    SCTP използва парчето за изключване. Когато агент получи парче изключване, той ще изчака, докато получи исканата кумулативен TSN ACK . Това позволява на потребителя да гарантира, че всички данни се доставят, дори ако връзката е загуба.

    Механизъм за запазване #

    SCTP използва заявката за сърдечен ритъм и сърцебиените парчета ACK, за да поддържа връзката жива. Те се изпращат на конфигурируем интервал. SCTP също извършва експоненциален гръб, ако пакетът е’t пристигна.

    Паметта на сърдечния ритъм също съдържа времева стойност. Това позволява на две асоциации да изчисляват времето за пътуване между два агента.