Dieser Artikel ist eine freie Übersetzung eines Eintrags in .
Mit Erlaubnis des Autors (auch zur Veranschaulichung und aus Interesse) habe ich ihn mit Links versehen und mit einigen persönlichen Erkenntnissen ergänzt.
Einführung
Derzeit muss mindestens ein Nutzer aus dem Paar, das sich verbindet, im aktiven Modus sein. Der NAT-Umgehungsmechanismus ist nützlich, wenn bei keiner der Seiten der aktive Modus eingerichtet ist. Dies geschieht normalerweise aufgrund der Blockierung eingehender Verbindungen durch eine Firewall oder ein NAT-Gerät.
Wenn beide Clients im aktiven Modus sind
sendet der initiierende Client einen Befehl, der seine eigene IP-Adresse und den Port enthält, an den anderen Client. Der empfangende Client stellt unter Verwendung dieser Daten die Verbindung zum Initiator her.
Wenn einer der Clients im passiven Modus ist
über den Hub sendet der passive Client A den Befehl an den aktiven Clienten, Bder dann mit dem Befehl $ConnectToMe antwortet.

Als Server O fungiert in obigem Fall der DC-Hub.
Wenn beide Clients im passiven Modus sind,
Clients, die sich hinter unterschiedlichen NATs befinden, A und B haben sich mit dem Hub verbunden. O.

So sieht die Verbindung zum Hub aus der Sicht des Clients aus. A
Der Hub akzeptiert Verbindungen am Port 1511. Der Client A stellt aus seinem privaten Netzwerk heraus ausgehende Verbindungen über den Port 50758 her. Der Hub sieht wiederum die NAT-Adresse des Geräts, arbeitet damit und überträgt den Clients entsprechend ihren Identifikatoren.
Kunde A sendet eine Nachricht an den Server O mit der Bitte, die Verbindung zum Client zu unterstützen. B.
Hub: [Outgoing][178.79.159.147:1511] DRCM AAAA BBBB ADCS/0.10 1649612991
Auch im passiven Modus muss der Client, Bnach Erhalt dieses Befehls, seinen privaten Port mitteilen, der für die Verbindung zum Hub über NAT verwendet wird.
Hub: [Incoming][178.79.159.147:1511] DNAT BBBB AAAA ADCS/0.10 59566 1649612991
Nach Erhalt dieser Informationen A versucht der Client sofort, eine Verbindung zum Client herzustellen B und gibt seinen eigenen privaten Port an.
Hub: [Outgoing][178.79.159.147:1511] D<b>RNT</b> AAAA BBBB ADCS/0.10 <b>50758</b> 1649612991Was ist da interessant? Es geht darum, den Endpunkt derselben Verbindung zu verschieben, indem eine neue Verbindung zur öffentlichen Adresse über den bereits verwendeten privaten Port hergestellt wird.

Bingo!
Natürlich hat das NAT des Clients B das volle Recht, die erste Verbindungsanfrage des Clients abzulehnen, Aaber bereits seine eigene Anfrage strömt in das 'Loch', das durch diese Verbindung geschaffen wurde, und die Verbindung wird tatsächlich hergestellt.

Eine Illustration, die zu dem gesamten Prozess passt, mit der Einschränkung, dass keine öffentlichen Ports verwendet werden, die von einer Sitzung geöffnet sind NAT‒O, sowie private Adressen.
Epilog
Zum Zeitpunkt des Schreibens des (originalen) Artikels arbeiten etwa die Hälfte der DC-Kunden im passiven Modus. Das bedeutet, dass ein Viertel aller möglichen Verbindungen nicht hergestellt werden kann.
Zukünftig , indem bestehende Verbindungen genutzt werden A‒O und B‒O um eine direkte Client-zu-Client-Verbindung herzustellen, selbst wenn A und B sie sich im passiven Modus befinden.
Quelle: habr.com
