Brug af NAT Traversal til at forbinde brugere i passiv tilstand

Denne artikel er en gratis oversættelse af en af ​​posterne i DC++ udviklerblog.

Med tilladelse fra forfatteren (såvel som for klarhed og interesse) farvelagde jeg den med links og supplerede den med nogle personlige undersøgelser.

Indledning

Mindst én bruger af det forbindende par skal være i aktiv tilstand på dette tidspunkt. NAT-gennemløbsmekanismen vil være nyttig, når den aktive tilstand ikke er konfigureret på begge sider. Dette skyldes normalt, at en firewall eller NAT-enhed blokerer for indgående forbindelser.

Hvis begge klienter er i aktiv tilstand

Den initierende klient sender en kommando, der indeholder sin egen IP-adresse og port $ConnectToMe til en anden klient. Ved at bruge disse data etablerer den klient, der modtog kommandoen, en forbindelse med initiativtageren.

Hvis en af ​​klienterne er i passiv tilstand

Gennem navet, en passiv klient A sender en kommando $RevConnectToMe aktiv klient Bsom så svarer med kommandoen $ConnectToMe.

Brug af NAT Traversal til at forbinde brugere i passiv tilstand
Som server S i tilfældet ovenfor er der en DC-hub

Hvis begge klienter er i passiv tilstand tændt ADC-hub

Kunder bag forskellige NAT'er A и B sluttede sig til navet S.

Brug af NAT Traversal til at forbinde brugere i passiv tilstand
Sådan ser forbindelsen til hubben ud fra klientsiden A

Hubben accepterer forbindelser på port 1511. Klient A laver udgående forbindelser fra sit private netværk via port 50758. Hubben ser til gengæld adressen på NAT-enheden, arbejder med den og udsender den til klienter i henhold til deres identifikatorer.

Kunde A sender til serveren S besked, der beder om hjælp til at oprette forbindelse til en klient B.

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

Også i passiv tilstand, klienten B, efter at have modtaget denne kommando, skal rapportere sin private port, der blev brugt til at oprette forbindelse til hub'en via NAT.

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

Efter at have modtaget disse oplysninger klienten A forsøger straks at etablere en forbindelse med klienten B og melder om sin egen private havn.

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

Hvad er interessen? Interessen er at flytte endepunktet for den samme forbindelse ved at skabe en ny forbindelse til en offentlig adresse gennem en allerede brugt privat havn.

Brug af NAT Traversal til at forbinde brugere i passiv tilstand
Bingo!

Selvfølgelig, i dette tilfælde klienten NAT B har fuld ret til at afvise den første forbindelsesanmodning fra en klient A, men hans egen anmodning styrter ind i det "hul", der er skabt af netop denne forbindelse, og forbindelsen er etableret.

Brug af NAT Traversal til at forbinde brugere i passiv tilstand
Illustration egnet til hele processen med det forbehold, at protokol bruger ikke offentlige porte, der åbnes af sessionen NAT-S, samt private adresser.

Epilog

På tidspunktet for skrivning af den (originale) artikel, arbejder cirka halvdelen af ​​DC-klienterne i passiv tilstand. Det betyder, at en fjerdedel af alle mulige forbindelser ikke kan laves.

Yderligere DC++ vil være i stand til at omgå NATved at bruge eksisterende forbindelser A-S и B-S at etablere en direkte klient-klient forbindelse, selvom A и B er i passiv tilstand.

Kilde: www.habr.com

Tilføj en kommentar