Ini untuk mengurangi pertikaian antara connect()
dan bind()
(muncul di Linux 4.2; Jessie memiliki 3.16 dan Stretch memiliki 4.9):
komit 07f4c90062f8fc7c8c26f8f95324cbe8fa3145a5
Penulis: Eric Dumazet
Tanggal: Minggu 24 Mei 14:49:35 2015 -0700
tcp / dccp: cobalah untuk tidak menghabiskan ip_local_port_range di connect ()
Masalah lama pada server sibuk adalah port TCP kecil yang tersedia
range (/ proc / sys / net / ipv4 / ip_local_port_range) dan default
alokasi berurutan port sumber di connect () system call.
Jika host memiliki banyak sesi TCP aktif, kemungkinannya besar
sangat tinggi sehingga semua port digunakan oleh setidaknya satu aliran,
dan pengikatan berikutnya (0) upaya gagal, atau harus memindai sebagian besar
ruang untuk menemukan slot.
Dalam tambalan ini, saya mengubah titik awal di __inet_hash_connect ()
sehingga kami mencoba mendukung bahkan port [1], meninggalkan port ganjil untuk bind ()
pengguna.
Kami masih melakukan pencarian berurutan, jadi tidak ada jaminan, tapi
jika menghubungkan () target sangat berbeda, hasil akhirnya adalah kita pergi
lebih banyak port yang tersedia untuk diikat (), dan kami sebarkan di seluruh rentang,
menurunkan waktu untuk menghubungkan () dan mengikat () untuk menemukan slot.
Strategi ini hanya berfungsi dengan baik jika / proc / sys / net / ipv4 / ip_local_port_range
genap, yaitu jika nilai awal / akhir memiliki paritas yang berbeda.
Oleh karena itu, default / proc / sys / net / ipv4 / ip_local_port_range diubah menjadi
32768 - 60999 (bukan 32768 - 61000)
Tidak ada perubahan pada aspek keamanan di sini, hanya beberapa hashing yang buruk
skema akhirnya dapat dipengaruhi oleh perubahan ini.
[1]: Properti ganjil / genap bergantung pada paritas nilai ip_local_port_range
Anda mungkin juga ingin melihat tindak lanjut komit 1580ab63fc9a03593072cc5656167a75c4f1d173 .