UDP-Port-Lebenszeit an NAT-Router
-
Hallihallo,
dies ist eine reine Interessensfrage:
Ich habe es gerade geschafft ein UDP-hole-punching-System auf die Beine zu stellen und bin nun kräftig am punchen
Die Frage die sich mir stellt, lautet wie folgt:
Das "Loch" wird ja dadurch geschlagen, dass erst einmal mittels UDP eine Nachricht zu meinem Server gesendet wird. Dadurch öffnet mein Router einen UDP-Port, der all meine weiteren UDP-Nachrichten transportieren wird.
Wie lange lebt dieser Port? Bis ich meinen UDP-Socket zerstöre - wieso sollte der Router das merken? Bis zum Laufzeit-Ende meines Programms?
Woher weiß der Router, wann er meinen UDP-Port schließen "darf" - es besteht ja keine Verbindung wie bei TCP, welche abgebrochen werden könnte.Liebe Grüße,
Max
-
MaDsTyLe schrieb:
Woher weiß der Router, wann er meinen UDP-Port schließen "darf"...
es läuft ein timeout ab. wenn eine gewisse zeit lang nix gesendet wurde, macht er den port wieder zu.
-
WAS?
Na klasse ... das bedeutet wieder 'ne potentiell unbekannte Ausnahme, die es auszuradieren gilt.
Das ist aber unschön ...
Naja, danke!
Gruß, Max
-
Gibt es möglicherweise soetwas wie eine minimales Timeout, dass von allen Routern eingehalten wird, sodass ich den Port quasi dadurch am Leben erhalten könnte, dass ich mir in diesem zeitlichen Intervall regelmäßig selbst eine Nachricht schicke?
Oder gibt's eine andere Möglichkeit den Port am Leben zu erhalten?
Wie lang dauert das so im Schnitt, bis der stirbt?
Gruß, Max
-
MaDsTyLe schrieb:
Gibt es möglicherweise soetwas wie eine minimales Timeout, dass von allen Routern eingehalten wird, sodass ich den Port quasi dadurch am Leben erhalten könnte, dass ich mir in diesem zeitlichen Intervall regelmäßig selbst eine Nachricht schicke?
das macht jeder hersteller, wie er lustig ist (es gibt keine standards für NAT router). du könntest periodisch keep-alive pakete (UDP-pakete ohne payload) senden, wenn nix los ist.
-
hast du Zugriff aufs Dateisystem des Routers? Irgendwo unter /proc/sys/net/ sollte der timeout gespeichert sein. Liegt meist um die 30 Sekunden
-
du könntest periodisch keep-alive pakete (UDP-pakete ohne payload) senden
Das versuche ich gerade, aber wie genau stellst Du Dir das vor?
Wenn mein Rechner die IP 192.168.0.2 hat und ich die öffentliche IP 234.456.123.789 habe, eine UDP-Nachricht an einen beliebigen Server verschickt habe und der Router nun den Port 1234 für mich geöffnet hat, denn müsste ich doch nun versuchen regelmäßig an 234.456.123.789:1234 zu senden - oder wie meinst Du das?
Es kommt jedenfalls nichts an, wenn ich das tue ...
Schicke ich an 192.168.0.2:[geöffneter_port_meines_rechners], kommt alles an ...Danke schonmal!
Gruß, Max
PS:
Was genau heißt ohne payload?
-
von wo aus sendest du die Pakete? Der Router lässt natürlich auf diesem Port nur Antwortpakete zu, die als Quell-IP und Quell-Port die gleichen Werte haben die du mit deinem UDP-Paket als Ziel-IP und Ziel-Port hattest.
Schickst du also ein Paket an 60.70.80.90:53 und du selber sendest auf Port 1234, dann lässt der Router auf Port 1234 nur Pakete zu, die von 60.70.80.90:53 kommen
MaDsTyLe schrieb:
Was genau heißt ohne payload?
ohne Nutzlast
-
Ok, klar, also müsste man für sich selbst ein Loch schlagen, aber das funktioniert wohl nicht, wie?
EDIT:
Doch sollte funktionieren, aber dafür müsste ich dann noch einen UDP-Port öffnen, richtig?