Введение
SEAlink — это протокол передачи файлов, обратно совместимый с XMODEM, но использующий систему скользящего окна для повышения скорости передачи данных. SEAlink был разработан в 1986 году как часть почтового обработчика SEAdog FidoNet, созданного компанией System Enhancement Associates, авторами известной программы ARC. Протокол распространялся под лицензией, требующей лишь указания авторства, однако широкого распространения за пределами почтовых обработчиков FidoNet не получил. SEAlink и большинство других улучшений XMODEM быстро устарели после появления ZMODEM.
Описание
XMODEM разбивает файл, предназначенный для отправки, на нумерованные серии пакетов по 128 байт каждый. Пакеты отправляются по одному получателю, который либо подтверждает успешный прием, отправляя символ ACK, либо запрашивает повторную отправку, отправляя вместо этого NAK. Затем передача продолжается со следующим пакетом. Хотя время, необходимое для отправки ACK или NAK, пренебрежимо мало, задержка распространения сигнала в телефонной сети вносит латентность. Задержка в 0,1 секунды – обычное явление и может быть значительно больше на международных линиях связи. Это означает, что максимальная скорость передачи данных XMODEM определяется пропускной способностью телефонной сети больше, чем скоростью самих модемов. При скорости 300 бит/с это не является серьезной проблемой, поскольку отправка пакета занимает около 3,5 секунд, а задержка в 0,1 секунды несущественна. Однако при скорости 9600 бит/с отправка пакета занимает всего около 0,1 секунды, что означает, что теряется как минимум половина потенциальной пропускной способности, пока отправитель ждет поступления ACK или NAK. SEAlink решает эту проблему, используя "скользящее окно". В этом случае отправитель не ждет ACK или NAK, а просто отправляет пакеты непрерывным потоком. Получатель по-прежнему должен подтверждать или запрашивать повторную отправку пакетов, но делает это, добавляя номер пакета к каждому из них, что позволяет отправителю определить, какие пакеты были доставлены успешно, а какие – нет. "Окно" относится к количеству пакетов, которые можно отправить до получения ACK или NAK. В случае SEAlink размер окна составлял шесть пакетов, что позволяло одновременно отправлять до 768 байт данных. SEAlink был разработан с полной обратной совместимостью с существующими реализациями XMODEM. Со стороны получателя требовалось лишь отправлять номер пакета (содержащийся во всех пакетах XMODEM) вместе с обычным символом ACK или NAK. Получив первый ACK или NAK, отправитель SEAlink "замечал" номер пакета и продолжал использовать окна. Если номер пакета отсутствовал, предполагалось, что соединение установлено с XMODEM, не поддерживающим SEAlink, и размер окна устанавливался равным одному.
Другие особенности
SEAlink также включал в себя ряд функций, присутствующих в других вариантах XMODEM. Заметным было использование "нулевого пакета", который был представлен в протоколе TeLink, связанном с FidoNet, для передачи информации о файлах и поддержки пакетной передачи файлов. SEAlink внес одно небольшое изменение в этот "стандарт", добавив байт в позиции 40 пакета для указания, использовать ли режим "овердрайв". При включении, путем записи любого ненулевого значения в байт 40, приемник переставал ожидать подтверждающие сообщения (ACK), принимая только отрицательные подтверждения (NAK). Это было сделано для снижения требований к полосе пропускания от приемника к отправителю, что было важным фактором для многих ранних высокоскоростных модемов, которые имели очень медленный обратный канал (например, 75 бит/с у модемов Telebit). Позже была добавлена функция "RESYNC", позволяющая возобновлять передачу файла с места ее прерывания. RESYNC добавил еще один индикатор в нулевом пакете, байт 42, для указания поддержки этой функции отправителем. В этом случае приемник всегда проверяет наличие локального файла с таким же именем, и если он существует, отправляет символ SYN вместо обычных ACK или NAK. За символом SYN следует номер пакета, с которого следует возобновить передачу.