Bomba-Relógio de Rede no macOS

Falha Crítica Após 49.7 Dias de Uso Contínuo Exige Reinício

macOS e a Armadilha dos 49.7 Dias

Embora Macs sejam máquinas poderosas, usá-los como servidores em ambientes 24/7 apresenta desafios inesperados. Uma descoberta recente revelou uma “bomba-relógio” embutida no sistema de rede do macOS: após precisamente 49 dias, 17 horas, 2 minutos e 47 segundos de funcionamento contínuo, a pilha de rede TCP/IP pode simplesmente parar de funcionar.

A Descoberta da Photon

A equipe da Photon, que utiliza Macs para monitorar serviços iMessage, deparou-se com um problema misterioso. Algumas de suas máquinas pararam de responder a conexões de rede do nada, embora ainda respondessem a pings. O mais intrigante era que as conexões de rede existentes continuavam ativas, dificultando o diagnóstico e forçando a equipe a recorrer a reinícios – uma “solução” odiada por qualquer administrador de sistemas.

A Causa Raiz: O Contador “tcp_now”

Após investigações aprofundadas e testes com scripts, a Photon identificou o culpado: o contador interno “tcp_now”.

  • Função: Monitora o tempo atual em milissegundos desde a inicialização do sistema para a pilha TCP.
  • Limite: Representado como um inteiro sem sinal de 32 bits, “tcp_now” tem um valor máximo de 4.294.967.295.
  • O Problema: Isso equivale a 4.294.967 segundos, ou exatamente 49.7 dias. Após esse período, o contador “transborda” (wrap around) para zero.

Como a Falha se Manifesta

A falha ocorre devido a uma implementação incorreta no kernel XNU da Apple, relacionada à forma como o sistema lida com o transbordo do “tcp_now”.

  • Limpeza de Conexões: Sistemas operacionais devem remover conexões TCP fechadas após um curto período (30 segundos no macOS).
  • Bug: Quando “tcp_now” se aproxima do seu limite e fica “preso” devido ao bug, a comparação para determinar o status de expiração das conexões falha.
  • Consequência: A pilha TCP é inundada com portas efêmeras incorretamente retidas, levando à exaustão e paralisação das novas conexões de rede.

Impacto e Solução

A rapidez com que as portas se esgotam depende da atividade de rede, mas em ambientes de servidor ou profissionais, isso pode ser rápido. Problemas de “overflow” de inteiros já causaram falhas históricas, como o famoso crash de 49.7 dias do Windows 98 e o iminente problema do Ano 2038.

A solução imediata é um reinício do sistema. A equipe da Photon está trabalhando em uma alternativa, e espera-se que a Apple corrija essa implementação do RFC 7323 em breve.

Baseado no artigo de Tom’s Hardware