האם WebRTC משתמש ב- SCTP?
באמצעות ערוצי נתונים webrtc
סיכום
במדריך זה נבחן כיצד להוסיף ערוץ נתונים לחיבור עמית. נבחן כיצד ליצור ערוץ נתונים ונדון באפשרויות למשא ומתן אוטומטי וידני.
נקודות מפתח
1. הובלת SCTP משמשת להעברת וקבלת נתונים עבור RTCDATACHANNEL.
2. לממשק RTCPeerConnection יש מאפיין לקריאה בלבד בשם SCTP, המחזיר אובייקט RTCSCTPTRANSPORT המתאר את הובלת SCTP המשמש.
3. שיטת ה- SuredAtachannel () בממשק 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 של ממשק RTCPEERCONNECTENCE?
המאפיין SCTP מחזיר אובייקט RTCSCTPTRANSPORT המתאר את הובלת SCTP המשמשת להעברת וקבלת נתונים עבור RTCDATACHANNEL. אם לא נשא משא ומתן על SCTP, הערך הוא null. - כיצד ניתן ליצור ערוץ נתונים ב- WebRTC?
ניתן ליצור ערוץ נתונים בשיטת CreateAtachannel () בממשק RTCPeerConnection. שיטה זו מחזירה אובייקט RTCDATACHANNENEL המייצג את ערוץ הנתונים החדש שנוצר. - מה ההבדל בין משא ומתן אוטומטי למשא ומתן ידני?
במשא ומתן אוטומטי, ה- RTCPeerConnection מטפל במשא ומתן ויצירת ערוץ הנתונים. השיטה שנצרה Atachannel () נקראת מבלי לציין ערך לנכס המשא ומתן או עם ערך של שקר. במשא ומתן ידני, ערוץ הנתונים נוצר עם הנכס המשא ומתן שנקבע ל- True, והמשא ומתן נעשה מחוץ ללהקה באמצעות שרת אינטרנט או אמצעים אחרים. - כיצד ניתן לקבוע את גודל ההודעה המרבי שניתן לשלוח מעל ערוץ נתונים?
ניתן לקבוע את גודל ההודעה המרבית על ידי גישה למאפיין MaxMessageSize של האובייקט RTCSCTPTRANSPORT, המייצג את הובלת SCTP המשמשת את ה- RTCPEERCONNECTION. - האם הנתונים המועברים ב- RTCDATACHANNEL מאובטחים אוטומטית?
כן, כל הנתונים המועברים ב- RTCDATACHANNEL מאובטחים אוטומטית באמצעות Datagram Layer Layer Security (DTLS). רכיבי WEBRTC נדרשים להשתמש בהצפנה כדי להבטיח את אבטחת הנתונים. - היכן ניתן למצוא את המפרט לערוצי נתונים WebRTC?
המפרט לערוצי נתונים WebRTC ניתן למצוא ב- WebRTC: תקשורת בזמן אמת במפרט הדפדפנים, ובמיוחד את החלק DOM-RTCPEERCONNECTENCENCENTECT-SCTP. - מה התאימות של ערוצי נתונים WebRTC על פני דפדפנים?
התאימות של ערוצי הנתונים WebRTC עשויה להשתנות בין דפדפנים שונים. חשוב לבדוק ולהבטיח תאימות לדפדפני היעד והגרסאות. - מהם כמה משאבים נוספים הקשורים לערוצי נתונים WebRTC?
באפשרותך לערוך את הדף ב- GitHub, לדווח על בעיות תוכן או להציג את קוד המקור ב- GitHub. אפשרויות אלה ניתן למצוא בסעיף “ראה גם” להלן.באמצעות ערוצי נתונים webrtc
ACK חוסם TSNs שהתקבלו לאחר ה- TSN ACK המצטבר . זה משמש אם יש פער במנות שנמסרו. לתת’אומרים כי נתחי נתונים עם TSNS 100, 102, 103 ו- 104 מועברים. ה- TSN ACK המצטבר יהיה 100, אך ניתן להשתמש בלוקי ACK כדי לומר לשולח שהוא לא’לא צריך לנסוע מחדש 102, 103 או 104 .
RTCPeerConnection: נכס SCTP
הקריאה בלבד SCTP נכס בממשק RTCPEERCONNECTION מחזיר RTCSCTPTRANSPORT המתאר את הובלת SCTP עליו נשלחים ומתקבלים נתוני SCTP. אם לא נשא משא ומתן על SCTP, ערך זה הוא null .
הובלת SCTP משמשת להעברת וקבלת נתונים עבור כל אחד וכל RTCDATACHANNEL S בחיבור העמיתים.
ערך
אובייקט RTCSCTPTRANSPORT המתאר את הובלת SCTP המשמש את ה- RTCPEERCONNECT.
דוגמא
const PeerConnection = חָדָשׁ RTCPEERCONNECTION((); const עָרוּץ = PeerConnection.נוצר ATACHANNEL(("הנתונים שלי"); עָרוּץ.Onopen = ((מִקרֶה) => עָרוּץ.לִשְׁלוֹחַ(("שליחת הודעה"); >; עָרוּץ.OnMessage = ((מִקרֶה) => לְנַחֵם.עֵץ((מִקרֶה.נתונים); >; // קבע את גודל ההודעה הגדול ביותר שניתן לשלוח const SCTP = PeerConnection.SCTP; const maxmessagesize = SCTP.maxmessagesize;
מפרטים
מִפרָט Webrtc: תקשורת בזמן אמת בדפדפנים
# dom-rtcpeerconnection-sctpתאימות דפדפן
שולחנות BCD נטענים רק בדפדפן
ראה גם
מצא בעיית תוכן בדף זה?
- ערוך את הדף ב- GitHub.
- דווח על סוגיית התוכן.
- צפה במקור ב- GitHub.
דף זה שונה לאחרונה ב- 25 באפריל 2023 על ידי תורמי MDN.
התוכנית שלך לאינטרנט טוב יותר.
באמצעות ערוצי נתונים webrtc
במדריך זה נבחן כיצד להוסיף ערוץ נתונים לחיבור עמיתים, אשר ניתן להשתמש בו כדי להחליף נתונים שרירותיים באופן מאובטח; כלומר, כל סוג של נתונים שאנו רוצים, בכל פורמט שאנו בוחרים.
הערה: מכיוון שכל רכיבי WebRTC נדרשים להשתמש בהצפנה, כל נתונים המועברים ב- RTCDATACHANNEL מאובטחים אוטומטית באמצעות אבטחת שכבת הובלה של DATAGRAM (DTLS). ראה אבטחה למטה למידע נוסף.
יצירת ערוץ נתונים
ניתן ליצור את הובלת הנתונים הבסיסית המשמשת את ה- RTCDATACHANNEL באחת משתי דרכים:
- תן ל- WebRTC ליצור את ההובלה ולהכריז על כך לעמיתים המרוחקים עבורך (על ידי הגורם לו לקבל אירוע Datachannel). זו הדרך הקלה, ועובד למגוון רחב של מקרי שימוש, אך יתכן שאינו גמיש מספיק לצרכים שלך.
- כתוב קוד משלך כדי לנהל משא ומתן על הובלת הנתונים וכתוב קוד משלך כדי לאותת לעמיתים האחרים שהוא צריך להתחבר לערוץ החדש.
בואו נסתכל על כל אחד מהמקרים הללו, החל מהראשון, שהוא הנפוץ ביותר.
משא ומתן אוטומטי
לעתים קרובות, אתה יכול לאפשר לחיבור העמיתים לטפל במשא ומתן על חיבור RTCDatachannel עבורך. לשם כך התקשרו
CreateDatachannel () מבלי לציין ערך לנכס המשא ומתן, או לציין את הנכס בערך שווא . זה יפעיל אוטומטית את ה- RTCPeerConnection כדי לטפל במשא ומתן עבורך, ויגרום לעמיתים המרוחקים ליצור ערוץ נתונים ולקשר בין השניים יחד לרשת.
האובייקט RTCDATACHANNEL מוחזר באופן מיידי על ידי CreateAtachannel (); אתה יכול לדעת מתי החיבור נעשה בהצלחה על ידי צפייה באירוע הפתוח שיישלח ל- RTCDATACHANNEL .
לתת Datachannel = PC.נוצר ATACHANNEL(("ערוץ MyApp"); Datachannel.addeventlistener(("לִפְתוֹחַ", ((מִקרֶה) => הפעלת התחלה((Datachannel); >);
משא ומתן ידני
כדי לנהל משא ומתן ידנית על חיבור ערוץ הנתונים, עליך ליצור תחילה אובייקט RTCDATACHANNEL חדש בשיטת CreateAtachAnnel () ב- RTCPEERCONNECT . זה מסמל לחיבור העמיתים כדי לא לנסות לנהל משא ומתן על הערוץ בשמך.
ואז לנהל משא ומתן על החיבור מחוץ ללהקה, באמצעות שרת אינטרנט או באמצעים אחרים. תהליך זה אמור לאותת לעמיתים המרוחקים שהוא צריך ליצור RTCDATACHANNEL משלו עם הנכס המשא ומתן מוגדר גם הוא True, תוך שימוש באותו מזהה . זה יקשר בין שני האובייקטים על פני ה- RTCPEERCONNECTION .
לתת Datachannel = PC.נוצר ATACHANNEL(("ערוץ MyApp", משא ומתן: נָכוֹן, >); Datachannel.addeventlistener(("לִפְתוֹחַ", ((מִקרֶה) => הפעלת התחלה((Datachannel); >); requestRemoteChannel((Datachannel.תְעוּדַת זֶהוּת);
בקטע קוד זה, הערוץ נוצר עם משא ומתן שנקבע ל- True, ואז פונקציה שנקראת requestRemotechannel () משמשת כדי לעורר משא ומתן, ליצירת ערוץ מרוחק עם אותו מזהה כמו הערוץ המקומי.
פעולה זו מאפשרת לך ליצור ערוצי נתונים עם כל עמיתים באמצעות מאפיינים שונים, וכדי ליצור ערוצים באופן הצהרתי על ידי שימוש באותו ערך עבור מזהה .
חוצץ
ערוצי נתונים WebRTC תומכים במאגר של נתונים יוצאים. זה מטופל אוטומטית. אמנם אין דרך לשלוט על גודל המאגר, אך תוכלו ללמוד כמה נתונים מאוחסנים כרגע, ותוכלו לבחור לקבל הודעה על ידי אירוע כאשר המאגר מתחיל לרוץ על נתונים בתור. זה מקל על כתיבת שגרות יעילות שמוודאות שתמיד יש נתונים מוכנים לשלוח מבלי להשתמש בזיכרון יתר או להביט לחלוטין בערוץ.
הבנת גבולות גודל ההודעה
עבור כל נתונים המועברים ברשת, ישנם מגבלות גודל. ברמה הבסיסית, מנות הרשת האישיות אינן יכולות להיות גדולות מערך מסוים (המספר המדויק תלוי ברשת ובשכבת ההובלה המשמשות). ברמת היישום – כלומר, בתוך יישום סוכן המשתמש של WebRTC עליו פועל הקוד שלך – יישום WebRTC מיישם תכונות לתמיכה בהודעות גדולות מגודל המנות המרבי בשכבת ההובלה של הרשת.
זה יכול לסבך דברים, מכיוון שאתה לא בהכרח יודע מה מגבלות הגודל עבור סוכני משתמש שונים, וכיצד הם מגיבים כאשר נשלחת או מתקבלת הודעה גדולה יותר. גם כאשר סוכני משתמשים חולקים את אותה הספרייה הבסיסית לטיפול בנתוני פרוטוקול העברת בקרת זרם (SCTP), עדיין יכולות להיות וריאציות בשל אופן השימוש בספריה. לדוגמה, גם Firefox וגם Google Chrome משתמשים בספריית USRSCTP כדי ליישם SCTP, אך עדיין ישנם מצבים בהם העברת נתונים על RTCDATACHANNEL יכולים להיכשל בגלל הבדלים כיצד הם מכנים הספרייה ומגיבים לשגיאות שהיא מחזירה.
כאשר שני משתמשים המריצים את Firefox מתקשרים בערוץ נתונים, מגבלת גודל ההודעה גדולה בהרבה מכפי ש- Firefox ו- Chrome מתקשרים מכיוון ש- Firefox מיישם טכניקה שהופעלה כעת לשליחת הודעות גדולות בהודעות SCTP מרובות, אשר Chrome אינו עושה. Chrome תראה במקום זאת סדרת הודעות שלדעתו הושלמו, ויספק אותן ל RTCDATACHANNEL המקבל כמספר הודעות.
ניתן לשלוח הודעות קטנות מ- 16 קישיות ללא דאגה, מכיוון שכל סוכני המשתמש העיקריים מטפלים בהם באותה צורה. מעבר לזה, הדברים מסתבכים יותר.
דאגות עם הודעות גדולות
נכון לעכשיו, זה לא מעשי להשתמש ב- RTCDATACHANNEL להודעות גדולות מ- 64 KIB (16 KIB אם ברצונך לתמוך בחילופי נתונים חוצה דפדפנים). הבעיה נובעת מהעובדה ש- SCTP – הפרוטוקול המשמש לשליחה וקבלת נתונים על RTCDATACHANNEL – תוכנן במקור לשימוש כפרוטוקול איתות. היה צפוי שההודעות יהיו קטנות יחסית. תמיכה בהודעות גדולות יותר מ- MTU של שכבת הרשת נוספה כמעט כמחשבה שלאחר. תכונה זו מחייבת שלכל חלק מההודעה יש מספרי רצף רצופים, ולכן יש להעביר אותם בזה אחר זה, ללא נתונים אחרים שזורים ביניהם.
בסופו של דבר זה הפך לבעיה. עם הזמן, יישומים שונים (כולל אלה המיישמים WEBRTC) החלו להשתמש ב- SCTP כדי להעביר הודעות גדולות וגדולות יותר. בסופו של דבר התברר שכאשר ההודעות נעשות גדולות מדי, יתכן להעברת הודעה גדולה לחסום את כל העברות הנתונים האחרות בערוץ הנתונים הזה – כולל הודעות איתות קריטיות.
זה יהפוך לבעיה כאשר הדפדפנים תומכים כראוי בתקן הנוכחי לתמיכה בהודעות גדולות יותר-דגל סוף השיא (EOR) שמציין מתי ההודעה היא האחרונה בסדרה שיש להתייחס אליהם כאל עומס יחיד. זה מיושם ב- Firefox 57, אך עדיין לא מיושם ב- Chrome (ראה כרום באג 7774). עם תמיכה ב- EOR במקום, עומסי המשא RTCDATACHANNEL יכולים להיות גדולים בהרבה (רשמית עד 256 קיב, אך היישום של Firefox מכסה אותם בגיב 1 עצום). אפילו ב 256 קיב, זה מספיק גדול כדי לגרום לעיכובים בולטים בטיפול בתנועה דחופה. אם אתה הולך גדול עוד יותר, העיכובים יכולים להיות בלתי נסבלים אלא אם כן אתה בטוח בתנאים המבצעיים שלך.
על מנת לפתור בעיה זו, מערכת חדשה של מתזמנים זרם (בדרך כלל מכונה “מפרט SCTP NDATA”) תוכנן כדי לאפשר לשלב הודעות שנשלחו בזרמים שונים, כולל זרמים המשמשים ליישום ערוצי נתונים WebRTC. הצעה זו עדיין נמצאת בטופס טיוטת IETF, אך לאחר יישום, היא תאפשר לשלוח הודעות ללא מגבלות בגודל, מכיוון ששכבת SCTP תשזור באופן אוטומטי את תת-הבסיס הבסיסי כדי להבטיח שלנתוני כל ערוץ יש את ההזדמנות לעבור.
תמיכה בפיירפוקס ב- NDATA נמצאת בתהליך של יישום; ראה Bug Firefox 1381145 כדי לעקוב אחר כך שהוא זמין לשימוש כללי. צוות Chrome עוקב אחר יישום התמיכה ב- NDATA ב- Chrome Bug 5696.
הערה: חלק גדול מהמידע בסעיף זה מבוסס בחלקו על הפוסט בבלוג מפיל את מגבלות גודל ההודעה של Webrtc, שנכתבו על ידי Lennart Grahl. הוא נכנס לשם קצת יותר פירוט, אך ככל שהדפדפנים עודכנו מאז חלק מזה עשוי להיות לא מעודכן. בנוסף, ככל שיעבור הזמן, זה יהפוך ליותר, במיוחד ברגע שתמיכת EOR ו- NDATA ישולבו במלואם בדפדפנים הגדולים.
בִּטָחוֹן
כל הנתונים המועברים באמצעות WebRTC מוצפנים. במקרה של RTCDATACHANNEL, ההצפנה המשמשת היא אבטחת שכבת התחבורה של DATAGRAM (DTLS), המבוססת על אבטחת שכבת תחבורה (TLS). מכיוון ש- TLS משמש לאבטחת כל חיבור HTTPS, כל נתונים שתשלח בערוץ נתונים מאובטחים כמו כל נתונים אחרים שנשלחו או מקבלים על ידי דפדפן המשתמש.
באופן מהותי יותר, מכיוון ש- WebRTC הוא חיבור עמית לעמית בין שני סוכני משתמש, הנתונים לעולם לא עוברים דרך שרת האינטרנט או היישומים. זה מקטין את ההזדמנויות ליירט הנתונים.
מצא בעיית תוכן בדף זה?
- ערוך את הדף ב- GitHub.
- דווח על סוגיית התוכן.
- צפה במקור ב- GitHub.
דף זה שונה לאחרונה ב- 25 באפריל 2023 על ידי תורמי MDN.
האם WebRTC משתמש ב- SCTP?
Б эой сранице
Ы зé. С помדיר. Почем эо мого?
Эа сраница о бображае тех сах, кога воматеשיים си сисלוח рmе рגות р רבות ш רבות р р рוהים р рוהים которые нé. Сраница пересанет ообрוחים. До эого момента д.
Исочником запросов может сmжж вредоносfte по, подаееые моди базלוח нилm mчnзnзnчnчnчnчnчnчnчnчnчnчnчnчnчnчnчзדי ы з запросов. Еи ы иололalty ощий дדיר. O. Подробнרבה.
Проверка по сов может тelte пояяе, еи ы водите сדיר еами, или же водите запроы ченн часо.
תקשורת נתונים #
מה אני מקבל מ- webrtc’S תקשורת נתונים? הִיכים
WebRTC מספקת ערוצי נתונים לתקשורת נתונים. בין שני עמיתים תוכלו לפתוח 65,534 ערוצי נתונים. ערוץ נתונים מבוסס Datagram, ולכל אחד מהם יש הגדרות עמידות משלו. כברירת מחדל, כל ערוץ נתונים הבטיח משלוח שהוזמן. אם אתה מתקרב webrtc מרקע מדיה בערוצי נתונים עשויים להיראות מבזבזים. מדוע אני זקוק למערכת המשנה הזו כשיכולתי פשוט להשתמש ב- HTTP או ב- WebSockets? הכוח האמיתי עם ערוצי נתונים הוא שאתה יכול להגדיר אותם להתנהג כמו UDP עם משלוח לא מסודר/אבוד. זה הכרחי למצבי חביון נמוכים וביצועים גבוהים. אתה יכול למדוד את הלחץ האחורי ולהבטיח שאתה שולח רק כמו הרשת שלך תומכת.
איך זה עובד? הִיכים
WebRTC משתמש בפרוטוקול העברת בקרת הזרם (SCTP), המוגדר ב- RFC 4960. SCTP הוא פרוטוקול שכבת הובלה שנועד כחלופה ל- TCP או UDP. עבור WebRTC אנו משתמשים בו כפרוטוקול שכבת יישום המפעיל את חיבור ה- DTLS שלנו. SCTP נותן לך זרמים וניתן להגדיר כל זרם באופן עצמאי. ערוצי נתונים webrtc הם פשוט הפשטות דקות סביבם. ההגדרות סביב עמידות והזמנה פשוט מועברות היישר לסוכן SCTP. לערוצי נתונים יש כמה תכונות ש- SCTP יכול’לא אקספרס, כמו תוויות ערוץ. כדי לפתור כי WebRTC משתמש בפרוטוקול הקמת ערוץ הנתונים (DCEP) המוגדר ב- RFC 8832. DCEP מגדיר הודעה כדי לתקשר את תווית הערוץ והפרוטוקול.
DCEP #
ל- DCE . עבור כל ערוץ נתונים שנפתח, השלט מרחוק חייב להגיב עם 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_RELIATE
- Data_channel_reliable_unordered (0x80) – אין הודעות אבודות, אך הן עשויות להגיע ללא סדר.
- DATA_CHANNEL_PARTIAL_RELIABIC_REXMIT (0x01) – הודעות עשויות לאבד לאחר שניסו את הכמות המבוקשת של הפעמים, אך הן יגיעו בסדר.
- DATA_CHANNEL_PARTIAL_RELIABICE_REXMIT_UNORDERED (0x81) – הודעות עשויות לאבד לאחר שניסו את הכמות המבוקשת של הפעמים ועשויות להגיע מחוץ להזמנה.
- DATA_CHANNEL_PARTIAL_RELIABIT_TIMED (0x02) – הודעות עשויות ללכת לאיבוד אם הן לא’לא מגיע למשך הזמן המבוקש, אך הם יגיעו לפי הסדר.
- DATA_CHANNEL_PARTIAL_RELIABIC_TIMED_UNORDERED (0x82) – הודעות עשויות לאבד אם הן לא’T להגיע למשך הזמן המבוקש ועשוי להגיע לא מהוראה.
עדיפות #
העדיפות של ערוץ הנתונים. ערוצי נתונים בעלי עדיפות גבוהה יותר יתוכננו תחילה. הודעות משתמש גדולות בעלות עדיפות נמוכה לא יעכבו את שליחת הודעות המשתמש בעלות עדיפות גבוהה יותר.
פרמטר אמינות #
אם סוג ערוץ הנתונים הוא data_channel_partial_reliable, הסיומות מגדירות את ההתנהגות:
- Rexmit – מגדיר כמה פעמים השולח יסע את ההודעה לפני ויתיר.
- מתוזמן – מגדיר כמה זמן (בטרשת נפוצה) השולח יסע מחדש את ההודעה לפני יוותר.
תווית #
מחרוזת מקודדת UTF-8 המכילה את שם ערוץ הנתונים. מחרוזת זו עשויה להיות ריקה.
נוהל #
אם זהו מחרוזת ריקה, הפרוטוקול אינו מוגדר. אם מדובר במחרוזת לא ריקה, עליו לציין פרוטוקול הרשום ב- “רישום שם Subprotocol של Websocket”, מוגדר ב- 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 לא’יש מגבלות גודל כמו UDP. הודעת SCTP יחידה יכולה להיות מספר ג’יגה -בייט בגודל.
נתחים #
פרוטוקול ה- SCTP מורכב מנתחים. ישנם סוגים רבים של נתחים. נתחים אלה משמשים לכל התקשורת. נתוני משתמשים, אתחול חיבור, בקרת גודש ועוד נעשים באמצעות נתחים.
כל מנות SCTP מכילה רשימת נתחים. אז בחבילה אחת של UDP תוכלו לקבל נתחים מרובים הנושאים הודעות מזרמים שונים.
מספר רצף העברה מספר #
מספר רצף ההעברה (TSN) הוא מזהה ייחודי גלובלי עבור נתחי נתונים. נתח נתונים הוא מה שמביא את כל ההודעות שהמשתמש מבקש לשלוח. ה- TSN חשוב מכיוון שהוא מסייע למקלט לקבוע אם מנות אבודות או לא בסדר.
אם המקלט מבחין ב- TSN חסר, זה לא’לא למסור את הנתונים למשתמש עד להתגשם.
מזהה זרם #
לכל זרם יש מזהה ייחודי. כשאתה יוצר ערוץ נתונים עם מזהה מפורש, הוא למעשה מועבר ישר ל- SCTP כמזהה הזרם. אם אתה לא’T לעבור מזהה מזהה הזרם נבחר עבורך.
מזהה פרוטוקול עומס #
לכל נתח נתונים יש גם מזהה פרוטוקול עומס (PPID). זה משמש כדי לזהות באופן ייחודי איזה סוג נתונים מחליפים. ל- SCTP יש PPIDs רבים, אך WebRTC משתמש רק בחמשת הבאים:
- Webrtc dcep (50) – הודעות dcep.
- מחרוזת WebRTC (51) – הודעות מחרוזת Datachannel.
- Webrtc בינארי (53) – הודעות בינאריות של Datachannel.
- מחרוזת WebRTC ריקה (56) – הודעות מחרוזת Datachannel עם 0 אורך.
- Webrtc בינארי ריק (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 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| מזהה זרם | מספר רצף זרם | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| מזהה פרוטוקול עומס | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\ / / נתוני משתמש / \ \ \ \ \ \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
נתח הנתונים הוא כיצד מחליפים כל נתוני המשתמשים. כשאתה שולח משהו מעל ערוץ הנתונים, כך הוא מחליף.
UT מוגדר אם זו חבילה לא מסודרת. אנו יכולים להתעלם ממספר רצף הזרם.
B ו- E הם חתיכות ההתחלה והסיום. אם אתה רוצה לשלוח הודעה שהיא גדולה מדי עבור נתח נתונים אחד, היא צריכה להיות מפוצלת למספר נתחי נתונים שנשלחים בחבילות נפרדות. עם מספרי B ו- E Bit and Secence 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. מספר זה משמש כדי להחליט על הזמנת ההודעה של המסירה למקלט אם אתה מוגדר ל- 0. בדומה ל- TSN, למעט מספר רצף הזרם מוגדל רק עבור כל הודעה בכללותה ולא לכל נתח נתונים פרטני.
מזהה פרוטוקול עומס הוא סוג הנתונים הזורמים בזרם זה. עבור webrtc, זה הולך להיות dcep, מחרוזת או בינארית.
נתוני משתמש הם מה שאתה שולח. כל הנתונים שאתה שולח באמצעות ערוץ נתונים 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 מתחיל בתהליך יצירת אגודה.
תג יוזם משמש לייצור עוגיות. עוגיות משמשות לאדם-באמצע ולהגנת ההגנה על השירות. הם מתוארים ביתר פירוט בקטע המכונה הממלכתית.
אשראי חלון מקלט מפורסם משמש עבור SCTP’בקרת גודש. זה מתקשר עד כמה הקלט הקלט של חיץ גדול לאגודה זו.
מספר הזרמים היוצאים/נכנסים מודיע לשלט הרחוק של כמה זרמים סוכן זה תומך.
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 Block #1 התחל | GAP ACK Block #1 END | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / \ \ . \ / /+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| GAP ACK Block #N START | GAP ACK Block #N END | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| כפול TSN 1 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / \ \ . \ / /+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| כפול TSN X | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
נתח השק (הכרה סלקטיבית) הוא כיצד מקלט מודיע לשולח הוא קיבל חבילה. עד ששולח יקבל שק עבור TSN הוא יסדם מחדש את נתח הנתונים המדובר. שק עושה יותר מאשר רק עדכון ה- TSN.
TSN ACK מצטבר TSN הגבוה ביותר שהתקבל.
גודל מאגר מקלט אשראי מקלט מקלט מפורסם. המקלט רשאי לשנות זאת במהלך הפגישה אם זיכרון רב יותר יהיה זמין.
ACK חוסם TSNs שהתקבלו לאחר ה- TSN ACK המצטבר . זה משמש אם יש פער במנות שנמסרו. לתת’אומרים כי נתחי נתונים עם 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 tlv (אורך משתנה) / \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ inc.- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
נתח פעימות הלב משמש לטענת השלט עדיין מגיב. שימושי אם אתה אינו’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 | אורך | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / \ אפס או יותר שגיאה גורמת ל \ / / / / / /+-+-+-+ / \ \ \ \ \ יותר או יותר +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
נתח הפלה מכבה בפתאומיות את האגודה. משמש כאשר צד אחד נכנס למצב שגיאה. סיום חיננות שהחיבור משתמש בנתח הכיבוי.
כיבוי נתח #
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 | דגלי נתח | אורך | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\ / / אחד או יותר שגיאה גורמת / \ \ \ \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
נתח שגיאה משמש כדי להודיע לסוכן 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 והמנות האלה תקפות רק אם כולן מגיעות. נתונים אלה הם גם רגישים בזמן אמת, כך שאם הם מגיעים מאוחר’לא שימושי.
אם אתה מאבד 12 ו -13 אין סיבה לשלוח 14 ו -15 ! SCTP משתמש בנתח TSN קדימה כדי להשיג זאת. זה אומר למקלט ש- 14 ו -15 ארנעות’לא יימסר יותר.
TSN מצטבר חדש זהו ה- TSN החדש של החיבור. כל מנות לפני TSN זה לא ישמרו.
רצף זרם וזרם משמשים לקפיצת מספר רצף הזרם קדימה. עיין בחזרה לתקן הנתונים למשמעות שדה זה.
מכונת מצבים #
אלה חלקים מעניינים של מכונת SCTP State. Webrtc לא’לא השתמש בכל התכונות של מכונת SCTP State, כך שהכללנו את החלקים האלה. פשטנו גם כמה רכיבים כדי להפוך אותם למובנים בעצמם.
זרימת הקמת חיבור #
נתחי init ו- init ack משמשים להחלפת היכולות והתצורות של כל עמית. SCTP משתמש בעוגיה במהלך לחיצת היד כדי לאמת את העמיתים שהוא מתקשר איתו. זאת כדי להבטיח כי לחיצת היד לא תורט וכדי למנוע התקפות DOS.
נתח ה- init ack מכיל את העוגיה. לאחר מכן הוחזר העוגיה ליוצר שלה באמצעות הד העוגיות . אם אימות העוגיות מצליח, העוגיה ACK נשלחת ונתחי נתונים מוכנים להחליף.
זרימת התפרקות חיבור #
SCTP משתמש בנתח הכיבוי. כאשר סוכן יקבל נתח כיבוי הוא יחכה עד שהוא יקבל את ה- TSN המצטבר המבוקש . זה מאפשר למשתמש להבטיח שכל הנתונים נמסרים גם אם החיבור אובדן.
שמור על מנגנון חיית #
SCTP משתמש בבקשת פעימות הלב ובנתחי ACK פעימות לב כדי לשמור על החיבור בחיים. אלה נשלחים במרווח הניתן להגדרה. SCTP מבצעת גם גיב’לא הגיע.
נתח פעימות הלב מכיל גם ערך זמן. זה מאפשר לשתי אסוציאציות לחשב את זמן הטיול בין שני סוכנים.