A porta tcp de origem do Debian Stretch é * sempre * uniforme

9

Ao depurar algum comportamento estranho com um balanceador de carga do Azure, notei que minha pilha TCP Debian Stretch local estava apenas estabelecendo conexões TCP com uma porta de número par. Não inicio um único handshake TCP com uma porta de origem ímpar. Isso é pretendido?

Olivier Dauby
fonte

Respostas:

12

É 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 .

Ferenc Wágner
fonte