UDP hole punching und p2p

Alle Fragen zur Netzwerkkommunikation
Antworten
sean
Beiträge: 2
Registriert: Di 7. Apr 2015, 01:38

UDP hole punching und p2p

Beitrag von sean »

Moin liebe Community

ich habe ein Paar Rechner. Die sind alle hinter NAT Routern, die nicht zugänglich sind. Darauf laufen M$ sowie Linux . Ich möchte die Kommunikation automatisieren. Da es unterschiedliche Betriebssysteme vorhanden sind, nehme ich Lazarus / Freepascal - einmal den Code schreiben, und dann je nachdem kompilieren und / oder eine Binär-Datei verteilen .

Ich brauche eine P2P Netzwerk die
1, Dezentralisiert ist.
2. Geräte sollen sich beliebig ein und ausloggen können.
3. Zugriff auf dem Netz, sowie Austausch von Daten und Dateien Router unabhängig ist.
4. Geräte sollen Paarweise untereinander kommunizieren können.

Ich wollte zuerst IRC, aber damit komme ich nicht weiter. Hier ist mein Problem.

Jetzt meine Fragen :

a. Was sind meine Optionen? Welche P2P Netzwerke (und dementsprechende OOP Komponenten für Lazarus) stehen zur Verfügung?
b. Wenn ich IRC nutzen muss, wie komme ich mit Indy + Lazarus im IRC rein.
c. Wenn keine andere Wahl bleibt, wie kann ich mit Lazarus ein UDP-Hole-punching Program einrichten, und zwischen zwei Geräte kommunizieren.


Viele Grüße

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: UDP hole punching und p2p

Beitrag von mschnell »

Ich habe gute Erfahrungen mit Lazarus und Synapse, weil Synapse diverse higher-level Protokolle bietet. Bei sehr low-level Protokollen (TCP(Telnet) oder UDP) kannst Du aber auch direkt die mit Lazarus gelieferten Funktionen benutzen.

Warum willst Du UDP statt TCP verwenden ? eine Verbindigs-lose Arbeitsweise hat eigentlich nur bei Verwendung von Broadcast Vorteile.

Und trägt die IT-Abteilung wirklich die Regeln für die von außen hereinkommenden UDP-Pakete in die NAT-Router ein ?

-Michael

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: UDP hole punching und p2p

Beitrag von Christian »

Michael ich glaub du sollest mal die Begriffe die der Kollege verwendet googlen bevor du Antwortest :)

@sean, ich bin seit 2 jahren auf der Suche nach genau dem aber zu faul es komplett selbst zu coden. Eigentlich such ich nach nem Framework das WebRTC kann damit man auch von HTML5 Apps heraus rankommt. Ich hab bisher noch nichts ähnliches gefunden. Es gibt aber ein paar Torrent Clients die in Delphi geschrieben sind, da könnt man große teile davon finden.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: UDP hole punching und p2p

Beitrag von mschnell »

Christian hat geschrieben:Michael ich glaub du sollest mal die Begriffe die der Kollege verwendet googlen bevor du Antwortest :)

Was ist bei "Was sind meine Optionen" zu Googeln ? Anscheinend wird ja noch eine grundsätzliche Herangehensweise gesucht, da die untersuchten Möglichkeiten nicht zum Erfolg geführt haben.

-Michael

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: UDP hole punching und p2p

Beitrag von corpsman »

Ich denke was christian meinte ist, das UDP-Whole Punching wesentlich einfacher ist als die TCP variante, hab mich auch schon an so was versucht, das ist nicht ohne.
--
Just try it

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: UDP hole punching und p2p

Beitrag von mschnell »

corpsman hat geschrieben:Ich denke was christian meinte ist, das UDP-Whole Punching wesentlich einfacher ist als die TCP variante...

Da bin ich aber nicht so sicher. Bei TCP/IP (Telnet) regelt der NAT-Router die stehende Verbindung. Dafür hat er entsprechende Regeln wie mit den (Absender-Adressen und) eingehenden Paketen umgegangen werden muss. (Auch für weit komplexere Protokolle wie FTP.) Bei verbindungslosem UDP kann er das nicht.

Allerdings geht das ohne weitere Konfiguration des Routers nur bei Verbindungen die von innen nach außen aufgebaut werden. Für eingehende Verbindungen muss der NAT-Router vorher konfiguriert werden: Zuordnungs-Tabelle Port-Nummer -> interne IP-Adresse plus Portnummer.

Ist das gemacht, braucht sich der Anwendungs-Programmierer für eine TCP/IP Peer-to-Peer Verbindung um den Router nicht zu kümmern, sonder verwendet einfach die richtige IP-Adresse und Port-Nummer.

Eine weitere schöne Möglichkeit TCP/IP P2P Verbindungen aufzubauen, ohne dass die User-Software den NAT Router beachten muss ist, ein VPN zwischen den NAT-Routern zu konfigiurieren.

