rpcbind
- это близкий аналог BIND, или действительно, любого DNS сервера. Если я правильно помню, вы выбираете или получаете номер протокола, когда компилируете объявление интерфейса RPC в код сервера и заглушки клиента с помощью rpcgen
.
Когда клиент регистрируется для данного интерфейса на определенном хосте, обычно с помощью вызова clnt_create()
, код заглушки задает rpcbind
на этом хосте вопрос, что-то вроде "на каком UDP или TCP порту прослушивается протокол номер X?". rpcbind
, в отличие от большинства других служб ONC, прослушивает TCP и UDP порт 111, поэтому, задав имя хоста или IP адрес, программа может просто спросить rpcbind
на этом хосте или IP адресе. rpcbind
отвечает соответствующим номером порта, если на этом хосте зарегистрирован сервер. Эта регистрация выполняется серверным процессом при вызове svc_create()
.
В вашем примере 100003 - это номер протокола для NFS. Некоторые процессы зарегистрировались в rpcbind
, указав свой номер протокола (100003) и любой порт TCP или UDP, который они получили. Именно rpcbind
должен правильно выдать этот номер порта, 2049 в вашем случае, на любое обращение к нему с вопросом "какой порт я должен использовать для протокола номер 100003".
Теперь мы попадаем на более странную территорию. "0.0.0.0.0.8.1" находится в колонке "адрес" вывода rpcinfo
. Поскольку это "универсальный адрес" процесса сервера NFS, я готов поспорить, что префикс "0.0.0.0" является IP-адресом (INADDR_ANY в данном случае), который сервер использовал в системном вызове bind()
при получении номера порта. Я не уверен, что такое суффикс "8.1", но, глядя на вывод rpcinfo
, это должно быть связано с тем, что сервер NFS в основном является потоком ядра.