# P2P mit Peers hinter Routern - ohne Portforwarding



## Conn (18. Jun 2009)

Hallo,

ist es theoretisch möglich ein P2P Netzwerk aufzubauen mit Peers die sich im Lan befinden und über einen Router mit dem Internet kommunizieren, ohne dass ich im Router explizit ein Portwarding für den betreffenden Rechner hinterlege?

Könnte ein Server zwei Clients miteinander "verheiraten", so das sie unabhängig von dem Server kommunizieren können? Wenn ja, wie würde eine deratige Implementierung mit Java aussehen (Socket Verteilung ??).

Für mögliche Antworten im Voraus vielen Dank.

Viele Grüße,
Conrad


----------



## Noctarius (18. Jun 2009)

Skype nutzt das so genannte UDP Hole Punching Verfahren um in der Firewall auf nicht ganz feines Wege einen "Port Forward" zu erzeugen.

Hier ein paar Seiten zum Thema:
UDP hole punching - Wikipedia, the free encyclopedia
UDP hole punching | it-administrator.de
STUNT: TCP NAT Traversal
http://www2.lifl.fr/MAP/negst/secondWorkshop/slidesSecondWorkshopNegst/TakayukiOkamoto.ppt
https://jxta.dev.java.net/

"UDP Hole Punching" sollte auch der JXTA Lib hinzugefügt werden, wie weit der Status da fortgeschritten ist, weiß ich aber nicht.

Hoffe das reicht erstmal zum Einlesen. Bei Fragen bin ich noch ein paar Tage hier ;-)


----------



## Conn (18. Jun 2009)

Hi,

erstmal vielen Dank für die Antwort und die Links. Werde bestimmt nocht ein paar Fragen haben .


Grüße,
Conrad


----------



## Conn (20. Jun 2009)

Hallo,

habs hinbekommen. 

Mit UDP hat das wunderbar funktioniert. Sofern erstmal eine Anfrage am Router vorbeigekommen ist, ist der Client im LAN über den vom Router geöffneten Port und dessen IP auch von jedem anderen Rechner im WWW über UDP erreichbar. Zumindest solange bist der Router bei Untätigkeit die Verbindung kappt, was nicht so schön ist, da unnötig kommuniziert werden muss, um die Verbindung aufrechtzuerhalten.

Nochmals vielen Dank @Noctarius für die Links. Die Verwendung von JXTA war nicht notwendig. Ein einfache Beispielanwendung war mit wenigen Zeilen auch mit den Standard Java Bibliotheken realisierbar.

Vielen Dank und viele Grüße,
Conrad


----------



## Noctarius (21. Jun 2009)

Zur Aufrechterhaltung nutzt man normal einfach ein PING/PONG. Anders geht es nun mal nicht


----------

