Pregunta

Estoy interesado en las conexiones de igual a igual en el navegador. Dado que esto parece ser posible con WEBRTC, me pregunto cómo funciona exacly.

He leído algunas explicaciones y he visto diagramas al respecto y ahora está claro para mí, que la conexión establecida funciona sobre el servidor. El servidor parece intercambiar algunos datos entre el cliente que están dispuestos a conectarse entre sí, de modo que puedan iniciar una conexión directa, que sea independiente del servidor.

Pero eso es exaclable lo que no entiendo. Hasta ahora, pensé que la única forma de crear conexiones es escuchar en un puerto en la computadora A y conectarme a ese puerto de la computadora B. Pero esto no parece ser el caso en WEBRTC. Creo que ninguno de los clientes comienza a escuchar un puerto. De alguna manera, pueden crear una conexión sin escuchar los puertos y aceptar conexiones. Ni el cliente A, ni el cliente B comienza a actuar como un servidor.

¿Pero cómo? ¿Qué datos se intercambian sobre el servidor WEBRTC, que los clientes pueden usar para conectarse entre sí?

Gracias por sus explicaciones para esto :)

editar

He encontrado esto < / a> artículo. No está relacionado con WEBRTC, pero creo que responde a una parte de mi pregunta. No estoy seguro, duro. Todavía sería genial, si alguien pudiera explicarlo y darme algunos enlaces adicionales.

¿Fue útil?

Solución

WEBRTC le da a la Oferta SDP a la aplicación CLIENT JS para enviar (sin embargo, la aplicación JS quiere) al otro dispositivo, que utiliza que para generar una respuesta SDP.

El truco es que el SDP incluye candidatos a hielo (efectivamente "intenta hablar conmigo en esta dirección IP y este puerto"). Hielo funciona para perforar puertos abiertos en los firewalls; Aunque si ambos lados son Nats simétricos, no será posible en general, y se puede usar un candidato alternativo (en un servidor de turno).

Una vez que están hablando directamente (o a través de turnos, que es efectivamente un espejo de paquetes), pueden abrir una conexión DTLS y usarla para ingresar a los flujos de medios SRTP-DTLS y para enviar datacáneos sobre DTLS.

Editar: Acrónimos aquí: http://blog.1Click.io/10-jargons-abbreviations-for- WEBRTC-FANS / para el resto, hay Google. La mayoría de estos están definidos por el IETF ( http://ietf.org/ )

Editar 2: Firefox y Chrome (y la especificación) se han mudado a usar "goteo" para los candidatos de hielo, por lo que los candidatos de hielo generalmente se agregan después de la cara a la peerconnectección y se intercambian independientemente del SDP inicial (aunque puede esperar hasta los candidatos iniciales están listos antes de enviar una oferta, agruparlos). Consulte https://webrtcgglossary.com/trickle-ice/ y https://datatracker.ietf.org/doc/draft-ietf-ice-trickle/

Otros consejos

Una muy buena explicación se puede encontrar en este libro http: / /quimera.labs.oreilly.com/books/1230000000545/ch03.html#stun_turn_ice que proporciona los fundamentos sobre cómo WEBRTC utiliza tecnología de hielo.

 ingrese la descripción de la imagen aquí

En particular, suponiendo que se conoce la dirección IP del servidor Stun, la aplicación WEBRTC primero envía una solicitud de unión al servidor STUN. El servidor Stun responde con una respuesta que contiene la dirección IP pública y el puerto del cliente que se ve desde la red pública.

Ahora la aplicación descubre su IP pública y su tupla de puerto que puede enviar al otro compañero a través de SDP. (Tenga en cuenta que SDP se envía a través de un canal de señalización externo, F.I. WebSocket establecido a través de un servicio web)

Con este mecanismo en su lugar, cada vez que dos compañeros quieren hablar entre sí sobre UDP, pueden usar la IP Pública establecida y las tuplas de puerto para intercambiar datos.

Desafortunadamente, en algunos casos, UDP puede ser bloqueado por un firewall. Para abordar este problema, siempre que falla el aturdimiento, podemos usar el recorrido utilizando los relés alrededor del protocolo NAT (Turn) como un retraso, que puede ejecutarse sobre UDP y cambiar a TCP si todo lo demás falla.

El establecimiento de una conexión P2P WEBRTC tiene 3 pasos (10,000 pies de descripción general):

  1. Paso 1: Señalización : ambos compañeros se conectan a un servidor de señalización (usando los websockets sobre 80/443, cometa, sorbo, etc.) e intercambia información (sobre sus capacidades de medios, Public IP: pares de puertos cuando están disponibles, etc.)

  2. Paso 2: descubrimiento : los dispositivos conectados a las redes LAN o móviles no están al tanto de su IP Pública (y Puerto) donde se pueden contactar para que usen servidores STUN / TURS En la Internet pública para descubrir su IP: par de puertos (candidatos de hielo). En el proceso, punzan un agujero a través del NAT / enrutador que se usa en la PASO3:

  3. Paso 3: P2P Conexión : Una vez que los candidatos de hielo se intercambian a través del canal de señalización inicial, cada par es consciente de la IP de cada uno: Puerto (y los orificios se han golpeado en Nats / Routers ) Por lo tanto, se puede establecer una conexión de PEER a PEER UDP.

  4.  ingrese la descripción de la imagen aquí

    El esquema anterior explica el proceso con 2 dispositivos conectados a las redes locales. Es parte de un artículo que escribí que se ocupa de Solución de problemas de problemas de conexión pero hace un buen trabajo de explicar cómo funciona WEBRTC.