Das Vorhandensein von NAT-Routern heißt nicht unbedingt, dass diese keine festen Internet-Adressen haben, oder dass man nicht in der Lage ist, sie Anwendungs-spezifisch zu konfigurieren, obwohl mindestens eines von beiden heutzutage meist der Fall ist :(

-Michael

sean
Beiträge: 2
Registriert: Di 7. Apr 2015, 01:38

Re: UDP hole punching und p2p

Beitrag von sean »

mschnell hat geschrieben:Allerdings geht das ohne weitere Konfiguration des Routers nur bei Verbindungen die von innen nach außen aufgebaut werden. Für eingehende Verbindungen muss der NAT-Router vorher konfiguriert werden: Zuordnungs-Tabelle Port-Nummer -> interne IP-Adresse plus Portnummer.



sean hat geschrieben:Die sind alle hinter NAT Routern, die nicht zugänglich sind.


Meines Wissens nach, was mir eigentlich übrig bleibt (IRC hat nicht geklappt) ist UDP-hole-punching - aber, meines wissens nach. Deswegen die Frage :
sean hat geschrieben:Was sind meine Optionen? Welche P2P Netzwerke (und dementsprechende OOP Komponenten für Lazarus) stehen zur Verfügung?


Aber danke für die Input.

VPN ist a. nicht kostenlos, b. ist zu kompliziert, um einen beliebigen externen Rechner zuzufügen - ich will ja dass jeder 3rdParty Rechner leicht ins Netz kommt. Ich denke nicht dass es eine gute Idee wäre, jeden Besuchern / Usern VPN-Zugang zu erteilen .

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: UDP hole punching und p2p

Beitrag von Christian »

Meines Wissens nach funktioniert TCP Hole Punching nicht. Wie wärs wenn man sich zusammentut und eine WebRTC implementation zugänglich macht ?!
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: UDP hole punching und p2p

Beitrag von mschnell »

sean hat geschrieben:
sean hat geschrieben:Die sind alle hinter NAT Routern, die nicht zugänglich sind.

Tja die IT-Abteilungen sind heutzutage das Haupt-Hindernis jeden Fortschritts :( .

Dann hast Du wohl nur die Möglichkeit irgendwo einen Server mit einem Router zu installieren, den Du administrieren kannst.
sean hat geschrieben:VPN ist a. nicht kostenlos, b. ist zu kompliziert, um einen beliebigen externen Rechner zuzufügen - ich will ja dass jeder 3rdParty Rechner leicht ins Netz kommt. Ich denke nicht dass es eine gute Idee wäre, jeden Besuchern / Usern VPN-Zugang zu erteilen .

Bei Linux-Rechnern als Router ist VPN kostenlos. Bei VPN muss nicht (unbedingt) der User-Rechner konfiguriert werden. Die Router halten den Tunnel offen und die Rechner auf beiden Seiten sind einfach im selber (inoffiziellen) IP-Netzwerk. Z.B. kann der VPN-Router (z.B. ein Linux-Rechner) im internen Netzwerk des NAT-Routers ("DMZ") angesiedelt werden und auf dem dortigen Ethernet ein weiteres IP-Netzwerk zur Verfügung stellen. Ich vermute es gibt Möglichkeiten Linux-basierte VPN-Router aus BeagleBones für 40 Euro oder ähnlichem zu bauen und diesen eine Verbindung von außen über einen DynDNS-Service zu ermöglichen. Das hört sich so Standardmäßig an, dass es bestimmt schon mal jemand als Community-Projekt gemacht hat.

Aber unkompliziert ist überhaupt nichts, wenn Du mangels Zugriff auf die Router an der eigentlichen Idee des Internets vorbei arbeiten musst.

Es gibt eine kleine Hoffnung, dass mit dem "Internet of Things" und IPv6 Deine Rechner einen feste von außen bekannte IP-Adresse bekommen könnten und NAT nicht mehr nötig ist. Aber vermutlich werden die IT-Abteilungen das verhindern, um ihre Existenz-Berechtigung zu bewahren.

-Michael

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2640
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: UDP hole punching und p2p

Beitrag von m.fuchs »

mschnell hat geschrieben:
sean hat geschrieben:Die sind alle hinter NAT Routern, die nicht zugänglich sind.

Tja die IT-Abteilungen sind heutzutage das Haupt-Hindernis jeden Fortschritts :( .


Quark, IT-Operations-Abteilungen handeln auch nur auf Anweisung durch die Führung. Wenn also die Development-Abteilung etwas Neues baut, geschieht das ja auch mit Billigung der oberen Hierarchie. Entsprechend sollte man also auch Konfigurationsänderungen durchbekommen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: UDP hole punching und p2p

Beitrag von Christian »

Er hat doch ganz klar eine Aufgabenstellung vorgegeben. Warum muss die jetzt schon wieder in Frage gestellt werden ? Wenn du nichts zur Fragestellung beizutragen hast dann zwingt dich niemand etwas beizutragen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2640
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: UDP hole punching und p2p

Beitrag von m.fuchs »

Weil ich diese Aussage von mschnell nicht einfach stehen lassen möchte. Das ist nämlich auch ein beliebtes Problem in der gewerblichen Softwareentwicklung. Die Programmierer bauen irgendetwas um ein Problem zu beseitigen, welches durch bessere Kommunikation einfacher gelöst werden könnte.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: UDP hole punching und p2p

Beitrag von mschnell »

Auffällige Beispiele:

Diverse Protokolle werden dauernd unter heftigem Performance- und Funktionalitäts-Verlust durch HTTP getunnelt oder ge-Proxied (z.B. git, ftp).

Da was anderes als HTTP nicht en vogue ist, muss die Oberfläche eines CGIs im Brower ständig den Server pollen, statt einfach per TCP/IP Status-Meldungen geschickt zu bekommen. Möglichkeiten das zu umgehen (z.B. indem etwa bei "Comet" eine HTTP-Verbindung entgegen der eigentlichen Idee von HTTP über einige Zeit offen gehalten wird) sind unnötig kompliziert und funktionieren nicht zuverlässig.

-Michael

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: UDP hole punching und p2p

Beitrag von Christian »

Ich bezog mich auf Michaels Beitrag der die Aufgabenstellung in Frage stellt.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten