2014-05-17 5 views
12

La mia conoscenza del server STUN per webrtc è che quando i client si trovano dietro il NAT (nella maggior parte dei casi, se non tutti), il server STUN aiuterà i client webrtc a identificare i loro indirizzi e porte. E ho anche letto alcuni articoli che dicono che un server di segnalazione è necessario per i client webrtc. Il server di segnalazione potrebbe essere un server web, socket.io, o anche inviare via email un url. La mia prima domanda sarebbe: il server STUN è il server di segnalazione?Il server STUN è assolutamente necessario per webrtc quando ho un server di segnalazione basato su socket.io?

Attualmente ho creato un servizio socket.io molto semplice che trasmette le descrizioni delle sessioni del client a tutti gli altri client. Quindi credo che il server basato su socket.io dovrebbe avere una conoscenza sufficiente degli indirizzi dei client e delle informazioni sulle porte. Se questo è il caso, perché ci preoccupiamo di avere un altro server STUN?

risposta

21

Il server STUN è NON il server di segnalazione.

Lo scopo del server di segnalazione è di passare le informazioni tra i peer all'avvio della sessione (come possono inviare un'offerta senza sapere a chi inviare?). Queste informazioni includono gli SDP creati sulle offerte e le risposte e anche eventuali candidati Ice creati da una delle parti.

Il motivo per cui si dispone di un server STUN è che i due peer possano inviare reciprocamente i contenuti multimediali. Gli stream multimediali non colpiranno il tuo server di segnalazione, ma invece andranno direttamente all'altro interlocutore (la definizione di una connessione peer-to-peer), l'eccezione sarebbe quando si utilizza un server TURN.

I supporti non possono attraversare magicamente un NAT o un firewall perché le due parti non hanno accesso diretto l'una all'altra (come farebbero se si trovassero sulla stessa LAN).

Nel server STUN breve che serve la grande maggioranza del tempo in cui le due parti non sono sulla stessa rete (per ottenere i candidati di connessione validi per il peer-to-peer media streaming) e un server di segnalazione è SEMPRE necessario (sia che si trovino su reti diverse o meno) in modo che la negoziazione e la connessione si accumulino. Good explanation of the connection and streaming process

+0

Grazie a @bwtrent per la risposta molto chiara e informativa. Quindi quando viene il server STUN a giocare? Solo all'inizio della connessione peer o tutto il tempo durante la connessione? Se la risposta è solo all'inizio della connessione? Perché non permettere al server di segnalazione di fare ciò che il server STUN dovrebbe fare? Perché penso che il server di segnalazione dovrebbe essere sufficientemente informato sulle informazioni NAT dei peer per poter parlare con ciascun peer. Ho sottovalutato la complessità del server STUN? –

+1

@ElgsQianChen Deve essere un server STUN. Il server di segnalazione e il server STUN potrebbero trovarsi nella stessa posizione fisica/stessa casella fisica/FQDN ma la negoziazione NAT deve essere eseguita con STUN (o TURN quando è in gioco un NAT simmetrico). Questo è in accordo con la specifica/movimento WebRTC/Qualunque cosa venga chiamata ora. –

+0

Come menzionato @BenjaminTrent, STUN ei server di segnalazione possono essere entrambi sulla stessa macchina fisica IFF è pubblica per entrambi i peer. La parte server di segnalazione entra in gioco appena prima che i due peer si impegnino in una connessione per scambiare informazioni. D'altra parte, il ruolo di STUN (o TURN) viene prima, ed è quello di informare/aggiornare ogni peer come può essere raggiunto. Queste informazioni vengono quindi utilizzate per stabilire la connessione nella fase di segnalazione. Questo è il motivo per cui lo STUN dovrebbe essere pubblico per entrambi i pari. – karimyafi

6

STUN viene utilizzato per implementare il protocollo ICE, che tenta di trovare un percorso di rete funzionante tra i due client. ICE utilizzerà anche i server di inoltro TURN (se configurato in RTCPeerConnection) per i casi in cui i due client (a causa delle restrizioni NAT/Firewall) non possono effettuare una connessione peer-to-peer diretta.

I server STUN sono utilizzati per identificare l'indirizzo esterno utilizzato dal computer su Internet (l'indirizzo outside-the-NAT) e per tentare di impostare una mappatura delle porte utilizzabile dal peer (se NAT non è " simmetrico "): contattando il server STUN verrà indicato l'IP e la porta esterni da provare in ICE. Questi sono i candidati ICE inclusi nell'SDP o nei messaggi dell'ICE-trickle.

Per una connettività quasi garantita, un server dovrebbe avere server TURN (preferibilmente supporto UDP e TCP TURN, sebbene UDP sia di gran lunga preferito). Si noti che a differenza di STUN, TURN può utilizzare una larghezza di banda apprezzabile, e quindi può costare denaro per l'hosting. Fortunatamente, la maggior parte delle connessioni ha esito positivo senza la necessità di utilizzare un server TURN (ovvero funzionano peer-to-peer)

+0

Grazie a @jesup. Quindi, tecnicamente, è possibile utilizzare il server di segnalazione per fare tutto ciò che il server STUN dovrebbe fare? Se l'unica attività del server STUN è quella di dire ai client dietro il NAT quali IP e porta pubblici hanno, perché non lasciare che sia il server di segnalazione a farlo? Sai, è meglio per me evitare il server STUN come dipendenza se potessi farlo con il mio server di segnalazione basato su socket.io. –

+2

Lo stesso server (FQDN/IP) può essere sia un server STUN che un server di segnalazione, ma sono funzioni diverse. ICE elabora l'elenco dei server STUN/TURN forniti. Nota che ogni canale usato per RTP/RTCP/datachannel ottiene un diverso mapping di porte (sebbene rtcp-mux combini le porte RTP e RTCP e BUNDLE (quando implementato) metterà tutti gli stream su una porta, ma non è ancora lo stesso normalmente porta utilizzata per la segnalazione (e la segnalazione di solito è TCP, non UDP in ogni caso, perché può essere UDP ala SIP - ma l'accesso casuale alla porta UDP non è normalmente garantito nei browser). – jesup

1

NAT (Network Address Transformation) è utilizzato per tradurre "IP privato", valido solo in LAN in "Pubblico" IP "valido nella WAN. Il problema è che" IP pubblico "è visibile solo dall'esterno, quindi abbiamo bisogno del server STUN o TURN per inviare" IP pubblico "all'utente. Questo processo consente a un peer WebRTC di ottenere un indirizzo pubblicamente accessibile e quindi trasferirlo a un altro peer tramite un meccanismo di segnalazione

Un server STUN viene utilizzato per ottenere un indirizzo di rete esterno. I server TURN vengono utilizzati per inoltrare il traffico se la connessione diretta (peer-to-peer) non riesce. per ulteriori informazioni potete anche fare riferimento dal seguente link: https://www.html5rocks.com/en/tutorials/webrtc/infrastructure/#what-is-signaling

Problemi correlati