Когда вы используете rpcgen, как вызывающий абонент находит вызываемого абонента? - PullRequest
3 голосов
/ 24 марта 2009

Вот что я понимаю:

Файл .x определяет интерфейс и параметры, которые используются сервером и клиентом. Когда вы компилируете его с помощью rpcgen, он генерирует файлы .h, _xdr.c, _clnt.c и _svc.c. _Clnt.c будет заглушкой, а _svc.c - это скелет, верно?

Я понимаю, что они промежуточные звенья между двумя, но как это так? Кроме того, в примере, который я запускал, вы указали IP-адрес компьютера, к которому нужно подключиться (в примере использовался тот же, 127.0.0.1), но вы не указали порт. Есть ли зарезервированный порт?

Ответы [ 2 ]

5 голосов
/ 24 марта 2009

Процедура состоит из двух шагов. На порте 111 выполняется преобразователь портов, и служба RPC регистрируется и обнаруживается этой службой, но сама может работать на произвольном порту.

Подробнее см. RFC 1833 - Протоколы привязки для ONC RPC версии 2 .

1 голос
/ 24 марта 2009

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

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

+---------+                             +--------+
| Mapper, | <- Register MULT, port Y -- | Server |
| known   |                             | for    |
| port X  |                             | MULT   |
+---------+                             +--------+

Когда клиент впоследствии подключается к сопоставителю конечных точек с использованием IP-адреса, он дает требуемый код (MULT), а затем сопоставитель конечных точек предоставляет конечный пункт назначения - теперь клиент знает оба IP-адреса * Порт 1010 * и для службы MULT:

+--------+                     +---------+
| Client | -- Request MULT  -> | Mapper, |
|        | <- Return port Y -- | known   |
|        |                     | port X  |
+--------+                     +---------+

В этот момент преобразователь конечной точки может отойти в сторону и позволить клиенту открыть сеанс непосредственно с самой службой MULT.

+--------+                       +--------+
| Client | -- Connect to MULT -> | Server |
|        | <-     Do stuff    -> | for    |
|        |                       | MULT   |
+--------+                       +--------+
...