{"id":11859,"date":"2025-04-12T03:04:24","date_gmt":"2025-04-11T18:04:24","guid":{"rendered":"https:\/\/chat-messenger.com\/?p=11859"},"modified":"2025-04-12T03:23:33","modified_gmt":"2025-04-11T18:23:33","slug":"webrtc-stun-turn-turns-sfu","status":"publish","type":"post","link":"https:\/\/chat-messenger.com\/de\/blog\/webrtc-betauben-drehen-dreht-sfu","title":{"rendered":"Eine ausf\u00fchrliche Erkl\u00e4rung und Anwendung von STUN\/TURN\/TURNS\/SFU in WebRTC"},"content":{"rendered":"<h2>Was ist WebRTC?<\/h2>\n\n\n\n<p>WebRTC (Web Real-Time Communication) ist eine offene Technologie, die Echtzeit-Sprach-, Video- und Datenkommunikation zwischen Browsern erm\u00f6glicht. Sie wird von verschiedenen Unternehmen, darunter Google, als Mechanismus standardisiert, der P2P-Kommunikation ausschlie\u00dflich \u00fcber JavaScript-APIs ohne zus\u00e4tzliche Plug-ins oder Software erm\u00f6glicht.<\/p>\n\n\n\n<p>WebRTC besteht aus drei Hauptkomponenten:<\/p>\n\n\n\n<ul><li><strong>getUserMedia<\/strong>: Eine API zum Erfassen von Audio und Video von Ger\u00e4ten wie Kameras und Mikrofonen.<\/li><li><strong>RTCPeerConnection<\/strong>: Eine zentrale API zum Herstellen der Kommunikation zwischen Peers und zum Austausch von Medien und Daten.<\/li><li><strong>RTCDataChannel<\/strong>: Ein Datenkanal, der zum Senden von Dateien, Chatten usw. verwendet werden kann.<\/li><\/ul>\n\n\n\n<p>Diese APIs erm\u00f6glichen die Entwicklung zahlreicher Echtzeitanwendungen wie Videoanrufe, Audiokonferenzen, Dateifreigabe usw. Bei der tats\u00e4chlichen Kommunikation gibt es jedoch Probleme mit NAT-Traversal und Firewalls. Daher ist es wichtig, NAT-Traversal-Technologien wie STUN\/TURN\/TURNS zu verstehen und zu implementieren.<\/p>\n\n\n\n<h2>Unterschiede und Rollen von STUN, TURN und TURNS<\/h2>\n\n\n\n<p>Um eine stabile Peer-to-Peer-Verbindung mit WebRTC zu erreichen, ist ein NAT-Traversal-Mechanismus unerl\u00e4sslich. Dieser Artikel erl\u00e4utert detailliert die technischen Unterschiede, Anwendungsszenarien sowie Vor- und Nachteile der repr\u00e4sentativen Technologien STUN, TURN und TURNS.<\/p>\n\n\n\n<p>STUN dient in erster Linie dazu, die externe Adresse in einer NAT-Umgebung zu ermitteln, w\u00e4hrend TURN als Relay-Server fungiert, wenn keine direkte Verbindung m\u00f6glich ist. TURNS hingegen verschl\u00fcsselt die TURN-Kommunikation mit TLS und verwendet dieselbe Portnummer 443 wie HTTPS. Dadurch ist die Kommunikation hinter strengen Firewalls, beispielsweise in Unternehmensnetzwerken, m\u00f6glich.<\/p>\n\n\n\n<p>Indem Sie die jeweiligen Eigenschaften verstehen und sie entsprechend nutzen, k\u00f6nnen Sie die Erfolgsquote und Qualit\u00e4t der WebRTC-Kommunikation steigern.<\/p>\n\n\n\n<h3>Rolle und Funktionen von STUN (UDP)<\/h3>\n\n\n\n<p>STUN (Session Traversal Utilities for NAT) ist ein Protokoll, das es Clients erm\u00f6glicht,<strong>Externe IP-Adresse und Port<\/strong>Es handelt sich um ein einfaches Protokoll, um die IP-Adresse eines PCs zu ermitteln. Befindet sich ein PC beispielsweise hinter einem NAT, kennt er seine eigene globale IP-Adresse nicht, kann aber durch eine Abfrage des STUN-Servers seine eigene IP-Adresse:Port von au\u00dfen ermitteln.<\/p>\n\n\n\n<p>Der STUN-Server fungiert als Spiegel und gibt die Quellinformationen der empfangenen Anfrage unver\u00e4ndert zur\u00fcck. Dadurch kann der Client seine eigene globale IP-Adresse und die vom NAT (Server Reflexive Candidate) zugewiesene Portnummer ermitteln.<\/p>\n\n\n\n<p>Die STUN-Kommunikation erfolgt \u00fcblicherweise \u00fcber UDP, der Standardport ist 3478 (UDP\/3478). Da eine einfache, einmalige Kommunikation \u00fcber UDP erforderlich ist, entsteht geringer Overhead, geringe Latenz und nahezu keine Serverlast. Daher wird in Umgebungen, in denen UDP-Kommunikation zul\u00e4ssig ist, zun\u00e4chst eine NAT-Traversierung mit STUN versucht.<\/p>\n\n\n\n<h4><strong>STUN-Nutzungsszenarien<\/strong><\/h4>\n\n\n\n<p>Es eignet sich f\u00fcr Umgebungen, in denen NAT-Traversal erforderlich ist, die UDP-Kommunikation selbst jedoch nicht blockiert ist, wie z. B. in Heimnetzwerken und Mobilfunkleitungen. Wenn STUN die externe IP-Adresse des jeweils anderen Clients erh\u00e4lt, k\u00f6nnen diese direkt (Peer-to-Peer) kommunizieren. Durch den direkten Kommunikationspfad treten geringere Verz\u00f6gerungen auf und die Qualit\u00e4t bleibt hoch. Da der Server lediglich den IP-Informationsaustausch \u00fcbernimmt, bleiben die Kosten zudem sehr gering. Beispielsweise reicht STUN bei Online-Spielen oder Videoanrufen aus, um eine Peer-to-Peer-Verbindung zu erm\u00f6glichen, wenn sich beide Ger\u00e4te in einem relativ offenen NAT befinden.<\/p>\n\n\n\n<h4>Einschr\u00e4nkungen und Nachteile von STUN<\/h4>\n\n\n\n<p>STUN dient lediglich dazu, die eigene externe Adresse zu ermitteln. Je nach NAT-Typ und Firewall-Einschr\u00e4nkungen ist eine Verbindung allein dadurch m\u00f6glicherweise nicht m\u00f6glich. Insbesondere in symmetrischen NAT- oder strengen Firewall-Umgebungen erreichen Pakete der Gegenstelle die durch STUN ermittelte Adresse m\u00f6glicherweise nicht, was eine Kommunikation unm\u00f6glich macht.<\/p>\n\n\n\n<p>Dar\u00fcber hinaus kann die UDP-Kommunikation selbst in Unternehmensnetzwerken blockiert sein, sodass STUN-Anfragen das Ger\u00e4t nicht erreichen. Kurz gesagt: STUN ist ein Mechanismus, um festzustellen, ob direkte Kommunikation m\u00f6glich ist, und funktioniert nicht in Umgebungen, in denen direkte Kommunikation physisch unm\u00f6glich ist. Aus diesem Grund wird STUN in ICE (siehe unten) verwendet, um Kandidaten f\u00fcr die erste Stufe zu ermitteln. Sollte STUN nicht ausreichen, wird auf TURN (siehe unten) zur\u00fcckgegriffen.<\/p>\n\n\n\n<h3>Rolle und Funktionen von TURN (UDP)<\/h3>\n\n\n\n<p>TURN (Traversal Using Relays around NAT) ist ein Protokoll, das als Relay fungiert, wenn eine direkte Kommunikation mit STUN nicht m\u00f6glich ist. Der TURN-Server fungiert als global erreichbarer Relay-Punkt zwischen Kommunikationspartner und Gegenstelle und leitet Pakete weiter. Der Client verbindet sich mit dem TURN-Server und erh\u00e4lt eine Relay-IP-Adresse und einen Port, den sogenannten Relay-Kandidaten. Anschlie\u00dfend erfolgt der Medien- und Datenaustausch mit der Gegenstelle \u00fcber diesen TURN-Server.<\/p>\n\n\n\n<p>TURN kommuniziert normalerweise ebenfalls \u00fcber UDP. Solange UDP verwendet wird, kann es Medienpakete \u00e4hnlich wie bei direkter Kommunikation weiterleiten. Standardm\u00e4\u00dfig wird das TURN-Protokoll auf Port 3478 (UDP) akzeptiert, genau wie STUN. Selbst wenn die UDP-Portnummer durch die Firewall-Richtlinie eingeschr\u00e4nkt ist, kann TURN auch auf einem zul\u00e4ssigen Port wie UDP\/443 ausgef\u00fchrt werden. Solange UDP verwendet wird, ist Weiterleiten mit h\u00f6herer Echtzeitleistung als TCP m\u00f6glich.<\/p>\n\n\n\n<h4>TURN-Nutzungsszenarien<\/h4>\n\n\n\n<p>TURN ist unerl\u00e4sslich, wenn keine direkte Verbindung hergestellt werden kann. Beispielsweise<span class=\"swl-marker mark_blue\">Dies ist der Fall, wenn sich eine oder beide Parteien hinter einer strengen Unternehmensfirewall befinden oder wenn beide Parteien \u00fcber symmetrische NATs verf\u00fcgen und das UDP-Hole-Punching fehlschl\u00e4gt.<\/span>In einer solchen Umgebung ist die Kommunikation ohne Weiterleitung \u00fcber einen TURN-Server nicht m\u00f6glich, sodass TURN als eine Art letzter Ausweg fungiert.<\/p>\n\n\n\n<p>WebRTC zielt darauf ab, dass alle Teilnehmer direkt kommunizieren k\u00f6nnen. Selbst wenn dies nicht m\u00f6glich ist, kann die Kommunikation durch einen R\u00fcckgriff auf TURN fortgesetzt werden. Im praktischen Einsatz besteht die allgemeine Strategie darin, zun\u00e4chst eine direkte Verbindung per STUN herzustellen und erst dann auf TURN-Relay umzuschalten, wenn dies fehlschl\u00e4gt. Wenn beispielsweise bei einer Videokonferenz \u00fcber ein internes Netzwerk die beiden Teilnehmer nicht direkt miteinander kommunizieren k\u00f6nnen, wird automatisch auf den TURN-Server umgeschaltet, sodass der Benutzer das Gespr\u00e4ch unmerklich fortsetzen kann.<\/p>\n\n\n\n<h4><strong>Vorteile von TURN<\/strong><\/h4>\n\n\n\n<p>Der gr\u00f6\u00dfte Vorteil ist die Zuverl\u00e4ssigkeit. Unabh\u00e4ngig von Ihrer NAT- oder Firewall-Umgebung ist Peer-to-Peer-Kommunikation m\u00f6glich, solange die Kommunikation vom Client zum TURN-Server funktioniert. Da TURN zudem eine protokolltechnische Erweiterung von STUN darstellt, kann eine einzelne Serverimplementierung (wie z. B. coturn, siehe unten) sowohl STUN- als auch TURN-Anfragen verarbeiten. Sobald eine Verbindung hergestellt ist, werden nachfolgende Medien als Stream weitergeleitet, sodass die Kommunikation aus Benutzersicht bis auf einige Verz\u00f6gerungen nahtlos verl\u00e4uft.<\/p>\n\n\n\n<h4><strong>Nachteile von TURN<\/strong><\/h4>\n\n\n\n<p> Die gr\u00f6\u00dften Nachteile sind Ressourcenverbrauch und Latenz. Bei TURN m\u00fcssen alle Audio- und Videodaten \u00fcber den Server laufen, was serverseitig enorme Bandbreite und Rechenleistung erfordert. Geht man beispielsweise davon aus, dass ein Einzelvideoanruf eine Bandbreite von 1 Mbit\/s in eine Richtung verbraucht, so ist nach einfachen Berechnungen bei 1.000 gleichzeitigen Nutzern eine Relay-Bandbreite von 1 Gbit\/s erforderlich. Dies f\u00fchrt zu hohen Betriebskosten eines TURN-Servers, und f\u00fcr umfangreiche Dienste m\u00fcssen mehrere TURN-Relay-Server vorbereitet und skaliert werden.<\/p>\n\n\n\n<p>Dar\u00fcber hinaus ist die Verz\u00f6gerung umso gr\u00f6\u00dfer, je l\u00e4nger der Kommunikationspfad ist, was zu einer Zeitverz\u00f6gerung und einer verringerten Video- und Audioqualit\u00e4t f\u00fchrt. Dar\u00fcber hinaus ist die Kommunikation \u00fcber TURN im Vergleich zur Peer-to-Peer-Kommunikation mit STUN nicht streng Peer-to-Peer und daher in Bezug auf die Vertraulichkeit etwas schlechter (obwohl TURN-Server normalerweise nur unverschl\u00fcsselte RTP\/Datagramme weiterleiten und die Inhalte nicht interpretieren).<\/p>\n\n\n\n<p>TURN sollte grunds\u00e4tzlich nur bei Bedarf eingesetzt werden. Tats\u00e4chlich k\u00f6nnen die meisten WebRTC-Kommunikationen direkt \u00fcber STUN abgewickelt werden. Google-Statistiken zeigen, dass insgesamt etwa 861 TP3T-Anrufe ohne Relays (Peer-to-Peer) aufgebaut werden. Nur die verbleibenden 141 TP3T-Anrufe ben\u00f6tigen TURN, f\u00fcr diese ist jedoch eine TURN-Infrastruktur unerl\u00e4sslich.<\/p>\n\n\n\n<h3>Rolle und Funktionen von TURNS (TLS \u00fcber TCP\/443)<\/h3>\n\n\n\n<p>TURNS ist eine Abk\u00fcrzung f\u00fcr \u201eTURN over TLS\u201c und ein Protokoll, das Relay-Kommunikation mithilfe des TURN-Protokolls mit TLS (Transport Layer Security) verschl\u00fcsselt.<span class=\"swl-marker mark_blue\">TURN-Kommunikation durch TLS (HTTPS) gesichert<\/span>und wird h\u00e4ufig auf TCP-Port 443 bedient.<span class=\"swl-marker mark_blue\">Port 443 ist dieselbe Portnummer wie HTTPS, sodass er problemlos Unternehmensfirewalls passieren und Proxys und Zensur leicht umgehen kann.<\/span>.<\/p>\n\n\n\n<p>Beispielsweise l\u00e4sst ein internes Firmennetzwerk m\u00f6glicherweise nur externe Kommunikation \u00fcber die Ports 80 und 443 zu. Aber selbst in diesem Fall besteht eine hohe Wahrscheinlichkeit, dass die Kommunikation durchkommt, wenn der TURN-Server TLS-Kommunikation \u00fcber Port 443 verwendet. Da die Kommunikation zudem mit TLS verschl\u00fcsselt ist, ist sie sicher und f\u00fcr Dritte nur schwer abzufangen.<\/p>\n\n\n\n<p>In WebRTC sind die Einstellungen<code>&quot;URLs&quot;: &quot;Turns:Turnsserver:443&quot;<\/code>Im URI-Schema:<code>dreht sich:<\/code>Sie k\u00f6nnen diesen TLS-verschl\u00fcsselten TURN-Server verwenden, indem Sie<\/p>\n\n\n\n<h4>Szenen, in denen TURNS verwendet wird<\/h4>\n\n\n\n<p>TURNS eignet sich f\u00fcr die WebRTC-Kommunikation in stark eingeschr\u00e4nkten Umgebungen wie Unternehmensnetzwerken, in denen alle anderen Kommunikationswege blockiert sind. Selbst in Umgebungen, in denen alle UDP- und allgemeinen TCP-Ports blockiert sind, gibt es viele Richtlinien, die die Kommunikation auf die gleiche Weise wie HTTPS zulassen. Daher ist TURN auf TLS-Port 443 praktisch nur ein letzter Ausweg.<\/p>\n\n\n\n<p>Es wird auch in Situationen verwendet, in denen bestimmte Ports in \u00f6ffentlichen WLANs geschlossen sind oder wenn auf der Clientseite nur TLS-Kommunikation m\u00f6glich ist.<span class=\"swl-marker mark_blue\">Zuerst UDP, wenn das nicht funktioniert, dann TCP, wenn das nicht funktioniert, dann TLS bis 443<\/span>\u201eEs handelt sich um die letzte Phase eines schrittweisen R\u00fcckzugs.\u201c<\/p>\n\n\n\n<h4>Vorteile von TURNS<\/h4>\n\n\n\n<p>Sein gr\u00f6\u00dfter Vorteil ist die hohe Firewall-Resistenz. TLS-verschl\u00fcsselte Kommunikation ist schwer von allgemeinem HTTPS zu unterscheiden und passiert daher eher strenge Filter. Insbesondere bei der Einf\u00fchrung eines Webkonferenzsystems in einem Unternehmen m\u00fcssen externe Verbindungen aus dem internen Netzwerk zugelassen werden. TLS-Kommunikation \u00fcber TCP\/443 wird jedoch von Sicherheitsrichtlinien eher akzeptiert. Da sie zudem verschl\u00fcsselt ist, ist die Vertraulichkeit der Kommunikation mit dem Relay-Server selbst gew\u00e4hrleistet (*Inhalte selbst, wie z. B. Videos, werden jedoch h\u00e4ufig bereits auf der WebRTC-Ebene verschl\u00fcsselt).<\/p>\n\n\n\n<h4>Nachteile von TURNS<\/h4>\n\n\n\n<p>Der gr\u00f6\u00dfte Nachteil ist die Leistungseinbu\u00dfe. Neben der Verz\u00f6gerung und Belastung von TURN selbst kommt noch der Overhead von TLS und TCP hinzu. TCP ist ein zuverl\u00e4ssiges Transportmittel und verf\u00fcgt \u00fcber einen Mechanismus zur erneuten \u00dcbertragung bei Paketverlust, ist jedoch nicht f\u00fcr Echtzeitmedien geeignet. Bei Verlusten k\u00f6nnen Video und Audio m\u00f6glicherweise nicht reibungslos wiedergegeben werden.<\/p>\n\n\n\n<p>Dar\u00fcber hinaus ist TCP aufgrund der Paketreihenfolge anf\u00e4llig f\u00fcr Head-of-Line-Blockierungen.<span class=\"swl-marker mark_blue\">Auch der Jitter (die Schwankung) nimmt im Vergleich zu UDP zu.<\/span>Dar\u00fcber hinaus belastet die TLS-Ver- und -Entschl\u00fcsselung die CPU zus\u00e4tzlich. Es wurde berichtet, dass dadurch eine zus\u00e4tzliche Verz\u00f6gerung von 50 ms oder mehr auftritt, die f\u00fcr die Benutzer sp\u00fcrbar ist. Insbesondere bei Videokonferenzen kann diese erh\u00f6hte Verz\u00f6gerung das Gespr\u00e4chstempo verlangsamen und zu sp\u00fcrbaren Zeitabweichungen f\u00fchren.<\/p>\n\n\n\n<p>Auf diese Weise kann TURNS qualitativ als Methode der \u201eletzten Instanz\u201c betrachtet werden, es ist jedoch auch eine zuverl\u00e4ssige Rettungsleine in Situationen, in denen es keine andere M\u00f6glichkeit gibt, als eine Kommunikation herzustellen.<\/p>\n\n\n\n<p>In den letzten Jahren wurde ein neuer Ansatz (TURN over QUIC) in Betracht gezogen, der auf UDP-Port 443 operiert und DTLS\/QUIC anstelle von TLS verwendet. Dieser befindet sich jedoch noch im Standardisierungsprozess und wird nicht allgemein verwendet.<\/p>\n\n\n\n<h2>Kommunikationsfluss, wenn UDP STUN nicht verf\u00fcgbar ist<\/h2>\n\n\n\n<p>Wir erkl\u00e4ren Schritt f\u00fcr Schritt, wie die WebRTC ICE-Verarbeitung abl\u00e4uft, wenn STUN \u00fcber UDP nicht verf\u00fcgbar ist. Nehmen wir eine Situation an, in der UDP vollst\u00e4ndig blockiert ist, beispielsweise in einem Unternehmensnetzwerk, und verfolgen, wie die ICE-Verhandlung zur\u00fcckf\u00e4llt.<\/p>\n\n\n\n<ol><li><strong>Der Client sendet eine externe IP-Anfrage (UDP\/3478) an den STUN-Server:<\/strong><br>WebRTC-Client (Browser)<code>iceServers<\/code>Eine Bindungsanforderung (Anforderung zur \u00dcberpr\u00fcfung der externen Adresse) wird \u00fcber UDP-Port 3478 an den angegebenen STUN-Server gesendet. Dies ist der erste Schritt beim Sammeln von ICE-Kandidaten. Bei Erfolg gibt der Server seine eigene globale IP-Adresse und Portnummer zur\u00fcck und wird der Kandidatenliste als Server Reflexive Candidate (srflx-Kandidat) hinzugef\u00fcgt.<\/li><li><strong>UDP-Pakete werden von der Firewall blockiert und es wird keine Antwort empfangen:<\/strong><br>In diesem Fall verhindern die Firewall-Einstellungen des Netzwerks, dass UDP-Kommunikation nach au\u00dfen gelangt. Daher erreichen Anfragen an den STUN-Server diesen nicht oder die Antwort den Client nicht. Der Client<strong>STUN-Antwort nicht empfangen<\/strong>Die externe IP-Adresse ist nicht bekannt. Der ICE-Agent wartet eine gewisse Zeit auf eine Antwort, tritt dann aber ein Timeout ein. Aus Benutzersicht wird die Verbindung noch verarbeitet, und es wird keine Fehlermeldung angezeigt. In Wirklichkeit<strong>Kandidaten konnten nicht gesammelt werden<\/strong>Dies geschieht derzeit.<\/li><li><strong>Die Pr\u00fcfung der direkten ICE-Verbindung schl\u00e4gt fehl, da keine Server Reflexive-Kandidaten verf\u00fcgbar sind:<\/strong><br>Normalerweise verf\u00fcgt der Client bei erfolgreichem STUN zus\u00e4tzlich zum Host-Kandidaten (Ihrer lokalen IP) \u00fcber einen Server-Reflexive-Kandidaten (Ihre globale IP) und pr\u00fcft die Verbindung, indem er diesen mit dem \u00e4hnlichen Kandidaten des Gegenparts kombiniert. Wenn jedoch aufgrund eines STUN-Fehlers kein globaler IP-Kandidat vorhanden ist,<strong>Kandidaten f\u00fcr direkte Peer-Verbindungen sind \u00e4u\u00dferst begrenzt<\/strong>Wenn beispielsweise beide Parteien nur \u00fcber private IP-Adressen verf\u00fcgen, k\u00f6nnen sie sich selbst bei Verbindungsversuchen nicht erreichen. ICE stellt daraufhin fest, dass eine direkte Kommunikation nicht m\u00f6glich ist. Ist der ICE-Server (TURN) nicht konfiguriert, wird das gesamte ICE zu diesem Zeitpunkt als Fehler behandelt und die WebRTC-Verbindung wird nicht hergestellt (die Entwicklerkonsole zeigt an:<code>ICE ist ausgefallen<\/code>und ... und<code>ICE-Verbindungsstatus: fehlgeschlagen<\/code>usw. werden angezeigt).<\/li><li><strong>Versuch, TURN-Relay-Kandidaten zu erhalten (\u00fcber TCP\/TLS\/443):<\/strong><br>Selbst wenn die direkte Kandidatenakquise durch STUN scheitert,<code>iceServers<\/code>Wenn ein TURN-Server angegeben ist in<strong>N\u00e4chste Schritte<\/strong>Da UDP in diesem Beispiel nicht verf\u00fcgbar ist, versucht der Client, \u00fcber TCP oder TLS eine Verbindung zum TURN-Server herzustellen (z. B.<code>Kurven:turn.example.com:443<\/code>(Falls konfiguriert, startet der TLS-Handshake.) Gl\u00fccklicherweise erlaubt die Firewall HTTPS-Kommunikation \u00fcber TCP 443, sodass die TURN-Verbindung \u00fcber TLS erfolgreich ist. Der Client sichert sich eine Relay-Adresse auf dem TURN-Server.<strong>Staffelkandidat<\/strong>Die Gegenseite erh\u00e4lt Relay-Kandidaten, virtuelle Kandidaten f\u00fcr die Kommunikation \u00fcber den TURN-Server. Gleichzeitig erh\u00e4lt die Gegenseite (die Remote-Seite) ebenfalls Relay-Kandidaten oder, sofern das Netzwerk einwandfrei funktioniert, direkte Kandidaten oder STUN-Kandidaten. Sobald mindestens eine Seite Relay-Kandidaten hat, kann die Gegenseite versuchen, eine Verbindung zu diesem TURN-Server herzustellen.<\/li><li><strong>ICE-Verbindungsaufbau (bzw. ggf. Abbruch) \u00fcber Relay:<\/strong><br>Sobald beide Peers \u00fcber verf\u00fcgbare Kandidaten verf\u00fcgen (in diesem Beispiel einen oder beide Relay-Kandidaten), nutzt ICE diese zur Verbindungspr\u00fcfung. Sobald die Kommunikation \u00fcber den TURN-Server mit dem Server hergestellt ist, kann sie weitergeleitet werden. Der Medienkanal wird somit ge\u00f6ffnet, auch wenn UDP nicht direkt zwischen den Peers \u00fcbertragen wird. Dies erm\u00f6glicht die Video- und Audiokommunikation zwischen den Benutzern. Nach dem Verbindungsaufbau entsteht zwar ein gewisser Overhead in Form von TCP \u00fcber TLS, die Kommunikation selbst ist jedoch m\u00f6glich. Tritt jedoch auch hier ein Fehler auf (z. B. wenn ein Unternehmensproxy Nicht-HTTP-TLS-Kommunikation erkennt und blockiert oder die Authentifizierung des TURN-Servers fehlschl\u00e4gt), schl\u00e4gt ICE leider fehl und die Verbindung wird abgebrochen. Die Anwendung muss diese Situation erkennen und den Benutzer benachrichtigen, dass die Verbindung nicht m\u00f6glich war usw.<\/li><\/ol>\n\n\n\n<p>Dies ist der Ablauf der ICE-Verhandlung in anspruchsvollen Umgebungen, in denen UDP nicht verwendet werden kann. Kurz gesagt: Kandidaten werden in der Reihenfolge \u201eHost \u2192 STUN \u2192 TURN\u201c ausprobiert. Wenn dies nicht funktioniert, schl\u00e4gt die Verbindung fehl. Entwickler sollten dieses Verhalten verstehen und zumindest einen TURN\/TURNS-Server in die ICE-Serverliste aufnehmen, damit auch im schlimmsten Fall eine Kommunikation m\u00f6glich ist. Bei Benutzeranfragen ist au\u00dferdem eine Fehlersuche erforderlich, z. B. das Ableiten eines Problems in der Netzwerkumgebung (z. B. UDP-Blockierung) aus Informationen wie \u201eICE fehlgeschlagen\u201c und die \u00dcberpr\u00fcfung fehlender TURN-Servereinstellungen.<\/p>\n\n\n\n<h2>Erstellen und Konfigurieren eines STUN\/TURN\/TURNS-Servers mit Coturn<\/h2>\n\n\n\n<p>Wenn Sie Ihren eigenen STUN\/TURN-Server einrichten m\u00f6chten, verwenden Sie die Open-Source-Implementierung. <strong><a href=\"https:\/\/github.com\/coturn\/coturn\" data-type=\"URL\" data-id=\"https:\/\/github.com\/coturn\/coturn\">Coturn<\/a><\/strong>Es ist \u00fcblich, coturn zu verwenden. coturn ist eine Serverimplementierung, die sowohl STUN als auch TURN unterst\u00fctzt und je nach Einstellungen auch TURNS (TLS) unterst\u00fctzen kann. Dieser Artikel erkl\u00e4rt die Installation von coturn auf einem Linux-Server und den Aufbau eines Servers, der STUN\/TURN\/TURNS unterst\u00fctzt, sowie die Konfigurationspunkte. Au\u00dferdem wird die typische Konfigurationsdatei (<code>turnserver.conf<\/code>) wird ebenfalls angezeigt.<\/p>\n\n\n\n<h3>Installation und Grundkonfiguration<\/h3>\n\n\n\n<h4><strong>Installieren<\/strong><\/h4>\n\n\n\n<p>F\u00fcr Ubuntu und Debian,<code>geeignet<\/code>Sie k\u00f6nnen das Coturn-Paket von installieren. Verwenden Sie beispielsweise den folgenden Befehl, um es zu installieren und den automatischen Start einzurichten.<\/p>\n\n\n\n<div class=\"hcb_wrap\" data-no-translation=\"\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code># Ubuntu\/Debian\u306e\u5834\u5408\nsudo apt-get install coturn\nsudo sed -i &#39;s\/#TURNSERVER_ENABLED=1\/TURNSERVER_ENABLED=1\/&#39; \/etc\/default\/coturn\nsudo systemctl enable --now coturn<\/code><\/pre><\/div>\n\n\n\n<p>Dadurch wird der Coturn-Server als Daemon gestartet. Standardm\u00e4\u00dfig wird die Konfigurationsdatei ausgef\u00fchrt <code>\/etc\/turnserver.conf<\/code> Dadurch wird die Datei geladen und Sie k\u00f6nnen sie bearbeiten (erstellen Sie vor der Bearbeitung sicherheitshalber eine Sicherungskopie).<\/p>\n\n\n\n<h4><strong>Grundeinstellungen<\/strong><\/h4>\n\n\n\n<p> <code>turnserver.conf<\/code>Stellen Sie nun die folgenden Elemente ein:<\/p>\n\n\n\n<ul><li class=\"\"><strong>Realm und Servername:<\/strong> Dies ist der Dom\u00e4nenname oder Identifikationsname des TURN-Servers. Er kann bei der Authentifizierung eines WebRTC-Clients verwendet werden, kann aber grunds\u00e4tzlich eine beliebige Zeichenfolge sein. Beispiel: <code>realm=example.com<\/code>,<code>Servername=example.com<\/code>.<\/li><li class=\"\"><strong>Abh\u00f6rport:<\/strong> Die UDP-Portnummer, auf der TURN und STUN \u00fcberwacht werden. Der Standardwert ist 3478.<code>Abh\u00f6ren-IP<\/code>Sie k\u00f6nnen auch eine Bindung an eine bestimmte Netzwerkkarte herstellen mit<code>0.0.0.0<\/code>Wir akzeptieren alle.<\/li><li class=\"\"><strong>TLS-Abh\u00f6rport:<\/strong> Dies ist die TCP-Portnummer, auf der TLS (TURNS) \u00fcberwacht wird. In der Regel wird 443 oder 5349 angegeben. Beispiel: <code>tls-listening-port=443<\/code>.<\/li><li class=\"\"><strong>externe IP:<\/strong> Befindet sich der Server selbst hinter einem NAT, geben Sie seine eigene globale IP an (so erkennt der Server die Zuordnung zwischen interner und externer IP). Dies ist nicht erforderlich, wenn der Server eine direkte globale IP hat.<\/li><li class=\"\"><strong>Authentifizierungsmethode:<\/strong> WebRTC verwendet langfristige Anmeldeinformationen f\u00fcr TURN, also<code>lt-cred-mech<\/code>(Long Term Credential Mechanism) ist aktiviert.<code>Benutzer=Benutzername:Passwort<\/code>oder legen Sie den Benutzernamen und das Passwort im Format<code>use-auth-secret<\/code>(Letzteres ist eine tokenbasierte Authentifizierung, die die Sicherheit wirksam verbessert, hier zeigen wir jedoch als Beispiel eine einfache statische Benutzerauthentifizierung.)<\/li><li class=\"\"><strong>Protokolleinstellungen:<\/strong> Zur Fehlerbehebung<code>Protokolldatei<\/code>Geben Sie den Pfad der Protokolldatei in<code>ausf\u00fchrlich<\/code>M\u00f6glicherweise m\u00f6chten Sie die detaillierte Protokollierung aktivieren.<\/li><\/ul>\n\n\n\n<h4><strong>Firewall-Einstellungen<\/strong><\/h4>\n\n\n\n<p>Auf der Serverseite f\u00fcr STUN\/TURN<strong>UDP-Port 3478<\/strong>und f\u00fcr TURN\/TLS<strong>TCP-Port 443<\/strong>(oder 5349) muss ge\u00f6ffnet sein. Dar\u00fcber hinaus verwendet das TURN-Relay standardm\u00e4\u00dfig den UDP-Portbereich 10000-20000. \u00d6ffnen Sie diesen Portbereich daher auch auf dem Server (falls erforderlich).<code>Min-Port<\/code>und<code>Max-Port<\/code>(Der Bereich kann ge\u00e4ndert werden mit<\/p>\n\n\n\n<p>Nachfolgend sehen Sie ein Beispiel, das die oben aufgef\u00fchrten Grundeinstellungen widerspiegelt.<code>\/etc\/turnserver.conf<\/code>Hier ist ein Beispiel:<\/p>\n\n\n\n<div class=\"hcb_wrap\" data-no-translation=\"\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code># TURN\u30b5\u30fc\u30d0\u306e\u540d\u79f0\u3068\u30ec\u30eb\u30e0\uff08\u30c9\u30e1\u30a4\u30f3\uff09\nrealm=example.com\nserver-name=example.com\n\n# \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u8a2d\u5b9a\nlistening-ip=0.0.0.0           # \u3059\u3079\u3066\u306eIP\u30a2\u30c9\u30ec\u30b9\u3067\u5f85\u53d7\nexternal-ip=203.0.113.10       # \u30b5\u30fc\u30d0\u306e\u30b0\u30ed\u30fc\u30d0\u30ebIP\uff08\u5fc5\u8981\u306a\u5834\u5408\uff09\n\n# \u30dd\u30fc\u30c8\u8a2d\u5b9a\nlistening-port=3478            # STUN\/TURN\u7528 UDP\u30dd\u30fc\u30c8\ntls-listening-port=443         # TLS\u7528 TCP\u30dd\u30fc\u30c8 (443\u756a)\nmin-port=10000                 # \u4e2d\u7d99\u306b\u4f7f\u7528\u3059\u308b\u30dd\u30fc\u30c8\u7bc4\u56f2\uff08\u4e0b\u9650\uff09\nmax-port=20000                 # \u4e2d\u7d99\u306b\u4f7f\u7528\u3059\u308b\u30dd\u30fc\u30c8\u7bc4\u56f2\uff08\u4e0a\u9650\uff09\n\n# \u30ed\u30b0\u8a2d\u5b9a\nlog-file=\/var\/log\/turnserver.log\nverbose                        # \u8a73\u7d30\u30ed\u30b0\u3092\u6709\u52b9\u5316\nfingerprint                    # \u30d1\u30b1\u30c3\u30c8\u306bfingerprint\u5c5e\u6027\u3092\u4ed8\u4e0e\n\n# \u8a8d\u8a3c\u8a2d\u5b9a\uff08\u9577\u671f\u8a8d\u8a3c\u65b9\u5f0f\uff09\nlt-cred-mech                   # \u9577\u671f\u8a8d\u8a3c\u3092\u6709\u52b9\u5316\nuser=webrtcuser:secretpass123  # \u30e6\u30fc\u30b6\u540d:\u30d1\u30b9\u30ef\u30fc\u30c9 \u3092\u8a2d\u5b9a\n\n# TLS\/SSL\u8a3c\u660e\u66f8\u306e\u6307\u5b9a\ncert=\/etc\/letsencrypt\/live\/example.com\/fullchain.pem   # \u30b5\u30fc\u30d0\u8a3c\u660e\u66f8\npkey=\/etc\/letsencrypt\/live\/example.com\/privkey.pem     # \u79d8\u5bc6\u9375<\/code><\/pre><\/div>\n\n\n\n<p>Im obigen Beispiel ist die Dom\u00e4ne<code>example.com<\/code>Wir erhalten ein Let\u2019s Encrypt-Zertifikat und verwenden es f\u00fcr TLS-Einstellungen.<code>lt-cred-mech<\/code>Aktivieren Sie die Langzeitauthentifizierung mit<code>Benutzer<\/code>Dadurch wird eine einfache Benutzername\/Passwort-Authentifizierung eingerichtet.<code>use-auth-secret<\/code>und<code>statisches Authentifizierungsgeheimnis<\/code>Die empfohlene Methode besteht darin, eine tokenbasierte Methode zum Ausstellen tempor\u00e4rer Anmeldeinformationen zu verwenden, aber darauf werden wir hier nicht n\u00e4her eingehen.<\/p>\n\n\n\n<h4><strong>Vorsichtsma\u00dfnahmen bei der Verwendung von TLS<\/strong><\/h4>\n\n\n\n<p>Wenn Sie coturn auf Port 443 ausf\u00fchren, m\u00fcssen Sie in einer Linux-Umgebung auf die Portberechtigungen achten. Ports unter 1024 werden als privilegierte Ports bezeichnet und k\u00f6nnen normalerweise nicht ohne Root-Rechte ge\u00f6ffnet werden. Das Ubuntu-Paket coturn verwendet standardm\u00e4\u00dfig<code>Turnserver<\/code>Da es von einem Benutzer ausgef\u00fchrt wird, kann es nicht so wie es ist an Port 443 gebunden werden.<code>\/etc\/default\/coturn<\/code>\u00c4ndern Sie den laufenden Benutzer in root, oder<code>setcap<\/code>Mit dem Befehl<code>Turnserver<\/code>zur ausf\u00fchrbaren Datei<code>cap_net_bind_service<\/code>Es gibt eine M\u00f6glichkeit, Berechtigungen zu erteilen. Im letzteren Fall beispielsweise<code>sudo setcap cap_net_bind_service=+ep \/usr\/bin\/turnserver<\/code>Mit diesem Befehl k\u00f6nnen auch Nicht-Root-Benutzer Ports mit niedriger Nummer binden. Geben Sie au\u00dferdem den korrekten Pfad zur Zertifikatsdatei (cert\/pkey) an und legen Sie die Dateiberechtigungen so fest, dass der Coturn-Benutzer sie lesen kann. Nach der \u00c4nderung der Einstellungen<code>sudo systemctl restart coturn<\/code>Starten Sie den Dienst neu und \u00fcberpr\u00fcfen Sie die Protokolle auf Fehler.<\/p>\n\n\n\n<h4><strong>Funktionspr\u00fcfung<\/strong><\/h4>\n\n\n\n<p>Nachdem wir den Coturn-Server gestartet haben, testen wir ihn mit einem STUN-Client, um seine Funktion zu \u00fcberpr\u00fcfen, und versuchen auch, von der WebRTC-App im Browser aus eine Verbindung zu ICE herzustellen.<code>Stunclient<\/code>Befehl(<code>apt-get installiere Stun-Client<\/code>(Verf\u00fcgbar f\u00fcr die Installation unter<code>stunclient &lt;Server-IP&gt; 3478<\/code>Sie k\u00f6nnen versuchen, Ihre externe IP-Adresse zu erhalten, indem Sie Folgendes ausf\u00fchren. Au\u00dferdem werden in Ihrem Browser die ICE-Kandidaten im Protokoll der Entwicklertools aufgelistet, sodass<code>srflx<\/code>(Server Reflexive) Kandidaten und<code>Relais<\/code>Pr\u00fcfen Sie, ob Sie einen Kandidaten finden. Falls nicht, versuchen Sie die folgenden Punkte zur Fehlerbehebung:<\/p>\n\n\n\n<ul><li class=\"\">Sind die erforderlichen Ports in den Firewall-Einstellungen des Servers ge\u00f6ffnet (iptables oder Cloud-Sicherheitsgruppen)?<\/li><li class=\"\">Sind in den clientseitigen ICE-Servereinstellungen (siehe unten) die richtigen URI-, Port- und Authentifizierungsinformationen festgelegt?<\/li><li class=\"\"><code>turnserver.conf<\/code>von<code>Reich<\/code>Stellen Sie sicher, dass die Einstellungen mit der Client-Authentifizierung \u00fcbereinstimmen. (Dies ist in der Browserversion von WebRTC normalerweise kein Problem, da der Realm automatisch zugewiesen wird. Seien Sie jedoch vorsichtig, wenn Sie eine benutzerdefinierte Implementierung haben.)<\/li><li class=\"\">Coturn-Protokoll (<code>\/var\/log\/turnserver.log<\/code>) und pr\u00fcfen Sie, ob ein Authentifizierungsfehler vorliegt (<code>FALSCHE BENUTZER<\/code>Wenn ein Fehler wie der oben genannte auftritt, stimmen Benutzername und Passwort nicht \u00fcberein.<\/li><\/ul>\n\n\n\n<p>Mit den oben genannten Einstellungen verf\u00fcgen Sie \u00fcber einen eigenen STUN\/TURN\/TURNS-Server, der l\u00e4uft und WebRTC-Verbindungen in einer Vielzahl von Netzwerkumgebungen unterst\u00fctzen kann.<\/p>\n\n\n\n<h2>Beispiel f\u00fcr ICE-Servereinstellungen f\u00fcr WebRTC-Client (JavaScript)<\/h2>\n\n\n\n<p>Um den STUN\/TURN-Server, den wir gerade auf der WebRTC-Anwendung (Browser) erstellt haben, tats\u00e4chlich zu verwenden,<strong>ICE-Servereinstellungen<\/strong>In der WebRTC-API von JavaScript<code>RTCPeerConnection<\/code>Sie k\u00f6nnen beim Generieren einer eine Liste von STUN\/TURN-Servern angeben. Im Folgenden zeigen wir ein konkretes Codebeispiel, das alle STUN\/TURN\/TURNS-Server angibt und deren Bedeutung erkl\u00e4rt.<\/p>\n\n\n\n<p>Erstellen Sie zun\u00e4chst ein Konfigurationsobjekt f\u00fcr den ICE-Server. Geben Sie den Dom\u00e4nennamen Ihres Servers ein.<code>turn.example.com<\/code>(Zutreffendes ersetzen). STUN erfordert keine Authentifizierung, daher wird nur die URI angegeben. TURN\/TURNS erfordert eine Authentifizierung, daher werden auch Benutzername und Passwort angegeben.<\/p>\n\n\n\n<div class=\"hcb_wrap\" data-no-translation=\"\"><pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>const iceConfig = {\n  iceServers: [\n    \/\/ 1. STUN\u30b5\u30fc\u30d0\uff08UDP\/3478\uff09\n    { urls: &#39;stun:turn.example.com:3478&#39; },\n    \/\/ 2. TURN\u30b5\u30fc\u30d0\uff08UDP\/443\u7d4c\u7531\uff09\n    { urls: &#39;turn:turn.example.com:443?transport=udp&#39;, username: &#39;webrtcuser&#39;, credential: &#39;secretpass123&#39; },\n    \/\/ 3. TURN\u30b5\u30fc\u30d0\uff08TCP\/443 + TLS = TURNS\uff09\n    { urls: &#39;turns:turn.example.com:443&#39;, username: &#39;webrtcuser&#39;, credential: &#39;secretpass123&#39; }\n  ]\n};\nconst pc = new RTCPeerConnection(iceConfig);<\/code><\/pre><\/div>\n\n\n\n<p>Obenstehendes<code>iceServers<\/code>Das Array hat drei Eintr\u00e4ge.<\/p>\n\n\n\n<ol><li class=\"\"><strong>BET\u00c4UBEN:<\/strong> <code>stun:turn.example.com:3478<\/code><br>Gibt die Adresse Ihres eigenen STUN-Servers an (wenn der Port weggelassen wird, wird 3478 verwendet). STUN wird verwendet, um NAT-Traversal zu bestimmen und Kandidaten zu erhalten. Der Browser fragt diesen Server zun\u00e4chst per UDP ab, um serverreflexive Kandidaten zu erhalten.<\/li><li class=\"\"><strong>DREHEN (UDP):<\/strong> <code>drehen:turn.example.com:443?transport=udp<\/code><br>Erstellen Sie Ihren eigenen TURN-Server<strong>UDP-Port 443<\/strong>Dies ist die zu verwendende Einstellung. Der Benutzername, der zuvor in coturn als Authentifizierungsinformation festgelegt wurde<code>webrtcuser<\/code>und Passwort<code>secretpass123<\/code>Der Abfrageparameter ist angegeben.<code>?transport=udp<\/code>(Wenn nichts anderes angegeben ist, versucht der Browser zuerst UDP und, wenn dies fehlschl\u00e4gt, auch TCP.) Mit dieser Einstellung k\u00f6nnen Sie einen Kandidaten f\u00fcr das TURN-Relay auf UDP-Port 443 erhalten, selbst wenn eine direkte Verbindung mit normalem STUN fehlschl\u00e4gt.<\/li><li class=\"\"><strong>TURN (TLS\/TCP):<\/strong> <code>Kurven:turn.example.com:443<\/code><br><strong>TURN mit TLS<\/strong>Dies ist die Einstellung f\u00fcr den TURNS-Server. Benutzername und Passwort werden hier ebenfalls angegeben. Der Browser stellt eine TLS-Verbindung zu diesem Eintrag \u00fcber TCP-Port 443 her, um einen TURN-Relay-Kandidaten zu erhalten. Dies ist der Relay-Kandidat der letzten Instanz, und es besteht die M\u00f6glichkeit, eine Kommunikation aufzubauen, selbst wenn eine Kommunikation \u00fcber UDP \u00fcberhaupt nicht m\u00f6glich ist.<\/li><\/ol>\n\n\n\n<p><code>RTCPeerConnection<\/code>Wenn der ICE-Agent den ICE-Server generiert, versucht er, der Reihe nach eine Verbindung zu den angegebenen ICE-Servern herzustellen und Kandidaten zu sammeln. Der ICE-Agent ermittelt zun\u00e4chst STUN-Kandidaten (srflx) und anschlie\u00dfend parallel dazu TURN-Kandidaten (Relay). Der ICE-Algorithmus kombiniert diese Kandidaten, f\u00fchrt eine Verbindungspr\u00fcfung durch und w\u00e4hlt die optimale Route. Entwickler m\u00fcssen sich nicht um weitere Verfahren k\u00fcmmern.<\/p>\n\n\n\n<p><strong>Punkt:<\/strong> Wie oben erw\u00e4hnt<strong>Bereiten Sie mehrere Kandidaten vor<\/strong>ist wichtig. Zum Beispiel<code>bet\u00e4uben:<\/code>Wenn Sie nur TURN (UDP) angeben, werden in einer Umgebung, in der UDP blockiert ist, keine Kandidaten gefunden, und die Verbindung schl\u00e4gt fehl. Wenn Sie nur TURN (UDP) angeben, schl\u00e4gt die Verbindung in einer Umgebung fehl, in der nur TCP zul\u00e4ssig ist. Daher, wenn m\u00f6glich,<code>drehen:<\/code>und<code>dreht sich:<\/code>Durch die Einbindung beider in den ICE-Server wird Redundanz erreicht, sodass in jeder Umgebung mindestens ein g\u00fcltiger Kandidat gefunden werden kann (der TURN-Server muss nat\u00fcrlich sowohl UDP als auch TCP\/TLS unterst\u00fctzen). Der Client (Browser) w\u00e4hlt automatisch einen verf\u00fcgbaren Pfad aus, sodass die Reihenfolge der Liste kein gro\u00dfes Problem darstellt. Wenn ich sagen m\u00fcsste:<code>Eistransportpolitik<\/code>von<code>Relais<\/code>Sofern Sie dies nicht angeben, priorisiert der Browser direkte Verbindungen. Durch die Eingabe eines STUN-Eintrags k\u00f6nnen Sie die unn\u00f6tige Nutzung des TURN-Servers vermeiden. Auch wenn irrelevante Server (nicht vorhandene Adressen usw.) in der ICE-Serverliste eingetragen sind, kann es aufgrund von Wartezeiten zu Verz\u00f6gerungen kommen. Tragen Sie daher am besten nur Server ein, die definitiv verf\u00fcgbar sind.<\/p>\n\n\n\n<p>Lassen Sie uns abschlie\u00dfend die WebRTC-Anwendung mit dieser Einstellung ausf\u00fchren und den Verbindungsstatus \u00fcberpr\u00fcfen.<code>peerConnection.getStats()<\/code>oder<code>chrome:\/\/webrtc-internals<\/code>Sie k\u00f6nnen den ICE-Kandidaten und den Verbindungsstatus mit (Chrome) \u00fcberpr\u00fcfen. Wenn alles wie erwartet funktioniert, sollte in einer Umgebung mit verf\u00fcgbarem UDP automatisch auf eine direkte (P2P-)Verbindung zur\u00fcckgegriffen werden, und in einer Umgebung, in der dies schwierig ist, auf eine Verbindung \u00fcber TURN\/TLS.<\/p>\n\n\n\n<h2>Unterschied zwischen SFU und TURN<\/h2>\n\n\n\n<p>WebRTC-Relays lassen sich grob in \u201eTURN\u201c und \u201eSFU\u201c unterteilen. Ihre Rollen, Konfigurationen und Anwendungen unterscheiden sich jedoch erheblich. Hier fassen wir die technischen Unterschiede zusammen.<\/p>\n\n\n\n<h3>TURN: Relay als Alternative zu Peer-to-Peer<\/h3>\n\n\n\n<p>TURN (Traversal Using Relays around NAT) ist ein zus\u00e4tzlicher Relay-Server, der in Umgebungen eingesetzt wird, in denen WebRTC-P2P-Kommunikation nicht m\u00f6glich ist. Der TURN-Server fungiert zwischen Peers und leitet Pakete weiter, wenn STUN aufgrund von NAT oder Firewalls nicht funktioniert. Da jeder Peer einen Stream an jeden Kommunikationspartner einzeln sendet, ist die Konfiguration netzartig, und TURN fungiert als \u201ePinch Hitter\u201c.<\/p>\n\n\n\n<ul><li><strong>Zusammensetzung<\/strong>: Jeder Benutzer \u00fcbertr\u00e4gt an jeden anderen Benutzer \u00fcber ein Relais (effektiv ein Mesh)<\/li><li><strong>Skalierbarkeit<\/strong>: Niedrig (je mehr Personen, desto h\u00f6her die Belastung)<\/li><li><strong>Sendeinhalte<\/strong>: Nur einfache Paket\u00fcbertragung, keine Medienanalyse oder -optimierung<\/li><\/ul>\n\n\n\n<h3>SFU: Effizientes Relay f\u00fcr Mehrparteiengespr\u00e4che<\/h3>\n\n\n\n<p>SFU (Selective Forwarding Unit) ist ein intelligenter Relay-Server, der in Webkonferenzen mit mehreren Teilnehmern verwendet wird.<span class=\"swl-marker mark_blue\">Jeder Client sendet einen Stream an die SFU, die ihn selektiv an andere Teilnehmer weiterleitet.<\/span>Dar\u00fcber hinaus f\u00fchrt es Prozesse wie Sprechererkennung, Bildqualit\u00e4tsanpassung und Latenzoptimierung durch und erm\u00f6glicht so skalierbares, leistungsstarkes Broadcasting.<\/p>\n\n\n\n<ul><li><strong>Zusammensetzung<\/strong>: Sterntyp, bei dem jeder Client mit einer SFU verbunden ist<\/li><li><strong>Skalierbarkeit<\/strong>: Teuer (nur eine \u00dcbertragung, auch wenn die Personenzahl steigt)<\/li><li><strong>Sendeinhalte<\/strong>: Steuerung des \u00dcbertragungsziels und Medienoptimierung sind m\u00f6glich<\/li><\/ul>\n\n\n\n<h3>Vergleichstabelle zwischen TURN und SFU<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><th>Merkmale<\/th><th>DREHEN<\/th><th>SFU<\/th><\/tr><tr><td>Zweck<\/td><td>Alternativen, wenn NAT-Traversal nicht m\u00f6glich ist<\/td><td>Echtzeitkommunikation zwischen vielen Menschen<\/td><\/tr><tr><td>Kommunikationskonfiguration<\/td><td>Mesh (untereinander \u00fcbertragen)<\/td><td>Sterntyp (eine \u00dcbertragung)<\/td><\/tr><tr><td>Relaisfunktion<\/td><td>Einfaches Relais (transparent)<\/td><td>Selektive Weiterleitung und Optimierung m\u00f6glich<\/td><\/tr><tr><td>Skalierbarkeit<\/td><td>niedrig<\/td><td>teuer<\/td><\/tr><tr><td>Mediensteuerung<\/td><td>keiner<\/td><td>Ja (z. B. Sprechererkennung, Aufl\u00f6sungsanpassung)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>TURN ist lediglich ein letzter Ausweg, wenn keine P2P-Kommunikation m\u00f6glich ist, und ist ein Relay, das das P2P-Netz erg\u00e4nzt.<span class=\"swl-marker mark_blue\">SFU ist eine Relay-Architektur, die von Anfang an auf Effizienz bei Mehrparteiengespr\u00e4chen ausgelegt ist.<\/span>Da die beiden grunds\u00e4tzlich unterschiedliche Rollen haben, ist es wichtig, sie beim Entwurf nicht zu verwechseln.<\/p>\n\n\n\n<h2>Zusammenfassung<\/h2>\n\n\n\n<p>Dieser Artikel bietet WebRTC-Benutzern mit mittleren bis fortgeschrittenen Kenntnissen eine detaillierte Erkl\u00e4rung der technischen Unterschiede zwischen STUN, TURN und TURNS sowie wann sie verwendet werden, wie man mit Coturn und einigen Codebeispielen einen Server erstellt und wie sich ICE in rauen Netzwerkumgebungen verh\u00e4lt.<\/p>\n\n\n\n<p><strong>BET\u00c4UBEN<\/strong>Es ist leichtgewichtig und erm\u00f6glicht die direkte Kommunikation in NAT-Umgebungen.<strong>DREHEN<\/strong>bietet eine Rettungsleine f\u00fcr die Kommunikation in schwierigen Situationen; und<strong>Kurven<\/strong>Durch die Kombination dieser wird es m\u00f6glich, WebRTC auch in speziellen Umgebungen wie beispielsweise innerhalb eines Unternehmens einzusetzen.<\/p>\n\n\n\n<p>Jede dieser Optionen hat ihre Vor- und Nachteile. Idealerweise sollten Sie daher, wann immer m\u00f6glich, eine direkte Verbindung mit STUN herstellen und TURN-Relay nur verwenden, wenn es unbedingt n\u00f6tig ist. Bei der Entwicklung von WebRTC-Anwendungen k\u00f6nnen Sie durch die hier vorgestellte Vorbereitung mehrerer Routen in den ICE-Servereinstellungen und die ordnungsgem\u00e4\u00dfe Konfiguration und Ausf\u00fchrung von Coturn auf der Serverseite stabile Echtzeitkommunikation in verschiedenen Netzwerkumgebungen gew\u00e4hrleisten.<\/p>\n\n\n\n<p>WebRTC ist ein komplexes Feld, das Browser-APIs und Netzwerktechnologien kombiniert. Um jedoch zuverl\u00e4ssige Anwendungen zu erstellen, ist es wichtig zu verstehen, wie STUN\/TURN und ICE funktionieren.<\/p>\n\n\n\n<p>Wir hoffen, dass Sie die Informationen in diesem Artikel nutzen, um die NAT-Traversal-Herausforderung in Ihren eigenen Produkten zu meistern. So k\u00f6nnen Ihre Benutzer dank der intelligenten Verbindungsverarbeitung im Hintergrund nahtlos kommunizieren, ohne es zu merken.<\/p>","protected":false},"excerpt":{"rendered":"<p>WebRTC\u3068\u306f WebRTC\uff08Web Real-Time Communication\uff09\u306f\u3001\u30d6\u30e9\u30a6\u30b6\u540c\u58eb\u3067\u30ea\u30a2 [&hellip;]<\/p>","protected":false},"author":1,"featured_media":11871,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"swell_btn_cv_data":""},"categories":[25,9,33],"tags":[],"_links":{"self":[{"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/posts\/11859"}],"collection":[{"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/comments?post=11859"}],"version-history":[{"count":8,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/posts\/11859\/revisions"}],"predecessor-version":[{"id":11868,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/posts\/11859\/revisions\/11868"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/media\/11871"}],"wp:attachment":[{"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/media?parent=11859"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/categories?post=11859"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/tags?post=11859"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}