Použitie NAT Traversal na pripojenie používateľov v pasívnom režime

Tento článok je voľným prekladom jedného zo záznamov v Vývojársky blog DC++.

S dovolením autora (ako aj pre prehľadnosť a zaujímavosť) som ho prifarbil odkazmi a doplnil o nejaký osobný prieskum.

Úvod

Najmenej jeden používateľ pripájacieho páru musí byť momentálne v aktívnom režime. Mechanizmus NAT traversal bude užitočný, keď aktívny režim nie je nakonfigurovaný ani na jednej strane. Zvyčajne je to spôsobené bránou firewall alebo zariadením NAT, ktoré blokuje prichádzajúce pripojenia.

Ak sú obaja klienti v aktívnom režime

Iniciujúci klient odošle príkaz obsahujúci jeho vlastnú IP adresu a port $ConnectToMe inému klientovi. Pomocou týchto údajov klient, ktorý prijal príkaz, vytvorí spojenie s iniciátorom.

Ak je jeden z klientov v pasívnom režime

Cez hub, pasívny klient A odošle príkaz $RevConnectToMe aktívny klient Bktorý potom odpovie príkazom $ConnectToMe.

Použitie NAT Traversal na pripojenie používateľov v pasívnom režime
Ako server S vo vyššie uvedenom prípade je DC rozbočovač

Ak sú obaja klienti v pasívnom režime zapnuté ADC rozbočovač

Klienti za rôznymi NATmi A и B sa pripojil k rozbočovaču S.

Použitie NAT Traversal na pripojenie používateľov v pasívnom režime
Takto vyzerá pripojenie k hubu zo strany klienta A

Hub akceptuje pripojenia na porte 1511. Klient A vytvára odchádzajúce spojenia zo svojej privátnej siete cez port 50758. Hub zase vidí adresu NAT zariadenia, pracuje s ním a rozosiela ho klientom podľa ich identifikátorov.

zákazník A odošle na server S správu so žiadosťou o pomoc pri spojení s klientom B.

Hub: [Outgoing][178.79.159.147:1511] DRCM AAAA BBBB ADCS/0.10 1649612991

Aj v pasívnom režime klient B, po prijatí tohto príkazu musí oznámiť svoj súkromný port, ktorý sa používa na pripojenie k hubu cez NAT.

Hub: [Incoming][178.79.159.147:1511] DNAT BBBB AAAA ADCS/0.10 59566 1649612991

Po obdržaní týchto informácií klient A sa okamžite pokúsi nadviazať spojenie s klientom B a hlási svoj vlastný súkromný prístav.

Hub:		[Outgoing][178.79.159.147:1511]	 	D<b>RNT</b> AAAA BBBB ADCS/0.10 <b>50758</b> 1649612991

Aký je záujem? Záujem je o posunutie koncového bodu toho istého spojenia vytvorením nového spojenia na verejnú adresu cez už používaný súkromný port.

Použitie NAT Traversal na pripojenie používateľov v pasívnom režime
Bingo!

Samozrejme, v tomto prípade klient NAT B má plné právo odmietnuť prvú žiadosť o pripojenie od klienta A, ale jeho vlastná požiadavka sa ponáhľa do „diery“ vytvorenej práve týmto spojením a spojenie je nadviazané.

Použitie NAT Traversal na pripojenie používateľov v pasívnom režime
Ilustrácia vhodná pre celý proces s výhradou, že protokol nepoužíva verejné prístavy otvorené reláciou NAT-S, ako aj súkromné ​​adresy.

Epilóg

V čase písania (pôvodného) článku približne polovica klientov DC pracuje v pasívnom režime. To znamená, že nie je možné uskutočniť štvrtinu všetkých možných spojení.

V budúcnosti DC++ bude môcť obísť NATpomocou existujúcich spojení A-S и B-S vytvoriť priame spojenie klient-klient, aj keď A и B sú v pasívnom režime.

Zdroj: hab.com

Pridať komentár