(TCP) Verbindung ohne Portforwarding

Network

Top Contributor
Hi,

habe Google durchsucht und die Javadoc, finde leider nichts darüber.
Gerne würde ich eine TCP-Verbindung aufbauen ohne Ports öffnen zu müssen. Beiden Clienten ist aber die locale IP bekannt.

Im Grunde sollen sich die Clienten mithilfe eines Servers miteinander verbinden. Der Server übergibt dann einfach die IP und locale IP(?) Und die Clienten verbinden sich dann zueinander direkt, somit hat der Server selbst dann nicht so eine große Auslastung.
So jedenfalls die Theorie.

Sockets nehmen aber nur den Port entgegen... Ports sind doch nur dazu da um auf unbekannte andere Clienten zu warten, aber theoretisch kennen sich die beiden ja bereits.

Vielen Dank
Gruß
Net

PS: Ein Googlebegriff würde vieleicht auch helfen, weil ich nicht genau weiss nach was gesucht werden muss. Wenn es dafür überhaupt etwas zu suchen gibt.
 

TheDarkRose

Gesperrter Benutzer
Wie gesagt, sie dir UDP Hole Punching an. Das Prinzip funktioniert etwas komplizierter auch mit TCP.

Gesendet von meinem Nexus 7 mit Tapatalk 2
 
T

troll

Gast
TCP Hole Punching ist so mit reinem java nicht möglich ... dafür braucht man eine spezielle zusatz-lib die den os-stack anzapft und manipuliert ... denn bei TCP spielen auch noch dessen zusätzliche header die UDP nicht hat eine rolle ... und hier ist gerade der order-header ganz wichtig ...
außerdem muss man richtig mit den status-flags arbeiten ... sonst bricht die verbindung zusammen oder kann garnicht erst aufgebaut werden ..


@TO
entweder port forwarding oder UDP mit Hole Punching ... anders geht es nicht (außer vllt über einen server)
 
G

Gast2

Gast
Gerne würde ich eine TCP-Verbindung aufbauen ohne Ports öffnen zu müssen.
unterscheide bitte zwischen Portweiterleitung (DSL-Router) und Port des Sockets (letzteren brauchst Du 100%)

Beiden Clienten ist aber die locale IP bekannt.
wenn beide Rechner bei Dir stehen, dann brauchst Du keine Portweiterleitung.

Im Grunde sollen sich die Clienten mithilfe eines Servers miteinander verbinden. Der Server übergibt dann einfach die IP und locale IP(?) Und die Clienten verbinden sich dann zueinander direkt, somit hat der Server selbst dann nicht so eine große Auslastung.
Fall A - beide Clients kommunizieren über den Server, Du hast einen Root-Server im Internet. Insgesammt die einfachste Variante
Fall B - beide Clients kommunizieren direkt, beide Clients haben einen eigene DSL-Anschluß. Ohne Portweiterleitung geht da nichts

Ports sind doch nur dazu da um auf unbekannte andere Clienten zu warten, aber theoretisch kennen sich die beiden ja bereits.
nein - nur Du kennst beide Rechner. An der Netzwerkkarte kommen nur Bits an. Und kein Bit hat einen eindeutigen Absender ;). Damit kennen sich die Rechner nicht.

erkläre mal lieber was Du machen willst und wo die Rechner physkalisch stehen
 

Network

Top Contributor
@gp
Die Überschrift lautet "Verbindung ohne Portforwarding" und die Problemstellung besagt "[...] ohne Ports öffnen zu müssen.".
Wie heißt die Fragestellung richtig? Dann weiss ich es für die Zukunft :)

@TheDarkRose
Das ist doch mal ein Stichwort, gegoogelt und gefunden. Danke :)

@mogel
Rechner <-> Router <-> [Internet] <-> Router <-> Rechner

Aber UDP-HolePunching sieht bereits nach dem richtigen aus und mithilfe von "troll"s Tipp weiss ich auch nach was genau gesucht werden muss wenn man es für TCP umgesetzt haben will.
TCP selbst ist mir ehrlich gesagt nicht so wichtig wenn es zu kompliziert damit wird. Ist halt schön wenn man mal eine komplett sichere Verbindung hat.
Gerade über Edge gehen häufig viele Daten über UDP verloren, fällt mir hin und wieder auf bei einem Videostream. :)

