So erreicht dein iPhone deinen Mac von überall
Dein Mac steht hinter einem Router, dein iPhone im Mobilfunknetz. Keines kann das andere anwählen. Hier ist die Abfolge, die beide ins Gespräch bringt, in der Reihenfolge, in der sie abläuft.
Im selben Netzwerk: Bonjour und ein Port
Die Mac-App lauscht auf TCP-Port 51515 und meldet sich per Bonjour als
_remotedesktop._tcp an, mit drei kleinen Angaben: einer Geräte-ID, dem Namen des Macs und
der Protokollversion. Das iPhone sucht nach diesem Dienst, sodass ein Mac im selben WLAN unter
„In der Nähe“ erscheint, ohne dass jemand eine Adresse tippen muss.
Die Ankündigung ist nur ein Hinweis und nichts weiter. Nichts Sicherheitsrelevantes wird daraus entschieden, denn jeder in einem Netzwerk kann alles Mögliche ankündigen. Entscheidend ist, was danach passiert: Das iPhone öffnet eine TLS-1.3-Verbindung, beide Seiten legen ein Zertifikat vor, und jede prüft den öffentlichen Schlüssel der anderen gegen den, den sie bei der Kopplung gespeichert hat. Wie diese Kopplung funktioniert, steht in einem eigenen Beitrag.
In einem Heimnetz öffnet das iPhone zwei Verbindungen: eine für die Steuerung (Eingaben, Einstellungen, die Liste der Fenster) und eine, die nur das Bild trägt. Weil das Video nicht über den Steuerkanal läuft, muss ein Mausklick nie hinter einem großen Keyframe warten.
Außerhalb des Netzwerks: ein Relay, das nur vorstellt
Sobald du das Haus verlässt, erreicht das iPhone keine private Adresse hinter deinem Router, und der Router nimmt keine Verbindung an, die niemand angefordert hat. Also macht der Mac den ersten Schritt, und zwar früh. Solange er läuft, hält er eine ausgehende WebSocket-Verbindung zum Relay von Peering offen und schickt alle 25 Sekunden einen kleinen Ping. Diese offene Verbindung ist die Anwesenheit des Macs: So weiß das Relay, dass der Mac existiert und wach ist.
Wenn du auf dem iPhone auf deinen Mac tippst, passiert Folgendes:
- Das iPhone bittet das Relay, sich mit der Geräte-ID deines Macs zu verbinden.
- Das Relay antwortet beiden Seiten mit einer Adresse und einem Paar zufälliger 16-Byte-Token, eines für die Steuerung und eines für das Video.
- Beide Geräte öffnen eine ausgehende TCP-Verbindung zum Relay und schreiben zuerst ihr Token.
- Das Relay ordnet die beiden Token einander zu und verbindet die Sockets, indem es Bytes von einem zum anderen kopiert.
Danach startet das iPhone denselben TLS-Handshake wie in einem Heimnetz, und er läuft direkt durch das Relay zum Mac. Das Relay ist ein Rohr, keine Partei im Gespräch. Es besitzt nie einen Schlüssel. Was es erfahren kann und was nicht, steht in Was das Relay sehen kann.
Das Bild nimmt eine Abkürzung
Alles über das Relay zu leiten würde funktionieren, wäre aber der langsamste und teuerste Weg. Deshalb bleibt das Bild nicht auf der TCP-Verbindung. Es wechselt zu UDP, das sich besser für Video eignet: Ein verspätetes Bild ist wertlos, und es erneut zu senden verzögert nur das nächste.
Jede Seite stellt dem Relay außerdem eine Frage: Von welcher Adresse verbindet sich die Gegenseite? Das Relay antwortet mit der Adresse, die es beobachtet hat, und beide Geräte schicken sich alle 250 Millisekunden kleine versiegelte Testpakete. Jedes Testpaket öffnet ein Loch im Router des Absenders, und wenn die beiden Löcher zueinander passen, kommt ein Paket durch und wird authentifiziert. Ab diesem Moment läuft das Bild direkt vom Mac zum iPhone, und das Relay ist aus dem Videoweg draußen.
Diese Technik heißt meist Hole Punching. Sie funktioniert mit den meisten Heimroutern und scheitert an manchen strengen Mobilfunk- und Firmennetzen. Dann läuft das Bild einfach weiter über das Relay. In beiden Fällen musst du nichts einrichten und keinen Port öffnen.
Wenn UDP blockiert ist
Manche Netzwerke verwerfen UDP komplett. Ist drei Sekunden lang kein Bild angekommen, während die Steuerverbindung noch antwortet, bittet das iPhone den Mac, das Video stattdessen über den Steuerkanal zu senden, in Stücke zerlegt. Die Bitrate ist niedriger begrenzt, das Bild wirkt also weicher, aber ein weiches Bild ist besser als ein eingefrorenes. Der Mac sendet auf dem schnellen Weg weiterhin alle paar Sekunden einen Keyframe, und sobald das iPhone sieht, dass dieser Weg wieder funktioniert, wechselt es zurück.
Warum es so gebaut ist
- Keine eingehenden Ports. Jede Verbindung ist ausgehend, also gibt es keine Router-Einstellung zu ändern und nichts, was im Internet offen steht.
- Kein Konto. Geräte werden an Schlüsseln erkannt, die sie selbst erzeugen, nicht an einem Login. Siehe Kopplung ohne Konto.
- Zuerst der günstige Weg. Im selben Netzwerk ist es kostenlos und unbegrenzt. Das Relay trägt nur, was ein direkter Weg nicht schafft.
Die Version für Nutzer, mit den Einstellungen, die einen Mac erreichbar halten, während du unterwegs bist, steht in Von überall auf deinen Mac zugreifen und Den Mac für den Fernzugriff wach halten.
Fragen
Muss ich Ports an meinem Router öffnen, um Peering unterwegs zu nutzen?
Nein. Jede Verbindung ist ausgehend. Der Mac hält eine Verbindung zum Relay offen, und beide Geräte verbinden sich nach außen mit ihm, also muss nichts weitergeleitet werden.
Nutzt Peering das Relay für die ganze Sitzung?
Das Relay stellt die Verbindung am Anfang her. Danach versucht das Bild, direkt zwischen deinem Mac und iPhone zu laufen, und fällt auf das Relay zurück, wenn dein Netzwerk keinen direkten Weg zulässt.