Utilizarea NAT Traversal pentru a conecta utilizatorii în modul pasiv

Acest articol este o traducere gratuită a uneia dintre intrările din Blogul dezvoltatorilor DC++.

Cu permisiunea autorului (precum și pentru claritate și interes), l-am colorat cu link-uri și l-am completat cu câteva cercetări personale.

Introducere

Cel puțin un utilizator al perechii de conectare trebuie să fie în modul activ în acest moment. Mecanismul de traversare NAT va fi util atunci când modul activ nu este configurat de nicio parte. Acest lucru se datorează de obicei unui firewall sau un dispozitiv NAT care blochează conexiunile de intrare.

Dacă ambii clienți sunt în modul activ

Clientul care inițiază trimite o comandă care conține propria sa adresă IP și port $ConnectToMe unui alt client. Folosind aceste date, clientul care a primit comanda stabilește o conexiune cu inițiatorul.

Dacă unul dintre clienți este în modul pasiv

Prin hub, un client pasiv A trimite o comandă $RevConnectToMe client activ Bcare apoi răspunde cu comanda $ConnectToMe.

Utilizarea NAT Traversal pentru a conecta utilizatorii în modul pasiv
Ca server S în cazul de mai sus există un hub DC

Dacă ambii clienți sunt în modul pasiv pornit Hub ADC

Clienți din spatele diferitelor NAT A и B s-a alăturat hub-ului S.

Utilizarea NAT Traversal pentru a conecta utilizatorii în modul pasiv
Așa arată conexiunea la hub din partea clientului A

Hub-ul acceptă conexiuni pe portul 1511. Client A face conexiuni de ieșire din rețeaua sa privată prin portul 50758. Hub-ul, la rândul său, vede adresa dispozitivului NAT, lucrează cu acesta și o transmite clienților în funcție de identificatorii acestora.

client A trimite la server S mesaj prin care se solicită ajutor pentru conectarea cu un client B.

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

Tot în modul pasiv, clientul B, după ce a primit această comandă, trebuie să raporteze portul său privat folosit pentru a se conecta la hub prin NAT.

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

După ce a primit aceste informații clientul A încearcă imediat să stabilească o legătură cu clientul B și raportează propriul port privat.

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

Care este interesul? Interesul este de a muta punctul final al aceleiași conexiuni prin crearea unei noi conexiuni la o adresă publică printr-un port privat deja utilizat.

Utilizarea NAT Traversal pentru a conecta utilizatorii în modul pasiv
Bingo!

Desigur, în acest caz clientul NAT B are tot dreptul să respingă prima cerere de conectare de la un client A, dar propria sa cerere se repezi în „gaura” creată chiar de această legătură, iar legătura se stabilește.

Utilizarea NAT Traversal pentru a conecta utilizatorii în modul pasiv
Ilustrație potrivită pentru întregul proces cu avertismentul că protocol nu folosește porturi publice deschise de sesiune NAT-S, precum și adrese private.

Epilog

La momentul scrierii articolului (original), aproximativ jumătate dintre clienții DC lucrează în modul pasiv. Aceasta înseamnă că un sfert din toate conexiunile posibile nu pot fi realizate.

Mai departe DC++ va putea ocoli NATfolosind conexiunile existente A-S и B-S pentru a stabili o conexiune directă client-client, chiar dacă A и B sunt în modul pasiv.

Sursa: www.habr.com

Adauga un comentariu