Gebruik NAT Traversal om gebruikers in passiewe modus te verbind

Hierdie artikel is 'n gratis vertaling van een van die inskrywings in DC++ ontwikkelaarblog.

Met die toestemming van die skrywer (asook vir duidelikheid en belangstelling), het ek dit ingekleur met skakels en aangevul met 'n bietjie persoonlike navorsing.

Inleiding

Ten minste een gebruiker van die koppelpaar moet op hierdie tydstip in aktiewe modus wees. Die NAT-deurkruismeganisme sal nuttig wees wanneer die aktiewe modus nie aan weerskante gekonfigureer is nie. Dit is gewoonlik as gevolg van 'n firewall of NAT-toestel wat inkomende verbindings blokkeer.

As beide kliënte in aktiewe modus is

Die inisiërende kliënt stuur 'n opdrag wat sy eie IP-adres en poort bevat $ConnectToMe na 'n ander kliënt. Deur hierdie data te gebruik, vestig die kliënt wat die opdrag ontvang het 'n verbinding met die inisieerder.

As een van die kliënte in passiewe modus is

Deur die spilpunt, 'n passiewe kliënt A stuur 'n opdrag $RevConnectToMe aktiewe kliënt Bwat dan reageer met die opdrag $ConnectToMe.

Gebruik NAT Traversal om gebruikers in passiewe modus te verbind
As 'n bediener S in die geval hierbo is daar 'n GS-hub

As beide kliënte in passiewe modus is ADC-hub

Kliënte agter verskillende NAT'e A и B by die spilpunt aangesluit S.

Gebruik NAT Traversal om gebruikers in passiewe modus te verbind
Dit is hoe die verbinding met die spilpunt van die kliënt se kant af lyk A

Die spilpunt aanvaar verbindings op poort 1511. Kliënt A maak uitgaande verbindings vanaf sy private netwerk via poort 50758. Die spilpunt sien op sy beurt die adres van die NAT-toestel, werk daarmee en saai dit uit na kliënte volgens hul identifiseerders.

kliënt A stuur na bediener S boodskap wat hulp vra om met 'n kliënt te skakel B.

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

Ook in passiewe modus, die kliënt B, nadat hy hierdie opdrag ontvang het, moet sy private poort rapporteer wat gebruik is om aan die spilpunt te koppel via NAT.

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

Na ontvangs van hierdie inligting die kliënt A probeer dadelik om 'n verbinding met die kliënt te vestig B en rapporteer sy eie private hawe.

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

Wat is die belangstelling? Die belang is om die eindpunt van dieselfde verbinding te verskuif deur 'n nuwe verbinding na 'n publieke adres te skep deur 'n reeds gebruikte privaat hawe.

Gebruik NAT Traversal om gebruikers in passiewe modus te verbind
Bingo!

Natuurlik, in hierdie geval die kliënt NAT B het alle reg om die eerste verbindingsversoek van 'n kliënt te verwerp A, maar sy eie versoek jaag in die "gat" wat deur hierdie einste verbinding geskep word, en die verbinding word tot stand gebring.

Gebruik NAT Traversal om gebruikers in passiewe modus te verbind
Illustrasie geskik vir die hele proses met die voorbehoud dat protokol gebruik nie publieke hawens wat deur die sessie oopgemaak is nie NAT-S, sowel as private adresse.

Epiloog

Ten tyde van die skryf van die (oorspronklike) artikel, werk ongeveer die helfte van die DC-kliënte in passiewe modus. Dit beteken dat 'n kwart van alle moontlike verbindings nie gemaak kan word nie.

Verder DC++ sal NAT kan omseilbestaande verbindings te gebruik A-S и B-S om 'n direkte kliënt-kliënt-verbinding te vestig, selfs al A и B is in passiewe modus.

Bron: will.com

Voeg 'n opmerking