Jump to content
    

XModem и потеря пакетов

Доброго всем дня.

Есть 2 программы (сервер на Дельфи, клиент на Турбо-Паскале в промышленном контроллере), обменивающиеся файлами по протоколу XModem. В качестве транспорта используется UDP. Во время передачи иногда происходит вот что.

Клиент отправляет пакет с номером N (значение номера сейчас не важно).

Сервер принимает пакет с номером N и отправляет ответ: пакет принят. При этом XModem в ответе не указывает номер пакета, а просто отправляет флаг: принят / не принят.

Клиент отправляет пакет с номером N+1. ПАКЕТ ПО ПУТИ ТЕРЯЕТСЯ и, т.к. UDP не гарантирует доставку, клиент и сервер о потере не знают.

Сервер ждет поступления данных 10 секунд, как предписывает ему XModem. Не дождавшись, он считает, что ответ не дошел до клиента и, опять же по правилам XModem, повторно отправляет ответ: пакет принят.

Клиент принимает ответ, но считает, что он пришел к пакету N+1. После чего отправляет пакет N+2.

Сервер принимает пакет N+2 и определяет, что пришел пакет не с тем номером (он-то ждет N+1). И отправляет ответ: ошибка.

Клиент принимает ответ и по правилам XModem повторно отправляет пакет N+2.

Сервер принимает пакет, опять обнаруживает несовпадение номеров и опять говорит: ошибка.

Так повторяется 10 раз, после чего связь прерывается из-за превышения количества попыток передачи. Файл не передан.

Вопрос: можно ли побороть это явление, не прибегая к программированию протоколов, гарантирующих доставку (TCP-FTP)?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...