Ich habe nun versucht, in einem simplen Testprojekt die Anleitung für port prediction im bereits zitierten Artikel umzusetzen (Kapitel 4: NEW METHOD, siehe Link oben).
Phasen I und II sind für die Tests vorerst überflüssig, da ich ja den punching mode meines NATs bereits kenne (nämlich incremental). Den Test führe ich an mir selber durch (d.h. Peer1, Peer2 und Server sind alle hinter dem gleichen NAT, der Verbindungsaufbau erfolgt aber selbstverständlich übers Internet zum Testen).
Folgendes geschieht:
- Peer1 nimmt mit dem Server Kontakt auf.
- Peer2 nimmt mit dem Server Kontakt auf.
- Der Server sieht die beiden externen Ports der Peers, wobei der Port von Peer 2 immer um 1 höher ist als der von Peer 1, da die beiden Kontaktaufnahmen innerhalb sehr kurzer Zeit geschehen. Der Server schickt den externen Port des jeweils anderen Peers an beide Peers zurück.
- Peer1 schiesst sofort ein Loch in das NAT. Zieladresse des lochbohrenden UDP-Pakets ist dabei der externe Port von Peer2 + 2.
- Peer2 sendet ein Paket an den externen Port von Peer2 + 1.
+ 1 und + 2 deshalb, weil sich alle Peers hinter dem gleichen NAT befinden. Peer1 hat also nur ein einziges Loch in die NAT geschossen, da sich pro UDP Hole die Portzahl erhöht. Wenn ich also 100 Löcher in die NAT schiesse, steigt der verwendete freie Port in der NAT um 100, das habe ich getestet.
Bisher hat das nicht funktioniert.
Was ich in der Anleitung nicht verstehe, ist:
Based on this information, the echo server sends a large number of packets. These packets have a fixed destination port and a low TTL value.
Wenn ich das richtig verstehe, ist das Ziel also doch, nur ein einziges Loch zu schiessen - da ja der Zielport immer der gleiche ist ? "A large number of packets" wird nur geschickt, damit das Loch über längere Zeit offen bleibt, oder verstehe ich das falsch ?
The echo server binds the port. The packets are then sent to the echo client.
Was ist mit "binds the port" gemeint ?