Cómo llega tu iPhone a tu Mac desde cualquier lugar
Tu Mac está detrás de un router y tu iPhone en una red móvil. Ninguno puede llamar al otro. Esta es la secuencia que consigue que se hablen, en el orden en que ocurre.
En la misma red: Bonjour y un puerto
La app del Mac escucha en el puerto TCP 51515 y se anuncia por Bonjour como
_remotedesktop._tcp, con tres datos pequeños: un ID de dispositivo, el nombre del Mac y la
versión del protocolo. El iPhone busca ese servicio, así que un Mac en el mismo Wi-Fi aparece en
Cercanos sin que nadie escriba una dirección.
El anuncio es solo una pista. No se decide nada de seguridad a partir de él, porque cualquiera en una red puede anunciar lo que quiera. Lo que importa es lo que viene después: el teléfono abre una conexión TLS 1.3, ambos lados presentan un certificado y cada uno comprueba la clave pública del otro con la que guardó al emparejar. Cómo funciona ese emparejamiento tiene su propio artículo.
En una red doméstica el teléfono abre dos conexiones: una de control (entrada, ajustes, la lista de ventanas) y otra que lleva solo la imagen. Mantener el vídeo fuera del flujo de control significa que un fotograma clave grande nunca puede hacer que un clic espere detrás de él.
Fuera de la red: un relay que solo presenta
Cuando sales de casa, el teléfono no puede llegar a una dirección privada detrás de tu router, y el router no aceptará una conexión que nadie ha pedido. Así que el Mac da el primer paso, pronto. Mientras está en marcha mantiene abierto un WebSocket saliente hacia el relay de Peering y envía un pequeño ping cada 25 segundos. Ese socket abierto es la presencia del Mac: así sabe el relay que el Mac existe y está despierto.
Cuando tocas tu Mac en el iPhone, ocurre esto:
- El teléfono pide al relay que se conecte al ID de dispositivo de tu Mac.
- El relay responde a ambos extremos con una dirección y un par de tokens aleatorios de 16 bytes, uno para el control y otro para el vídeo.
- Ambos dispositivos abren una conexión TCP saliente hacia el relay y escriben primero su token.
- El relay empareja los dos tokens y une los sockets, copiando bytes de uno al otro.
Entonces el teléfono inicia el mismo handshake TLS que usaría en una red doméstica, y pasa directamente por el relay hasta el Mac. El relay es una tubería, no parte de la conversación. Nunca tiene una clave. Si quieres los detalles de lo que puede y no puede saber, lee qué puede ver el relay.
La imagen toma un atajo
Retransmitirlo todo por el relay funcionaría, pero es el camino más lento y el más caro. Por eso la imagen no se queda en la conexión TCP. Pasa a UDP, más adecuado para el vídeo: un fotograma tardío no vale nada, y retransmitirlo solo hace que el siguiente llegue más tarde.
Cada extremo también le hace una pregunta al relay: ¿desde qué dirección se conecta el otro? El relay responde con la dirección que observó, y ambos dispositivos empiezan a enviarse pequeños paquetes de prueba cifrados, cada 250 milisegundos. Cada prueba abre un hueco en el router del emisor, y cuando los dos huecos coinciden, una prueba pasa y se autentica. Desde ese momento la imagen va directamente del Mac al iPhone y el relay queda fuera de la ruta del vídeo.
Es la técnica que suele llamarse hole punching. Funciona con la mayoría de los routers domésticos y falla con algunos móviles y corporativos estrictos, en cuyo caso la imagen sigue fluyendo por el relay. En cualquier caso, no tienes que configurar nada ni abrir ningún puerto.
Cuando UDP está bloqueado
Algunas redes descartan UDP por completo. Si no ha llegado ninguna imagen en tres segundos mientras la conexión de control sigue respondiendo, el iPhone pide al Mac que envíe el vídeo por el flujo de control, troceado en fragmentos. Va limitado a una tasa de bits menor, así que se ve más borroso, pero una imagen borrosa es mejor que una congelada. El Mac sigue enviando un fotograma clave por el camino rápido cada pocos segundos, y cuando el teléfono ve que ese camino se recupera, vuelve a él.
Por qué está construido así
- Sin puertos de entrada. Todas las conexiones son salientes, así que no hay ningún ajuste del router que cambiar ni nada expuesto en internet.
- Sin cuenta. Los dispositivos se identifican con claves que generan ellos mismos, no con un inicio de sesión. Consulta emparejar sin cuenta.
- Primero el camino barato. La misma red es gratis y sin límite. El relay lleva solo lo que un camino directo no puede.
Para la versión orientada al usuario, con los ajustes que mantienen un Mac accesible mientras estás fuera, consulta acceder a tu Mac desde cualquier lugar y mantener tu Mac despierto para el acceso remoto.
Preguntas
¿Tengo que abrir puertos en mi router para usar Peering fuera de casa?
No. Todas las conexiones son salientes. El Mac mantiene una conexión abierta con el relay y ambos dispositivos se conectan hacia él, así que no hace falta redirigir nada.
¿Peering usa el relay durante toda la sesión?
El relay une la conexión al principio. Después la imagen intenta ir directa entre tu Mac y tu iPhone, y recurre al relay cuando tu red no permite un camino directo.