Behalten Sie die Kommunikation zwischen zwei Clients bei, auch wenn sich deren IP-Adressen ändern

Dec 11 2020

Ich versuche herauszufinden, ob es möglich ist, so etwas wie dieses Szenario zu haben:

Angenommen, wir haben zwei Leute, Alice und Bob. Alice möchte einige Daten (egal was diese Daten sind) an Bob senden und umgekehrt. Ich weiß, dass WebRTC verwendet werden kann, um Nachrichten ohne Server auszutauschen, aber dazu müssen Alice und Bob die IP-Adressen der anderen kennen. Jetzt ist es für Alice und Bob relativ einfach, ihre IP-Adressen einmal zu teilen, um eine Verbindung zu initialisieren. Was passiert jedoch, wenn einer von ihnen eine Verbindung zu einem anderen Netzwerk herstellt? Vielleicht ist Bob zum Beispiel in einem Café und seine IP-Adresse ist also anders? Die zuvor initialisierte Verbindung würde nicht zu seiner aktuellen IP-Adresse führen, daher müssten sie die Verbindung neu initialisieren. aber wie?

Es scheint mir, dass es bereits eine Art bereits bestehende Kommunikation zwischen den beiden geben müsste, damit sie ihre IP-Adressen gemeinsam nutzen können. Aber warum nicht einfach über die Methode kommunizieren, mit der sie stattdessen ihre IP-Adressen kommunizieren? Alternativ könnte es einen Server geben, der die beiden verbindet, aber den serverlosen Teil des Systems besiegt.

Gibt es also eine Möglichkeit, die Kommunikation zwischen zwei Clients aufrechtzuerhalten, selbst wenn diese das Netzwerk und damit die IP-Adressen ändern? Vielleicht gibt es eine festere Methode zur Identifizierung von Geräten als deren IP-Adressen, wie ich in dieser SO-Antwort gesehen habe , aber sie ist Jahre alt, also gibt es vielleicht etwas Neues? Ich würde dies in JS auf mehreren Geräten / Betriebssystemen implementieren, sodass diese Antwort wahrscheinlich nicht funktioniert. Irgendwelche Ideen / Beispiele wären sehr dankbar; Ich möchte vor allem wissen, ob und wie dies überhaupt möglich ist.

Antworten

2 cybercoder Dec 15 2020 at 00:38

Ja, es ist möglich.

Sie müssen FQDNanstelle IP Addresseines DNSServers und eines clientseitigen Dienstprogramms oder Tools ein (oder eine Unterdomäne) verwenden, um den DNS-Eintrag zu aktualisieren, während sich die IP-Adresse ändert.

Es gibt kostenlose Lösungen im Internet , wie no-ip.com, cloud-flareund etc.

4 divinelemon Dec 15 2020 at 06:05

Einfache Antwort

Nein, obwohl dies möglich ist, ist es unrealistisch und wird nicht benötigt. Siehe meine längere Erklärung unten. Auch, wenn Sie wirklich wollen tun, obwohl es ist möglich durch QUIC , es ist wahrscheinlich nicht benötigt werden (wie unten beschrieben).

Längere Antwort / Frage zum Nachdenken

Kurz gesagt, dies ist keine erforderliche Funktion von WebRTC. Lassen Sie mich eine Frage stellen:
Alice und Bob befinden sich in einem Datenkanal und tauschen Chat-Nachrichten über WebRTC aus. Um eine WebRTC-Verbindung herzustellen, müssen Sie einen Eisserver ( erster Link , zweiter Link ) verwenden, um Alice und Bob dazu zu bringen, Wikipedia zu zitieren:

... um Wege zu finden, wie die beiden Computer so direkt wie möglich miteinander kommunizieren können ..