Danke
Net
 

Kr0e

Gesperrter Benutzer
Hab mich damit auch viel beschäftigt...

TCP Hole Punching IST mit Java möglich. Ist sogar in Form einer Library komplett fertig anwendbar.

UCE RMI - TCP Hole Punching Sockets

TCP hole punching kann man über verschiedene Arten realisieren. Manche davon gehen nicht mit Java, das stimmt. Z.b. die, wo man die Packete direkt verändern muss. Da braucht man dann in der Tat etwas low-leveligeres.

UDP Hole Punching ist im Vergleich recht trivial, allerdings ist das Nachbauen von TCP über UDP haarig. In dem FAll würde ich RUDP (Reliabe UDP) empfehlen. Natürlich sind die meisten Impl. nicht mal ansatzweise vergleichbar mit TCP. Tcp ist einfach zu alt und zu gut optimiert. Rechne hier also mit Abstrichen...

ABER:

Ich persönlich würde nichts von beiden nehmen. Das Hauptproblem ist, das Hole Punching nur in gewissen Szenarien funktioniert. Es kommt auf die Netzwerkstruktur an. Große Firmennetze z.b. verhindern sowas häufig. (Fazit: Wer sind deine Kunden ? Firmen oder Heimuser mit bloß einem NAT dazwischen)

TCP Hole Punching ist im Schnitt schwieriger zu realisieren als UDP HP. Sprich viele Router machen das eifach nicht mit.


LÖSUNG ?

Nun ... UPnP ist eine Idee... NAT-PMP ist eine weitere sehr gut funktionierende Sache. Bei beiden Lösungen müssen die User IM IDEALFALL ebenfalls keine Ports freigeben, allerdings müssen die Router einsprechend konfiguriert sein.


FAZIT:

Es gibt keine Lösung die ALLE Probleme abdeckt. Überleg dir, was du machen willst und wähle die entsprechende Lösung. Wenn deine Anwendergruppe sowieso eher high-level wäre... Dann kann man auch Portfreigabe erwarten. Und heuzutage können selbst 10 Jährige Ports für Minecraft oder CSS Server öffnen.....


PS: Bei so exotischen Sachen wie TCP HP muss man bei Universitäten schauen... Dort werden solche Probleme meistens in Form in Master/Doktorarbeiten gelöst. Nicht alles findet man direkt bei Google ;)
 
Zuletzt bearbeitet:

Network

Top Contributor
Hab mich damit auch viel beschäftigt...

TCP Hole Punching IST mit Java möglich. Ist sogar in Form einer Library komplett fertig anwendbar.

UCE RMI - TCP Hole Punching Sockets
Danke, ja das hatte ich auch per Google gefunden (Erster Eintrag). Gut zu wissen, dass es eine Empfehlung dafür gibt.

UDP Hole Punching ist im Vergleich recht trivial, allerdings ist das Nachbauen von TCP über UDP haarig. In dem FAll würde ich RUDP (Reliabe UDP) empfehlen. Natürlich sind die meisten Impl. nicht mal ansatzweise vergleichbar mit TCP. Tcp ist einfach zu alt und zu gut optimiert. Rechne hier also mit Abstrichen...
Wo kommt jetzt RUDP plötzlich her? Zusammenhang?
Also beim Wort RUDP fallen anscheinend bereits Brieftauben vor Schreck vom Himmel wenn sie das hören, stand auf irgendeiner Internetseite beim durchforsten von Google.

LÖSUNG ?

Nun ... UPnP ist eine Idee... NAT-PMP ist eine weitere sehr gut funktionierende Sache. Bei beiden Lösungen müssen die User IM IDEALFALL ebenfalls keine Ports freigeben, allerdings müssen die Router einsprechend konfiguriert sein.
-.- Klasse Apple musste mal wieder das Rad neu erfinden, hatte ich nicht gewusst... damit fällt UPnP also schlussendlich ganz aus den Überlegungen weg. Muss ich ja gleich zwei Technologien unterstützen für eine relativ kleine Anwendergruppe.

