包含远程过程的 R P C服务器程序使用的是临时端口,而不是知名端口。这就需要某种形式的“注册”程序来跟踪哪一个 R P C程序使用了哪一个临时端口。在 Sun RPC中,这个注册程序被称为端口映射器(port mapper)。
“端口”这个词作为I n t e r n e t协议族的一个特征,来自于T C P和U D P端口号。既然T I -R P C可以工作在任何运输层协议之上,而不仅仅是 T C P和U D P,所以使用T I - R P C的系统中(如S V R 4和Solaris 2.2),端口映射器的名字变成了r p c b i n d。下面我们继续使用更为常见的端口映射器的名字。
很自然地,端口映射器本身必须有一个知名端口: U D P端口111和T C P端口111。端口映射器也就是一个R P C服务器程序。它有一个程序号( 1 0 0 0 0 0)、一个版本号(2)、一个T C P端口111和一个U D P端口111。服务器程序使用 R P C调用向端口映射器注册自身,客户程序使用R P C调用向端口映射器查询。端口映射器提供四个服务过程:
在一个R P C服务器程序启动,接着被一个 R P C客户程序调用的过程中,进行了以下一些步骤:
如果使用的是T C P,客户对服务器的T C P端口号做一个主动打开,然后在建立的 T C P连接上发送一个R P C调用报文。服务器作为响应,在连接上发送一个 R P C应答报文。程序 r p c i n f o ( 8 )打印了端口映射器中当前的映射记录(它调用了端口映射器的P M A P P R O C _ D U M P过程)。这里给出的是典型的输出:
可以看出一些程序确实支持多个版本。在端口映射器中,每一个程序号、版本号和协议的组合都有自己的端口号映射。
安装守护程序(mount daemon)的两个版本可以通过同样的 T C P端口号(7 0 2)和同样的U D P端口号(6 9 9)来访问,而加锁管理程序( lock manager)的每个版本都有各自不同的端口号。