É para reduzir a disputa entre connect()
e bind()
(apareceu no Linux 4.2; Jessie tem 3.16 e Stretch tem 4.9):
confirmar 07f4c90062f8fc7c8c26f8f95324cbe8fa3145a5
Autor: Eric Dumazet
Data: Dom 24 de maio 14:49:35 2015 -0700
tcp / dccp: tente não esgotar ip_local_port_range em connect ()
Um problema de longa data em servidores ocupados é a pequena porta TCP disponível
range (/ proc / sys / net / ipv4 / ip_local_port_range) e o padrão
alocação seqüencial de portas de origem na chamada do sistema connect ().
Se um host estiver tendo muitas sessões TCP ativas, as chances são de que
muito alto que todas as portas estejam em uso por pelo menos um fluxo,
e tentativas subsequentes de ligação (0) falham ou precisam varrer grande parte do
espaço para encontrar um slot.
Neste patch, mudei o ponto de partida em __inet_hash_connect ()
para que tentemos favorecer pares [1] de portas, deixando portas ímpares para bind ()
Comercial.
Ainda executamos uma pesquisa seqüencial, portanto não há garantia, mas
se os destinos connect () forem muito diferentes, o resultado final é que deixamos
mais portas disponíveis para bind (), e as espalhamos por todo o intervalo,
diminuindo o tempo para connect () e bind () para encontrar um slot.
Essa estratégia só funciona bem se / proc / sys / net / ipv4 / ip_local_port_range
é par, ou seja, se os valores inicial / final tiverem paridade diferente.
Portanto, o padrão / proc / sys / net / ipv4 / ip_local_port_range foi alterado para
32768 - 60999 (em vez de 32768 - 61000)
Não há alterações nos aspectos de segurança aqui, apenas alguns problemas de hash
os esquemas poderiam ser impactados por essa mudança.
[1]: A propriedade ímpar / par depende da paridade dos valores de ip_local_port_range
Você também pode querer ver a confirmação de acompanhamento 1580ab63fc9a03593072cc5656167a75c4f1d173 .