Повторная передача запроса RPC

Библиотечное программное обеспечение, поставляемое в составе программного обеспечения ONC RPC, предусматривает использование простых средств тайм-аута и повторной передачи, но не гарантирует надежной доставки в строгом смысле этого слова. Предусмотренный по умолчанию механизм тайм-аута реализует постоянный (неадаптивный) тайм-аут с постоянным числом повторных попыток. При отправке библиотечным программным обеспечением RPC сообщения, соответствующего дистанционному вызову процедуры, запускается таймер. Программное обеспечение передает запрос повторно, если установка таймера истекает до получения ответа. В конкретном приложении можно предусмотреть корректировку тайм-аута и предельного числа повторных попыток, но библиотечное программное обеспечение не адаптируется автоматически к продолжительным или непостоянным сетевым задержкам.

Делаем игрушки своими руками для праздника или какого-то другого торжества - с чего начать? Всё верно начать нужно с того что найти информацию по выкройкам, даже подготовить необходимый материал для изготовления игрушки. После всего этого мы приступаем к сборке игрушки, это процесс трудоёмкий и может отнять не мало времени, но оно того стоит.

Безусловно, простые средства повторной передачи не могут не только гарантировать надежность, но даже обеспечить формирование в вызывающем приложении обоснованного вывода о том, как протекает выполнение удаленной процедуры. Например, если в сети теряются все ответы, то вызывающая процедура может несколько раз выполнить повторную передачу запроса, и каждый запрос приведет к выполнению удаленной процедуры. Однако в конечном итоге библиотечное программное обеспечение на компьютере, где находится вызывающая процедура, достигнет предела числа попыток повторной передачи и сообщит, что удаленная процедура не может быть выполнена. Еще более важно то, что в приложении неудачное выполнение не может рассматриваться как свидетельство о том, что удаленная процедура действительно не была выполнена (фактически она могла быть выполнена несколько раз).

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

21.19. Привязка удаленной программы к порту протокола

В транспортных протоколах UDP и TCP для обозначения оконечных точек связи используются 16-битовые номера портов протокола. В предыдущих главах описано, как сервер создает пассивный сокет, привязывает его к стандартному порту протокола и переходит в состояние ожидания запросов от клиентских программ. Для обеспечения взаимодействия между клиентами и серверами предполагается, что каждой службе назначен уникальный номер порта протокола и эти назначения являются общепринятыми. Поэтому разработчики и клиента, и сервера используют согласованный порт протокола, через который сервер принимает запросы, поскольку они руководствуются официально опубликованным списком назначений портов.

В ходе применения спецификации ONC RPC возникает интересная проблема: поскольку в ней для обозначения удаленных программ используются 32-битовые числа, то диапазон номеров программ RPC выходит за пределы диапазона номеров портов протокола. Поэтому невозможно непосредственно выполнить привязку номеров программ RPC к портам протокола. Еще более важно то, что всем программам RPC не может быть назначен уникальный порт протокола, поэтому программисты не могут использовать схему назначения портов, которая была бы основана на общепринятых назначениях портов протокола.

Хотя потенциальное число программ RPC превышает число общепринятых назначений портов, служба RPC не так уж значительно отличается от других служб. В любой момент времени на каждом отдельном компьютере выполняется лишь небольшое число удаленных программ. Поэтому, если назначения портов являются временными, каждая программа RPC может получить номер порта протокола и использовать его для обмена данными.

Если в программе RPC не применяется зарезервированный, общепринятый порт протокола, то клиенты не смогут обратиться к ней непосредственно. Для лучшего понимания того, с чем это связано, рассмотрим серверную и клиентскую компоненты. С началом своего выполнения сервер (удаленная программа) передает операционной системе запрос на выделение неиспользуемого номера порта протокола. Вновь распределенный порт протокола используется сервером для всех видов обмена данными. Система может выбирать другой номер порта протокола при каждом запуске сервера на выполнение (т.е. серверу при каждой перезагрузке системы может выделяться другой порт).

Клиент (программа, выполняющая дистанционный вызов процедуры) имеет информацию об адресе компьютера и номере программы RPC той удаленной процедуры, к которой он должен обратиться. Но поскольку программа RPC (сервер) получает порт протокола только после запуска на выполнение, клиент не имеет информации о том, какой порт протокола получен сервером. Поэтому клиент не может обращаться непосредственно к удаленной программе.

Похожие статьи Меню Опрос Фото Популярное