48 votos

¿Por qué un servidor no envía un SYN/ACK del paquete en respuesta a un paquete SYN

Últimamente, nos hemos enterado de una conexión TCP problema que se limita principalmente a mac y los usuarios de Linux que navegar por nuestros sitios web.

Desde el punto de vista del usuario, se presenta como un muy largo tiempo de conexión a nuestro sitio web (>11 segundos).

Nos las hemos arreglado para seguir la pista de los técnicos de la firma de este problema, pero no puede entender por qué está pasando o cómo solucionarlo.

Básicamente, lo que sucede es que la máquina del cliente está enviando el paquete SYN para establecer la conexión TCP y el servidor web recibe, pero no responde con un SYN/ACK del paquete. Después de que el cliente ha enviado a muchos paquetes SYN, el servidor finalmente responde con un SYN/ACK del paquete y todo está bien para el resto de la conexión.

Y, por supuesto, el trampolín para el problema: es intermitente y no sucede todo el tiempo (aunque esto ocurre entre el 10 y el 30% del tiempo)

Estamos usando Fedora 12 de Linux como el sistema operativo y Nginx como servidor web.

Captura de wireshark de análisis

Screenshot of wireshark analysis

Actualización:

La desactivación de la escala de windows en el cliente detuvo el problema ocurra. Ahora sólo necesito un servidor de resolución (no podemos hacer que todos los clientes que hagan esto) :)

Última Actualización:

La solución fue desactivar tcp de la escala de windows y tcp marcas de tiempo en nuestros servidores, que son accesibles para el público.

16voto

mcdizzle Puntos 131

Hemos tenido este mismo problema. Simplemente desactivar las marcas de tiempo TCP resuelto el problema.

sysctl -w net.ipv4.tcp_timestamps=0

Para hacer este cambio permanente, hacer una entrada en /etc/sysctl.conf.

Ser muy cuidadoso acerca de cómo deshabilitar la Ventana TCP opción de Escala. Esta opción es importante para proporcionar el máximo rendimiento a través de internet. Alguien con un 10 megabit/seg conexión tendrá una subóptima de transferencia si el tiempo de ida y vuelta (básicamente la misma que la de ping) es de más de 55 ms.

Hemos notado realmente este problema cuando hay varios dispositivos detrás de la misma NAT. Sospecho que el servidor podría haber sido confundido al ver las marcas de tiempo de los dispositivos Android y OSX máquinas al mismo tiempo, ya que poner completamente diferentes valores en los campos de fecha.

5voto

Ansis Atteka Puntos 300

Solo me pregunto, pero ¿por qué para el paquete SYN (cuadro #539; la que fue aceptada), el derecho por el LR y TSV faltan campos en la "Info" en la columna?

WS es TCP Windows característica de Escala y el TSV es el valor de marca de tiempo. Dos de ellos se encuentran bajo tcp.campo de opciones y Wireshark debe mostrar si están presentes. Tal vez Cliente de TCP/IP de la pila resentirse de diferentes paquetes SYN el 8 de intento y que fue la razón por la que fue reconocido de repente?

Podría usted nos proporciona con el marco 539 valores internos? ¿El SYN/ACK siempre trata de un paquete SYN que no tiene WS habilitado?

4voto

Alex Li Puntos 21

Acabamos topó con el mismo problema (en realidad tomó un buen tiempo para colgarlo en el servidor no envía syn-ack).

"La solución fue desactivar tcp de la escala de windows y tcp marcas de tiempo en nuestros servidores, que son accesibles para el público."

2voto

Russ Wheeler Puntos 173

Para llevar a cabo lo Ansis ha declarado, he visto problemas como este cuando el firewall no admite TCP de la Escala de Windows. Lo que marca/modelo de cortafuegos entre estos dos equipos?

1voto

akramer Puntos 446

Este es el comportamiento de escucha de TCP socket cuando su cartera de pedidos es completa.

Ngnix permite la acumulación argumento para escuchar a ajustar en la configuración: http://wiki.nginx.org/HttpCoreModule#listen

listen 80 atraso=num

Pruebe a ajustar el valor de num a algo más grande que el por defecto, como 1024.

Me dan ninguna garantía de que un completo escuchar cola es en realidad su problema, pero esta es una buena primera cosa a comprobar.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: