Ez a cikk egy szabad fordítása a DC++ fejlesztőinek blogjából. .
A szerző engedélyével (valamint a láthatóság és az érdekesség kedvéért) színesített linkekkel és néhány személyes kutatással kiegészítettem.
Bevezetés
Jelenleg legalább az egyik felhasználónak aktív módban kell lennie az összekapcsolódó párban. A NAT „kikerülő” mechanizmus hasznos lehet, ha egyik fél sem állította be az aktív módot. Ez általában a tűzfal vagy NAT eszköz által blokkolt bejövő kapcsolatok miatt fordul elő.
Ha mindkét kliens aktív módban van,
az indító kliens elküldi a saját IP-címét és portját tartalmazó parancsot a másik kliensnek. Az ezen adatok felhasználásával a parancsot kapó kliens kapcsolatot létesít az indítóval.
Ha az egyik kliens passzív módban van,
a passzív kliens a hubon keresztül A küld egy parancsot az aktív kliensnek, B, amely aztán válaszol a $ConnectToMe parancsokkal.

A szerver S az előző példában a DC hub.
Ha mindkét kliens passzív módban van az
a különböző NAT mögött lévő kliensek A és B csatlakoznak a hubhoz. S.

Így néz ki az összekapcsolódás a kliens oldaláról. A
A hub a 1511-es porton fogadja a kapcsolatokat. A kliens A kimenő kapcsolatokat létesít a saját privát hálózatából az 50758-as porton. A hub ezután látja a NAT eszköz címét, dolgozik vele, és a klienseknek a megfelelő azonosítók szerint közvetíti.
Ügyfél A elküldi a szervernek S a kérést, hogy segítsen a klienssel való kapcsolatfelvételben. B.
Hub: [Outgoing][178.79.159.147:1511] DRCM AAAA BBBB ADCS/0.10 1649612991
Passzív módban lévén a kliens B, miután megkapta ezt a parancsot, közölnie kell a privát portját, amelyet a hubbal való NAT-on keresztüli kapcsolatra használ.
Hub: [Incoming][178.79.159.147:1511] DNAT BBBB AAAA ADCS/0.10 59566 1649612991
Ezen információk megérkezése után a kliens A azonnal megpróbál kapcsolatot létesíteni a klienssel B és megadja a saját privát portját.
Ablak: [Kimenő][178.79.159.147:1511] D<b>RNT</b> AAAA BBBB ADCS/0.10 <b>50758</b> 1649612991Mi az érdekesség? Az érdekesség abban rejlik, hogy ugyanannak a kapcsolatnak a végpontját eltoljuk egy új kapcsolódás létrehozásával egy nyilvános címen, a már használt privát porton keresztül.

Bingo!
Természetesen a kliens NAT-ja B teljes joggal elutasíthatja az első kapcsolatfelvételi kérelmet a klienstől. A, de saját lekérdezése azonban a kapcsolaton létrehozott «lyukra» irányul, és a kapcsolat mégis létrejön.

Illustráció, amely alkalmas az egész folyamatra azzal a megjegyzéssel, hogy nem használ nyilvános portokat, amelyeket a session nyit meg NAT‒S, valamint privát címeket.
Epilógus
A cikk írásakor (az eredeti) a DC ügyfelek körülbelül fele passzív módban működik. Ez azt jelenti, hogy minden lehetséges kapcsolat negyedét nem lehet létrehozni.
Később , használva a meglévő kapcsolatokat A‒S és B‒S a közvetlen kliens-kliens kapcsolat létrehozásához, még akkor is, ha A és B passzív módban vannak.
Forrás: habr.com
