Es para reducir la contención entre connect()
y bind()
(apareció en Linux 4.2; Jessie tiene 3.16 y Stretch tiene 4.9):
cometer 07f4c90062f8fc7c8c26f8f95324cbe8fa3145a5
Autor: Eric Dumazet
Fecha: dom 24 de mayo 14:49:35 2015 -0700
tcp / dccp: intenta no agotar ip_local_port_range en connect ()
Un problema de larga data en los servidores ocupados es el pequeño puerto TCP disponible
range (/ proc / sys / net / ipv4 / ip_local_port_range) y el valor predeterminado
asignación secuencial de puertos de origen en la llamada al sistema connect ().
Si un host está teniendo muchas sesiones TCP activas, las posibilidades son
muy alto que todos los puertos están en uso por al menos un flujo,
y los intentos posteriores de vinculación (0) fallan, o tienen que escanear una gran parte de
espacio para encontrar una ranura.
En este parche, cambié el punto de partida en __inet_hash_connect ()
así que intentamos favorecer los puertos pares [1], dejando puertos impares para bind ()
usuarios.
Todavía realizamos una búsqueda secuencial, por lo que no hay garantía, pero
si los objetivos connect () son muy diferentes, el resultado final es que nos vamos
más puertos disponibles para enlazar (), y los distribuimos por todo el rango,
reducir el tiempo para connect () y bind () para encontrar una ranura.
Esta estrategia solo funciona bien si / proc / sys / net / ipv4 / ip_local_port_range
es par, es decir, si los valores de inicio / fin tienen paridad diferente.
Por lo tanto, default / proc / sys / net / ipv4 / ip_local_port_range se cambió a
32768 - 60999 (en lugar de 32768 - 61000)
Aquí no hay cambios en los aspectos de seguridad, solo un poco de hashing
Los esquemas podrían verse afectados por este cambio.
[1]: la propiedad par / impar depende de la paridad de valores de ip_local_port_range
También es posible que desee ver la confirmación de seguimiento 1580ab63fc9a03593072cc5656167a75c4f1d173 .