Saya telah melakukan penelitian sebanyak mungkin tentang hal ini tanpa menggali langsung dari sumber kernel. Tampaknya ada sejumlah besar informasi yang salah / informasi yang salah pada subjek, jadi saya harap ini menjawab pertanyaan untuk saya dan orang lain sekali dan untuk semua.
Sebenarnya IPv4 berbicara, apakah port exhaustion sebenarnya mungkin? Biarkan saya jelaskan:
- Tampaknya ada 65.535 port yang tersedia untuk digunakan. 0 tidak tersedia.
- Saya telah membaca bahwa port exhaustion memerlukan tuple (src ip, src port, dst ip, dst port) menjadi unik.
- Agar lebih jelas dan anggap saya dapat menggunakan 100% porta sesaat melalui pengaturan sysctl net.ipv4.ip_local_port_range
Dan ini pertanyaannya: Apakah ini cara kerjanya?
- Saya bisa memiliki koneksi 65k dari 127.0.0.1:(x) ke 127.0.0.1:80
- Saya dapat memiliki koneksi 65k dari 127.0.0.1:(x) ke 127.0.0.1-555
- Pada dasarnya sekali lagi, pertanyaannya adalah (srcip, srcport, dstip, dstport) harus unik, betul?
- Saya tidak bisa membuka lebih dari 65k koneksi dari ip "A" ke IP "B", Port "N"
- Demikian juga, satu IP tidak dapat membuka lebih dari 65k koneksi ke server web saya di xxxx: 80, namun saya dapat mendukung lebih dari 65k secara keseluruhan selama mereka berasal dari IP sumber yang berbeda ?
Akhirnya, saya sedikit bingung tentang port fana (keluar) dan port masuk yang sedang mendengarkan. Saya menyadari begitu koneksi dibuat, masing-masing sisi koneksi adalah peer dan sama, tetapi sebelum itu terjadi:
Misalnya, jika memang tuple (srcip, srcport, dstip, dstport) harus unik, mengapa jika saya aktifkan, misalnya
net.ipv4.ip_local_port_range = 1024 65535
Yang memungkinkan penggunaan port fana dari 1024-65535, bahwa jika saya memiliki layanan yang mengikat pada port 3306 (mySQL, misalnya), mereka kadang-kadang gagal memulai karena port sedang digunakan.
Apakah ini mengaitkan fakta bahwa: (Dan ini adalah pernyataan yang saya minta untuk divalidasi):
- (srcip, srcport, dstip, dstport) diperlukan untuk menjadi unik untuk setiap koneksi dengan kisaran port 1-65535 (tidak memperhatikan penggunaan OS port sesaat OS)
- Namun, untuk soket mengikat, itu bisa dilihat sebagai (srcip, srcport, *, *). Atau cara lain untuk mengatakan ini, apakah IP tidak boleh menggunakan port itu untuk alasan apa pun untuk diikat?
Saya dapat memverifikasi perilaku di atas, yaitu saya menggunakan baris sysctl yang tepat di atas, dan karenanya saya memindahkan mySQL ke port yang lebih rendah dari 1024 karena kadang-kadang dan secara acak gagal me-restart karena dengan asumsi OS menggunakan port itu (3306) untuk port fana.
sumber
Jawaban:
Anda memiliki dua pertanyaan utama di sini:
1.
Iya. Sebagai contoh, ambil router penyeimbang beban yang mengirim semua koneksi ke alamat IP NAT. Ini mungkin terjadi ketika Anda memiliki banyak
SRC IP
koneksi ke bottleneck dari satuDST IP
.Ini berarti server web Anda dapat memiliki banyak koneksi seperti:
dan itu baik-baik saja. Namun, jika semua 'Alamat Asing' sama, ini dapat menyebabkan masalah (mis. 'Router besar yang menjalankan server NAT <---> dengan satu alamat IP').
Jika saya harus mendalilkan mengapa kelelahan porta singkat bukan masalah yang umum, saya sarankan itu karena setiap port membutuhkan layanan mendengarkan dan sumber daya yang cukup untuk merespon - sumber daya lain (memori, cpu) biasanya menjadi hambatan pertama.
Namun, saya pribadi menemukan beberapa masalah kelelahan pelabuhan saat bekerja di perusahaan penyeimbang beban.
2. Mengapa port bekas dapat menghadirkan masalah untuk layanan mendengarkan?
Server mySQL tidak dapat mengikat ke port itu jika sedang digunakan - katakan oleh localhost: 3306 atau pada semua antarmuka. Misalnya, lihat baris 0.0.0.0:80 di
netstat
output berikut ?Itu berarti bahwa port 80 mendengarkan semua antarmuka lokal ke server. Jika proses lain memegang port 80 sebelum
nginx
server saya mulai,nginx
tidak akan dapat mengendalikan port itu dan kemungkinan akan gagal prosedur startup-nya.Biasanya, port 3306 baik-baik saja karena layanan mendengarkan memiliki port yang telah ditentukan (atau rentang) yang diminta dari mesin host - misalnya port 80 dan 443 untuk server web.
sumber
a: ya, jika port lokal Anda adalah 1-65535, jumlah koneksi adalah 65k-1 (satu port mendengarkan)
a: Satu IP tidak dapat membuka lebih dari 65k koneksi ke server web saya di xxxx: 80, karena srcip, srcport, dstip, dstport adalah unik. ya Anda bisa mendukung lebih dari 65k, jika ip soruce berbeda
sumber