2012-10-03 4 views
39

Je suis intéressé par Connexions pair à pair dans le navigateur. Comme cela semble possible avec WebRTC, je me demande comment cela fonctionne exactement.Comment fonctionne WebRTC?

J'ai lu quelques explications et a vu des diagrammes à ce sujet et maintenant il est clair pour moi que la connexion fonctionne establishmet sur le serveur. Le serveur semble échanger des données entre les clients qui souhaitent se connecter les uns aux autres, afin qu'ils puissent démarrer une connexion directe, indépendante du serveur.

Mais c'est exaclty ce que je ne comprends pas. Jusqu'à présent, je pensais que la seule façon de créer des liens est d'écouter sur un port sur l'ordinateur A et se connecter à ce port de l'ordinateur B. Mais cela ne semble pas être le cas dans WebRTC. Je pense qu'aucun des clients ne commence à écouter sur un port. D'une certaine manière, ils peuvent créer une connexion sans écouter sur les ports et accepter les connexions. Ni le client A, ni le client B ne commence à agir en tant que serveur.

Mais comment? Quelles données sont échangées sur le serveur WebRTC, que les clients peuvent utiliser pour se connecter les uns aux autres?

Merci pour vos explications pour cette :)

Modifier

J'ai trouvé this article. Ce n'est pas lié à WebRTC, mais je pense que cela répond à une partie de ma question. Je ne suis pas sûr, dur. Ce serait toujours cool, si quelqu'un pouvait me l'expliquer et me donner des liens supplémentaires.

+0

Pour initialiser la "machine d'état", la partie basique de WebRTC, nous devons utiliser un agent intermédiaire comme un serveur pour obtenir des candidats ICE via le protocole ROAP/connexion du serveur STUN/TURN ... Aujourd'hui, nous comptons sur les serveurs SIP cependant il y a d'autres options aussi! –

+0

Explication de RTCWeb/WebRTC - ~ Présentation vidéo de 40 minutes du rédacteur en chef du WebRTC, Cullen Jennings - http://adf.ly/DHgzv –

Répondre

42

WebRTC donne une offre SDP à l'application JS client d'envoyer (mais l'application JS veut) à l'autre appareil, qui utilise pour générer une réponse SDP.

L'astuce est que le SDP comprend les candidats ICE (« essayer de me parler à cette adresse IP et ce port » efficace). ICE fonctionne pour perforer les ports ouverts dans les pare-feu; Cependant, si les deux côtés sont des NAT symétriques, cela ne sera pas possible en général, et un autre candidat (sur un serveur TURN) peut être utilisé. Une fois qu'ils parlent directement (ou via TURN, qui est en fait un miroir de paquets), ils peuvent ouvrir une connexion DTLS et l'utiliser pour entrer les flux multimédia SRTP-DTLS et envoyer des DataChannels via DTLS.

Editer: Acronymes ici: http://blog.1click.io/10-jargons-abbreviations-for-webrtc-fans/ pour le reste, il ya Google. La plupart d'entre eux sont définis par l'IETF (http://ietf.org/)

Edit 2: Firefox et Chrome (et les spécifications) se sont déplacés à l'aide de « filet » pour les candidats ICE, de sorte que les candidats ICE sont généralement ajoutés après la face à PeerConnection et échangés indépendamment du SDP initial (bien que vous puissiez attendre que les candidats initiaux soient prêts avant d'envoyer une offre, et les regrouper). Voir https://webrtcglossary.com/trickle-ice/ et https://datatracker.ietf.org/doc/draft-ietf-ice-trickle/

+0

Merci! Ceci est une très belle explication :) –

+0

Pouvons-nous faire une à plusieurs application vidéo avec la compatibilité de différents appareils en utilisant webRTC? (iPhone, iPad et bureau) – user2003356

+0

L'iPhone et l'iPad n'ont pas de support WebRTC dans leurs navigateurs. Donc, vous aurez besoin d'utiliser un pugin webrtc supplémentaire pour le navigateur Safari iOS. Une application vidéo webrtc one-to-many peut être déployée sur la base de Flashphoner WebRTC Media et Broadcasting Server http://goo.gl/wYEEUq – Nick

4

Une très bonne explication peut être trouvée dans ce livre http://chimera.labs.oreilly.com/books/1230000000545/ch03.html#STUN_TURN_ICE qui fournit les données fondamentales sur la façon dont WebRTC utilise la technologie ICE.

En particulier

enter image description here

supposant que l'adresse IP du serveur STUN est connu, l'application WebRTC premier envoie une requête liaison au serveur STUN. Le serveur STUN répond avec une réponse qui contient l'adresse IP publique et le port du client vu du réseau public.

Maintenant, l'application découvre son IP publique et le port de tuple qui peut envoyer à l'autre pair via SDP. (Notez que SDP est envoyé sur un canal de signalisation externe, fi websocket établi par un service Web)

Avec ce mécanisme en place, chaque fois que deux pairs veulent parler les uns aux autres sur UDP, ils peuvent alors utiliser l'IP publique établie et des tuples de port pour échanger des données.

Malheureusement, dans certains cas, UDP peut être bloqué par un pare-feu. Pour résoudre ce problème, chaque fois que STUN échoue, nous pouvons utiliser le protocole Traversal Using Relays autour de NAT (TURN) comme solution de secours, qui peut fonctionner sur UDP et basculer vers TCP si tout le reste échoue.

2

établissement d'une connexion WebRTC p2p a 3 étapes (10.000 pieds aperçu):

  1. Étape 1: de signalisation: les deux pairs se connecter à un serveur de signalisation (en utilisant websockets sur 80/443, comète, SIP , etc ..) et échanger des informations (au sujet de leurs des capacités des médias, IP publique: les paires de ports lorsqu'ils deviennent disponibles, etc.)

  2. Étape 2: Discovery: les périphériques connectés à un réseau local ou les réseaux mobiles ne sont pas au courant leur IP publique (et port) où On peut les joindre pour qu'ils utilisent les serveurs STUN/TURN situés sur l'Internet public pour découvrir leur paire ip: port (candidats ICE). Dans le processus, ils percer un trou dans le NAT/routeur qui est utilisé dans l'étape 3:

  3. Étape 3: connexion P2P: une fois que les candidats ICE sont échangées par la voie de signalisation initiale chaque pair est conscient de la propriété intellectuelle de l'autre : port (et les trous ont été perforés dans les NAT/routeurs) afin qu'une connexion UDP d'égal à égal puisse être établie.

enter image description here

Le schéma ci-dessus explique le processus avec 2 appareils connectés aux réseaux locaux. Cela fait partie d'un article que j'ai écrit qui traite de troubleshooting connection issues, mais il explique bien le fonctionnement de WebRTC.