Пайдаланушыларды пассивті режимде қосу үшін NAT Traversal пайдалану

Бұл мақала жазбалардың бірінің тегін аудармасы DC++ әзірлеушілер блогы.

Автордың рұқсатымен (сонымен қатар түсінікті және қызығушылық үшін) мен кейбір сілтемелер мен жеке зерттеулерді қостым.

Кіріспе

Қазіргі уақытта қосылатын жұптағы кем дегенде бір пайдаланушы белсенді режимде болуы керек. NAT өтуі екі тараптың да белсенді режимі конфигурацияланбаған кезде пайдалы. Бұл әдетте кіріс қосылымдар брандмауэр немесе NAT құрылғысы арқылы блокталғандықтан орын алады.

Екі клиент белсенді режимде болса

Бастауыш клиент өзінің IP мекенжайы мен порты бар пәрменді жібереді $ConnectToMe басқа клиентке. Осы деректерді пайдалана отырып, пәрменді алатын клиент бастамашымен байланыс орнатады.

Клиенттердің бірі пассивті режимде болса

Хаб арқылы пассивті клиент A пәрмен жібереді $RevConnectToMe белсенді клиент B, содан кейін ол $ConnectToMe пәрменімен жауап береді.

Пайдаланушыларды пассивті режимде қосу үшін NAT Traversal пайдалану
Сервер ретінде S жоғарыдағы жағдайда тұрақты ток концентраторы бар

Екі клиент те пассивті режимде болса ADC хабы

Әртүрлі NAT артында орналасқан клиенттер A и B хабқа қосылды S.

Пайдаланушыларды пассивті режимде қосу үшін NAT Traversal пайдалану
Клиент жағынан хабқа қосылу осылай көрінеді. A

Хаб 1511 портындағы қосылымдарды қабылдайды. Клиент A 50758 порты арқылы өзінің жеке желісінен шығыс қосылымдарды жасайды. Хаб өз кезегінде NAT құрылғысының мекенжайын көреді, онымен жұмыс істейді және олардың идентификаторларына сәйкес клиенттерге хабар таратады.

Клиент A серверге жібереді S клиентпен байланысуға көмек сұрайтын хабарлама B.

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

Пассивті режимде бола отырып, клиент B, осы пәрменді алғаннан кейін NAT арқылы хабқа қосылу үшін пайдаланылған жеке порты туралы хабарлауы керек.

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

Осы ақпаратты алғаннан кейін клиент A бірден клиентпен байланыс орнатуға тырысады B және өзінің жеке порты туралы хабарлайды.

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

Мұның мәні неде? Мәселе бұрыннан пайдаланылған жеке порт арқылы жалпы мекенжайға жаңа қосылым жасау арқылы бірдей қосылымның соңғы нүктесін ауыстыру болып табылады.

Пайдаланушыларды пассивті режимде қосу үшін NAT Traversal пайдалану
Бинго!

Әрине, бұл жағдайда клиенттің NAT B клиенттің бірінші қосылу сұрауынан бас тартуға толық құқығы бар A, бірақ оның өз өтініші дәл осы байланыс арқылы жасалған «тесікке» бағытталған және байланыс ақыры орнатылды.

Пайдаланушыларды пассивті режимде қосу үшін NAT Traversal пайдалану
Ескертумен бірге бүкіл процеске сәйкес келетін иллюстрация хаттама сеанс ашқан жалпы порттарды пайдаланбайды NAT-S, сонымен қатар жеке мекенжайлар.

Эпилогия

Жазу кезінде тұрақты ток тұтынушыларының шамамен жартысы пассивті режимде жұмыс істейді. Бұл барлық мүмкін болатын байланыстардың төрттен бірін орнату мүмкін емес дегенді білдіреді.

Болашақта DC++ NAT-ты айналып өте алады, бар қосылымдарды пайдалану A-S и B-S тікелей клиент-клиент байланысын орнату үшін, тіпті егер A и B пассивті режимде болады.

Ақпарат көзі: www.habr.com

DDoS қорғауы бар сайттар үшін сенімді хостинг, VPS VDS серверлерін сатып алыңыз 🔥 DDoS қорғанысы, VPS VDS серверлері бар сенімді веб-сайт хостингін сатып алыңыз | ProHoster