A porta TIME_WAIT pode ser reutilizada para um servidor remoto diferente?

1

Em uma máquina, descobri que há muitas conexões TIME_WAIT (para diferentes servidores remotos) usando a mesma porta local por netstat :

tcp        0      0 10.32.198.120:10240         10.32.92.81:4000            TIME_WAIT
tcp        0      0 10.32.198.120:10240         10.66.32.192:80             TIME_WAIT
tcp        0      0 10.32.198.120:10242         10.32.92.81:4000            TIME_WAIT
tcp        0      0 10.32.198.120:10242         10.66.32.192:80             TIME_WAIT
tcp        0      0 10.32.198.120:10243         10.32.92.81:4000            TIME_WAIT
tcp        0      0 10.32.198.120:10243         10.66.32.192:80             TIME_WAIT
tcp        0      0 10.32.198.120:10244         10.32.92.81:4000            TIME_WAIT
tcp        0      0 10.32.198.120:10244         10.66.32.192:80             TIME_WAIT
tcp        0      0 10.32.198.120:10245         10.66.32.192:80             TIME_WAIT

Eu sabia que o TIME_WAIT é projetado para impedir que pacotes antigos de uma conexão anterior sejam aceitos em uma nova conexão. Mas como uma nova conexão com um servidor remoto diferente não será confundida com a conexão antiga, acho que é claramente seguro usar uma porta TIME_WAIT para um servidor remoto diferente.

Então, é o que eu vi (mesmas portas locais em diferentes conexões) uma evidência de que a porta TIME_WAIT é reutilizada?

Eu estou no CentOS 6.5 (tcp_tw_reuse está definido como 0) e essas conexões são criadas pelo python2.7.6 / requests2.12.1.

    
por WKPlus 13.04.2017 / 12:48

1 resposta

1

O fato de seus sockets estarem em TIME_WAIT não importa realmente aqui, eles poderiam estar no estado ESTABLISHED e sua pergunta ainda estaria ativa - por que estou vendo a mesma porta de origem várias conexões ?

TLDR : Contanto que o TCP 4-tuple (IP de origem, porta de origem, IP de destino, porta de destino) não seja o mesmo, é permitido usar a mesma porta de origem para várias conexões .

O TIME-WAIT é usado para evitar que pacotes antigos sejam aceitos em uma nova conexão usando o exato mesmo TCP 4-tuple como uma conexão antiga.

Na maioria dos casos, o Linux atribui automaticamente a porta de origem do intervalo de portas Ephemeral, cujo padrão é 32768 a 61000:

# cat /proc/sys/net/ipv4/ip_local_port_range
32768   60999

Ao decidir qual porta de origem usar, o Kernel verificará primeiro se existe alguma porta de origem que não seja utilizada no intervalo de portas efêmeras. Com ~ 28k possíveis portas de origem, o Kernel normalmente é capaz de encontrar uma porta disponível e parar por aí. No entanto, se todas as portas 28k estiverem em uso, ele verificará em seguida se alguma das portas passa o check_established source função que permitirá que uma porta de origem já alocada seja reutilizada, desde que a nova conexão seja para um TCP 4-tuple diferente.

Além disso, em vez de permitir que o Kernel atribua automaticamente uma porta de origem, também é possível informar programaticamente ao Kernel exatamente qual IP de origem e porta você gostaria de usar para uma conexão específica.

    
por 16.04.2017 / 20:39

Tags