Eu tenho um servidor TCP escutando em uma máquina ("o servidor") executando o Ubuntu 12.04.3 (kernel 3.8.0-31-genérico). Ele recebe conexões de 2 máquinas clientes diferentes. A máquina A está executando o Ubuntu 12.04.4 (3.11.0-17-genérico) e a máquina B está executando o Ubuntu 11.10 (3.0.0-32-server).
Se os carimbos de data / hora TCP estiverem ativados no servidor (sysctl net.ipv4.tcp_timestamps = 1), algumas vezes os pacotes SYN da máquina A serão "ignorados". Usando o tcpdump no servidor (no modo não promíscuo), vejo os SYNs chegarem OK e com somas de verificação corretas - simplesmente não há resposta - nenhum SYN / ACK e nenhum RST. A máquina A retransmite o SYN várias vezes antes de desistir. O software cliente em execução na máquina A (neste caso, wget) tenta novamente imediatamente com uma nova conexão e obtém êxito, obtendo um SYN / ACK instantâneo.
A máquina B não tem problemas com o mesmo servidor e seu tráfego parece normal - também está usando as mesmas opções de TCP da máquina A (pelo que vejo nos arquivos de captura). Desativar carimbos de data e hora TCP no servidor faz com que tudo funcione como deveria.
Os registros de data e hora nos pacotes SYN ignorados parecem ser válidos para mim, portanto, não tenho certeza por que eles estão causando problemas ou se são a causa subjacente.
Coloquei um pcap anonimizado aqui https://www.dropbox.com/s/onimdkbyx9lim70/server-machineA.pcap . Foi tirada no servidor (10.76.0.74), mostrando a máquina A (10.4.0.76) executando com êxito um HTTP GET (pacotes de 1 a 10) e, em seguida, 1 segundo depois, tentando buscar a mesma URL novamente (pacotes de 11 a 17), mas em vez disso tem seus SYNs ignorados. Os pacotes 18 a 27 são outro sucesso.
Suspeito que este seja um problema semelhante ao descrito em " Por que um servidor não enviaria um pacote SYN / ACK em resposta a um pacote SYN " e, ao desabilitar os carimbos de hora, é uma solução alternativa que eu gostaria de entender o que está acontecendo. Isso é apenas um bug?
Não há firewall local em execução. O servidor lida com várias conexões TCP (aproximadamente 32 K por vez), mas possui bastante memória / CPU livre. No momento do teste mostrado no pcap, não havia outras conexões TCP entre a máquina A e o servidor. Não há sinal de que a fila de aceitação do aplicativo de servidor esteja subitamente sendo preenchida (além disso, isso deve afetar os dois clientes que eu presumo). Como os pacotes parecem bons em um pcap obtido no servidor, não parece que um dispositivo de rede interveniente esteja quebrando as coisas.
Eu originalmente postei isso nos fóruns do ubuntu, mas, em retrospectiva, esse pode ser um local mais apropriado. Esperando o empréstimo de uma pista.