Рисунок 4.5.16.3. Формат RPC-отклика
Поле отклик, содержащее 1, указывает на то, что данное сообщение представляет собой отклик на поступивший ранее запрос. Поле статус содержит 0 в случае, если запрос воспринят. Запрос игнорируется при конфликте кодов RPC-версии или неудачной идентификации клиента. Поле флаг результата принимает значение 0 при успешной обработке запроса. Ненулевое значение этого поля указывает на ошибку.
Для записи параметров RPC-запросов, откликов, параметров и результатов выполнения процедуры используется внешнее представление данных (XDR – External Data Representation, RFC-1014). Отправитель, формируя RPC-сообщение, использует XDR-формат, а получатель преобразует данные из этого формата в традиционное представление.
Существует два базовых вида отклика: MSG_ACCEPTED (сообщение принято) и MSG_DENIED (не принято). Факт приема сообщения не означает выполнение запрошенных процедур, поэтому клиенту выдается дополнительная информация о результатах взаимодействия его запроса с удаленной системой. RPC может найти применение при построении больших распределенных информационных систем, баз данных и систем управления. XDR позволяет программисту избежать написания специальных программ преобразования. Например, в разных ЭВМ используются различные форматы представления чисел с плавающей запятой. XDP берет на себя согласование форматов и делает написание прикладных программ машинно-независимым.
Программы RPC-сервера используют большое число портов с нестандартизованными номерами. Для управления использованием этих портов имеется специальная программа (portmapper), которая имеет номер 100000, номер версии -2 и сама пользуется портом номер 111. Распределение номеров портов можно посмотреть с помощью программы:
/usr/etc/rpcinfo -p
program |
vers |
proto |
port |
|
[программа |
версия |
протокол |
порт |
название программы] |
100000 |
2 |
tcp |
111 |
portmapper |
100000 |
2 |
udp |
111 |
portmapper |
100029 |
1 |
udp |
664 |
keyserv |
100005 |
1 |
udp |
702 |
mountd (монтирует демон для NFS) |
100005 |
2 |
udp |
702 |
mountd |
100005 |
1 |
tcp |
705 |
mountd |
100005 |
2 |
tcp |
705 |
mountd |
100003 |
2 |
udp |
2049 |
nfs (сама NFS) |
100026 |
1 |
udp |
714 |
bootparam |
100024 |
1 |
udp |
717 |
status |
100024 |
1 |
tcp |
719 |
status |
100021 |
1 |
tcp |
720 |
nlockmgr (NFS-менеждер) |
100021 |
1 |
udp |
1031 |
nlockmgr |
100021 |
3 |
tcp |
724 |
nlockmgr |
100021 |
3 |
udp |
1032 |
nlockmgr |
100010 |
1 |
udp |
718 |
etherstatd |
100020 |
2 |
udp |
1033 |
llockmgr |
100020 |
2 |
tcp |
729 |
llockmgr |
100021 |
2 |
tcp |
732 |
nlockmgr |
100021 |
2 |
udp |
1034 |
nlockmgr |
100011 |
1 |
udp |
1041 |
rquotad |
100001 |
2 |
udp |
1042 |
rstatd |
100001 |
3 |
udp |
1042 |
rstatd |
100001 |
4 |
udp |
1042 |
rstatd |
100002 |
1 |
udp |
1043 |
rusersd |
100002 |
2 |
udp |
1043 |
rusersd |
100012 |
1 |
udp |
1044 |
sprayd |
100008 |
1 |
udp |
1045 |
walld |
Отсюда видно, что некоторые программы имеют несколько версий, а каждая комбинация номера программы, версии и протокола имеет свой собственный номер порта. В таблице 4.5.16.1 приведены ссылки на некоторые RPC-программы, используемые с NFS.