La porta tcp del sorgente Debian Stretch è * sempre * pari


9

Durante il debug di uno strano comportamento con un bilanciamento del carico di Azure, ho notato che il mio stack TCP Debian Stretch locale stava solo stabilendo connessioni TCP con una porta pari. Non avvio un singolo handshake TCP con una porta sorgente dispari. È previsto?

Risposte:


12

È per ridurre la contesa tra connect()e bind()(apparso in Linux 4.2; Jessie ha 3.16 e Stretch ha 4.9):

commit 07f4c90062f8fc7c8c26f8f95324cbe8fa3145a5
Autore: Eric Dumazet 
Data: dom 24 maggio 14:49:35 2015 -0700

    tcp / dccp: prova a non esaurire ip_local_port_range in connect ()

    Un problema di vecchia data su server occupati è la minuscola porta TCP disponibile
    range (/ proc / sys / net / ipv4 / ip_local_port_range) e il valore predefinito
    allocazione sequenziale delle porte di origine nella chiamata di sistema connect ().

    Se un host ha molte sessioni TCP attive, è probabile
    molto elevato che tutte le porte sono utilizzate da almeno un flusso,
    e i successivi tentativi di bind (0) falliscono o devono scansionare gran parte di
    spazio per trovare uno slot.

    In questa patch, ho cambiato il punto di partenza in __inet_hash_connect ()
    in modo che cerchiamo di favorire anche le porte [1], lasciando le porte dispari per bind ()
    utenti.

    Eseguiamo ancora una ricerca sequenziale, quindi non c'è garanzia, ma
    se i target di connect () sono molto diversi, il risultato finale è che usciamo
    più porte disponibili per bind () e le distribuiamo su tutto l'intervallo,
    tempo di abbassamento per connect () e bind () per trovare uno slot.

    Questa strategia funziona bene solo se / proc / sys / net / ipv4 / ip_local_port_range
    è pari, ovvero se i valori di inizio / fine hanno parità diversa.

    Pertanto, l'impostazione predefinita / proc / sys / net / ipv4 / ip_local_port_range è stata modificata in
    32768-60999 (anziché 32768-61000)

    Non ci sono cambiamenti sugli aspetti di sicurezza qui, solo qualche povero hash
    gli schemi potrebbero alla fine essere influenzati da questo cambiamento.

    [1]: la proprietà pari / dispari dipende dalla parità dei valori ip_local_port_range

Potresti anche voler visualizzare il commit di follow-up 1580ab63fc9a03593072cc5656167a75c4f1d173 .


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.