AppleTalk Transaction Protocol

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 16:36, 14 января 2019.
AppleTalk Transaction Protocol
Разработчики: Apple Inc.
Выпущена: 16 February 1984 года; 36 years ago (1984-02-16)
Операционная система: macOS
Тип ПО: транспортный протокол
Веб-сайт developer.apple.com

AppleTalk Transaction Protocol - это протокол транспортного уровня в наборе протоколов AppleTalk, который обрабатывает транзакции между двумя сокетами AppleTalk. Транзакция состоит из запросов транзакций и ответов транзакций, которые обмениваются задействованными сокетными клиентами.[Источник 1]

Использование AppleTalk Transaction Protocol

AppleTalk Transaction Protocol предлагает простые и эффективные средства передачи небольших объемов данных по сети. Он позволяет запрашивать информацию об одном сетевом объекте от другого объекта, который способен только реагировать на запрос. ATP обеспечивает передачу данных без ошибок или потери пакетов. Связь ATP основана на концепции транзакции: одна сторона - клиент, который делает запрос другой стороне - серверу, выполнить задачу и отправить ответ.

Вот как происходит транзакция:

  • Приложение - клиент вызывает интерфейс ATP и драйвер ATP, клиент отправляет запрос на драйвер ATP сервера.
  • Драйвер ATP сервера передает запрос в приложение - сервер, который прослушивает входящие запросы ATP.
  • Приложение - сервер удовлетворяет запрос и подготавливает ответ, а затем вызывает интерфейс ATP для передачи ответа через драйвер ATP обратно клиенту. [Источник 2]

Пользователь может реализовать клиентские приложения ATP двумя способами:

Рисунок 1 - Транзакция ATP
  • Написать одно приложение, которое обрабатывает как запросы, так и действия сервера транзакции ATP и запустить приложение на двух сетевых узлах. Этот метод позволяет каждому приложению выступать в качестве реквестера или сервера. Каждая сторона имеет возможность инициировать транзакцию, хотя только одна сторона может контролировать связь во время одной транзакции.
  • Написать два приложения. Одно приложение, которое реализует часть запроса для транзакции, и другое приложение, которое реализует ответную сторону. Эта модель хорошо подходит для отношений клиент - сервер, таких как PAP, в которых многие узлы в сети запускают приложение - клиент, в то время как один или несколько узлов запускают приложение - сервер (сервер). Один сервер может отвечать на запросы транзакций от разных клиентов.

ATP является прямым клиентом DDP и обеспечивает надежную доставку данных службам, предоставляемым DDP. ATP обеспечивает доставку данных без ошибок или потери пакетов. На рисунке 1 показано, как поставщик конечных точек ATP включает в себя его базовый протокол доставки и модули Stream - доступа.

Чтобы два приложения использовали ATP, каждое приложение должно быть открыто и связано с ATP. Клиент может произвести транзакцию путем подачи запроса. Когда сервер получает запрос, он принимает его, формулирует ответ, который включает любые данные требуемые клиентом, и отправляет этот ответ клиенту. Когда клиент получает ответ, транзакция завершена. Вы можете определить, как часто ATP должен повторять каждый запрос и как долго ждать между попытками повторения, используя параметры повторения и интервалы, описанные в разделе «Указание параметров ATP».

Виды транзакций

В ходе передачи может быть потерян или задержан запрос\ответ, а также сервер может отклонить или не принять запрос. В любой из этих ситуаций транзакция не может быть завершена. Чтобы завершить транзакцию и обеспечить надежную доставку данных, ATP отвечает за ожидание заданного времени, а затем повторяет запрос до тех пор, пока он не сможет завершить транзакцию. Если он не может завершить транзакцию, ATP должен ответить клиенту, что запрос не выполнен. Для выполнения этих услуг ATP поддерживает два типа транзакций: транзакции «по крайней мере один раз» и транзакции «точно один».

  • По меньшей мере одна транзакция гарантирует, что сервер получает каждый запрос, направленный на него хотя бы один раз, но это не мешает серверу получать запрос более одного раза. Они также называются транзакциями ALO .
  • Транзакция гарантирует, что сервер получает конкретный запрос только один раз. Они также называются XO транзакциями. PAP использует этот тип транзакции ATP.

Open Transport ATP обеспечивает поддержку транзакций XO для транзакции запроса, когда вы устанавливаете T_ACKNOWLEDGED бит в флажках параметров для OTSndURequest функции. Такая поддержка подходит в тех случаях, когда ущерб может быть нанесен, если запрос выполняется несколько раз; например, если вы добавляете данные в конец файла.