Dies bedeutet, dass die aktuelle IP-Adresse von Alice verwendet wird, um Bob über einen STUN- oder TURN-Server ein Angebot zu unterbreiten. Wenn Alice, wie Sie sagten, die IP-Adressen ändern würde, müsste sie den Standort ändern. Das bedeutet, dass sie eine ausreichende Entfernung zurücklegen muss, damit sich die IP-Adresse ändert. In der Praxis bedeutet dies wahrscheinlich, dass sie in ein Auto steigt und irgendwohin fährt. Wenn nicht, ruft sie einen Uber oder ein Taxi oder fährt mit dem Fahrrad. In den meisten dieser Szenarien muss sie ihren Computer schließen, um die P2P-Verbindung zu beenden. Wenn sie durch eine seltsame Zauberei ihren Computer / die Verbindung nicht schließt, wird der Browser sehr wahrscheinlich aktualisiert und stellt daher von der neuen IP-Adresse aus erneut eine Verbindung zum WebRTC-Datenkanal her . Wann müssen Sie einen WebRTC-Datenkanal erstellen und IP-Änderungen verarbeiten? Lange Erklärungen kommen zu dem Schluss, dass Clients, die IP-Adressen ändern, ohne die Verbindung zu beenden / zurückzusetzen, in der Praxis einfach nicht vorkommen.

Wenn Sie nach anderen Alternativen suchen möchten, finden Sie hier einige Beispiele:

ALTERNATIVEN

Hinzufügen eines IP-Ereignis-Listeners ★

Dies ist keine tatsächliche globale Variable, die Sie überprüfen können. Sie können jedoch eine Online-API (einige sind hier aufgeführt ) verwenden, um die IP-Adresse des Benutzers zu überprüfen, sie in einer Variablen (oder localStorage) zu speichern und zu überprüfen, ob sich die IP ändert . In einer Schleife würden Sie eine einfache Logik ausführen, um zu überprüfen, ob dies der Fall ist. Sie setzen die WebRTC-Verbindung zurück. Wenn nicht, halten Sie die Schleife am Laufen.

Verwenden eines "Piping" -Servers

Sie können einen einfachen Chat einrichten, indem Sie einen bereits eingerichteten http / https-Server verwenden, der hier erläutert wird und als Piping-Server bezeichnet wird. Weitere Informationen finden Sie im Artikel. Es wird jedoch für ein serverloses Chat-System geworben (das ohne Erstellen eines Servers verwendet werden kann), das nicht den Schwierigkeiten beim Ändern von IP-Adressen ausgesetzt ist. Sie müssen jedoch die ID des Peers kennen, und er muss Ihre ID kennen, was die Lösung effektiv überflüssig macht, da Sie eine Art Kommunikation benötigen, bevor Sie diesen einfachen Chat einrichten.

Verwenden von Node.js, Websockets und / oder Socket.io ★

Wenn Sie eine einfache Chat-App oder einen Datenkanal erstellen möchten, sind Node.js und Socket.io der richtige Weg. Dies ist super einfach, es handelt sich jedoch um einen Server, weshalb ich ihn zum letzten Mal verlassen habe. Ich empfehle dies jedoch aus Gründen der Einfachheit und Einfachheit sehr und bin nicht auf IP-Adressen angewiesen. Sehen Sie hier für eine sehr gute Ausgangseintauchen in Node.js und der Express - Framework. Ich bin weit entfernt von einem Experten von Websockets, aber MDN ist immer ein guter Anfang. Aber gut Websockets sind, glaube ich , dass Socket.io für Anfänger viel einfacher ist, also , wenn Sie bereit sind , ein bisschen Geschwindigkeit über Einfachheit zu opfern, sollten Sie beginnen hier . Dies sind alles gute Ausgangspunkte für serverseitige Chats.

Links

Einfache Antwort

QUIC-Verbindungsmigration

IP Listener

SO Frage ,

Eisserver

MDN-Dokumente , Wikipedia

Piping Server

Einfacher Artikel , Github Repo

Node.js, Websockets und Socket.io

Node.js und Express-Setup , Websocket-Intro und Socket.io-Intro

Alle mit einem Stern (★) gekennzeichneten Alternativen werden persönlich empfohlen.