Χρησιμοποιεί το WebRTC SCTP?
Χρησιμοποιώντας κανάλια δεδομένων WebRTC
Περίληψη
Σε αυτόν τον οδηγό, θα εξετάσουμε πώς να προσθέσουμε ένα κανάλι δεδομένων σε μια σύνδεση από ομοτίμους, η οποία μπορεί στη συνέχεια να χρησιμοποιηθεί για την ασφαλή ανταλλαγή αυθαίρετων δεδομένων. Θα εξετάσουμε πώς θα δημιουργήσουμε ένα κανάλι δεδομένων και θα συζητήσουμε τις επιλογές για αυτόματη και χειροκίνητη διαπραγμάτευση.
Βασικά σημεία
1. Η μεταφορά SCTP χρησιμοποιείται για τη μετάδοση και τη λήψη δεδομένων για RTCDatachannels στη σύνδεση ομοτίμων.
2. Η διεπαφή RTCPEerconnection διαθέτει μια ιδιότητα μόνο για ανάγνωση που ονομάζεται SCTP, η οποία επιστρέφει ένα αντικείμενο RTCSctPTransport που περιγράφει τη μεταφορά SCTP που χρησιμοποιείται.
3. Η μέθοδος CreatedAtachannel () στη διεπαφή RTCPEerconnection χρησιμοποιείται για τη δημιουργία ενός νέου καναλιού δεδομένων.
4. Η αυτόματη διαπραγμάτευση επιτρέπει στην RTCPEerconnection να χειριστεί τη διαπραγμάτευση και τη δημιουργία του καναλιού δεδομένων.
5. Η χειρωνακτική διαπραγμάτευση περιλαμβάνει τη δημιουργία ενός αντικειμένου RTCDatachannel με το ακίνητο που έχει οριστεί σε True και στη συνέχεια διαπραγματεύεται τη σύνδεση εκτός ζώνης.
6. Το μέγιστο μέγεθος μηνύματος που μπορεί να σταλεί μέσω του καναλιού δεδομένων μπορεί να προσδιοριστεί χρησιμοποιώντας την ιδιότητα maxmessagesize του αντικειμένου RTCSCTPTransport.
7. Τα εξαρτήματα WebRTC χρησιμοποιούν κρυπτογράφηση για να εξασφαλίσουν δεδομένα που μεταδίδονται μέσω του rtcdatachannel.
8. Οι προδιαγραφές για τα κανάλια δεδομένων WebRTC μπορούν να βρεθούν στο WebRTC: Επικοινωνία σε πραγματικό χρόνο σε προδιαγραφές προγράμματος περιήγησης.
9. Η συμβατότητα των καναλιών δεδομένων WebRTC ποικίλλει μεταξύ των προγραμμάτων περιήγησης.
10. Πρόσθετοι πόροι και επιλογές για την επεξεργασία ή την αναφορά ζητημάτων με τη σελίδα μπορείτε να βρείτε στην ενότητα “Δείτε επίσης”.
Ερωτήσεις και απαντήσεις
- Ποιος είναι ο σκοπός των μπλοκ ACK στα κανάλια δεδομένων WebRTC?
Τα μπλοκ ACK χρησιμοποιούνται για να ενημερώσουν τον αποστολέα ότι ορισμένα πακέτα δεν χρειάζεται να δυσκολεύονται, ακόμη και αν υπάρχει κενό στα πακέτα που παραδίδονται. Για παράδειγμα, εάν τα κομμάτια δεδομένων με TSNS 100, 102, 103 και 104 παραδίδονται, αλλά το σωρευτικό TSN ACK είναι 100, τα μπλοκ ACK μπορούν να χρησιμοποιηθούν για να υποδείξουν ότι τα TSNS 102, 103 και 104 δεν χρειάζεται να αντιδράκονται. - Τι κάνει η ιδιότητα SCTP της επιστροφής της διεπαφής RTCPEerconnection?
Η ιδιότητα SCTP επιστρέφει ένα αντικείμενο RTCSCTPTRANSPORT που περιγράφει τη μεταφορά SCTP που χρησιμοποιείται για τη μετάδοση και τη λήψη δεδομένων για RTCDatachannels στη σύνδεση ομοτίμων. Εάν η SCTP δεν έχει διαπραγματευτεί, η αξία είναι μηδενική. - Πώς μπορεί να δημιουργηθεί ένα κανάλι δεδομένων στο WebRTC?
Ένα κανάλι δεδομένων μπορεί να δημιουργηθεί χρησιμοποιώντας τη μέθοδο CreatedAtachannel () στη διεπαφή RTCPEerconnection. Αυτή η μέθοδος επιστρέφει ένα αντικείμενο RTCDatachannel που αντιπροσωπεύει το νεοσύστατο κανάλι δεδομένων. - Ποια είναι η διαφορά μεταξύ της αυτόματης διαπραγμάτευσης και της χειροκίνητης διαπραγμάτευσης?
Σε αυτόματη διαπραγμάτευση, η RTCPEerconnection χειρίζεται τη διαπραγμάτευση και τη δημιουργία του καναλιού δεδομένων. Η μέθοδος CreatedAtachannel () καλείται χωρίς να προσδιορίζει μια τιμή για το ακίνητο που διαπραγματεύεται ή με τιμή ψευδούς. Σε χειροκίνητη διαπραγμάτευση, το κανάλι δεδομένων δημιουργείται με το ακίνητο που έχει οριστεί σε True και η διαπραγμάτευση γίνεται εκτός ζώνης χρησιμοποιώντας έναν διακομιστή ιστού ή άλλα μέσα. - Πώς μπορεί να προσδιοριστεί το μέγιστο μέγεθος του μηνύματος που μπορεί να σταλεί πάνω από ένα κανάλι δεδομένων?
Το μέγιστο μέγεθος μηνύματος μπορεί να προσδιοριστεί με πρόσβαση στην ιδιότητα MaxMessagesize του αντικειμένου RTCSctPTransport, το οποίο αντιπροσωπεύει τη μεταφορά SCTP που χρησιμοποιείται από την RTCPEerconnection. - Τα δεδομένα που μεταδίδονται σε ένα rtcdatachannel εξασφαλίζονται αυτόματα?
Ναι, όλα τα δεδομένα που μεταδίδονται σε ένα RTCDatachannel είναι αυτόματα ασφαλισμένα χρησιμοποιώντας την ασφάλεια του Layer Transport Datagram (DTLS). Τα στοιχεία WebRTC υποχρεούνται να χρησιμοποιούν κρυπτογράφηση για να εξασφαλίσουν την ασφάλεια των δεδομένων. - Πού μπορούν να βρεθούν οι προδιαγραφές για τα κανάλια δεδομένων WebRTC?
Οι προδιαγραφές για τα κανάλια δεδομένων WebRTC μπορούν να βρεθούν στο WebRTC: Επικοινωνία σε πραγματικό χρόνο σε προδιαγραφές προγράμματος περιήγησης, συγκεκριμένα στην ενότητα DOM-RTCPEerconnection-SCTP. - Ποια είναι η συμβατότητα των καναλιών δεδομένων WebRTC σε όλα τα προγράμματα περιήγησης?
Η συμβατότητα των καναλιών δεδομένων WebRTC μπορεί να ποικίλει σε διαφορετικά προγράμματα περιήγησης. Είναι σημαντικό να δοκιμάσετε και να διασφαλίσετε τη συμβατότητα για τα προγράμματα περιήγησης και τις εκδόσεις προορισμού. - Ποιοι είναι μερικοί πρόσθετοι πόροι που σχετίζονται με τα κανάλια δεδομένων WebRTC?
Μπορείτε να επεξεργαστείτε τη σελίδα στο GitHub, να αναφέρετε προβλήματα περιεχομένου ή να δείτε τον πηγαίο κώδικα στο GitHub. Αυτές οι επιλογές μπορούν να βρεθούν στην ενότητα “Δείτε επίσης” παρακάτω.Χρησιμοποιώντας κανάλια δεδομένων WebRTC
Το ACK μπλοκ TSN που έχουν ληφθεί μετά το σωρευτικό TSN ACK . Αυτό χρησιμοποιείται εάν υπάρχει κενό στα πακέτα που παραδίδονται. Αφήνω’S λένε τα κομμάτια δεδομένων με TSNS 100, 102, 103 και 104 παραδίδονται. Το σωρευτικό TSN ACK θα ήταν 100, αλλά τα μπλοκ ACK θα μπορούσαν να χρησιμοποιηθούν για να πούμε στον αποστολέα που δεν κάνει’t Πρέπει να ξαναρχίσετε 102, 103 ή 104 .
RTCPEerconnection: Property SCTP
Το μόνο για ανάγνωση SCTP Η ιδιότητα στη διεπαφή RTCPEerconnection επιστρέφει ένα rtcsctptransport που περιγράφει τη μεταφορά SCTP πάνω στην οποία αποστέλλονται και λαμβάνονται τα δεδομένα SCTP. Εάν η SCTP δεν έχει διαπραγματευτεί, αυτή η αξία είναι μηδενική .
Η μεταφορά SCTP χρησιμοποιείται για τη μετάδοση και τη λήψη δεδομένων για οποιοδήποτε και όλα τα RTCDatachannel S στη σύνδεση από ομοτίμους.
αξία
Ένα αντικείμενο RTCSCTPTRANSPORT που περιγράφει τη μεταφορά SCTP που χρησιμοποιείται από την RTCPEerconnection για μετάδοση και λήψη στα κανάλια δεδομένων του ή μηδενική αν δεν έχει συμβεί η διαπραγμάτευση SCTP.
Παράδειγμα
κονσερβός προσκόλληση = νέος Rtcpeerconnection(·; κονσερβός Κανάλι = προσκόλληση.ΔημιουργήθηκεATACHANNEL("Τα δεδομένα μου"·; Κανάλι.σενοτόν = (Εκδήλωση· => Κανάλι.στείλετε("Αποστολή μηνύματος"·; >; Κανάλι.onmessage = (Εκδήλωση· => κονσόλα.κούτσουρο(Εκδήλωση.δεδομένα·; >; // Προσδιορίστε το μεγαλύτερο μέγεθος μηνύματος που μπορεί να σταλεί κονσερβός SCTP = προσκόλληση.SCTP; κονσερβός maxmessagesize = SCTP.maxmessagesize;
Προδιαγραφές
Προσδιορισμός WebRTC: Επικοινωνία σε πραγματικό χρόνο σε προγράμματα περιήγησης
# dom-rtcpeerconnection-scTPΣυμβατότητα του προγράμματος περιήγησης
Οι πίνακες BCD φορτώνουν μόνο στο πρόγραμμα περιήγησης
Δείτε επίσης
Βρήκα ένα πρόβλημα περιεχομένου με αυτήν τη σελίδα?
- Επεξεργαστείτε τη σελίδα στο github.
- Αναφέρετε το ζήτημα του περιεχομένου.
- Δείτε την πηγή στο github.
Αυτή η σελίδα τροποποιήθηκε τελευταία στις 25 Απριλίου 2023 από τους συνεισφέροντες MDN.
Το σχέδιο σας για ένα καλύτερο διαδίκτυο.
Χρησιμοποιώντας κανάλια δεδομένων WebRTC
Σε αυτόν τον οδηγό, θα εξετάσουμε πώς να προσθέσουμε ένα κανάλι δεδομένων σε μια σύνδεση από ομοτίμους, η οποία μπορεί στη συνέχεια να χρησιμοποιηθεί για την ασφαλή ανταλλαγή αυθαίρετων δεδομένων. δηλαδή, κάθε είδους δεδομένα που επιθυμούμε, σε οποιαδήποτε μορφή επιλέγουμε.
Σημείωση: Δεδομένου ότι όλα τα εξαρτήματα WebRTC υποχρεούνται να χρησιμοποιούν κρυπτογράφηση, οποιαδήποτε δεδομένα που μεταδίδονται σε ένα RTCDatachannel είναι αυτόματα ασφαλισμένα χρησιμοποιώντας την ασφάλεια του Layer Transport Datagram (DTLS·. Δείτε την Ασφάλεια παρακάτω για περισσότερες πληροφορίες.
Δημιουργία καναλιού δεδομένων
Η υποκείμενη μεταφορά δεδομένων που χρησιμοποιείται από το RTCDatachannel μπορεί να δημιουργηθεί με έναν από τους δύο τρόπους:
- Αφήστε το WebRTC να δημιουργήσει τη μεταφορά και να την ανακοινώσει στον απομακρυσμένο ομότιμο για εσάς (προκαλώντας την εκδήλωση Datachannel). Αυτός είναι ο εύκολος τρόπος και λειτουργεί για μια μεγάλη ποικιλία περιπτώσεων χρήσης, αλλά μπορεί να μην είναι αρκετά ευέλικτο για τις ανάγκες σας.
- Γράψτε τον δικό σας κωδικό για να διαπραγματευτείτε τη μεταφορά δεδομένων και να γράψετε τον δικό σας κωδικό για να σηματοδοτήσετε τον άλλο ομότιμο που χρειάζεται να συνδεθεί με το νέο κανάλι.
Ας δούμε κάθε μία από αυτές τις περιπτώσεις, ξεκινώντας από την πρώτη, η οποία είναι το πιο συνηθισμένο.
Αυτόματη διαπραγμάτευση
Συχνά, μπορείτε να επιτρέψετε στη σύνδεση από ομοτίμους να χειριστεί τη διαπραγμάτευση της σύνδεσης RTCDatachannel για εσάς. Για να το κάνετε αυτό, καλέστε
createdAtachannel () χωρίς να καθορίζουμε μια τιμή για το ακίνητο που διαπραγματεύεται ή καθορίζοντας το ακίνητο με τιμή ψευδούς . Αυτό θα ενεργοποιήσει αυτόματα την RTCPEerconnection για να χειριστεί τις διαπραγματεύσεις για εσάς, προκαλώντας τον απομακρυσμένο ομότιμο να δημιουργήσει ένα κανάλι δεδομένων και να συνδέει τα δύο μαζί σε όλο το δίκτυο.
Το αντικείμενο RTCDatachannel επιστρέφεται αμέσως από το CreatedAtachannel (). Μπορείτε να πείτε πότε η σύνδεση έχει γίνει με επιτυχία παρακολουθώντας το ανοικτό συμβάν που θα σταλεί στο rtcdatachannel .
αφήνω τραπεζοειδές datachannel = καλαθοσφαίνω.ΔημιουργήθηκεATACHANNEL("MyApp Channel"·; τραπεζοειδές datachannel.addeventListener("Άνοιξε", (Εκδήλωση· => αρχική μετάδοση(τραπεζοειδές datachannel·; >·;
Χειροκίνητη διαπραγμάτευση
Για να διαπραγματευτείτε με μη αυτόματο τρόπο τη σύνδεση του καναλιού δεδομένων, πρέπει πρώτα να δημιουργήσετε ένα νέο αντικείμενο RTCDatachannel χρησιμοποιώντας τη μέθοδο CreatedAtachannel () για την RTCPEerconnection, καθορίζοντας στις επιλογές που έχει οριστεί ως True . Αυτό σηματοδοτεί τη σύνδεση από ομοτίμους για να μην επιχειρήσετε να διαπραγματευτείτε το κανάλι για λογαριασμό σας.
Στη συνέχεια, διαπραγματευτείτε τη σύνδεση εκτός ζώνης, χρησιμοποιώντας έναν διακομιστή ιστού ή άλλα μέσα. Αυτή η διαδικασία θα πρέπει να σηματοδοτεί στον απομακρυσμένο ομότιμο ότι θα πρέπει να δημιουργήσει το δικό του rtcdatachannel με το ακίνητο που έχει διαπραγματευτεί επίσης, χρησιμοποιώντας το ίδιο αναγνωριστικό . Αυτό θα συνδέσει τα δύο αντικείμενα κατά μήκος της rtcpeerconnection .
αφήνω τραπεζοειδές datachannel = καλαθοσφαίνω.ΔημιουργήθηκεATACHANNEL("MyApp Channel", διαπραγματευμένος: αληθής, >·; τραπεζοειδές datachannel.addeventListener("Άνοιξε", (Εκδήλωση· => αρχική μετάδοση(τραπεζοειδές datachannel·; >·; requestRemoteChannel(τραπεζοειδές datachannel.ταυτότητα·;
Σε αυτό το απόσπασμα κώδικα, το κανάλι δημιουργείται με διαπραγμάτευση σετ True, τότε μια συνάρτηση που ονομάζεται RequestRemotechannel () χρησιμοποιείται για να ενεργοποιήσει τη διαπραγμάτευση, για να δημιουργήσει ένα απομακρυσμένο κανάλι με το ίδιο αναγνωριστικό με το τοπικό κανάλι.
Κάνοντας αυτό σας επιτρέπει να δημιουργείτε κανάλια δεδομένων με κάθε ομότιμο χρησιμοποιώντας διαφορετικές ιδιότητες και να δημιουργείτε δηλωτικά κανάλια χρησιμοποιώντας την ίδια τιμή για το ID .
Χυμός
Τα κανάλια δεδομένων WebRTC υποστηρίζουν το buffering των εξερχόμενων δεδομένων. Αυτό αντιμετωπίζεται αυτόματα. Παρόλο που δεν υπάρχει τρόπος να ελέγξετε το μέγεθος του buffer, μπορείτε να μάθετε πόσα δεδομένα είναι ρυθμισμένα και μπορείτε να επιλέξετε να ειδοποιηθείτε από ένα συμβάν όταν το buffer αρχίζει να τρέχει χαμηλά σε δεδομένα ουράς. Αυτό καθιστά εύκολο να γράψετε αποτελεσματικές ρουτίνες που βεβαιώνουν ότι υπάρχουν πάντα δεδομένα έτοιμα να στείλουν χωρίς υπερβολική χρήση ή να κατακλύσετε εντελώς το κανάλι.
Κατανόηση των ορίων μεγέθους μηνυμάτων
Για οποιαδήποτε δεδομένα που μεταδίδονται μέσω ενός δικτύου, υπάρχουν περιορισμοί μεγέθους. Σε θεμελιώδες επίπεδο, τα μεμονωμένα πακέτα δικτύου δεν μπορούν να είναι μεγαλύτερα από μια συγκεκριμένη τιμή (ο ακριβής αριθμός εξαρτάται από το δίκτυο και το επίπεδο μεταφοράς που χρησιμοποιείται). Σε επίπεδο εφαρμογής – δηλαδή, στην εφαρμογή του πράκτορα του χρήστη του WebRTC στην οποία εκτελείται ο κώδικας σας – η εφαρμογή WebRTC υλοποιεί χαρακτηριστικά για την υποστήριξη μηνυμάτων που είναι μεγαλύτερα από το μέγιστο μέγεθος πακέτων στο στρώμα μεταφοράς του δικτύου.
Αυτό μπορεί να περιπλέξει τα πράγματα, αφού δεν γνωρίζετε απαραίτητα ποια είναι τα όρια μεγέθους για διάφορους πράκτορες των χρηστών και πώς ανταποκρίνονται όταν αποστέλλονται ή ληφθούν ένα μεγαλύτερο μήνυμα. Ακόμη και όταν οι πράκτορες των χρηστών μοιράζονται την ίδια υποκείμενη βιβλιοθήκη για τη διαχείριση δεδομένων πρωτοκόλλου μετάδοσης ελέγχου ροής (SCTP), ενδέχεται να υπάρχουν παραλλαγές λόγω του τρόπου με τον οποίο χρησιμοποιείται η βιβλιοθήκη. Για παράδειγμα, τόσο ο Firefox όσο και το Google Chrome χρησιμοποιούν τη βιβλιοθήκη USRSCTP για να εφαρμόσουν το SCTP, αλλά εξακολουθούν να υπάρχουν καταστάσεις στις οποίες η μεταφορά δεδομένων σε ένα rtcdatachannel μπορεί να αποτύχει λόγω διαφορών στον τρόπο με τον οποίο ονομάζουν τη βιβλιοθήκη και αντιδρούν σε σφάλματα που επιστρέφει.
Όταν δύο χρήστες που εκτελούν το Firefox επικοινωνεί σε ένα κανάλι δεδομένων, το όριο μεγέθους μηνύματος είναι πολύ μεγαλύτερο από ό, τι όταν ο Firefox και το Chrome επικοινωνούν επειδή ο Firefox υλοποιεί μια τεχνική που καταργείται τώρα για την αποστολή μεγάλων μηνυμάτων σε πολλαπλά μηνύματα SCTP, τα οποία το Chrome δεν το κάνει. Το Chrome θα δει αντίθετα μια σειρά μηνυμάτων που πιστεύει ότι είναι πλήρεις και θα τα παραδώσει στη λήψη rtcdatachannel ως πολλαπλά μηνύματα.
Τα μηνύματα μικρότερα από 16 kib μπορούν να σταλούν χωρίς ανησυχία, καθώς όλοι οι σημαντικοί πράκτορες των χρηστών τους χειρίζονται με τον ίδιο τρόπο. Πέρα από αυτό, τα πράγματα γίνονται πιο περίπλοκα.
Ανησυχίες με μεγάλα μηνύματα
Επί του παρόντος, δεν είναι πρακτικό να χρησιμοποιείτε rtcdatachannel για μηνύματα μεγαλύτερα από 64 kib (16 kib αν θέλετε να υποστηρίξετε την ανταλλαγή δεδομένων cross-browser). Το πρόβλημα προκύπτει από το γεγονός ότι το SCTP – το πρωτόκολλο που χρησιμοποιείται για την αποστολή και τη λήψη δεδομένων σε ένα RTCDatachannel – σχεδιάστηκε αρχικά για χρήση ως πρωτόκολλο σηματοδότησης. Αναμενόταν ότι τα μηνύματα θα ήταν σχετικά μικρά. Η υποστήριξη για μηνύματα μεγαλύτερα από το MTU του Layer του δικτύου προστέθηκε σχεδόν ως δεύτερη σκέψη, σε περίπτωση που τα μηνύματα σηματοδότησης έπρεπε να είναι μεγαλύτερα από το MTU. Αυτή η λειτουργία απαιτεί κάθε κομμάτι του μηνύματος να έχει διαδοχικούς αριθμούς ακολουθίας, επομένως πρέπει να μεταδοθούν το ένα μετά το άλλο, χωρίς άλλα δεδομένα που παρεμβάλλονται μεταξύ τους.
Αυτό τελικά έγινε πρόβλημα. Με την πάροδο του χρόνου, διάφορες εφαρμογές (συμπεριλαμβανομένων εκείνων που εφαρμόζουν το WebRTC) άρχισαν να χρησιμοποιούν SCTP για να μεταδίδουν μεγαλύτερα και μεγαλύτερα μηνύματα. Τελικά συνειδητοποιήθηκε ότι όταν τα μηνύματα γίνονται πολύ μεγάλα, είναι δυνατόν η μετάδοση ενός μεγάλου μηνύματος να εμποδίσει όλες τις άλλες μεταφορές δεδομένων σε αυτό το κανάλι δεδομένων – συμπεριλαμβανομένων των κρίσιμων μηνυμάτων σηματοδότησης.
Αυτό θα γίνει ένα ζήτημα όταν τα προγράμματα περιήγησης υποστηρίζουν σωστά το τρέχον πρότυπο για την υποστήριξη μεγαλύτερων μηνυμάτων-τη σημαία στο τέλος του ρεκόρ (EOR) που υποδεικνύει πότε ένα μήνυμα είναι το τελευταίο σε μια σειρά που πρέπει να αντιμετωπίζεται ως ενιαίο ωφέλιμο. Αυτό εφαρμόζεται στον Firefox 57, αλλά δεν έχει ακόμη εφαρμοστεί στο Chrome (βλ. Chromium Bug 7774). Με την υποστήριξη του EOR, τα ωφέλιμα φορτία RTCDatachannel μπορεί να είναι πολύ μεγαλύτερα (επισήμως μέχρι 256 Kib, αλλά η υλοποίηση του Firefox τους καλύπτει σε ένα επιβλητικό 1 GIB). Ακόμη και στα 256 kib, αυτό είναι αρκετά μεγάλο για να προκαλέσει αξιοσημείωτες καθυστερήσεις στο χειρισμό επείγουσας κυκλοφορίας. Εάν πάτε ακόμα μεγαλύτερα, οι καθυστερήσεις μπορούν να γίνουν αβάσιμες, εκτός αν είστε σίγουροι για τις λειτουργικές σας συνθήκες.
Προκειμένου να επιλυθεί αυτό το ζήτημα, ένα νέο σύστημα Προγραμματιστές ροής (συνήθως αναφέρεται ως “προδιαγραφή SCTP NDATA”) έχει σχεδιαστεί για να καταστεί δυνατή η διάλυση μηνυμάτων που αποστέλλονται σε διαφορετικά ρεύματα, συμπεριλαμβανομένων των ροών που χρησιμοποιούνται για την εφαρμογή των καναλιών δεδομένων WebRTC. Η πρόταση αυτή εξακολουθεί να βρίσκεται σε μορφή σχεδίου IETF, αλλά μόλις εφαρμοστεί, θα καταστεί δυνατή η αποστολή μηνυμάτων με ουσιαστικά περιορισμούς μεγέθους, καθώς το στρώμα SCTP θα παρεμβάλλεται αυτόματα τα υποκείμενα υπομνάρια για να διασφαλιστεί ότι τα δεδομένα κάθε καναλιού έχουν την ευκαιρία να περάσουν.
Η υποστήριξη του Firefox για το NDATA βρίσκεται στη διαδικασία εφαρμογής. Δείτε το Bug Firefox 1381145 για να το παρακολουθείτε να γίνεται διαθέσιμο για γενική χρήση. Η ομάδα Chrome παρακολουθεί την εφαρμογή της υποστήριξης NDATA στο Chrome Bug 5696.
Σημείωση: Μεγάλο μέρος των πληροφοριών σε αυτήν την ενότητα βασίζονται εν μέρει στη δημοσίευση στο blog demystifying περιορισμούς μεγέθους μηνύματος δεδομένων WebRTC, που γράφτηκε από τον Lennart Grahl. Πηγαίνει σε λίγο περισσότερες λεπτομέρειες εκεί, αλλά καθώς τα προγράμματα περιήγησης έχουν ενημερωθεί από τότε μερικά από αυτά μπορεί να είναι εκτός ημερομηνίας. Επιπλέον, με την πάροδο του χρόνου, θα γίνει περισσότερο, ειδικά όταν η υποστήριξη EOR και NDATA είναι πλήρως ενσωματωμένη στα μεγάλα προγράμματα περιήγησης.
Ασφάλεια
Όλα τα δεδομένα που μεταφέρονται χρησιμοποιώντας WebRTC είναι κρυπτογραφημένα. Στην περίπτωση του rtcdatachannel, η χρησιμοποιούμενη κρυπτογράφηση είναι η Security Layer Transport Datagram (DTLS), η οποία βασίζεται στην ασφάλεια των στρώσεων μεταφοράς (TLS). Δεδομένου ότι το TLS χρησιμοποιείται για την εξασφάλιση κάθε σύνδεσης HTTPS, τα δεδομένα που στέλνετε σε ένα κανάλι δεδομένων είναι τόσο ασφαλείς όσο οποιεσδήποτε άλλες αποστέλλονται ή λαμβάνονται από το πρόγραμμα περιήγησης του χρήστη.
Πιο θεμελιωδώς, δεδομένου ότι το WebRTC είναι μια σύνδεση από ομοτίμους μεταξύ δύο πρακτόρων χρήστη, τα δεδομένα δεν περνούν ποτέ μέσω του διακομιστή ιστού ή εφαρμογών. Αυτό μειώνει τις ευκαιρίες για την παρακολούθηση των δεδομένων.
Βρήκα ένα πρόβλημα περιεχομένου με αυτήν τη σελίδα?
- Επεξεργαστείτε τη σελίδα στο github.
- Αναφέρετε το ζήτημα του περιεχομένου.
- Δείτε την πηγή στο github.
Αυτή η σελίδα τροποποιήθηκε τελευταία στις 25 Απριλίου 2023 από τους συνεισφέροντες MDN.
Χρησιμοποιεί το WebRTC SCTP?
Э э э э э э э э э э э э э э э э э э э э э э э э э э э э э э э э э э
Ы з з з з з з з и и и и п п п п п п з п з з з з з з з з з п. С п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п. ПOчем э э э э э э э э э э э п п п п п п п?
Э э э э э а а а а и е е з з л л л л л л л э э э э э э э э э э э э Κοιτάζοντας το ριμπάγ. С с п п п п п э э э э э э э э э э э э э э э э э э э э э э э э э э э э. Д э э э э д д д и и д д д ρίας н и д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д.
И и з а а а а а а а а ы ы з .. Е е е е д п п ж ж ж ж ж ж ж ж ж ж ж ж ж ж ж ж ж ж п п п п п п п п п п п п п п п п п. Орrρά. Пороннαι.
ПON п п е е а а τροφή пρέφ а а а а а τροφήλου. е е е и τροφή ее же жÉ в в ж и и и и ч ч.
Επικοινωνία δεδομένων #
Τι παίρνω από το webrtc’επικοινωνία δεδομένων? #
Το WebRTC παρέχει κανάλια δεδομένων για επικοινωνία δεδομένων. Μεταξύ δύο συνομηλίκων μπορείτε να ανοίξετε 65.534 κανάλια δεδομένων. Ένα κανάλι δεδομένων βασίζεται στο Datagram και το καθένα έχει τις δικές του ρυθμίσεις ανθεκτικότητας. Από προεπιλογή, κάθε κανάλι δεδομένων έχει εγγυηθεί την παράδοση. Εάν πλησιάζετε το WebRTC από τα κανάλια δεδομένων φόντου των μέσων ενημέρωσης μπορεί να φαίνεται σπατάλη. Γιατί χρειάζομαι όλο αυτό το υποσύστημα όταν θα μπορούσα απλώς να χρησιμοποιήσω το HTTP ή το WebSockets? Η πραγματική ισχύς με τα κανάλια δεδομένων είναι ότι μπορείτε να τα διαμορφώσετε για να συμπεριφέρονται σαν UDP με μη διαταγμένη/απώλεια παράδοσης. Αυτό είναι απαραίτητο για χαμηλή λανθάνουσα κατάσταση και καταστάσεις υψηλής απόδοσης. Μπορείτε να μετρήσετε την backpressure και να βεβαιωθείτε ότι στέλνετε μόνο όσα υποστηρίζουν το δίκτυό σας.
Πώς λειτουργεί? #
Το 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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Τύπος μηνύματος | Τύπος καναλιού | Προτεραιότητα | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Παράμετρος αξιοπιστίας | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Μήκος ετικετών | Μήκος πρωτοκόλλου | +-+-+-+-+-+-+-+-+-+-+-+-+-+- -+-+-+-+-+-+-+-+-+\ \ / / πρωτόκολλο / \ \ \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Τύπος μηνύματος #
Ο τύπος μηνύματος είναι μια στατική τιμή 0x03 .
Τύπος καναλιού #
- Data_channel_reliable (0x00) – Δεν έχουν χαθεί μηνύματα και θα φτάσουν στη σειρά
- Data_channel_reliable_unordered (0x80) – Δεν έχουν χαθεί μηνύματα, αλλά μπορεί να φτάσουν εκτός παραγγελίας.
- DATA_CHANNEL_PARTIAL_RELIBLE_REXMIT (0x01) – Τα μηνύματα ενδέχεται να χαθούν αφού δοκιμάσετε το απαιτούμενο ποσό των φορές, αλλά θα φτάσουν στη σειρά.
- DATA_CHANNEL_PARTIAL_RELIBLE_REXMIT_UNORDERED (0x81) – Τα μηνύματα ενδέχεται να χαθούν μετά από δοκιμή του ζητούμενου ποσού και μπορεί να φτάσουν εκτός παραγγελίας.
- Data_channel_partial_reliable_timed (0x02) – Τα μηνύματα ενδέχεται να χαθούν εάν δεν κάνουν’να φτάσουμε στο απαιτούμενο χρονικό διάστημα, αλλά θα φτάσουν στη σειρά.
- DATA_CHANNEL_PARTIAL_RELIBLE_TIMED_UNORDERED (0x82) – Τα μηνύματα ενδέχεται να χαθούν εάν’να φτάσουμε στο απαιτούμενο χρονικό διάστημα και μπορεί να φτάσει εκτός παραγγελίας.
Προτεραιότητα #
Η προτεραιότητα του καναλιού δεδομένων. Τα κανάλια δεδομένων που έχουν υψηλότερη προτεραιότητα θα προγραμματιστούν πρώτα. Τα μεγάλα μηνύματα χρήστη χαμηλότερης προτεραιότητας δεν θα καθυστερήσουν την αποστολή μηνυμάτων χρηστών υψηλότερης προτεραιότητας.
Παράμετρος αξιοπιστίας #
Εάν ο τύπος καναλιού δεδομένων είναι DATA_CHANNEL_PARTIAL_RELIABLE, τα επιθήματα ρυθμίζουν τη συμπεριφορά:
- Rexmit – Καθορίζει πόσες φορές ο αποστολέας θα επαναφέρει το μήνυμα πριν εγκαταλείψει.
- Timed – ορίζει για πόσο καιρό (σε MS) ο αποστολέας θα επαναφέρει το μήνυμα πριν εγκαταλείψει.
Ετικέτα #
Μια συμβολοσειρά 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 ως datagrams και όχι ως ροή byte. Η αποστολή και λήψη δεδομένων αισθάνεται σαν να χρησιμοποιείτε UDP αντί για TCP. Εσύ’t Πρέπει να προσθέσετε οποιοδήποτε επιπλέον κωδικό για τη μεταφορά πολλαπλών αρχείων μέσω μιας ροής.
Μηνύματα SCTP Don’t έχουν όρια μεγέθους όπως το UDP. Ένα ενιαίο μήνυμα SCTP μπορεί να είναι πολλαπλά gigabytes σε μέγεθος.
Κομμάτια #
Το πρωτόκολλο SCTP αποτελείται από κομμάτια. Υπάρχουν πολλοί διαφορετικοί τύποι κομματιών. Αυτά τα κομμάτια χρησιμοποιούνται για όλη την επικοινωνία. Τα δεδομένα χρήστη, η αρχικοποίηση σύνδεσης, ο έλεγχος συμφόρησης και άλλα γίνονται μέσω κομματιών.
Κάθε πακέτο SCTP περιέχει μια λίστα με κομμάτια. Έτσι σε ένα πακέτο UDP μπορείτε να έχετε πολλά κομμάτια που μεταφέρουν μηνύματα από διαφορετικά ρεύματα.
Αριθμός ακολουθίας μετάδοσης #
Ο αριθμός ακολουθίας μετάδοσης (TSN) είναι ένα παγκόσμιο μοναδικό αναγνωριστικό για κομμάτια δεδομένων. Ένα κομμάτι δεδομένων είναι αυτό που μεταφέρει όλα τα μηνύματα που επιθυμεί ένας χρήστης. Το TSN είναι σημαντικό επειδή βοηθά έναν δέκτη να καθορίσει εάν τα πακέτα έχουν χαθεί ή εκτός παραγγελίας.
Εάν ο δέκτης παρατηρήσει ένα ελλείποντα TSN, δεν το κάνει’να δώσω τα δεδομένα στον χρήστη μέχρι να εκπληρωθεί.
Αναγνωριστικό ροής #
Κάθε ρεύμα έχει ένα μοναδικό αναγνωριστικό. Όταν δημιουργείτε ένα κανάλι δεδομένων με ένα ρητό αναγνωριστικό, είναι στην πραγματικότητα μόλις περάσει δεξιά στο SCTP ως αναγνωριστικό ρεύματος. Αν δεν είσαι’να περάσει ένα αναγνωριστικό το αναγνωριστικό ροής επιλέγεται για εσάς.
Αναγνωριστικό πρωτοκόλλου ωφέλιμου φορτίου #
Κάθε κομμάτι δεδομένων διαθέτει επίσης αναγνωριστικό πρωτοκόλλου ωφέλιμου φορτίου (PPID). Αυτό χρησιμοποιείται για τον προσδιορισμό με μοναδικό τρόπο τι είδους δεδομένα ανταλλάσσονται. Το SCTP έχει πολλά PPID, αλλά το WebRTC χρησιμοποιεί μόνο τα ακόλουθα πέντε:
- WebRTC DCEP (50) – μηνύματα DCEP.
- WebRTC String (51) – μηνύματα συμβολοσειράς Datachannel.
- WebRTC Binary (53) – Δυαδικά μηνύματα Datachannel.
- WebRTC String Empty (56) – μηνύματα συμβολοσειράς Datachannel με μήκος 0.
- WebRTC Binary Empty (57) – Δυαδικά μηνύματα Datachannel με μήκος 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 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Αναγνωριστικό ροής | Αριθμός ακολουθίας ροής | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Αναγνωριστικό πρωτοκόλλου ωφέλιμου φορτίου | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Το κομμάτι δεδομένων είναι πώς ανταλλάσσονται όλα τα δεδομένα χρήστη. Όταν στέλνετε οτιδήποτε πάνω από το κανάλι δεδομένων, έτσι ανταλλάσσεται.
Το Bit έχει οριστεί αν πρόκειται για ένα πακέτο χωρίς παραλλαγή. Μπορούμε να αγνοήσουμε τον αριθμό ακολουθίας ροής.
Β και Ε είναι τα κομμάτια αρχικής και λήξης. Εάν θέλετε να στείλετε ένα μήνυμα που είναι πολύ μεγάλο για ένα κομμάτι δεδομένων, πρέπει να κατακερματιστεί σε πολλαπλά κομμάτια δεδομένων που αποστέλλονται σε ξεχωριστά πακέτα. Με τους αριθμούς bit 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-bit που αυξάνεται κάθε μήνυμα χρήστη και περιλαμβάνεται στην κεφαλίδα του μηνύματος μηνυμάτων δεδομένων. Μετά από 65535 μηνύματα αυτό θα τυλίξει γύρω στο 0. Αυτός ο αριθμός χρησιμοποιείται για να αποφασίσει τη σειρά μηνυμάτων παράδοσης στον δέκτη εάν το u έχει οριστεί σε 0. Παρόμοια με το TSN, εκτός από τον αριθμό της ακολουθίας ροής αυξάνεται μόνο για κάθε μήνυμα στο σύνολό του και όχι κάθε μεμονωμένο κομμάτι δεδομένων.
Το αναγνωριστικό πρωτοκόλλου ωφέλιμου φορτίου είναι ο τύπος δεδομένων που ρέει μέσω αυτού του ρεύματος. Για το WebRTC, πρόκειται να είναι DCEP, String ή Binary.
Τα δεδομένα χρήστη είναι αυτό που στέλνετε. Όλα τα δεδομένα που στέλνετε μέσω ενός καναλιού δεδομένων WebRTC μεταδίδονται μέσω ενός τεμαχίου δεδομένων.
Init κομμάτι #
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 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Το κομμάτι init ξεκινά τη διαδικασία δημιουργίας μιας ένωσης.
Η ετικέτα εκκίνησης χρησιμοποιείται για γενιά cookie. Τα cookies χρησιμοποιούνται για την προστασία από τον άνθρωπο στο μεσαίο και την άρνηση της προστασίας των υπηρεσιών. Περιγράφονται λεπτομερέστερα στην ενότητα State Machine.
Χρησιμοποιείται η πίστωση παραθύρου του παραλήπτη που διαφημίζεται για SCTP’έλεγχος συμφόρησης. Αυτό επικοινωνεί πόσο μεγάλο από το buffer έχει διατεθεί ο δέκτης για αυτήν την ένωση.
Ο αριθμός των εξερχόμενων/εισερχόμενων ροών ειδοποιεί το τηλεχειριστήριο του πόσα ρεύματα υποστηρίζει αυτός ο πράκτορας.
Το αρχικό TSN είναι ένα τυχαίο UINT32 για να ξεκινήσετε το τοπικό TSN στο.
Οι προαιρετικές παράμετροι επιτρέπουν στο SCTP να εισαγάγει νέα χαρακτηριστικά στο πρωτόκολλο.
Sack 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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Τύπος = 3 | Σημαίες κομμάτων | Μήκος κομματιών | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Σωρευτικά tsn ack | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Διαφημιζόμενο ΠΙΣΤΟΠΟΙΗΣΗ ΠΙΣΤΩΤΙΚΟΥ ΔΗΜΟΣΙΑ (A_RWND) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Αριθμός αποκλεισμών Gap ACK = N | Αριθμός διπλών TSNS = x | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| GAP ACK Block #1 Έναρξη | GAP ACK Block #1 END | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / \ . \ /+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| 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 θα μπορούσαν να χρησιμοποιηθούν για να πούμε στον αποστολέα που δεν κάνει’t Πρέπει να ξαναρχίσετε 102, 103 ή 104 .
Το Dupplicate 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 | Σημαίες κομμάτων | Μήκος καρδιακού παλμού | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Το κομμάτι του καρδιακού παλμού χρησιμοποιείται για να διεκδικήσει το τηλεχειριστήριο εξακολουθεί να ανταποκρίνεται. Χρήσιμο αν είστε’να στέλνετε τυχόν κομμάτια δεδομένων και πρέπει να διατηρήσετε ανοιχτή χαρτογράφηση NAT.
Abtom 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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Τύπος = 6 | Reserved | T | Μήκος | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Ένα κομμάτι Abort σβήνει απότομα την ένωση. Χρησιμοποιείται όταν μια πλευρά εισέρχεται σε κατάσταση σφάλματος. Ο τερματισμός της σύνδεσης χρησιμοποιεί το κομμάτι τερματισμού.
Τερματοφύλακα #
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.
Σφάλμα 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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Τύπος = 9 | Σημαίες κομμάτων | Μήκος | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Χρησιμοποιείται ένα κομμάτι σφάλματος για να ειδοποιήσει τον απομακρυσμένο παράγοντα SCTP ότι έχει συμβεί ένα μη θανατηφόρο σφάλμα.
Προωθήστε το 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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Τύπος = 192 | Σημαίες = 0x00 | Μήκος = μεταβλητή | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Νέο σωρευτικό TSN | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Ρεύμα-1 | Ακολουθία ροής-1 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+| Ρεύμα-n | Sequence | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Το εμπρόσθιο κομμάτι TSN μετακινεί το παγκόσμιο TSN προς τα εμπρός. Το SCTP το κάνει αυτό, ώστε να μπορείτε να παραλείψετε μερικά πακέτα που δεν είστε’Δεν με νοιάζει πια. Αφήνω’λένε ότι στέλνετε 10 11 12 13 14 15 και αυτά τα πακέτα είναι έγκυρα μόνο εάν φτάνουν όλοι. Αυτά τα δεδομένα είναι επίσης ευαίσθητα σε πραγματικό χρόνο, οπότε αν φτάσει αργά, δεν είναι’χρήσιμος.
Εάν χάσετε 12 και 13, δεν υπάρχει λόγος να στείλετε 14 και 15 ! Το SCTP χρησιμοποιεί το εμπρόσθιο κομμάτι TSN για να το επιτύχει αυτό. Λέει στον δέκτη ότι 14 και 15 αρένα’δεν πρόκειται να παραδοθεί πια.
Νέο σωρευτικό TSN Αυτό είναι το νέο TSN της σύνδεσης. Οποιαδήποτε πακέτα δεν θα διατηρηθούν αυτό το TSN.
Η ακολουθία ροής και ροής χρησιμοποιείται για να πηδήσει τον αριθμό της ακολουθίας ροής μπροστά μπροστά. Ανατρέξτε στο κομμάτι δεδομένων για τη σημασία αυτού του πεδίου.
Κρατική μηχανή #
Αυτά είναι μερικά ενδιαφέροντα μέρη της μηχανής κατάστασης SCTP. Το WebRTC δεν’t Χρησιμοποιήστε όλα τα χαρακτηριστικά της μηχανής κατάστασης SCTP, οπότε έχουμε αποκλείσει αυτά τα μέρη. Έχουμε επίσης απλοποιήσει ορισμένα εξαρτήματα για να τα καταστήσουμε κατανοητά μόνοι τους.
Ροή σύνδεσης Ροή #
Τα κομμάτια init και init ack χρησιμοποιούνται για την ανταλλαγή των δυνατοτήτων και των διαμορφώσεων κάθε ομότιμου. Το SCTP χρησιμοποιεί ένα cookie κατά τη διάρκεια της χειραψίας για να επικυρώσει τον ομότιμο που επικοινωνεί με. Αυτό είναι για να διασφαλιστεί ότι η χειραψία δεν παρεμποδίζεται και να αποτρέψει τις επιθέσεις DOS.
Το κομμάτι init ack περιέχει το cookie. Στη συνέχεια, το cookie επιστρέφεται στον δημιουργό του χρησιμοποιώντας το Cookie Echo . Εάν η επαλήθευση cookie είναι επιτυχής, το cookie ack αποστέλλεται και τα κομμάτια δεδομένων είναι έτοιμα για ανταλλαγή.
Ροή teardown σύνδεσης #
Το SCTP χρησιμοποιεί το κομμάτι τερματισμού. Όταν ένας πράκτορας λαμβάνει ένα κομμάτι τερματισμού, θα περιμένει μέχρι να λάβει το ζητούμενο σωρευτικό TSN ACK . Αυτό επιτρέπει σε έναν χρήστη να διασφαλίσει ότι όλα τα δεδομένα παραδίδονται ακόμη και αν η σύνδεση είναι απώλεια.
Διατηρήστε τον μηχανισμό #
Το SCTP χρησιμοποιεί το αίτημα του καρδιακού παλμού και τα κομμάτια ACK Heartbeat ACK για να διατηρήσει τη σύνδεση ζωντανή. Αυτά αποστέλλονται σε ένα διαμορφώσιμο διάστημα. Το SCTP εκτελεί επίσης ένα εκθετικό backoff εάν το πακέτο Hasn’έφτασε.
Το κομμάτι του καρδιακού παλμού περιέχει επίσης μια τιμή χρόνου. Αυτό επιτρέπει σε δύο ενώσεις να υπολογίζουν το χρόνο ταξιδιού μεταξύ δύο παραγόντων.