В тех случаях, когда не было ущерба, и если запрос выполняется несколько раз (например, когда клиент просит идентифицирующий узел идентифицировать себя), можно выбрать транзакции ALO, очистив T_ACKNOWLEDGED бит в флажках параметров для этой OTSndURequest функции.

Отправка и получение данных ATP

Как правило, клиент отправляет небольшой объем данных на удаленную конечную точку, чтобы принять какое-либо действие или отправить обратно данные в ответ. Объем данных, на которые сервер может ответить, может быть довольно большим. Заявитель может отправить только один пакет ATP из 578 байт, но сервер может вернуть до восьми пакетов по 578 байт каждый, набрав максимум 4624 байта. ATP не поддерживает пакеты с нулевой длиной. Чтобы соответствовать ограничениям, которые может установить конкретная сеть при отправке большого количества данных за один раз, ATP использует T_MORE флаг для связи с ожидающей конечной точкой реквестера, когда все данные ответа были накоплены. Один ответ может содержать до восьми пакетов. Каждый пакет в ответе имеет установленный T_MORE флаг, исключение составляет последний пакет. Данные ответа хранятся в конечной точке получателя запроса до тех пор, пока не поступит пакет, который не имеет установленного T_MORE флага. Когда это произойдет, ATP знает, что все данные ответа пришли, и он освобождает весь ответ реквестера.

Параметры ATP

Существует несколько специфичных для ATP опций, а также можно использовать общие параметры Open Transport, OPT_INTERVAL и OPT_RETRYCNT. В таблице приведены параметры и их описания. Все эти параметры, кроме ATP_OPT_TRANID, могут быть установлены как глобально (для конечной точки, задающей параметр) с помощью OptionManagement функции, так и локально, устанавливая флажки опций для отдельной транзакции. Параметр ATP_OPT_TRANID можно установить только глобально.

Параметр Описание
OPT_RETRYCNT Устанавливает, сколько раз ATP повторяет запрос перед возвратом ошибки клиенту.
OPT_INTERVAL Устанавливает интервал ожидания ATP между повторными попытками.
ATP_OPT_RELTIMER Устанавливает время, в течение которого респондент должен ждать пакета освобождения транзакции, прежде чем он удалит запись запроса из своего списка транзакций. Допустимые значения: 0 (30 секунд), 1 (1 минута), 2 (2 минуты), 3 (4 минуты), 4 (8 минут).
ATP_OPT_REPLYCNT Задает количество ответов (1-8), ожидаемых в ответ на запрос.
ATP_OPT_DATALEN Задает количество ответов (1-8), ожидаемых в ответ на запрос.
ATP_OPT_TRANID Запрашивает идентификатор транзакции.

Опция таймера

При транзакциях ALO сервер может получать повторяющиеся запросы. С транзакциями XO, ATP использует дополнительную обработку, чтобы гарантировать, что сервер получает запрос только один раз. Чтобы безопасно обрабатывать транзакции XO, сервер поддерживает список транзакций всех недавно полученных запросов. Когда он получает запрос, ответчик просматривает этот список, чтобы определить, является ли он новым или дублирующимся запросом. Если запрос является новым, сервер вставляет его в список транзакций, время штамповки записи со временем ее вставки. Если повторяющийся запрос и ответ удалился, ATP автоматически повторно передает ответ без вмешательства приложения-сервера. Если это дублированный запрос и ответ еще не отправлен, ATP отбрасывает запрос.

Когда реквестер получает ответ от сервера, он отправляет пакет выпуска транзакций серверу, чтобы сигнализировать, что транзакция успешно завершена, и сервер может освободить транзакцию из своего списка транзакций. Однако, если этот пакет освобождения транзакции потерян, сервер никогда не сможет освободить транзакцию из своего списка. Поскольку время ответа отпечатало каждый новый запрос, когда он вставил запрос в свой список транзакций, сервер может периодически проверять список и исключать все запросы, которые старше времени, определенного ATP_OPT_RELTIMER опцией (по умолчанию 30 секунд), при условии, что эти запросы остаются в списке, потому что пакет освобождения транзакции потерян.[Источник 3]

Другие параметры