Wenn deine Anwendergruppe sowieso eher high-level wäre... Dann kann man auch Portfreigabe erwarten. Und heuzutage können selbst 10 Jährige Ports für Minecraft oder CSS Server öffnen.....
Tja erwarten ist immer so ein hoch angesetztes Wort.
In meiner Planung hatte ich mir eigentlich eine Art Internet im Internet gedacht, bei der jeder Nutzer einer Gruppe beitreten kann ohne auf einen Server limitiert zu sein, sondern jedem Nutzer beitreten kann und damit automatisch mit jedem anderen Nutzer verbunden wird.

Das würde aber vorraussetzen, dass jeder dieser Nutzer Ports freigibt, damit die Sockets zueinander erst aufgestellt werden können.
Ziel ist die Abschaffung eines zentralen Servers.

Naja ich versuche es jetzt erstmal generelldas umzusetzen und zu schauen wo und wie Hole Punching versagt, dann bietet sich immernoch die Portfreigabe an.

Gruß
Net
 

Kr0e

Gesperrter Benutzer
Fast alle seriösen Programme nutzen UPnP oder NAT-PMP. BitTorrent, IM, etc.

UDP HP ist bei Skype etc. natürlich beliebt, aber dein Anwendungsgebiet klingt nach "verlässlicher" Datenübertragung... Also müsstest du dann mit UDP iwie sicher stellen, dass die Pakete wirklich angekommen sind.

RUDP ? Ich hatte da direkt vorweg genommen, dass du ggf. UDP Hole Punching machen könntest und für die sichere Übertragung RUDP nutzt. Ein Protokoll, dass auf UDP aufsetzt und TCP nachbaut.

Für manche Sprachen gibt es Abstraktionen, die UPnP und NAT-PMP und ggf. weitere Techniken zusammenfassen. Mit etwas Glück ist Java dabei.

Ich arbeite allerdings schon lange nicht mehr aktiv mit Java, kann dir also leider spontan nichts empfehlen..
 
T

tuxedo

Gast
Es gibt noch eine Lösung: Relay-Server .. Allerdings brauchst du da noch einen Rechner der kein NAT braucht um ins Internet zu kommen ((v)root server, managed server, ...). Das ganze skaliert je nach aufkommendem Traffik nur mit entsprechenden Kosten für ggf. weitere Server. Eines der bekanntesten Anwendungsbeispiele für Relay-Server ist Teamspeak ... Hier steht ein Server zentral im Netz und vermittelt die Pakete zwischen den Clients. Je nach Protokoll und Traffikaufkommen kannst du da sicher einige hundert bis tausend Clients damit bedienen.

Port-Forwarding: Nein, das kann man nicht von allen Zielgruppen vorraussetzen. 10 jährige Mindecraft-Kiddies haben einen ganz anderen Background als irgendwelche Manager die in ihren Büros mit iPhone und iPad hocken und von konfiguration und Co. absolut nix wissen wollen (Einstecken->Starten->Läuft).

Und zuguter letzt:
Wenn UPnP und UDP HolePunching nicht greifen, dann benutzt Skype und Co. auch den Fallback auf einen Relay-Server...

