Saya pikir itu adalah pertanyaan yang sangat klasik, tetapi, saya pikir saya memiliki latar belakang, saya tidak memiliki cukup kosa kata lagi untuk mencari dan memahami dengan benar di Web.
Katakanlah saya memiliki jaringan rumah dengan 192.168.0.1 (IP.1) dan 192.168.0.2 (IP.2) dan kami berdua bermain untuk Counter Strike memukul server luar yang persis sama.
Bagaimana router rumah saya tahu paket mana yang akan masuk ke IP.1? Saya sering membaca hal-hal dengan alamat NAT dan xxx.xxx/y. ** Di mana tertulis bagian / y di tumpukan TCP / IP?
Apakah kita benar-benar membutuhkan NAT untuk itu? Apa yang saya mengerti dari artikel Wikipedia adalah bahwa NAT dibuat untuk mengoptimalkan alamat IP, ketika beberapa komputer dimatikan. Apakah itu juga memungkinkan untuk menghubungkan 5 perangkat dengan hanya 1 IP publik?
Jawaban:
(Untuk yang berikut ini saya akan mengabaikan tindakan pencarian DNS atau lapisan dua, karena itu bukan bagian yang relevan untuk cerita NAT.)
Setiap koneksi TCP adalah tuple dari empat bagian:
Singkatnya: IP tujuan digunakan untuk mendapatkan paket ke mesin yang benar, port tujuan digunakan untuk mendapatkan paket pada mesin itu ke program / sesi yang benar. Sumber IP digunakan untuk mengetahui ke mana harus mengirim balasan. Hal yang sama berlaku untuk port sumber. Ketika balasan dikirim, sumber dan tujuan ditukar dengan mudah.
Mari kita mulai dengan dua komputer tanpa NAT:
1.1.1.1
3.3.3.3
80
Ketika komputer meminta halaman web, pertama-tama komputer akan memilih portnumber acak yang tidak digunakan dari rentang acak (1024-65535). Ayo pilih
2345
. Maka urutan berikut akan terjadi: Komputer mengirim paket itu dengan: IP1.1.1.1
sumber2345
, port sumber , IP3.3.3.3
tujuan, port tujuan80
. Paket-paket tiba di server web, ia melihat IP dan port sendiri80
, jadi ia tahu ini adalah permintaan untuk halaman web. Server web kemudian mengirimkan halaman web kembali dalam paket-paket dengan Source IP3.3.3.3
, Source port 80, IP1.1.1.1
tujuan, port tujuan2345
. Komputer menerima paket-paket ini, dan tahu halaman web yang diminta itu, karena portnumber2345
.Kombinasi port ini sering ditulis demikian:
1.1.1.1:2345
dan3.3.3.3:80
.Sekarang, jumlah komputer di internet jauh melebihi jumlah alamat IPv4 yang tersedia. Untuk mempertahankan ruang alamat, serangkaian rentang alamat pribadi diperkenalkan, yang dapat digunakan secara bebas untuk berbagi alamat. Rangese ini disebut sebagai RFC1918 dan adalah sebagai berikut:
Alamat-alamat ini tidak ada dalam tabel perutean internet, jadi jika Anda akan mengirim paket dengan tujuan dalam rentang ini di tulang punggung internet, mereka hanya akan dijatuhkan. Ini karena jutaan orang menggunakan alamat yang sama. Alamat-alamat ini perlu diterjemahkan ke sesuatu yang bermanfaat untuk internet. Di sinilah Terjemahan Alamat Jaringan masuk:
Kami memiliki dua komputer:
192.168.0.1
dan B:192.168.0.2
1.1.1.1
.Pertama-tama kedua komputer memilih port acak: katakanlah:
192.168.0.1:2345
dan192.168.0.2:5432
.Komputer A mengirim paket itu dengan sumber
192.168.0.1:2345
dan tujuan3.3.3.3:80
. Gateway menerjemahkan paket ini ke1.1.1.1:2345
tujuan sumber3.3.3.3:80
dan mengingat semua balasan ke kombinasi ini192.168.0.1
. Jadi, ketika menerima balasan dengan sumber3.3.3.3:80
dan tujuan1.1.1.1:2345
, ia akan menerjemahkannya ke sumber3.3.3.3:80
dan tujuan192.168.0.1:2345
dan mengirimkan paket.Komputer B mengirim paketnya dengan sumber
192.168.0.2:5432
dan tujuan3.3.3.3:80
. Gateway menerjemahkan paket ini ke1.1.1.1:5432
tujuan sumber3.3.3.3:80
dan mengingat semua balasan ke kombinasi ini192.168.0.2
. Jadi, ketika menerima balasan dengan sumber3.3.3.3:80
dan tujuan1.1.1.1:5432
, ia akan menerjemahkannya ke sumber3.3.3.3:80
dan tujuan192.168.0.2:5432
dan mengirimkan paket.Jika kedua komputer kebetulan memilih nomor port sumber yang sama, gateway hanya akan memilih nomor port sumber acak gratis lainnya, dan ingat untuk menerjemahkan nomor port juga. Ini kadang-kadang disebut sebagai PAT (Port Address Translation). Ini pada dasarnya adalah bagian dari NAT.
Ada beberapa implementasi untuk ini semua. Gateway mungkin hanya mengingat "Komputer X menggunakan port sumber Y" dan meneruskan apa pun dengan port Y ke komputer X. Mungkin ingat bahwa Komputer X menggunakan port sumber Y dan tujuan Z "dan hanya meneruskan apa pun dari port Z ke port Y kembali ke komputer X. Atau ada opsi yang mengingat seluruh tuple dan hanya mengirim lalu lintas ke komputer X yang cocok dengan seluruh sumber / tujuan ip dan port.
sumber