Menggunakan NAT Traversal untuk menyambungkan pengguna dalam mod pasif

Artikel ini ialah terjemahan percuma salah satu entri dalam Blog pembangun DC++.

Dengan izin pengarang (serta untuk kejelasan dan minat), saya mewarnainya dengan pautan dan menambahnya dengan beberapa penyelidikan peribadi.

Pengenalan

Sekurang-kurangnya seorang pengguna pasangan penyambung mesti berada dalam mod aktif pada masa ini. Mekanisme traversal NAT akan berguna apabila mod aktif tidak dikonfigurasikan pada kedua-dua sisi. Ini biasanya disebabkan oleh tembok api atau peranti NAT yang menyekat sambungan masuk.

Jika kedua-dua pelanggan berada dalam mod aktif

Pelanggan yang memulakan menghantar arahan yang mengandungi alamat IP dan portnya sendiri $ConnectToMe kepada pelanggan lain. Menggunakan data ini, klien yang menerima arahan mewujudkan sambungan dengan pemula.

Jika salah seorang pelanggan berada dalam mod pasif

Melalui hab, pelanggan pasif A menghantar arahan $RevConnectToMe pelanggan aktif Byang kemudiannya bertindak balas dengan arahan $ConnectToMe.

Menggunakan NAT Traversal untuk menyambungkan pengguna dalam mod pasif
Sebagai pelayan S dalam kes di atas terdapat hab DC

Jika kedua-dua pelanggan berada dalam mod pasif dihidupkan hab ADC

Pelanggan di belakang NAT yang berbeza A ΠΈ B menyertai hab S.

Menggunakan NAT Traversal untuk menyambungkan pengguna dalam mod pasif
Beginilah rupa sambungan ke hab dari sisi klien A

Hab menerima sambungan pada port 1511. Pelanggan A membuat sambungan keluar daripada rangkaian peribadinya melalui port 50758. Hab pula melihat alamat peranti NAT, berfungsi dengannya dan menyiarkannya kepada pelanggan mengikut pengecam mereka.

Pelanggan A menghantar ke pelayan S mesej meminta bantuan berhubung dengan pelanggan B.

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

Juga dalam mod pasif, pelanggan B, setelah menerima arahan ini, mesti melaporkan port peribadinya yang digunakan untuk menyambung ke hab melalui NAT.

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

Selepas menerima maklumat ini pelanggan A segera cuba mewujudkan hubungan dengan pelanggan B dan melaporkan pelabuhan peribadinya sendiri.

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

Apa minat? Minatnya adalah untuk mengalihkan titik akhir sambungan yang sama dengan mencipta sambungan baharu ke alamat awam melalui port persendirian yang telah digunakan.

Menggunakan NAT Traversal untuk menyambungkan pengguna dalam mod pasif
Bingo!

Sudah tentu, dalam kes ini pelanggan NAT B mempunyai hak untuk menolak permintaan sambungan pertama daripada pelanggan A, tetapi permintaannya sendiri tergesa-gesa ke dalam "lubang" yang dicipta oleh sambungan ini, dan sambungan itu diwujudkan.

Menggunakan NAT Traversal untuk menyambungkan pengguna dalam mod pasif
Ilustrasi sesuai untuk keseluruhan proses dengan kaveat itu protokol tidak menggunakan port awam yang dibuka oleh sesi NATβ€’S, serta alamat peribadi.

Epilog

Pada masa menulis artikel (asal), kira-kira separuh daripada pelanggan DC bekerja dalam mod pasif. Ini bermakna satu perempat daripada semua sambungan yang mungkin tidak dapat dibuat.

Pada masa akan datang DC++ akan dapat memintas NATmenggunakan sambungan sedia ada Aβ€’S ΠΈ Bβ€’S untuk mewujudkan sambungan pelanggan-klien langsung, walaupun jika A ΠΈ B berada dalam mod pasif.

Sumber: www.habr.com

Tambah komen