Cómo funciona WEBRTC

Este documento proporciona una introducción rápida y abstracta a WEBRTC. Para obtener más información sobre WEBRTC, consulte la sección de lectura adicional al final de este documento.

WEBRTC

WEBRTC (Web en tiempo real: comunicación en tiempo real) es un conjunto de tecnologías que se desarrolla para la comunicación en tiempo real de Peer a Peer Duplex entre los navegadores. Como se menciona su nombre, es compatible con Web y es una estándar en w3c uno de los La característica importante de WEBRTC es que funciona incluso detrás de las direcciones NAT.

WEBRTC Peer to Peer

WEBRTC utiliza varias tecnologías para proporcionar a los compañeros en tiempo real a la comunicación entre pares entre los navegadores. Estas tecnologías son * sdp (protocolo de descripción de sesión) * hielo (establecimiento de conexión de interactividad) * RTP (Protocolo en tiempo real)

Hay una cosa más que es Señalización del servidor para ejecutar WEBRTC. Sin embargo, no hay un estándar definido en la implementación del servidor de señalización. Cada implementación crea su propio estilo. Le dará más información sobre la señalización del servidor más adelante en esta sección.

Damos información rápida sobre las tecnologías anteriores.

SDP (Protocolo de descripción de sesión)

SDP es un protocolo simple y se usa para qué códecs se admiten en los navegadores. Por ejemplo, suponga que hay dos compañeros ( Client A y Client B ) que se conectarán a través de WEBRTC. Client A y Client B Crean cadenas SDP que definen qué códecs apoyan. Por ejemplo, Client A puede admitir códecs H264, VP8 y VP9 para códecs de video, opus y PCM para audio. El cliente B puede soportar solo H264 para video y solo códec de Opus para audio. Para este caso, los códecs que se utilizarán entre Client A y Client B son H264 y Opus. Si no hay códecs comunes entre pares, no se puede establecer una comunicación entre pares.

Es posible que tenga una pregunta sobre cómo se envían estas cadenas SDP entre otras. Aquí es donde se lleva a cabo el servidor de señalización.

ICE (establecimiento de conexión de interactividad)

Hielo es la magia que establece la conexión entre los compañeros, incluso si están detrás de NAT. Supongamos nuevamente Client A y Client B se conectarán y echaremos un vistazo a cómo se usa el hielo para eso.

  • El cliente A encuentra su dirección local y su dirección de Internet pública mediante el uso de STUN Server y envía esta dirección a Cliente B a través del servidor de señalización. Cada dirección recibida de STUN Server se llama Candidato ICE

En la imagen de arriba, hay dos servidores. Uno de ellos es aturdido y otro de ellos es servidor de turnos.

STUN Server se utiliza para dejar que Client A aprenda sus direcciones. Permítanme dar un ejemplo para esto, nuestras computadoras generalmente tienen una dirección local en la red 192.168.0.0 y hay una segunda dirección que vemos cuando nos conectamos a www.whatismyip.com , esta dirección IP es en realidad la dirección IP pública de nuestra puerta de enlace de Internet (módem, enrutador, etc.), por lo que definamos el servidor STUN; Los servidores STUN le permiten a los compañeros conocer sus direcciones IP públicas y locales. Por cierto, Google proporciona un servidor STUN gratis (stun.l.Google.com:19302).

Hay un servidor más, un servidor de turnos, en la imagen. El servidor de turnos se usa cuando no se puede establecer entre pares a pares entre compañeros. Turn Server simplemente transmite los datos entre pares.

  • El cliente B hace lo mismo, obtiene direcciones IP locales y públicas del servidor Stun y envía estas direcciones a Client A a través del servidor de señalización.

  • El cliente A recibe Client B 's' s 's' s 's y intenta cada dirección IP enviando pings especiales para crear conexión con cliente B . Si Client A recibe respuesta de cualquier dirección IP, pone esa dirección en una lista con su tiempo de respuesta y otras credenciales de rendimiento. Por fin Client A Elija las mejores direcciones de acuerdo con su desempeño.

  • cliente B hace lo mismo con el fin de conectarse a cliente A

RTP (Protocolo en tiempo real)

RTP es un protocolo maduro para transmitir datos en tiempo real. Se basa en UDP. El audio y el video se transmiten con RTP en WEBRTC. Hay un protocolo hermano de RTP que el nombre es RTCP

(Protocolo de control en tiempo real) que proporciona QoS en la comunicación RTP. RTP también se usa en RTSP (protocolo de transmisión en tiempo real)

Servidor de señalización

La última parte es el servidor de señalización que no está definido en WEBRTC. Como se mencionó anteriormente, Señalización del servidor se usa para enviar cadenas de SDP y candidatos de hielo entre Client A y Client B . El servidor de señalización también decide qué compañeros se conectan entre sí. La tecnología WebSocket se usa generalmente en los servidores de señalización de la comunicación.

Compatibilidad

En el último año, todos los navegadores, incluidos Safari, Edge, han lanzado nuevas versiones que admiten WEBRTC. Chrome, Firefox y Opera ya han apoyado a WEBRTC por un tiempo. El códec video que es común a los navegadores son H264. Para el audio, Opus es común en los navegadores. PCM también se puede usar para el códec de audio, pero AAC no se usa, incluso si AAC se admite en todos los navegadores debido a problemas de licencias. Las cámaras IP generalmente admiten el H264 para el códec de video y PCM o AAC para el códec de audio.

Lectura y referencias adicionales

Por cierto, soy desarrollador en servidor de medios de antirroviso que admite WEBRTC y PEER escalable de uno a muchos Conexión

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top