
Tengo dos servidores y utilicé mi propio sistema integrado con LwIP para conectarme a estos servidores.
Mi sistema integrado con LwIP es el cliente y tengo el servidor1 y el servidor2. Me conecté al servidor1 y finalicé la conexión antes de conectarme al servidor2.
Más desglose del flujo:
- El cliente crea un nuevo socket con el servidor1
- El cliente envió un paquete DNS para obtener la dirección IP del servidor1; recibió ACK de AP
- El cliente envía el paquete TCP SYN;
- El servidor 1 envía TCP SYN-ACK y realiza alguna transmisión de datos
- El cliente finaliza la conexión con el servidor1 enviando el paquete TCP RST; y cerrar el enchufe
- El cliente crea un nuevo socket con el servidor2
- El cliente envió un paquete DNS para obtener la dirección IP del servidor2; recibió ACK de AP
- El cliente envía el paquete TCP SYN al servidor2
- El servidor 2 envía TCP SYN-ACK y realiza alguna transmisión de datos
- El cliente finaliza la conexión con el servidor2 enviando el paquete TCP RST; y cerrar el enchufe
Sin embargo, a veces el servidor2 no respondió al paquete SYN del cliente que se encuentra en el Paso 9. Esto solo sucede en algunas ocasiones. Revisé varios foros como:
[1]¿Por qué un servidor no envía un paquete SYN/ACK en respuesta a un paquete SYN?
[2]El servidor no envía un paquete SYN/ACK en respuesta a un paquete SYN
Mi código no permite el escalado de ventanas. No puedo verificar el servidor porque es privado, por lo que no estoy muy seguro de si se eliminó. Mi entorno es bastante ruidoso y está ocupado con muchos enrutadores y dispositivos de comunicación. Este problema sólo ocurre en un ambiente ruidoso pero no en un ambiente más limpio.
¿Qué puedo hacer como cliente para solucionar este problema?
Respuesta1
Algunas ideas sobre por qué a veces su servidor no responde con SYN-ACK:
- La aplicación en el servidor se detiene cuando se envía el paquete SYN: esto puede provocar un bloqueo y luego volver a funcionar con un mecanismo de reinicio automático del programa. Cuando la aplicación del servidor se detiene o falla, el conector de escucha tcp se cierra, por lo que el sistema operativo no responde.
- Su servidor tiene algunos problemas para encontrar a su cliente. Puede ser algún problema de enrutamiento o enrutamiento asimétrico (esto rompe el firewall).
- Si el cliente y el servidor están en la misma red, esto puede ser algún problema con la capa 2, como el protocolo Spanning Tree o ARP.
- Pérdida de paquetes en la red: su paquete SYN o SYN ACK se descarta.
- El servidor está abrumado y en ocasiones no puede responder a su paquete SYN.
Puede haber una gran cantidad de cosas que pueden hacer que el servidor no responda el paquete SYN.
Qué haré :
- Haciendo algo de tcpdump en el servidor para verificar la red: ¿El servidor recibe el paquete SYN o hay un problema en la red de antemano? ¿El servidor genera y envía un paquete SYN ACK? Y trabajar desde allí.
- Si no tiene acceso al servidor, haga lo mismo en el enrutador/firewall más cercano.
- Póngase en contacto con alguien que tenga acceso al servidor.