Uzante NAT Traversal por konekti uzantojn en pasiva reĝimo

Ĉi tiu artikolo estas libera traduko de unu el la enskriboj en DC++-programisto-blogo.

Kun la permeso de la aŭtoro (same kiel por klareco kaj intereso), mi kolorigis ĝin per ligiloj kaj kompletigis ĝin per iuj personaj esploroj.

Enkonduko

Almenaŭ unu uzanto de la koneksa paro devas esti en aktiva reĝimo nuntempe. La NAT-traversa mekanismo estos utila kiam la aktiva reĝimo ne estas agordita ambaŭflanke. Ĉi tio kutime ŝuldiĝas al fajroŝirmilo aŭ NAT-aparato blokanta envenantajn konektojn.

Se ambaŭ klientoj estas en aktiva reĝimo

La komencanta kliento sendas komandon enhavantan sian propran IP-adreson kaj havenon $ConnectToMe al alia kliento. Uzante ĉi tiujn datumojn, la kliento, kiu ricevis la komandon, establas ligon kun la iniciatinto.

Se unu el la klientoj estas en pasiva reĝimo

Tra la nabo, pasiva kliento A sendas ordonon $RevConnectToMe aktiva kliento Bkiu tiam respondas per la komando $ConnectToMe.

Uzante NAT Traversal por konekti uzantojn en pasiva reĝimo
Kiel servilo S en la supra kazo estas DC-nabo

Se ambaŭ klientoj estas en pasiva reĝimo ŝaltita ADC-nabo

Klientoj malantaŭ malsamaj NAToj A и B aliĝis al la nabo S.

Uzante NAT Traversal por konekti uzantojn en pasiva reĝimo
Jen kiel la konekto al la nabo aspektas de la klienta flanko A

La nabo akceptas konektojn sur haveno 1511. Kliento A faras elirantajn konektojn de sia privata reto per haveno 50758. La nabo, siavice, vidas la adreson de la NAT-aparato, laboras kun ĝi kaj elsendas ĝin al klientoj laŭ iliaj identigiloj.

Kliento A sendas al servilo S mesaĝo petante helpon por konekti kun kliento B.

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

Ankaŭ en pasiva reĝimo, la kliento B, ricevinte ĉi tiun komandon, devas raporti sian privatan havenon uzatan por konekti al la nabo per NAT.

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

Post ricevi ĉi tiun informon la kliento A tuj provas establi ligon kun la kliento B kaj raportas sian propran privatan havenon.

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

Kio estas la intereso? La intereso estas ŝanĝi la finpunkton de la sama konekto kreante novan konekton al publika adreso tra jam uzata privata haveno.

Uzante NAT Traversal por konekti uzantojn en pasiva reĝimo
Bingo!

Kompreneble, en ĉi tiu kazo la kliento NAT B havas tutan rajton malakcepti la unuan konekton de kliento A, sed lia propra peto rapidas en la "truon" kreitan de ĉi tiu sama konekto, kaj la ligo estas establita.

Uzante NAT Traversal por konekti uzantojn en pasiva reĝimo
Ilustraĵo taŭga por la tuta procezo kun la averto ke protokolo ne uzas publikajn havenojn malfermitajn de la sesio NATS, same kiel privatajn adresojn.

Epilogo

En la momento de verkado de la (originala) artikolo, proksimume duono de la DC-klientoj laboras en pasiva reĝimo. Ĉi tio signifas, ke kvarono de ĉiuj eblaj ligoj ne povas esti faritaj.

Plue DC++ povos preteriri NATuzante ekzistantajn konektojn AS и BS establi rektan kliento-klienton, eĉ se A и B estas en pasiva reĝimo.

fonto: www.habr.com

Aldoni komenton