AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

UDP Hole Punching

Ein Thema von Aphton · begonnen am 28. Jan 2013 · letzter Beitrag vom 30. Jan 2013
 
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#1

UDP Hole Punching

  Alt 28. Jan 2013, 07:32
Guten Morgen,
Ich habe vor Ewigkeiten mich über die Technik schlau gemacht und theoretisch kenne ich mich auch aus; ist ja auch nicht allzu komplex.
Ich hab kurzerhand zwei kleine Anwendungen (Übermittler & Peer) geschrieben, um das mal direkt naiv zu testen.

Kurz noch zum Hole-Punching (so wie ich das verstanden habe; bitte korrigieren falls notwendig):
Szenario: Peer A & B befinden sich jeweils hinter einem Router & in verschiedenen Netzen.
Hintergrund: Bei TCP muss ein Portforwarding eingerichtet werden, damit ein Peer (Server) Daten empfangen kann.
Da aber UDP verbindungslos ist, regelt NAT das so, dass sobald von Peer A Pakete an B geschickt werden, ankommende Pakete von B an A weitergeleitet werden;
weil er eben annimmt, dass es Antworten auf die Pakete sind (für solch eine Session gibts auch ein Time-out - deshalb sollte man ein konstantes hole-punching (keep-alive) durchführen).
Technik: Nun verbinden sich beide Peers an den Übermittler, diese reicht dann beide IPs weiter sodass nun beide Peers einander "kennen". Also Peer A kennt die IP (&Port) von Peer B und vice versa.
Nun schicken beide Peers zyklisch Dummy-Pakete zueinander - diese Sorgen dafür, dass NAT eben eingehende Pakete auch weiterleitet (siehe Hintergrund).

NUN zum eigentlichen Problem -.-' Das ganze funktioniert nicht. Die Peers können miteinander nicht kommunizieren.

Ich hab das so eingerichtet, dass ich den "Übermittler" spiele, hab zwei Kollegen die Peer-Anwendung geschickt. Beide konnten sich fehlerfrei zu mir verbinden.
Beide haben dann auch die Daten voneinander übermittelt bekommen. Dabei ist mir übrigens aufgefallen, dass die Ports nicht richtig waren.
Soweit ich mich richtig erinnere, haben die sich sogar ständig geändert -> Potenzielle Problemquelle #1: Port Randomization?

Nach kurzem recherchieren hab ich rausgefunden, dass es ~3 Arten von NAT gibt und das Verfahren beim "Symmetric NAT" (Potenzielle Problemquelle #2) nicht funktioniert.
Ich darf aber doch davon ausgehen, dass es sich bei den Kollegen nicht um diese Art von NAT handelt, da ja auch Skype und diverse andere P2P Anwendungen bei denen funkltionieren.
(Oder verwenden diese Anwendungen andere Techniken?)

Sofern das Problem #1 tatsächlich ist - was mach ich da? (STUN? Steht #1 mit #2 iwie in Beziehung?)

Achja, was beim Peer wirklich abgeht (vlt tuts ja was zur Sache):
Code:
- in 10 Sek. Abständen ein "Hallo" an "Übermittler" schicken. Der Übermittler aktualisiert seine Peerliste (mit Zeitstempel, sodass Peers die 30 Sek. lang keine Murks von sich gegeben haben, gelöscht werden)
- recvfrom() ausführen
  falls daten vom "Übermittler" gekommen sind
     es handelt sich um die PeerListe - parsen
  sonst (zu diesem Abschnitt kommts nie! =()
     entweder Nachricht von einem Peer empfangen oder hole-punching (nachricht anzeigen, hole punching ignorieren)
- an alle Peers (Peerliste) hole-punching Pakete verschicken
(Das ganze läuft übrigens ~100 x die Sekunde)

Hat einer ne Idee woran es liegen könnte?
Würde mich über jede Kleinigkeit freuen.
Ich hoffe sehr, dass zumindest einer positive Erfahrung damit hat.
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton (28. Jan 2013 um 07:42 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz