Kann ein Hardwaregerät die Antwortinformationen auf dieselbe IP ändern?

355
Knight

Ich baue einen Relay-Server für ein Spiel und wollte es in den meisten Situationen zum Laufen bringen. Der Host und die Clients stellen eine Verbindung zu dem Relay-Server her, der als Middle Man fungiert.

Basisinformation:

Der Relay-Server (wir nennen es R) hat eine statische IP-Adresse.

Die App (Server oder Client) (wir nennen es A) kann theoretisch jede Art von Provider verwenden, z. B. 3G / 4G / Wifi ... und hinter einer beliebigen Anzahl von Firewalls / NATs / Proxys / Switches stehen ... denk im schlimmsten Fall .

Meine Frage ist also, wenn A eine UDP-Nachricht an R. sendet. R eine IP und einen Port erhalten, an den es eine Antwort senden kann. Alles ok.

Aber sagen Sie, A (dasselbe A) sendet eine weitere UDP-Nachricht an R. Gibt es Hardware oder Software auf der Welt, die die IP oder den Port ändern kann, auf den R antworten wird?

Beispiele in der Theorie:

Kann ein NAT einen anderen Port angeben, auf den Sie antworten müssen, auch wenn die Nachricht dieselbe IP-Adresse hat wie zuvor? Gibt es eine Firewall, die nur eine Antwort pro abgehender Nachricht zulässt? Kann eine Nachricht über einen Proxy gesendet werden, während eine andere Nachricht nicht über einen Proxy gesendet wird, was dazu führt, dass eine der Nachrichten einen anderen Port hat, an den eine Antwort gesendet werden kann? Wenn A eine 3G-Verbindung verwenden und ein Auto fahren und sie den Zellenturm wechseln. Kann R eine andere IP-Adresse oder einen anderen Port erhalten, wenn Sie den neuen Cell-Tower verwenden? Denken Sie erneut an das Worst-Case-Szenario.

Warum?

Der Grund, warum ich frage, ist, weil ich mich frage, ob:

  1. Ich kann dieselbe IP-Adresse und denselben Port verwenden, die ich von der ersten Nachricht von A erhalten habe.
  2. Oder sollte ich hin und wieder eine Nachricht senden, um die Antwortinformationen zu aktualisieren.
  3. Oder sollte R nur an A senden, wenn A zuerst eine Nachricht sendet und ich bei jeder Anforderung nur eine Antwort zurücksende.

Nr. 3 sollte immer funktionieren, unabhängig von der Situation. Aber ich möchte nur wissen, ob ich darüber nachdenke.

Diese Frage ist vielleicht zu weit gefasst, lässt sich aber schwer feststellen.

0
Sie verwenden ein [zustandsloses Übertragungsprotokoll] (https://en.wikipedia.org/wiki/User_Datagram_Protocol), so dass Sie Ihr eigenes Tracking durchführen müssen. Sie werden es nicht immer wissen, wenn A Ihnen bereits Daten gesendet hat, ohne auf irgendeine Weise den Überblick zu behalten. Da Ihr Beispiel "eine beliebige Anzahl von NATs" enthält, bedeutet dies bereits, dass sich diese je nach NAT zu einem beliebigen Zeitpunkt ändern kann, obwohl dies für normale Benutzer unwahrscheinlich ist. Da Sie keine Bestätigung darüber erhalten, wann die andere Partei Ihre Nachrichten tatsächlich erhalten hat, können Sie dies sicherlich tun (1), aber ohne Implementierung einer Art Sitzung ist dies schlecht. Seth vor 7 Jahren 1
@Seth. In diesem Fall ist das Tracking für R nicht wichtig. Ich habe bereits ein anderes System zum Tracking. Knight vor 7 Jahren 0
In diesem Fall ist dies auch nicht wichtig, weil es keine Rolle spielt. Wie bereits erwähnt, besteht bei verschiedenen NAT-Setups und Proxy-Setups die Möglichkeit, und wenn Sie bereits eine Sitzungsschicht implementiert haben, verwenden Sie die Daten dieser Schicht. Seth vor 7 Jahren 0

0 Antworten auf die Frage