Använder NAT Traversal för att ansluta användare i passivt läge

Den här artikeln är en fri översättning av ett av inläggen i DC++ utvecklarblogg.

Med tillstånd av författaren (liksom för tydlighetens och intressets skull) färgade jag den med länkar och kompletterade den med lite personlig forskning.

Inledning

Minst en användare av det anslutande paret måste vara i aktivt läge vid denna tidpunkt. NAT-traverseringsmekanismen kommer att vara användbar när det aktiva läget inte är konfigurerat på någon sida. Detta beror vanligtvis på att en brandvägg eller NAT-enhet blockerar inkommande anslutningar.

Om båda klienterna är i aktivt läge

Den initierande klienten skickar ett kommando som innehåller sin egen IP-adress och port $ConnectToMe till en annan kund. Med hjälp av dessa data upprättar klienten som tog emot kommandot en förbindelse med initiatorn.

Om en av klienterna är i passivt läge

Genom navet, en passiv klient A skickar ett kommando $RevConnectToMe aktiv klient Bsom sedan svarar med kommandot $ConnectToMe.

Använder NAT Traversal för att ansluta användare i passivt läge
Som en server S i fallet ovan finns en DC-nav

Om båda klienterna är i passivt läge på ADC-nav

Kunder bakom olika NAT A и B gick med i navet S.

Använder NAT Traversal för att ansluta användare i passivt läge
Så här ser anslutningen till navet ut från klientsidan A

Hubben accepterar anslutningar på port 1511. Klient A gör utgående anslutningar från sitt privata nätverk via port 50758. Hubben ser i sin tur adressen till NAT-enheten, arbetar med den och sänder den till klienter enligt deras identifierare.

kund A skickar till servern S meddelande som ber om hjälp med att ansluta till en klient B.

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

Även i passivt läge, klienten B, efter att ha fått det här kommandot, måste rapportera sin privata port som används för att ansluta till hubben via NAT.

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

Efter att ha mottagit denna information kunden A försöker omedelbart upprätta en förbindelse med klienten B och rapporterar sin egen privata hamn.

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

Vad är intresset? Intresset är att flytta ändpunkten för samma anslutning genom att skapa en ny anslutning till en allmän adress genom en redan använd privat port.

Använder NAT Traversal för att ansluta användare i passivt läge
Bingo!

Naturligtvis, i detta fall klienten NAT B har all rätt att avslå den första anslutningsbegäran från en klient A, men hans egen begäran rusar in i "hålet" som skapas av just denna anslutning, och anslutningen upprättas.

Använder NAT Traversal för att ansluta användare i passivt läge
Illustration lämplig för hela processen med varningen att protokoll använder inte offentliga portar som öppnas av sessionen NAT-S, samt privata adresser.

Epilog

När du skriver (original) artikeln arbetar ungefär hälften av DC-klienterna i passivt läge. Det innebär att en fjärdedel av alla möjliga kopplingar inte kan göras.

Ytterligare DC++ kommer att kunna kringgå NATanvända befintliga anslutningar A-S и B-S att upprätta en direkt klient-klient-anslutning, även om A и B är i passivt läge.

Källa: will.com

Lägg en kommentar