Нет пакета SYN-ACK от сервера

Нет пакета SYN-ACK от сервера

У меня есть два сервера, и я использовал собственную встроенную систему с LwIP для подключения к этим серверам.

Моя встроенная система с LwIP является клиентом, и у меня есть server1 и server2. Я подключился к server1 и завершил соединение перед подключением к server2.

Дальнейшая разбивка по потоку:

  1. Клиент создает новый сокет с сервером1
  2. Клиент отправил DNS-пакет для получения IP-адреса сервера 1; получил ACK от точки доступа
  3. Клиент отправляет пакет TCP SYN;
  4. Сервер 1 отправляет TCP SYN-ACK и выполняет некоторую передачу данных
  5. Клиент завершает соединение с сервером server1, отправляя пакет TCP RST; и закрывает сокет
  6. Клиент создает новый сокет с сервером2
  7. Клиент отправил DNS-пакет для получения IP-адреса сервера2; получил ACK от точки доступа
  8. Клиент отправляет пакет TCP SYN на сервер2
  9. Сервер2 отправляет TCP SYN-ACK и выполняет некоторую передачу данных
  10. Клиент завершает соединение с сервером server2, отправляя пакет TCP RST; и закрывает сокет

Однако иногда server2 не отвечал на SYN-пакет клиента, который находится на шаге 9. Это случается только иногда. Я проверил несколько форумов, например:

[1]Почему сервер не отправляет пакет SYN/ACK в ответ на пакет SYN

[2]Сервер не отправляет пакет SYN/ACK в ответ на пакет SYN

Мой код не включает масштабирование окна. Я не могу проверить сервер, так как это частный сервер, поэтому я не уверен, что он был удален. Моя среда довольно шумная и занята множеством маршрутизаторов и коммуникационных устройств. Эта проблема возникает только в шумной среде, но не в более чистой среде.

Что я как клиент могу сделать, чтобы решить эту проблему?

решение1

Несколько идей о том, почему иногда ваш сервер не отвечает SYN-ACK:

  • Приложение на сервере останавливается при отправке пакета SYN: это может быть сбой, а затем снова работать с помощью механизма автоматического перезапуска программы. Когда приложение сервера останавливается или дает сбой, прослушивающий сокет tcp закрывается, поэтому ОС не отвечает.
  • У вашего сервера возникли некоторые проблемы с поиском вашего клиента. Это может быть проблема с маршрутизацией или асимметричная маршрутизация (это ломает брандмауэр).
  • Если клиент и сервер находятся в одной сети, это может быть связано с проблемой уровня 2, например, с протоколом Spanning Tree или ARP.
  • Потеря пакетов в сети: ваш пакет SYN или SYN ACK потерян.
  • Сервер перегружен и иногда не может ответить на ваш SYN-пакет.

Может быть множество причин, по которым сервер может не ответить на SYN-пакет.

Что я буду делать :

  • Выполнение tcpdump на сервере для проверки сети: получает ли сервер пакет SYN или в сети есть проблема заранее? Генерирует ли сервер и отправляет ли он пакет SYN ACK? И работайте с этого момента.
  • Если у вас нет доступа к серверу, сделайте то же самое на ближайшем маршрутизаторе/брандмауэре.
  • Свяжитесь с кем-то, у кого есть доступ к серверу.

Связанный контент