Когда начинается ответ, запрашивающий должен знать, сколько пакетов находится в заданном ответе, чтобы он знал, когда прекратить ожидание большего количества пакетов. Параметр ATP_OPT_REPLYCNT позволяет определить число от 0 до 8 (по умолчанию - 8 пакетов). Вы можете установить это глобально для конечной точки, с помощью OptionManagement функции или локально для отдельного запроса.

Параметр ATP_OPT_DATALEN позволяет установить максимальную длину отдельного пакета длиной до 578 байт (по умолчанию). В большинстве случаев вы можете оставить это по умолчанию. PAP-серверы, которые используют максимальный размер пакета 512 байт, могут использовать эту опцию для ограничения размера пакета ATP. Вы можете установить это глобально для конечной точки, с помощью OptionManagementфункции или локально для отдельного запроса.

ATP_OPT_TRANID Вариант представляет собой логическое значение , которое, когда установлено true, просит Open Transport добавить опцию на каждый запрос , который содержит транзакцию ATP ID. Вы можете установить этот параметр только глобально с помощью OptionManagement функции; вы не можете установить его локально.

Заголовки пакетов ATP

Первые 4 байта заголовка пакета ATP содержат информацию, которая позволяет Open Transport определять, ATP - пакет - это запрос или ответ, чтобы указать последовательную позицию пакета ответа и идентифицировать транзакцию. Вторые 4 байта заголовка называются пользовательскими байтами и доступны для вашего использования. Например, ваше приложение может использовать байты пользователя, чтобы создать простой заголовок для протокола более высокого уровня.

ATP берет первые 4 байта данных, которые клиент запрашивает и помещает их в пользовательскую часть байта исходящего запроса. Если вы не укажете в запросе не менее 4 байтов данных, ATP прокладывает байты пользователя с нулями.

На стороне сервера ATP берет данные в байтах первого пакета и помещает их в первые 4 байта данных пакета - ответа. ATP игнорирует байты пользователя во всех пакетах, кроме первого пакета.

Функции ATP

AppleTalk Transaction Protocol - имеет следующий ряд функций:

OTSndURequest

Клиент бесконтактного протокола на основе транзакций, такого как ATP, может использовать эту OTSndURequest функцию для отправки пакета запроса ATP в конечную точку ответа ATP. Чтобы указать транзакции XO, нужно установить T_ACKNOWLEDGED бит в параметре OTSndURequest функции reqFlags. Чтобы указать транзакции ALO, нужно очистить этот бит. Пакеты запросов ATP могут иметь до 578 байт, а TSDU с нулевой длиной не поддерживаются.

OTRcvURequest

Клиент бесконтактного протокола на основе транзакций, такого как ATP, может использовать эту OTRcvURequest функцию для приема входящего пакета запроса ATP из конечной точки запроса адресата ATP. В транзакционных пакетах XO T_ACKNOWLEDGED бит в параметре OTRcvURequest функции reqFlags. В транзакциях ALO этот бит ясен. Пакеты запросов ATP могут иметь до 578 байт, а TSDU с нулевой длиной не поддерживаются.

OTSndUReply

Клиент бесконтактного протокола на основе транзакций, такого как ATP, может использовать эту OTSndUReply функцию для отправки пакета ответа ATP в конечную точку реферала ATP. Ответные пакеты ATP могут иметь до восьми пакетов (4624 байта), а TSDU с нулевой длиной не поддерживаются.

OTRcvUReply

Клиент бесконтактного протокола на основе транзакций, такого как ATP, может использовать эту OTRcvUReply функцию для приема входящего пакета ответа ATP из конечной точки запроса поставщика ATP. Ответные пакеты ATP могут иметь до восьми пакетов (4624 байта), а TSDU с нулевой длиной не поддерживаются.

Источники

  1. AppleTalk // docwiki.cisco[1992-2018]. Дата обновления: 16.10.2012. URL: http://docwiki.cisco.com/wiki/AppleTalk#AppleTalk_Transaction_Protocol (дата обращения: 22.09.2018).
  2. AppleTalk Transaction Protocol (ATP) // developer.apple [1998-2018].Дата обновления: 11.04.2009. URL: https://developer.apple.com/library/archive/documentation/mac/pdf/Networking/ATP.pdf (дата обращения: 22.09.2018).
  3. About ATP // informatimago [2004-2018]. Дата обновления: 22.11.2006. URL:http://mirror.informatimago.com/next/developer.apple.com/documentation/mac/NetworkingOT/NetworkingWOT-73.html (дата обращения: 22.09.2018).