Рейтинг:0

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

флаг es

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

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

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

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

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

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

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

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

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

Рейтинг:2
флаг ng

Somes ideas on why sometimes your server doesn't answer with SYN-ACK :

  • Application on the server is stopped when the SYN packet is sent : This can be a crash and then manage to work again with a auto restart mecanism of the program. When the server app is stopped or crashed, the tcp listening socket is closed, so the OS doesn't answer.
  • You server has some troubles to find your client back. The can be some routing issue or asymetric routing (this break firewall).
  • If the Client and server are on the same network, this can be some issue with Layer 2 issue like Spanning Tree protocol or ARP.
  • Packet loss in the network : You SYN or SYN ACK packet is dropped.
  • The server is overwhelm and sometime cannot answer you SYN packet.

There can be a large number of thing that can make server doesn't answer SYN packet.

What I will do :

  • Doing some tcpdump on the server to verify the network : Does the server receive the SYN packet or there is an issue in the network beforehand ? Does the server generate and send a SYN ACK packet ? And work from there.
  • If you don't have access to the server, doing the same thing on the closest router/firewall.
  • Contact someone that has access on the server.
Sue Koh avatar
флаг es
Спасибо за отличный отзыв. Я постараюсь получить доступ к серверу, если это возможно. У меня есть еще один вопрос. Поскольку я использую lwip и, по-видимому, мне не удалось получить синхронизацию с сервером, мой lwip_connect остановится и не вернет значение (скорее всего, блокирует). Также в пакете SYN нет повторной попытки, есть идеи, почему это так? Я использую порт 8883 для безопасного mqtt.
Nicox avatar
флаг ng
К сожалению, я ничего не знаю о "lwip". Что я могу сказать, так это то, что при попытке отправить SYN-пакет и у вас нет ответа, клиент должен повторно передать этот SYN-пакет несколько раз, прежде чем сдаться. Это больше похоже на проблему с lwip.

Ответить или комментировать

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