- Alex
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G TCP Verbindung überprüfen OHNE daten zu verschicken Netzwerkprogrammierung 11
G SSL Verbindung ohne Zertifikat Netzwerkprogrammierung 9
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
D Verbindung zu Geräten mit gleicher IP aber in unterschiedlichen VLans aufbauen Netzwerkprogrammierung 2
M Socket Socket lehnt Verbindung ab Netzwerkprogrammierung 3
IAmFloppy Socket Nachstellen der Verbindung Netzwerkprogrammierung 6
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
M Socket peer to peer Verbindung zwischen Java und Matlab Netzwerkprogrammierung 0
S Bluetooth Verbindung zwischen Android app und Raspberry Pi 3 Netzwerkprogrammierung 1
S Peer2Peer Verbindung trotz NAT Netzwerkprogrammierung 2
T VPN-Verbindung über Java Netzwerkprogrammierung 4
Aruetiise Socket Verbindung Überprüfen Netzwerkprogrammierung 18
F Socket Verbindung mit Verschlüsselung und Authentifierzung Netzwerkprogrammierung 1
F Probleme mit Connection Reset bei Telnet Verbindung Netzwerkprogrammierung 1
U Client Soap Verbindung wieder schließen Netzwerkprogrammierung 0
M Verbindung zwischen zwei Pc in dem Selben Netzwerk Netzwerkprogrammierung 8
P Socket Socket-Verbindung Input sehr langsam Netzwerkprogrammierung 1
S FTP Verbindung zu einem BS2000 Großrechner mit Commons Net Netzwerkprogrammierung 0
F Einfache Socket Verbindung Netzwerkprogrammierung 2
F Verbindung zwischen Server und handy Netzwerkprogrammierung 1
M TCP Verbindung Byte-weise lesen? Netzwerkprogrammierung 5
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
Z Verbindung zwischen 2 Rechnern über ServerSockets nicht möglich Netzwerkprogrammierung 3
F TCP Client, verbindung aufrecht halten Netzwerkprogrammierung 0
I Swing hängt sich auf bei Verbindung zum Server Netzwerkprogrammierung 3
P RMI Hohe CPU Last RMI Verbindung Netzwerkprogrammierung 4
J Pc - Handy Verbindung? Netzwerkprogrammierung 3
M Socket 2x Proxy multithread-server mit Cross Verbindung Netzwerkprogrammierung 0
T Verbindung zum Server fehlgeschlagen Netzwerkprogrammierung 7
D Einfache Verbindung zu Linux Server und Datei auslesen Netzwerkprogrammierung 13
B Nach Verbindung gleich ObjectStream empfangen Netzwerkprogrammierung 1
R Dauerhaft offene Socket-Verbindung? Netzwerkprogrammierung 3
P server - client verbindung (anfänger) Netzwerkprogrammierung 8
G Socket Socket verbindung für Chat System Netzwerkprogrammierung 3
S Socket Socket Verbindung wiederherstellen Netzwerkprogrammierung 16
T Socket Bidirektionale Verbindung mit Sockets Netzwerkprogrammierung 8
N Lan-Verbindung erstellen Netzwerkprogrammierung 2
H Socket Java Chat - Verbindung zum Server fehlgeschlagen. Netzwerkprogrammierung 5
A TCP über UDP Verbindung? Netzwerkprogrammierung 10
D TCP Verbindung (Java Client und Visual Basic Server) Netzwerkprogrammierung 12
E Verbindung zu SQL-Datenbank auf einem Server Netzwerkprogrammierung 13
S Socket Applet Client bekommt keine GLOBALE Verbindung zum Server Netzwerkprogrammierung 25
D Server Client Verbindung - Unexpected End of File - Invalid HTTP Response Netzwerkprogrammierung 4
V NullPointerException bei Verbindung zu RabbitMQ-Server Netzwerkprogrammierung 4
B FTP commons net verschlüsselte verbindung Netzwerkprogrammierung 11
C Verbindung zu einem Hostrechner über das Internet herstellen Netzwerkprogrammierung 15
T Socket Client versucht zyklische Verbindung zum Server Netzwerkprogrammierung 4
X Über eine Socket-Verbindung Arrays übergeben Netzwerkprogrammierung 5
P Socket Verbindung über das Internet Netzwerkprogrammierung 2
A Socket Socket Verbindung unterbrochen --> keine Exception Netzwerkprogrammierung 7
S SVNKit - Verbindung zum Repository trennen? Netzwerkprogrammierung 2
P Socket neuer Client - neue(r) Socket/Verbindung geöffnet? Netzwerkprogrammierung 6
M Problem mit Socket-Verbindung Netzwerkprogrammierung 2
X SSH Verbindung zu Remote Datenbank Netzwerkprogrammierung 2
S TCP Verbindung zu Beamer Netzwerkprogrammierung 8
Y server client socket verbindung übers internet aufbauen Netzwerkprogrammierung 8
M ganymed-ssh2.har: ftp-Verbindung über ftp-Proxy Netzwerkprogrammierung 2
D Verbindung zw. zwei Rechnern funzt nicht Netzwerkprogrammierung 5
F Socket Socket Verbindung Netzwerkprogrammierung 10
E Server schließt einfach verbindung? Netzwerkprogrammierung 6
Shoox VPN-Verbindung für Datenbankzugriff Netzwerkprogrammierung 2
X Socket Handy/PC Verbindung unterscheiden Netzwerkprogrammierung 18
O Telnet verbindung Netzwerkprogrammierung 4
Dit_ UDP Verbindung durch Proxy Netzwerkprogrammierung 4
H Socket Client server,verbindung läst sich nicht abbauen&code optimierung Netzwerkprogrammierung 3
V Verbindung zweier Rechner über das Internet mit Sockets Netzwerkprogrammierung 8
M HTTP HTTPS-Verbindung mittels Java und Javascript Netzwerkprogrammierung 2
N Verbindung zu Fritzbox Socket/Telnet ??? Netzwerkprogrammierung 5
multiholle RMI Verbindung Linux <-> Windows Netzwerkprogrammierung 4
S netzwerkprotokoll auf basis einer tcp verbindung erstellen Netzwerkprogrammierung 9
S SSH Verbindung mit j2ssh Netzwerkprogrammierung 3
H Socket Mit Applet Verbindung zu eigener Website aufbauen Netzwerkprogrammierung 4
H Socket Socket verbindung mit einem TeamSpeak2 Server Netzwerkprogrammierung 5
H TCP verbindung hinter NAT Netzwerkprogrammierung 28
G TCP SSL Verbindung Netzwerkprogrammierung 3
P Java / My-Sql Verbindung herstellen Netzwerkprogrammierung 6
W Socket Shellscript über ssh Verbindung aufrufen Netzwerkprogrammierung 14
N Socket Verbindung wird immer verweigert Netzwerkprogrammierung 5
Dit_ UDP-Verbindung, DatagramPakete Netzwerkprogrammierung 3
S Socket verbindung trennen Netzwerkprogrammierung 3
D Verbindung zu einem Server - POST Netzwerkprogrammierung 2
musiKk SSL-Verbindung mit Client-Zertifikat (Private Key) scheitert Netzwerkprogrammierung 13
D Socketprogrammierung Verbindung C++=>Java Netzwerkprogrammierung 23
B Probleme mit FTP verbindung Netzwerkprogrammierung 22
T Mac Adresse über Socket Verbindung abfragen? Netzwerkprogrammierung 9
L SSL Verbindung aber Server wird erst im Programm festgelegt Netzwerkprogrammierung 4
L Https Verbindung wird aus jar heraus nicht aufgebaut Netzwerkprogrammierung 12
M Verbindung über Proxy// Problem mit Outputstream bei URLConn Netzwerkprogrammierung 5
O TCP Socket-Verbindung überprüfen Netzwerkprogrammierung 4
F Peer to Peer Verbindung zwischen mehreren Clients? Netzwerkprogrammierung 8
F applet verbindung zum server Netzwerkprogrammierung 6
T Verbindung über das Internet Netzwerkprogrammierung 2
G Verbindung zwischen PC und Handy Netzwerkprogrammierung 10
B Bibliothek, um Eckdaten zur Internet-Verbindung rauszufinden Netzwerkprogrammierung 2
C Verbindung zwischen 2 Computern herstellen Netzwerkprogrammierung 12
G USB-Verbindung herstellen Netzwerkprogrammierung 3
O SSH-Verbindung (trilead-ssh2-build212) Netzwerkprogrammierung 2
K Verbindung mit Unix Server aufnehmen Netzwerkprogrammierung 2
J close() Socket Verbindung nötig ? Netzwerkprogrammierung 3

Ähnliche Java Themen


Oben