(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:
<source IP> <source port> <destination IP> <destination port>
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:
- Komputer memiliki IP
1.1.1.1
- Server web memiliki IP
3.3.3.3
- Port standar untuk HTTP adalah
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: IP 1.1.1.1
sumber 2345
, port sumber , IP 3.3.3.3
tujuan, port tujuan 80
. Paket-paket tiba di server web, ia melihat IP dan port sendiri 80
, jadi ia tahu ini adalah permintaan untuk halaman web. Server web kemudian mengirimkan halaman web kembali dalam paket-paket dengan Source IP 3.3.3.3
, Source port 80, IP 1.1.1.1
tujuan, port tujuan 2345
. Komputer menerima paket-paket ini, dan tahu halaman web yang diminta itu, karena portnumber 2345
.
Kombinasi port ini sering ditulis demikian: 1.1.1.1:2345
dan 3.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:
- 192.168.0.0 - 192.168.255.255
- 172.16.0.0 - 172.31.255.255
- 10.0.0.0 - 10.255.255.255
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:
- A:
192.168.0.1
dan B:192.168.0.2
- Gateway mereka memiliki IP publik
1.1.1.1
.
- Kami menyimpan server web yang sama.
- Kedua komputer menginginkan halaman web yang sama dari server yang sama.
Pertama-tama kedua komputer memilih port acak: katakanlah: 192.168.0.1:2345
dan 192.168.0.2:5432
.
Komputer A mengirim paket itu dengan sumber 192.168.0.1:2345
dan tujuan 3.3.3.3:80
. Gateway menerjemahkan paket ini ke 1.1.1.1:2345
tujuan sumber 3.3.3.3:80
dan mengingat semua balasan ke kombinasi ini 192.168.0.1
. Jadi, ketika menerima balasan dengan sumber 3.3.3.3:80
dan tujuan 1.1.1.1:2345
, ia akan menerjemahkannya ke sumber 3.3.3.3:80
dan tujuan 192.168.0.1:2345
dan mengirimkan paket.
Komputer B mengirim paketnya dengan sumber 192.168.0.2:5432
dan tujuan 3.3.3.3:80
. Gateway menerjemahkan paket ini ke 1.1.1.1:5432
tujuan sumber 3.3.3.3:80
dan mengingat semua balasan ke kombinasi ini 192.168.0.2
. Jadi, ketika menerima balasan dengan sumber 3.3.3.3:80
dan tujuan 1.1.1.1:5432
, ia akan menerjemahkannya ke sumber 3.3.3.3:80
dan tujuan 192.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.