Обратите внимание, что нет ничего, что отклонялось от стандартного протокола TCP в отношении протоколов RPC.
SunRPC или DCE RPC работает поверх UDP (по крайней мере SunRPC может использовать UDP) или поверх TCP.
Обычно, чтобы клиент RPC мог обратиться/вызвать RPC-сервер, он сначала связывается с каким-то поисковым сервером (например, portmapper или rpcbind в случае SunRPC), который отвечает местоположением (IP-адрес и номер порта) где работает настоящий сервер.
Так что с точки зрения сети:
- RPC сервер прослушивает числа случайных портов, который может меняться каждый раз, когда серверная программа (пере) запущен.
- При запуске сервер RPC подключается к portmapper, который работает на хорошо известном порту и регистрируется, с каким IP-адресом и номером порта он прослушивает.
Обычно служба portmapper работает на том же компьютере, что и RPC-серверные программы.
Когда клиент хочет подключиться или вызвать службу RPC он выполняет следующие действия:
- подключается к Portmapper, на хорошо известный/стандартный порт назначения и спрашивает его, где конкретная услуга хочет подключиться к есть.
- portmapper отвечает с IP-адресом и номером порта службы, которую попросил клиент.
- клиент сбрасывает подключение к портуману
- клиент устанавливает новое соединение с услугой, используя IP-адрес и номер порта, который дал pommapper.
- клиент вызывает службу RPC через это новое соединение, которое клиент может использовать для нескольких вызовов RPC.
- Эти вызовы RPC - это просто сообщение приложения, обмениваемое поверх TCP-соединения.
(В случае UDP используется вместо TCP, он работает так же, но нет никакой естественно нет установки соединения/демонтажа выполняется по сети)
Это представляет проблему для межсетевых экранов, так как серверы прослушивают случайно выбранные номера портов, невозможно административно разрешить доступ к определенному номеру порта.Вместо этого брандмауэр, желающий поддерживать такую настройку, должен будет открыть порт portmapper, поймать сообщения RPC, идущие на этот известный порт portmapper, проверить содержимое сообщения, обмениваемое с помощью portmapper, для извлечения IP-адреса и номера порта из RPC-сообщения (сам портмастер реализован как сервер RPC), чтобы динамически открывать порт между сервером RPC и клиентом.
Благодарим вас за отличное объяснение! – Keenan