Jika ada batasan jumlah port yang dimiliki satu mesin dan satu soket hanya dapat mengikat ke nomor port yang tidak digunakan, bagaimana server mengalami jumlah yang sangat tinggi (lebih dari jumlah port maksimal) dari permintaan yang menangani ini? Apakah itu hanya dilakukan dengan membuat sistem terdistribusi, yaitu, banyak server di banyak mesin?
29
Anda salah - keunikan soket ditentukan oleh empat faktor:
Saat menawarkan layanan jaringan, 1. dan 2. biasanya statis (mis. IP 10.0.0.1, port 80) tetapi kecuali jika Anda mengharapkan ribuan koneksi dari satu klien (atau satu gateway NAT), Anda tidak akan mendorong batas untuk kemungkinan kombinasi 3. dan 4. sebelum Anda kehabisan sumber daya lokal.
Jadi, meskipun secara praktis klien tidak akan menggunakan port yang sudah digunakan untuk koneksi untuk membuka koneksi ke alamat IP tujuan yang berbeda, penipisan nomor port akan menjadi masalah terkecil Anda untuk hampir semua aplikasi - baik itu di server atau sisi klien.
Masalahnya adalah masalah yang sangat nyata dengan gateway NAT (router) yang melayani klien dengan koneksi outbound terbuka yang tinggi (mis. Torrents) - di sana Anda akan melihat penipisan nomor port setelah pool port yang tersedia untuk NAT telah dikosongkan. Dalam hal ini gateway NAT tidak dapat membuat asosiasi tambahan, sehingga secara efektif memotong klien dari internet.
sumber
Pertanyaannya adalah bagaimana menangani jumlah koneksi yang besar (> 64k). Dua metode yang paling umum adalah:
Menambahkan lebih banyak server, yang meningkatkan jumlah alamat src / dst dan nomor port tuple. Ada beberapa cara untuk berbagi beban di beberapa server; DNS round robin adalah satu; ada yang lain
Menyebarkan "carrier-grade NAT" (yang menurut hemat saya seorang teman dalam pandangan saya disebut sebagai "NAT yang lebih jelek"). Ini pada dasarnya adalah NAT dari NAT. Ini memiliki implikasi yang sangat buruk untuk aplikasi, tetapi itulah yang dilakukan oleh beberapa penyedia besar ketika mereka kehabisan ruang IPv4 dan / atau nomor port, dan / atau mereka tidak ingin pindah ke IPv6.
sumber
(more than the max port number)
.