El puerto tcp de Debian Stretch source es * siempre * par


9

Mientras depuraba un comportamiento extraño con un equilibrador de carga de Azure, noté que mi pila local de Debian Stretch TCP solo estaba estableciendo conexiones TCP con un puerto par. No inicio un único protocolo de enlace TCP con un puerto fuente extraño. ¿Eso es lo que se pretende?

Respuestas:


12

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 .


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.