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.